湖南大学Java程序设计期末试卷

诚信应考,考试作弊将带来严重后果!

湖南大学课程考试试卷

湖南大学Java程序设计期末试卷

湖南大学Java程序设计期末试卷

4.一个JA V A应用程序的main方法中有以下语句,则输出的结果是( A )。

String s1=new String("abc");

String s2=new String("abc");

boolean b1=s1.equals(s2);

boolean b2=(s1==s2);

System.out.print(b1+" "+b2);

A) true false B) false true C) true true D) false false

5.关于以下Java Application的说明,正确的是( C )。

1. class StaticStuff

2. {

3. static int x=10;

4. static { x+=5; }

5. public static void main(String args[])

6. {

7. System.out.println(“x=”+x);

8. }

9. static {x/=3;}

10. }

A.4行和9行不能通过编译,因为缺少方法名和返回类型。

B.9行不能通过编译,因为只能有一个静态初始化其器。

C.编译通过,执行结果为:x=5

D.编译通过,执行结果为:x=3

6.下列程序段执行后的结果是( A )。

String s = new String("abcdefg");

for (int i=0; i

System.out.print(s.charAt(i));

}

A) aceg B) ACEG C) abcdefg D) abcd

7.关于继承的说法正确的是:(B)

A、子类将继承父类所有的属性和方法。

B、子类将继承父类的非私有属性和方法。

C、子类只继承父类public方法和属性。

D、子类只继承父类的方法,而不继承属性。

8.Java的类库被划分为若干不同的包,每个包中都有若干个具有特定功能和相互关系的类

和接口。以下缺省加载的包是( A )。

A.http://m.wendangku.net/doc/ee442ef7cc22bcd127ff0c23.htmlng包B.java.io包 C.java.util包D.java.awt包

9.如果容器组件p的布局是BorderLayout,则在p的下边中添加一个按钮b,应该使用的

语句是(C )。

A、p.add(b);

B、p.add(b,"North");

C、p.add(b,"South");

D、b.add(p,"North");

湖南大学Java程序设计期末试卷

程序中有且只能有一个main 方法,该方法头的书写合法的是 B )。

A .public static void main()

B .public static void main(String [] args)

C .public static int main(String [] arg)

D .public void main(String arg[])

11.关于被私有和保护访问控制符private 和protected 修饰的成员变量所共有的特征, 以下说法正确的是( B )。

A .可以被三种类引用:该类自身、与它在同一个包中的类、在其他包中的该类的子 类。

B .可以被两种类访问和引用:该类自身、该类的所有子类。

C .只能被该类自身所访问和修改。

D .只能被同一个包中的类访问。

下列关于修饰符混用的说法,错误的是( D )。

A .abstract 不能与final 并列修饰同一个类。

B .abstract 类中不可以有private 的成员。

C .abstract 方法必须在abstract 类中。

D .static 方法中能处理非static 的属性。 13. 以下有关构造方法的说法,正确的是:( A ) A .一个类的构造方法可以有多个 B .构造方法在类定义时被调用 C .构造方法只能由对象中的其它方法调用 D .构造方法可以和类同名,也可以和类名不同 14. 所有的异常类皆继承哪一个类?( B ) A .java.io.Exception B .http://m.wendangku.net/doc/ee442ef7cc22bcd127ff0c23.htmlng.Throwable C .http://m.wendangku.net/doc/ee442ef7cc22bcd127ff0c23.htmlng.Exception D .http://m.wendangku.net/doc/ee442ef7cc22bcd127ff0c23.htmlng.Error

下面的哪些赋值语句是错的? ( A )

A. float f = 11.1;

B. double d = 5.3E12;

C. double d = 3.14159;

D. double d = 3.14D;

为AB 类的一个无形式参数无返回值的方法method 书写方法头,使得使用类名AB ( A )。

A. static void method( )

B. public void method( )

C. final void method( )

D. abstract void method( ) 关于for 循环和 while 循环的说法哪个正确?( B ) .while 循环先判断后执行,for 循环先执行后判断。

.while 循环判断条件一般是程序结果,for 循环的判断条件一般是非程序结果 .两种循环任何时候都不可以替换

.两种循环结构中都必须有循环体,循环体不能为空 关于对象成员占用内存的说法哪个正确?( B ) .同一个类的对象共用同一段内存

.同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间

湖南大学课程考试试卷

湖南大学教务处

C.对象的方法不占用内存

D.以上都不对

11.如果需要从文件中读取数据,则可以在程序中创建哪一个类的对象( A )

A、FileInputStream

B、FileOutputStream

C、DataOutputStream

D、FileWriter

12.下面的程序创建了一个文件输出流对象,用来向文件test.txt中输出数据,假设程序当

