I'm B class HelloB
解析:说实话我觉得这题很好,考查静态语句块、构造语句块(就是只有大括号的那块)以及构造函数的执行顺序。
对象的初始化顺序:(1)类加载之后,按从上到下(从父类到子类)执行被static修饰的语句;(2)当static语句执行完之后,再执行main方法;(3)如果有语句new了自身的对象,将从上到下执行构造代码块、构造器(两者可以说绑定在一起)。 下面稍微修改下上面的代码,以便更清晰的说明情况:
View Code 此时输出结果为:
static Astatic B-------main start------- I'm A classHelloA I'm B classHelloB I'm A classHelloA
I'm B classHelloB-------main end-------
21. getCustomerInfo()方法如下,try中可以捕获三种类型的异常,如果在该方法运行中产生了一个IOException,将会输出什么结果()
public void getCustomerInfo() {
try {
// do something that may cause an Exception } catch (java.io.FileNotFoundException ex) {
System.out.print(\
} catch (java.io.IOException ex) {
System.out.print(\
} catch (java.lang.Exception ex) {
System.out.print(\
} }
A IOException!
BIOException!Exception!
CFileNotFoundException!IOException!
DFileNotFoundException!IOException!Exception! 答案:A
解析:考察多个catch语句块的执行顺序。当用多个catch语句时,catch语句块在次序上有先后之分。从最前面的catch语句块依次先后进行异常类型匹配,这样如果父异常在子异常类之前,那么首先匹配的将是父异常类,子异常类将不会获得匹配的机会,也即子异常类型所在的catch语句块将是不可到达的语句。所以,一般将父类异常类即Exception老大放在catch语句块的最后一个。
22. 下面代码的运行结果为:()
import java.io.*;import java.util.*; public class foo{
public static void main (String[] args){
String s;
System.out.println(\ } }
A 代码得到编译,并输出“s=” B 代码得到编译,并输出“s=null”
C 由于String s没有初始化,代码不能编译通过 D 代码得到编译,但捕获到 NullPointException异常 答案:C
解析:开始以为会输出null什么的,运行后才发现Java中所有定义的基本类型或对象都必须初始化才能输出值。
23. System.out.println(\的输出结果应该是()。 A 52 B7 C2 D5 答案:A
解析:没啥好说的,Java会自动将2转换为字符串。
24. 指出下列程序运行的结果 ()
public class Example {
String str = new String(\
char[] ch = { 'a', 'b', 'c' };
public static void main(String args[]) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + \
System.out.print(ex.ch); }
public void change(String str, char ch[]) {
str = \
ch[0] = 'g'; } }
A、 good and abc B、 good and gbc
C、 test ok and abc D、 test ok and gbc 答案:B
解析:大家可能以为Java中String和数组都是对象所以肯定是对象引用,然后就会选D,其实这是个很大的误区:因为在java里没有引用传递,只有值传递
这个值指的是实参的地址的拷贝,得到这个拷贝地址后,你可以通过它修改这个地址的内容(引用不变),因为此时这个内容的地址和原地址是同一地址,
但是你不能改变这个地址本身使其重新引用其它的对象,也就是值传递,可能说的不是很清楚,下面给出一个完整的能说明情况的例子吧:
View Code 程序有些啰嗦,但能反映问题,该程序运行结果为:
对象交换前:p1 = Alexia female 对象交换前:p2 = Edward male
对象交换后:p1 = Alexia female 对象交换后:p2 = Edward male
对象数组交换前:arraya[0] = Alexia female, arraya[1] = Edward male 对象数组交换前:arrayb[0] = jmwang female, arrayb[1] = hwu male
对象数组交换后:arraya[0] = Alexia female, arraya[1] = Edward male 对象数组交换后:arrayb[0] = jmwang female, arrayb[1] = hwu male
基本类型数组交换前:a[0] = 0, a[1] = 1 基本类型数组交换前:b[0] = 1, b[1] = 2
基本类型数组交换后:a[0] = 0, a[1] = 1 基本类型数组交换后:b[0] = 1, b[1] = 2