Java面向对象程序设计试卷(七)(含答案) 下载本文

Java面向对象程序设计试卷(七)

一、选择题

1、根据java标识符命名规则和风格约定,下面哪一个标识符是类名? A、XxxYyy B、xxxYyy C、XXXYYY D、xxxyyy

2、下列变量定义语句中不正确的是: A、byte d = 312; B、short d = 312; C、int d = 1+’C’; D、long d = 312;

3、下列数组的定义语句中不正确的是: A、 int grade[][] = new int[10][10]; B、 int grade[][] = new int[][10]; C、 int [][]grade = new int[10][10]; D、 int []grade[] = new int[10][10];

4、下列说法中,哪一个是正确的?

A、抽象类中定义的方法一定是抽象的。 B、抽象类中一定存在抽象的方法。 C、抽象类中可以没有抽象方法。

D、抽象类的子类一定要实现抽象类中的抽象方法。

5、关于方法的重载,下列说法哪一个是正确的?

A、方法的重载是指一个类中多个方法使用相同的名字,但参数不同。 B、方法的重载是指一个类中多个方法使用相同的名字,且参数相同。 C、方法的重载是指子类和父类中两个方法使用相同的名字,但参数不同。 D、方法的重载是指子类和父类中两个方法使用相同的名字,且参数相同。

6、假定有程序段: class SupperClass {

public int addValue( int a, int b) { return a+b; } }