前目录下不存在文件test.txt,编译下面的程序Test.java后,将该程序运行3次,则文件test.txt 的内容是( D )。

import java.io.*;

public class Test {

public static void main(String args[]) {

try {

String s="ABCDE";

byte b[]=s.getBytes();

FileOutputStream file=new FileOutputStream("test.txt",true);

file.write(b);

file.close();

}

catch(IOException e) {

System.out.println(e.toString());

}

}

}

A) ABCABC B) ABCDE C) Test D) ABCDE ABCDE ABCDE

二、填空题(每题2分,共20分)

1.设有数组定义:int MyIntArray[ ] = { 10 , 20 , 30 , 40 , 50 , 60 , 70}; 则执行以下几个

语句后的输出结果是106 。

int s = 0 ;

for (int i = 0 ; i < MyIntArray.length ; i + + )

if ( i % 2 = = 1 )

s += MyIntArray[i] ;

System.out.println(s);

2.以下程序段的输出结果是__________三角形______________。

int x = 5, y = 6, z = 4;

if (x + y > z && x + z > y && z + y > x)

System.out.println("三角形");

else

System.out.println("不是三角形");

3.定义接口的保留字是________interface_______________。

4.一个Java源文件中最多只能有一个public 类,其它类的个数不限。

5.在一个类的构造函数定义中可用_______this________调用该类的无参构造函数,可用

______super_________调用该类的父类的无参构造函数。

6.面向对象有三大特点分别是继承、封装、多态。

7.外部类和内部类的访问权限各有____2______种和_____4_____种。

8.在Java的基本数据类型中,char型采用Unicode字符集编码方案,每个编码

占用 2 字节空间。

