资源描述
面向对象程序设计
1、阅读下面的程序:
该程序运行的输出结果是:( )
A. eace
B. PEACE
C. ecaep
D. ECAEP
本题参考答案: C
2、阅读下面的程序:
该程序运行的输出结果是:( )
A. 0123456789ABCDEF
B. ABCDEF0123456789
C. 0123456789abcdef
D. fedcba9876543210
本题参考答案: D
3、阅读下面的程序:
该程序运行的输出结果是:( )
A. 1 2 2 4 8
B. 2 2 4 8 32
C. 1 4 4 16 64
D. 1 2 6 24 120
本题参考答案: D
4、阅读下面程序:
该程序运行的输出结果是:( )
A. sum = 6
B. sum = 32
C. sum = 64
D. sum = 12
本题参考答案:B
5、从开始执行到执行结束,小应用程序经历的3个状态分别是:( )
A. 初始态、就绪态,结束态
B. 就绪态、运行态,停止态
C. 初始态、运行态,停止态
D. 就绪态、运行态,休眠态
本题参考答案: C
6、下列关于Java小应用程序(Applet)的说法中,正确的是:( )
A. java.applet.Applet类是所有Java小应用程序的基类
B. Java小应用程序不需要编译
C. Java小应用程序也需要main()方法
D. Java小应用程序必须实现ActionListener接口
本题参考答案: A
7、Swing的三个顶层容器分别是:( )
A. JApplet,JPanel,JWindow
B. JDialog,JApplet,JFrame
C. JApplet,JFrame
D. JMenu
E. JFrame,JPanel,JTextArea
本题参考答案: B
8、把容器划分为东、西、南、北、中5个区域的布局管理器是:( )
A. BoxLayout
B. FlowLayout
C. ardLayout
D. BorderLayout
本题参考答案: D
9、下列语句序列执行之后,b1,b2,b3,b4的值分别是:( )
String s1 = "peace";
String s2 = new String(s1);
String s3 = s2;
String s4 = new String("PEACE");
boolean b1 = (s1 == s2);
boolean b2 = s1.equals(s2);
boolean b3 = (s3 == s2);
boolean b4 = s4.equals(s3);
A. true,true,false,false
B. false,true,true,true
C. false,true,true,false
D. false,true,false,false
本题参考答案: C
10、下列构造String的语句中,不正确的是:( )
A. String str2 = "" ;
B. String str1 = new String( );
C. String str4 = "" + 123;
D. String str3 = new String(123);
本题参考答案: D
11、下列关于构造方法的说法中,不正确的是:( )
A. 构造方法用于创建类的实例
B. 构造方法不可以重载
C. 构造方法不具有返回值类型
D. 构造方法名必须和类名相同
本题参考答案: B
12、既能作为类的修饰符, 也能作为类成员的修饰符的是( )
A. public
B. extends
C. void
D. static
本题参考答案: A
13、执行完下列语句后,变量x的值是( )
int x=7, y=10;
switch( x/y ) {
case 0: x++;
case 7: x*=y;
case 14: x+=y; break;
default: x%=y;
}
A. 8
B. 70
C. 80
D. 90
本题参考答案: D
14、以下由for语句构成的循环的执行次数是:( )
for (int i=0; i<=0; i=i) ;
A. 有语法错,不能执行
B. 一次也不执行
C. 执行1次
D. 无限次
本题参考答案: D
15、设有定义 int i=7;char ch="b"; 下面赋值语句中不正确是:( )
A. i = ch;
B. ch = i;
C. ch = (char)i;
D. i = (int)ch;
本题参考答案: B
16、设有定义 int i=80, j=7; double d=80.7; 则下列语句中正确的赋值语句是:( )
A. i + j = (int)d;
B. i = d;
C. i = (int)d + j;
D. j = (int)i - d;
本题参考答案: C
17、以下关于Java语言的叙述错误的是:( )
A. Java是最纯粹的面向对象语言,对面向对象方法学的支持也最全面
B. Java是解释执行的语言,由Java解释器负责将Java源文件解释为机器码执行
C. Java是平台无关的,即Java程序不用修改就可以在不同类型的计算机平台上运行
D. Java提供了大量功能丰富的可重用类库,有效减少了编程的工作量
本题参考答案: B
18、Java语言具有许多优点和特点,下列选项中,哪个反映了Java程序“一次编写,到处运行”的特点:( )
A. 多线程
B. 与平台无关
C. 面向对象
D. 分布式
本题参考答案: B
19、下列选项中,用于声明实现一个接口关键字是:( )
A. interface
B. implements
C. import
D. abstract
本题参考答案: B
20、下列不属于Java语言关键字的是( )
A. repeat
B. try
C. break
D. new
本题参考答案:A
21、下列字符序列中可以作为Java语言标识符的是( )
A. true
B. 123_xyz
C. x.y
D. _x123
本题参考答案:D
22、下列字符序列中不能作为Java语言标识符的是( )
A. abc_123
B. 圆周率PI
C. false
D. _123abc
本题参考答案:C
23、问:阅读下面的Java代码,写出打印语句的输出结果(即类的初始化顺序)。
public class InitialOrderTest {
// 静态变量
public static String staticField = "静态变量";
// 变量
public String field = "变量";
// 静态初始化块
static {
System.out.println(staticField);
System.out.println("静态初始化块");
}
// 初始化块
{
System.out.println(field);
System.out.println("初始化块");
}
// 构造器
public InitialOrderTest() {
System.out.println("构造器");
}
public static void main(String[] args) {
new InitialOrderTest();
}
}
本题参考答案:
答:输出结果是:
静态变量
静态初始化块
变量
初始化块
构造器
24、问:Math.round(11.5)返回多少? Math.round(-11.5)返回多少?
本题参考答案:
答:Math.round(11.5)返回12,Math.round(-11.5)返回-11。
25、问:下面的Java程序,编译时会报什么错误?
import java.io.*;
class SuperClass {
public void fun() throws IOException {
}
}
class SubClass1 extends SuperClass {
public void fun() throws Exception {
System.out.println("SubClass::fun()");
}
}
class SubClass2 extends SuperClass {
public void fun() throws FileNotFoundException,ArithmeticException {
System.out.println("B6::method()");
throw new ArithmeticException("被除数为0");
}
}
本题参考答案:
答:错误之处:
SubClass1 中的 fun() 无法覆盖 SuperClass 中的 fun();被覆盖的方法不抛出 java.lang.Exception
public void fun() throws Exception {
^
26、问:下面的TestStaticMain.java程序能否通过编译?哪条语句会报错?
public class TestStaticMain {
public static void main(String[] args) {
Person p = new Person(10, "wangke");
p.print();
}
class Person {
private int ID;
private String name;
Person(int ID, String name) {
this.ID = ID;
this.name = name;
}
public void print() {
System.out.println("ID = " + ID);
System.out.println("name = " + name);
}
}
}
本题参考答案:
答:不能通过编译。Person p = new Person(10, "wangke");这一句会报错:无法从静态上下文中引用非静态变量this。
27、问:阅读下面的Java代码,写出打印语句(1)、(2)、(3)的输出结果,并解释原因。
String str1 = new String("wangke");
String str2 = new String("wangke");
System.out.println(str1 == str2); // (1)
System.out.println(str1.equals(str2)); // (2)
System.out.println(str1.hashCode()==str2.hashCode()); // (3)
本题参考答案:
答:
(1) false。因为==比较的是对象句柄,而对象str1,str2是完全独立的两个对象,它们的句柄是不同的。
(2) true。因为String类的equals()源码实现中重写了Object中的equals()方法:只要两个String对象的字符数组内容相同,就认为两个对象相等。
(3) true。因为String类的hashCode()源码实现中重写了Object类中的hashCode()方法:只要String的字符数组内容相同,hashCode就相同。
28、问:阅读下面的Java GUI Application。在点击“测试”按钮后,控制台的输出信息是什么?
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Test {
public static void main(String[] args) {
new MyFrame().launchFrame();
}
}
class MyFrame extends JFrame {
JButton btn = new JButton("测试");
Container ctp = getContentPane();
public void launchFrame() {
setBounds(200,200,250,160);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ctp.setLayout(new BorderLayout(10,10));
ctp.add("North", btn);
btn.addActionListener(new MyActionListener()); // btn注册监听器1
btn.addActionListener(new YourActionListener()); // btn注册监听器2
setVisible(true);
}
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if(e.getSource() == btn) {
System.out.println("in MyActionListener");
}
}
}
class YourActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if(e.getSource() == btn) {
System.out.println("in YourActionListener");
}
}
}
}
本题参考答案:
答:控制台输出:
in YourActionListener
in MyActionListener
因为点击事件首先被后注册的监听器new YourActionListener()处理,然后再被先注册的new MyActionListener()处理。
29、问:数组有没有length()这个方法? String有没有length()这个方法?
本题参考答案:
答:
数组没有length()方法,但有length属性。
String有length()方法。
30、问:&与&&的区别是什么?
本题参考答案:
答:&是位运算符;&&是布尔逻辑运算符。
31、问:有一个程序IO.java,代码如下。发现输入1之后,还没等到输入宽,程序就直接输出了637。为什么?
import java.io.*;
class IO {
public static void main(String args[]) throws IOException {
System.out.println("计算矩形面积");
System.out.print("请输入长:");
int a, b;
a = System.in.read();
System.out.print("请输入宽:");
b = System.in.read();
System.out.println("计算矩形面积是:" + a * b);
}
}
运行:
C:\temp>java IO
计算矩形面积
请输入长:1
请输入宽:计算矩形面积是:637
本题参考答案:
答:
因为System.in.read()接收的是字节0-255。
当输入字符1以后,其实返回的是ASCII码,也就是49。然后你又按了个回车,回车的ASCII码是13。
所以,结果相当于
a=49
b=13
49*13=637
32、问:下面的Java程序,打印结果是什么?
public class Test {
public static void changeStr(String str) {
str = "welcome";
}
public static void main(String[] args) {
String str = "1234";
changeStr(str);
System.out.println(str);
}
}
本题参考答案:
答:1234
33、问:下面的Java程序,编译时会报什么错误?
class SuperClass {
public void fun() {
}
}
class SubClass extends SuperClass {
private void fun() {
System.out.println("SubClass::fun()");
}
}
本题参考答案:
答:错误之处:
SubClass中的fun()无法覆盖 SuperClass 中的 fun();正在尝试指定更低的访问权限;为 public
private void fun() {
^
34、问:下面的代码是否能输出wangke?
try {
System.exit(0);
} finally {
System.out.println("wangke");
}
本题参考答案:
答:不会输出wangke。
在try-catch-finally结构中,
如果执行到try代码段或catch代码段中的return语句,则先运行finally代码段,再运行return语句;
如果执行到try代码段或catch代码段中的System.exit(0)语句,则直接退出程序,即这时finally代码段不会被执行到。
35、问:String s = new String("xyz"); 创建了几个String Object?
本题参考答案:
答:两个对象。一个是“xyx”,一个是指向“xyx”的引用对象s。
36、问:下面的Test.java程序,有哪两处错误?
Class Test {
void f() {
public int i;
}
}
本题参考答案:
答:
错误1:Class应改为class
错误2:public int i; 应改为int i; // 局部变量不能用权限修饰符、static修饰
37、问:int count = 10; count += ++count; System.out.println(count); 能否通过编译?打印输出是多少?
本题参考答案:
答:可以通过编译。打印输出21。
int count = 10;
count += ++count; // 相当于count = count + (++count);
System.out.println(count); // 输出21
38、问:下面的Test.java程序,输出结果是derive吗?
class base {
private void print() { // 注意:private修饰
System.out.println("base");
}
public void doprint() {
print();
}
}
class derive extends base {
private void print() { // 注意:private修饰
System.out.println("derive");
}
}
class Test {
public static void main(String[] args) {
base b = new derive();
b.doprint();
}
}
本题参考答案:
答:不是。输出结果是base
39、阅读下面的程序,写出程序运行的输出结果。
public class Test2 {
public static char method(char ch) {
if((ch>='A') && (ch<='Z'))
return (char)(ch + 32);
else return ch;
}
public static void main(String[] args) {
String s= "0123456789ABCDEF",s1="";
for (int i=s.length()-1; i>=0; i--)
s1 = s1 + method(s.charAt(i));
System.out.println(s1);
}
}
本题参考答案:
答:程序运行的输出结果是:fedcba9876543210
40、阅读下面程序,并回答问题。
(1)try块中包含的哪些语句或表达式可能抛出异常?
(2)流DataOutputStream和DataInputStream常被用于何种操作?
(3)假定文件out.txt中原本没有任何数据,这段程序执行完成后,文件out.txt的内容是什么?程序在控制台窗口输出什么?
import java.io.*;
public class Test4 {
public static void main(String args[]) {
try {
DataOutputStream dout = new DataOutputStream(
new FileOutputStream("out.txt"));
for (int i = 0; i < 10; i++)
dout.writeInt("0" + i);
dout.close();
DataInputStream din = new DataInputStream(
new FileInputStream("out.txt"));
for (int i = 0; i < 10; i++)
System.out.print(din.readInt() - "0" + ", ");
din.close();
} catch (IOException e) {
System.err.println("发生异常:" + e);
e.printStackTrace();
}
}
}
本题参考答案:
答:问题(1):
new FileOutputStream(“out.txt”)
dout.writeInt( ‘0’ + i);
dout.close( );
new FileInputStream(“out.txt”)
din.readInt( )
din.close( );
问题(2):常被用于读取与存储(读写或输入/输出)基本数据类型的数据。
问题(3):
文件out.txt的内容是:0 1 2 3 4 5 6 7 8 9
程序在控制台窗口输出:0,1,2,3,4,5,6,7,8,9,
41、Java AWT程序设计:在窗口中画出三个TextField(前两个用于接收用户输入的两个整数,第三个用于显示相加和),一个加号Label,一个等于号Button. 当按下Button时,将相加之和放到第三个TextField中。注意:不允许使用内部类。
本题参考答案:
import java.awt.*;
import java.awt.event.*;
public class TFMath {
public static void main(String[] args) {
new TFFrame().launchFrame();
}
}
class TFFrame extends Frame {
TextField num1, num2, num3;
public void launchFrame() {
num1 = new TextField(10);
num2 = new TextField(10);
num3 = new TextField(15);
Label lblPlus = new Label(\"+\");
Button btnEqual = new Button(\"=\");
btnEqual.addActionListener(new MyMonitor(this));
setLayout(new FlowLayout());
add(num1);
add(lblPlus);
add(num2);
add(btnEqual);
add(num3);
pack();
setVisible(true);
}
}
class MyMonitor implements ActionListener {
TFFrame tf = null;
public MyMonitor(TFFrame tf) {
this.tf = tf;
}
public void actionPerformed(ActionEvent e) {
int n1 = Integer.parseInt(tf.num1.getText());
int n2 = Integer.parseInt(tf.num2.getText());
tf.num3.setText(\"\" + (n1+n2));
}
}
42、阅读下面的程序,写出输出结果。
public class MyException {
public static void throwException() {
System.out.println("产生并抛出ArithmeticException类型的异常");
throw new ArithmeticException();
}
public static void catchArrayException() {
try {
throwException();
System.out.println("在try语句块中的多余语句");
} catch(ArrayIndexOutOfBoundsException e) {
System.err.println("方法catchArrayException捕捉到异常");
} finally {
System.out.println("方法catchArrayException的finally语句块");
}
System.out.println("方法catchArrayException运行结束");
}
public static void main(String[] args) {
try {
catchArrayException();
} catch(ArithmeticException e) {
System.err.println("方法main捕捉到异常");
} finally {
System.out.println("方法main的finally语句块");
}
System.out.println("异常处理结束");
}
}
本题参考答案:
答:输出为
产生并抛出ArithmeticException类型的异常
方法catchArrayException的finally语句块
方法main捕捉到异常
方法main的finally语句块
异常处理结束
43、问:下面语句中的错误都是在Java数据类型转换中的易错点。分析语句的错误原因并改正。
(1) float f1 = 0.1;
(2) long l1 = 12345678, l2 = 8888888888;
(3) byte b1 = 1, b2 = 2, b3 = 129;
(4) byte b = b1 - b2;
(5)
int i = 1;
i = i * 0.1; // 有错
(6)
char c1 = 'a', c2 = 125;
char c = c1 + c2 - 1; // 有错
(7)
float f1 = 0.1f, f2 = 123;
float f3 = f1+f2*0.1; // 有错
本题参考答案:
答:
(1) float f1 = 0.1;
错误原因:0.1缺省为double类型
改正办法:float f1 = (float)0.1; 或改为 float f1=0.1f;
(2) long l1 = 12345678, l2 = 8888888888;
错误原因:8888888888已经超出缺省int型的最大表示范围,必须加字母L。
改正办法:long l1 = 12345678, l2 = 8888888888L;
(3) byte b1 = 1, b2 = 2, b3 = 129;
错误原因:129在自动转换中超出范围
改正办法:b
展开阅读全文