发表时间:2011-07-18
第一题: 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]);
}
}
打印的结果:
终于明白结果为什么是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 写道
第三题解法不对。
|
||
发表时间: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; } |