class SubClass extends SuperClass {

int value; //此处插入代码 }

下述哪个方法可以插入到类SubClass中而不会出现编译错误? A、int addValue( int a, int b ){return a+b+1;}

B、public long addValue (int a, int b ){value=a+b+1; } C、protected int addValue(int a, int b ){return a+b+1;} D、public int addValue( int a, int b ) {return a+b+1;}

7、若编译和运行下列代码,其结果将是 class Circle {

double radius=1; public Circle(double r) {

radius = r;

}

}

public double area( ) { }

return 3.14*radius*radius;

public class MyTest{

public static void main(String args[]) { Circle c1=new Circle();

System.out.println(c1.area()); } }

A、3.14 B、0 C、编译出错 D、 以上答案都不对

8、下列说法中,不正确的是

A、一个java源程序文件中,只能有一个public类。 B、一个java源程序文件中,只能有一个package语句。 C、一个java源程序文件中,可以有多个import语句。 D、一个java源程序文件中,只能有一个类中可以有main方法。

9、下列说法中不正确的是

A、如果一个方法中定义的变量名与该方法所在类的成员变量同名,则在该方法中无法访问同名的类成员变量。

B、在java接口中定义的方法一定是抽象方法。 C、java接口中不能定义变量。 D、java接口没有构造方法。

10、下列说法中正确的是 ( ) A、JFrame对象能够被加入到另一个JFrame对象中。 B、JFrame对象能够被加入到JPanel对象中。 C、JPanel对象能够被加入到另一个JPanel对象中。

D、JFrame对象能够被加入到JApplet对象中。

11、有下列程序 public class MyTest {

public static void main(String [] args) { try {

int a1=Integer.parseInt(args[0]);

int a2=Integer.parseInt(args[1]); int result=a1/a2;

System.out.println(\运算结果:\

}

catch(ArrayIndexOutOfBoundsException e) {

System.out.println(\下标越界\ return ; }

catch(ArithmeticException e) {

System.out.println(\除数为零\ }

catch(Exception e) {

System.out.println(\捕获了异常\ } finally {

System.out.println(\进入Finally语句块\ } } }

该程序编译后,执行java MyTest 10 10 ,则运行的结果为 A、运所结果:1 进入Finally语句块 B、下标越界 C、除数为零 D、捕获了异常

注:(对try catch语句,即使前面符合条件的catch中有return语句,也会进入finally,之后再执行return)

12、关于异常,以下说法正确的是

A、所有异常类都是Throwable类的子类。 B、Error类是Exception的子类。

C、在catch语句中,异常类的排列次序无关紧要。 D、运行时异常无法捕获。

13、有下列程序 class TestException { }

在public void test( ) 后加上哪一句可以使编译不出错。 A、throw MyException B、throws MyException C、throw new MyException() D、throws new MyException()

class MyException extends Exception { } public void testMethod() throws MyException {} public void test() { }

testMethod();

14、下列哪一段代码能够删除文件file.txt A、File f=new File(“file.txt”); f.delete();

B、RandomAccessFile f=new RandomAccessFile(“file.txt”,”rw”); f.delete();

C、FileOutputStream f=new FileOutputStream(“file.txt”); f.remove();

D、File f=new File(“file.txt”); File.delete(f);

15、下面哪一个流属于过滤流 A、InputStream B、FileInputStream C、DataInputStream D、FileReader

16、下列说法错误的是: A、TCP是面向连接的协议,而UDP是无连接的协议。 B、数据报传输是可靠的,可以保证包按顺序到达。 C、URL代表的统一资源定位符一共包括五个部分

D、Socket和ServerSocket分别表示连接的Client端和Server端

17、设有以下程序段 class TestException { public static void main(String [] args) { try{

return;

}finally{ System.out.println(\

}

}

}

程序编译并执行,其结果将是 A、程序执行,但没有任何输出 B、程序输出finally

C、程序编译时出错,提示缺少catch

D、程序编译时出错,提示finally语句无法访问到。

18、FlowLayout布局管理器按照组件加入容器的次序从(件。

A、 上、下

)排列组 )到(B、右、左 C、左、右 D、 前、后

19、有程序如下 class SuperClass { }

class SubClass extends SuperClass { }

int i=20;

public void printA() { }

super.printI(); private int i=10; void printI() { }

System.out.println (i);

class Test { }

编译并运行程序,其结果将是 A、10 B、20 C、编译出错 D、0

20、下面哪一种流可以用来输入字符 A、InputStream B、OutputStream C、InputStreamReader D、BufferedInputStream

二、判断题(阅读每一句陈述,判断其正误。在题后的括号中作相应的记号,正确的填入T,错误的填入F。)

public static void main(String [] args) { }

SubClass c1=new SubClass(); ,;c1.printA();

1、接口可以被另一个接口继承。(T) 2、接口中只能定义符号常量和抽象方法。(T) 3、private方法不能被继承,但可以被覆盖。(F)

4、如果类A的一个方法m的访问权限是默认的,则m可以被同一个包中的其他类访问,也可以被其它包中A的子类访问。(F) 5、类的静态变量被该类的所有对象共享。(T) 6、所有的类都可以被继承。(F)

7、java中是单继承,但一个类可以实现多个接口。(T) 8、不管定义与否,任何类都有一个不带参数的构造方法。(F) 9、语句”double i=20.0f;”在编译时不会引起错误。(T) 10、线程的sleep()方法是一个静态方法。(T)

三、程序阅读题。

1、仔细阅读下面的程序代码,编译和运行后,请写出该程序的输出结果。 class TestException {

public static String toSeparateNumber(String number) {

String formatedNumber=\try {

double n=Double.parseDouble(number);

number=Double.toString(n); int i=number.indexOf('.'); if (i>=0) { }

else i=number.length()-1; int k=0;

for (int j = i; j>=0; j--) {

formatedNumber=number.charAt(j)+formatedNumber; k=(k+1)%3;

if (k==0 && j!=0) formatedNumber=\formatedNumber=number.substring(i,number.length()); i=i-1;

} }

catch(NumberFormatException e) { }

return formatedNumber;

System.out.println (\参数错误!要求是数字格式!\

}

public static void main(String [] args) {

System.out.println

(TestException.toSeparateNumber(\

System.out.println

(TestException.toSeparateNumber(\ } 答案: 1,200.45

参数错误!要求是数字格式!

2、仔细阅读下面的程序代码,编译和运行后,请写出该程序的输出结果。 class Father{

String name=\ int age=45; int getAge(){ return age; }

String getName(){ return name;

}

}

void setAge(int a){ age = a; } }

class Child extends Father{ String name=\ int age=18; int getAge(){ return age+1; } }

class Test2{

public static void main(String args[]){ Father p=new Child();

System.out.println(p.getAge()); p.setAge(30); System.out.println(p.getAge());

System.out.println(p.getName());

} }

答案: 19 19 Father

3、阅读下面程序代码,写出程序运行的输出结果。 class Test3 {

public static void main(String []args){

try { }

catch(Exception e) { }

System.out.println(\

System.out.print(\callMethod();

}

static void createException() {

throw new ArithmeticException();

}

static void callMethod() {

try { }

catch(ArrayIndexOutOfBoundsException e) {

createException(); System.out.print(\

System.out.print(\ } 答案:

}

} finally { }

System.out.print(\

System.out.print(\

I will win

4、下面的程序利用线程输出从a到z的26个字母,每隔一秒钟输出一个字母,程序不完整,请阅读程序代码,根据注释要求在划线处补充完成代码。 public class Test4 implements Runnable {

char charArray[]=new char[26]; public Test4() {

for(int i = 0; i

charArray[i]=(char)(i+'a'); }

public void run() { try {

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

//休眠一秒钟 System.out.print(charArray[i]);

}

}

}

catch (InterruptedException e) {

e.printStackTrace(); }

public static void main(String args[]) {

Thread t = //实例化线程对象 //启动线程 } } 答案:

Thread.sleep(1000); new Thread(new Test4()); t.start();

5、下面的程序是一个基于AWT的简单图形用户界面程序。程序运行时将显示一个窗口(如下图),窗口上有一个“退出”按钮,单击退出按钮程序将结束运行。阅读程序代码,根据注释要求补充完成代码(划线是需要补充的地方)。

}

import java.awt.*; import java.awt.event.*; import javax.swing.*;

public class Test5 extends JFrame {

private JButton exit; private JLabel label; public Test5() {

super( \图形用户界面\

label = new JLabel(\单击退出按钮关闭本窗口。\

//将标签放置在窗口的北面 exit = new JButton(\退出\

exit.addActionListener(

/* 注册一个内部类形式的事件监听器,该监听器关闭程序 */ );

add(exit,BorderLayout.CENTER ); setSize(300,100); setVisible(true); }

public static void main ( String args[] ){ Test5 app = new Test5(); } } 答案:

add( label, BorderLayout.NORTH ); new ActionListener(){

public void actionPerformed(ActionEvent e) {System.exit(0);} }

四、编程题(共2小题,每小题20分,共40分)。

1、根据以下说明,编写一个银行账户类Account,并编写一个main方法,对Account类进行测试,在main方法中要调用Account的所有方法,发生异常时,要打印异常信息。

该类的成员变量如下(访问权限均为private):

变量名 Id Owner Balance 含义 帐号 账户持有人姓名 余额 数据类型 String String double 该类的成员方法如下(访问权限均为public): 方法名 构造方法 参数 无 说明 构造一个账户实例,将id,owner设为null,balance设为0.00 String id, String 构造一个账户实例,用owner, double amount 参数设置成员变量id,ownerl,balance的值 String id 用参数设置成员变量id的值。返回类型void。 String owner 用参数设置成员变量owner的值。返回类型void。 double amount 将金额amount存入帐户,如果帐号为null,则抛出异常,异常信息为“帐号未知!”。返回类型double,返回值为amount。 double amount 从帐户支取金额amount,如果帐号为null,或者余额小于amount,则抛出异常,异常信息分别为“帐号未知!”和“余额不足!”。返回类型double,返回值为amount。 无 打印id,owner,balance。返回类型void。 构造方法 setID setOwner Deposit Withdraw Query 参考答案: class Account

{

private String id; private String owner; private double balance;

public Account() {

id=null; owner=null; balance=0.00;

}

public Account(String id,String owner,double balance) { }

public void setID(String id) { }

this.id=id; this.id=id; this.owner=owner; this.balance=balance;

public void setowner(String owner) { }

public double deposit(double amount) throws Exception { }

public double withdraw(double amount) throws Exception {

if (id==null)

throw new Exception(\帐号未知!\ else if (balance

throw new Exception(\余额不足!\ else

if (id==null)

throw new Exception(\帐号未知!\ else { }

balance+=amount; return amount; this.owner=owner;

}

{ }

balance-=amount; return amount;

public void query() {

System.out.println (\帐号:\户名:\余

额:\

}

public static void main(String [] args) {

try{

Account ac1=new Account(\张三\ ac1.query(); ac1.deposit(2000); ac1.query(); ac1.withdraw(5000); ac1.query();

Account ac2=new Account(); ac2.query();

ac2.setID(\

}

ac2.setOwner(\李四\ ac2.deposit(2000); ac2.query(); ac2.withdraw(5000); ac2.query(); }catch(Exception e) { }

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

}

2、编写类HandInput.java,该类接受用户的键盘输入,存入指定的文件。用户的输入以行为单位,当用户输入end时,程序结束。如果指定的文件已经存在,程序提示用户,并结束程序。 参考答案

import java.io.*; class HandInput {

public static void main(String [] args) {

String inline;

BufferedReader handin=null; PrintWriter fostream=null; try {

File f=new File(args[0]); if (f.exists()) {

System.out.println (\目标文件已经存在。请换一个文件名!

\

}

handin = new BufferedReader(

new InputStreamReader(System.in)); return;

fostream = new PrintWriter(new FileWriter(f)); while (true) {

inline=handin.readLine(); if (!inline.equals(\ { } else

fostream.println(inline);

}

}

{ }

break;

} }

catch(IOException e) { } finally { }

try { }

catch(Exception e1){}

if (handin!=null) handin.close(); if (fostream!=null) fostream.close(); System.out.println (\操作失败!\