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 (\操作失败!\