9.异常处理是由(_____try_______、_____catch_______和finally块三个关键字所组成的

程序块完成的。

10.Socket通常也称为____套接字________,用于描述_____IP地址______和___端口

_______。

三、读程题(每题4分,共20分)

1.以下程序的输出结果为:

public class Person {

String name;

int age;

public Person(String name, int age) {

http://m.wendangku.net/doc/ee442ef7cc22bcd127ff0c23.html = name;

this.age = age;

}

public static void main(String[] args) {

Person c = new Person("Peter", 17);

System.out.println(http://m.wendangku.net/doc/ee442ef7cc22bcd127ff0c23.html + " is " + c.age + " years old!");

}

}

结果:

Peter is 17 years old!

2.以下程序的输出结果为:

public class Test{

public static void main(String args[]) {

new Student("Tom", 'm', 90, 88);

new Student("Jack", 'm', 66, 89);

new Student("Mary", 'f', 76, 86);

System.out.println("name\tsex\tchinese\tenglish");

Student.print();

}

}

class Student {

protected String name;

protected char sex;

protected int chinese;

protected int english;

protected Student next;

static Student list;

Student (String name, char sex, int chinese, int english) {

http://m.wendangku.net/doc/ee442ef7cc22bcd127ff0c23.html=name;

this.sex=sex;

this.chinese=chinese;

this.english=english;

this.next=list;

list=this;

}

static void print() {

Student friend=list;

if (friend==null)

System.out.println("The list is empty.");

else {

do{

System.out.println(friend.toString());

friend=friend.next;

}while(friend!=null);

}

}

public String toString() {

return new String(name+"\t"+sex+"\t"+chinese+"\t"+english);

}

}

结果:

name sex chinese english

Mary f 76 86

Jack m 66 89

Tom m 90 88

3.以下程序的输出结果为:

public class Tom {

private float weight;

private static String name;

public void setWeight(float weight) {

this.weight = weight;

}

private void out() {

System.out.println(name + "体重:" + weight + "斤");

}

public static void main(String[] args) {

http://m.wendangku.net/doc/ee442ef7cc22bcd127ff0c23.html = "汤姆猫";

Tom cat = new Tom();

cat.setWeight(20);

cat.out();

}

}

结果:

汤姆猫体重:20.0斤

4.以下程序的输出结果为:

public class Sum {

public static void main(String [] args) {

int j=10;

System.out.println("j is : "+j);

calculate(j);

System.out.println("At last, j is : "+j);

}

static void calculate (int j){

for (int i = 0;i<10;i++)

j++;

System.out.println("j in calculate() is: "+j);

}

}

结果:

j is : 10

j in calculate() is: 20

At last, j is : 10

5.以下程序的输出结果为:

import java.awt.Button;

import java.awt.Frame;

import java.awt.FlowLayout;

class ButtonFrame extends Frame {

ButtonFrame(String s) {

super(s);

setSize(200,100);

setLayout(new FlowLayout());

for(int i=0;i<6;i++) add(new Button("Button"+i));

setVisible(true);

}

}

class TestButtonFrame {

public static void main(String[] args) {

B uttonFrame buttonFrame=new ButtonFrame("Test Button & FlowLayout");

}

}

结果:

湖南大学Java程序设计期末试卷

四、简答题(每题5分,共20分)

1.请举例简要说明String类与StringBuffer类的区别。

String类是用来表示字符串一般用途的类,一旦字符串产生之后,其内容就不在变动,改变内容须分配新的内存;

StringBuffer类亦是表示字符串的类,但是字符串的内容是可以改变的。

例如:

public class xx {

public static void main(String[] args) {

String s1 = "You are hired!";

String s2 = "You are hired!";

if (s1==s2) //这里==的意义是两个操作数是否指向同一个对象

{ System.out.println("一个内存空间"); }

else { System.out.println("不是一个内存空间"); }

}

}

打印的结果是:一个内存空间

可见s2在不用new创建的情况下会自动检索到具有相同内容的内存空间中共享,那么既然s1和s2共享了同一个对象

public class xx {

public static void main(String[] args) {

String s1 = "You are hired!";

String s2 = "You are hired!";

s1 = s1.replace('h','f'); System.out.println(s1);

if (s1==s2) { System.out.println("一个内存空间"); }

else { System.out.println("不是一个内存空间"); }

}

}

代码结果是:

You are fired!

不是一个内存空间

可见,String中s1的内容虽然被改写,但是已经不在是原来第一次分配到的那个内存空间,也就是String类的内容能被改变,但一旦改变系统将为其分配新的内存

2.请举例简要说明重载和重写(也称覆盖)的区别。

方法重写要求参数签名必须一致,而重载要求参数签名必须不一致。

方法重写要求返回类型必须一致,而重载对此不做限制。

方法重写只能用于子类重写父类的方法,重载可用于同一个类的所有方法。

class father{

public void move(){

System.out.println("走");

}

}

class child extends father //child类继承father类

{

public void move() //方法重写

{

System.out.println("跑");

}

public void move(String move) //方法重载

{

System.out.println(move);

}

}

3.什么是事件、事件源和事件监听器?请举例简要说明之。

事件:当用户在界面上执行一个操作,例如按下键盘、拖动或者单击鼠标时,都将产生一个事件。Java中事件是用来描述不同类型用户操作的对象,Java中有很

多不同类型的事件。例如:单击,双击,右击,拖动,键盘的按下、释放,文本

域内容改变等。

事件源:产生事件的组件就是一个事件源。例如,当在一个Button上单击鼠标是,将产生一个ActionEvent类型的事件,而这个Button就是事件源

事件监听器:就是调用事件处理方法的对象。当界面操作事件产生并被发送到产生事件的组件时,该组件将把事件发送给能接受和处理该事件的监听器。

4.请举例说明创建线程的两种方法。

通过实现Runnable接口线程创建

(1).定义一个类实现Runnable接口,重写接口中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。

(2).创建Runnable接口实现类的对象。

(3).创建一个Thread类的对象,需要封装前面Runnable接口实现类的对象。(接口可以

实现多继承)

(4).调用Thread对象的start()方法,启动线程

例如:

public class testThread2 {

public static void main(String[] args) {

// TODO Auto-generated method stub

MyTask mytask = new MyTask(100);

Thread thread = new Thread(mytask);

thread.start();

}

}

class MyTask implements Runnable{

private int n;

public MyTask(int n){

this.n = n;

}

public void run(){

for(int i=0; i

System.out.println(" "+ i);}

}

}

通过继承Thread类创建线程

(1).首先定义一个类去继承Thread父类,重写父类中的run()方法。在run()方法中加入

具体的任务代码或处理逻辑。

(2).直接创建一个ThreadDemo2类的对象,也可以利用多态性,变量声明为父类的类

型。

(3).调用start方法,线程t启动,隐含的调用run()方法。

例如:

public class testThread {

public static void main(String[] args) {

Thread t = new MyThread();

t.start();

}

}

class MyThread extends Thread{

public void run(){

for(int i=0;i<100;i++){

System.out.println(" "+ i);

}

}

五、编程题(每题10分,共20分)

1.编写一个完整的Java Application 程序用于计算任意的一元二次方程的实根。要求定义Equation类以完整地表示任意的一元二次方程,包括:方程系数、求解方法、实根的个数与类型、每个实根的值、输出方法。再定义EquationDemo类演示求根过程。

(1)Equation类的属性有:

a, b, c : float型,代表一元二次方程的三个系数。

rootType : int型,代表实根的个数与类型:-1 表示尚未求解;0表示无实根;1表示有两个相等实根;2表示有两个实根;3表示非一元二次方程(|a|<=1e-16,提示:可用Math.abs(a)求a的绝对值)。

root1, root2 : float型,代表两个可能的实根。

(2) Equation类的方法有:

Equation ( ) : 构造函数,rootType属性置为-1,其他属性均置为0。

Equation (float a , float b , float c ) : 构造函数,形参a, b, c为给定一元二次方程的系数。void Solving ( ) : 求解一元二次方程,并将结果置于相应的属性之中。

String ToString( ) : 根据rootType的值输出不同内容,如:若未求解,则显示“请求解一元二次方程a xx + b x + c = 0”。若已求解且有两个实根,则显示“恭喜你已解得一元二次方程a xx + b x + c = 0有两个实根x1 = root1, x2 = root2”。等等。其中a、b、c、root1、root2等值必须具体给出。

(3) EquationDemo类只需一个main方法即可。要求main方法就以上定义的rootType的各种不同类型均给出一个求解例子。

public class Equation {

float a,b,c,root1,root2;

double d;

int rootType;

Equation(){

rootType=-1;

a=b=c=root1=root2=0;

d=0;

}

Equation(float a,float b,float c){

this.a=a;

this.b=b;

this.c=c;

d=b*b-4*a*c;

}

void Solving(){

if(a==0){

rootType = -1;

}else if(d < 0){

rootType = 0;

}else if(d == 0){

rootType = 1;

root1 = -b/(2*a);

root2 = root1;

}else if(d > 0){

rootType = 2;

root1 = (float) ((-b+Math.sqrt(d))/(2*a));

root2= (float) ((-b-Math.sqrt(d))/(2*a));

}else{

rootType = 3;

}

}

String ToString() {

switch(rootType){

case 0:System.out.println("方程无实根");break;

case 1:System.out.println("恭喜你已经解得一元二次方程axx+bx+c=0有两个是根"+ "x1="+root1+",x2="+root2);break;

case 2:System.out.println("恭喜你已经解得一元二次方程axx+bx+c=0有两个是根"+ "x1="+root1+",x2="+root2); break;

case 3:System.out.println("请求解一元二次方程a xx + b x + c = 0");break;

default:System.out.println("非一元二次方程");

}

return null;

}

}

public class EquationDemo extends Equation{

public static void main(String args[]){

Equation e1=new Equation(0,3,2);

e1.Solving();

e1.ToString();

Equation e2=new Equation(1,3,2);

e2.Solving();

e2.ToString();

Equation e3=new Equation(1,2,1);

e3.Solving();

e3.ToString();

Equation e4=new Equation(1,5,6);

e4.Solving();

e4.ToString();

}

}

2.编写一个完整的Java Applet 程序及相关的HTML网页进行任意两个复数的加法。两个参与运算的复数以参数的形式由HTML网页传递给Applet程序。Applet程序建立一个ComplexApplet类来演示复数的加法功能。要求定义复数类Complex来完成以上任务:(1) Complex类的属性有:

RealPart : float型,代表复数的实数部分。

ImaginPart : float型,代表复数的虚数部分。

(2) Complex类的方法有:

Complex( ) : 构造函数,将复数的实部和虚部都置0。

Complex( float real , float image ) : 构造函数,形参real 为实部,image为虚部。Complex complexAdd(Complex a) : 将当前复数对象与形参复数对象相加,所得的结果仍是一个复数值。

String ToString( ) : 把当前复数对象的实部、虚部组合成a + b i 的字符串形式,其中a 和b 分别为复数的实部和虚部。

(3)ComplexApplet类由init方法接受参数数据(参与加法的两个复数),由paint方法调用Complex的方法完成加法运算,并输出所有复数。

public class Complex {

float RealPart;

float ImaginPart;

public Complex(){

this.RealPart = 0;

this.ImaginPart = 0;

}

public Complex(float real , float image){

this.RealPart = real;

this.ImaginPart = image;

}

public Complex complexAdd(Complex a){

Complex c = new Complex();

c.setImaginPart((this.ImaginPart+a.ImaginPart)%10);

c.setRealPart(this.RealPart+a.RealPart+(this.ImaginPart+a.ImaginPart)/10);

return c;

}

public String toString(){

return this.RealPart+"+"+this.ImaginPart+"i";

}

public float getRealPart() {

return RealPart;

}

public void setRealPart(Integer realPart) {

this.RealPart = RealPart;

}

public float getImaginPart() {

return ImaginPart;

}

public void setImaginPart(float ImaginPart) {

this.ImaginPart = ImaginPart;

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Complex c1 = new Complex(1,20); //1+2i

Complex c2 = new Complex(3,40); //3+4i

System.out.println(c1.toString()+" + "+c2.toString()+" = "+http://m.wendangku.net/doc/ee442ef7cc22bcd127ff0c23.htmlplexAdd(c2).toString());

}

}

相关推荐
相关主题
热门推荐