阅读 25006 次
发表时间:2011-07-18
如果在笔试(无法上机操作)的情况下,遇到这3道笔试题,大家有把握能做对几道

第一题:
	public static void main(String[] args) throws Exception {
		int[] x = new int[6];
		Arrays.fill(x, 1);
		for (int i = 0; i < x.length; i++) {
			System.in.read();
			System.out.println(x[i]);
		}
	}
这段代码,输入“1”(不含引号),按回车后,系统输出什么?

第二题:
	private static void foo() {
		try {
			System.out.println("try");
			foo();
		} catch (Throwable e) {
			System.out.println("catch");
			foo();
		} finally {
			System.out.println("finally");
			foo();
		}
	}

	public static void main(String[] args) {
		foo();
	}
上述代码运行后:
A.执行一段时间后报栈溢出。   B.会一直输出“try”。    C.会一直输出“try”和“finally”。    D.会一直输出“try”、“catch”和“finally”

第三题:
A = 1;
System.out.println(A);
A是一个int类型变量,请在这段代码的前、后添加任意代码(但两句之间不能再插入代码),使得程序编译时第一句可以编译通过,而第二句出现编译错误。
另:请不要以“脑筋急转弯”的方式来思考此问题,这里java就是普通的java语言,rt.jar和javac都没有被修改过。打印语句import的就是我们平常所用的打印语句。
发表时间:2011-07-18
通过程序验证
第一题:输出 1 1 1
第二题:只会出现 try finally
第三题:还没想到。
等高手解释原因..
发表时间:2011-07-18
fe8829 写道
通过程序验证
第一题:输出 1 1 1
第二题:只会出现 try finally
第三题:还没想到。
等高手解释原因..

第二题怎么会没有catch出现呢?
发表时间:2011-07-18
fe8829 写道
通过程序验证
第一题:输出 1 1 1
第二题:只会出现 try finally
第三题:还没想到。
等高手解释原因..

第三题这样成不:


public class Test {
int
A = 1; 
System.out.println(A);
}
发表时间:2011-07-18
第三题解法不对。
发表时间:2011-07-18
第二题一串try,然后stack overflow,catch,finally,catch,finally,finally,stack又有了,然后两个try,又overflow,懒得想了,大概思路是这样,太绕了
发表时间:2011-07-18

运行了下第一题对结果感到很迷惑,于是把System.in.read()的结果也打印出来:

public static void main(String[] args) throws Exception {
		int[] x = new int[6];
		Arrays.fill(x, 1);
		for (int i = 0; i < x.length; i++) {
			System.out.println(System.in.read());
			System.out.println(x[i]);
		}
	}

 打印的结果:

49
1
13
1
10
1

终于明白结果为什么是1 1 1,解惑:

执行System.in.read()方法将从键盘缓冲区读入一个字节的数据,然后返回16位的二进制数据,其低8位为键盘的ASCII码,高8位为0。

数字1的ASCII码为49,换行\r的ASCII码为13,回车\n的ASCII码为10,从控制台输入数字1的操作为:输入1然后换行、回车。

发表时间:2011-07-18
watertap 写道
第三题解法不对。




"A是一个int类型变量,请在这段代码的前、后添加任意代码(但两句之间不能再插入代码),使得程序编译时第一句可以编译通过,而第二句出现编译错误"

public class Test {
int
A = 1; 
System.out.println(A);
}


如何不对?Test中,A是int的,在你的代码的前后加了“任意代码”,没有在两句中间爱插入,第一句可以编译,第二句不能编译,完全满足条件啊

 

发表时间:2011-07-18
第三题解法:
for( int A = 0; A < 2;A++ )
A=1;
System.out.println( A );
发表时间:2011-07-18
挺有趣。我给一个真的变量可写不可读的解法。
public class Test {
	static {
		A = 2;
		System.out.println(A);  // 这句编译器会提示“非法向前引用”  
	}
	static int A = 1;
}

Global site tag (gtag.js) - Google Analytics