锁定老帖子 主题:遇到这3道笔试题,大家有把握能做对几道
精华帖 (0) :: 良好帖 (10) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-19
第一题我还没有像到原因,暂不解释
第二题我说下原因:try-catch-finally,程序优先进入 try,如果没有出现exception,直接进入finally,跳出方法体。 如果出现异常 那么顺序就是 try块,catch块,finally块。好了,下面大家看一段代码 public class Main { public static void main(String[] args) throws CloneNotSupportedException, IOException { foo(); } static void foo() { foo(); } } 运行以后jvm报异常:Exception in thread "main" java.lang.StackOverflowError,那么程序会进入catch块,进行人工异常处理,最后进入finally退出方法体,可是杯具的是,foo方法还是一直调用自己,那么就导致了 foo方法体一直在 try-catch-finally出不来,jvm恨死你了楼主。 第三题:System.out.println(); 这个方法基本上什么对象都能答应,因为jvm会自动调用toString()方法,那么就不要在代码上去想解决方法,那么编译一般什么不通过呢,最基本的作用域问题,那好解决方法来了: {int A = 1;} System.out.println(A); 加一个{}就可以了。 |
|
返回顶楼 | |
发表时间:2011-07-19
make_miracles 写道 第二题
trycatchfinallycatch trycatchfinallyfinally trycatchfinallycatch try try trycatchfinallycatch trycatchfinallyfinally trycatchfinallycatch try trycatchfinallycatch trycatchfinallyfinally trycatchfinallyfinally try trycatchfinallycatch trycatchfinallyfinally trycatchfinallyfinally try try trycatchfinallycatch ......... 在我结束它的时候它还没有打印完呢。 如果debug执行的话,是这样的 try try try try try try try try try try try try try try try try try try try try try |
|
返回顶楼 | |
发表时间:2011-07-19
求解:第二题,为什么直接运行和调试打印的结果不一样?
|
|
返回顶楼 | |
发表时间:2011-07-19
javaest 写道
第三题
//A = 1; System.out.println(A);
人才啊 |
|
返回顶楼 | |
发表时间:2011-07-19
junny9985 写道 第一题我还没有像到原因,暂不解释
第二题我说下原因:try-catch-finally,程序优先进入 try,如果没有出现exception,直接进入finally,跳出方法体。 如果出现异常 那么顺序就是 try块,catch块,finally块。好了,下面大家看一段代码 public class Main { public static void main(String[] args) throws CloneNotSupportedException, IOException { foo(); } static void foo() { foo(); } } 运行以后jvm报异常:Exception in thread "main" java.lang.StackOverflowError,那么程序会进入catch块,进行人工异常处理,最后进入finally退出方法体,可是杯具的是,foo方法还是一直调用自己,那么就导致了 foo方法体一直在 try-catch-finally出不来,jvm恨死你了楼主。 第三题:System.out.println(); 这个方法基本上什么对象都能答应,因为jvm会自动调用toString()方法,那么就不要在代码上去想解决方法,那么编译一般什么不通过呢,最基本的作用域问题,那好解决方法来了: {int A = 1;} System.out.println(A); 加一个{}就可以了。 看你辛苦码字半天,最后一题还是栽了! 不能在第一行和第二行中间插入代码! 你的作用域的右括号怎么插进去的....... |
|
返回顶楼 | |
发表时间:2011-07-19
为什么在我的机子上 出现的只有try finally 求解释,为什么没catch 看到上面运行的结果有catch 为什么没有栈溢出呢?
|
|
返回顶楼 | |
发表时间:2011-07-19
freish 写道
watertap 写道
第三题解法不对。
第一遍就会报错吧! |
|
返回顶楼 | |
发表时间:2011-07-20
最后修改:2011-07-20
joe9i0 写道 junny9985 写道 第一题我还没有像到原因,暂不解释
第二题我说下原因:try-catch-finally,程序优先进入 try,如果没有出现exception,直接进入finally,跳出方法体。 如果出现异常 那么顺序就是 try块,catch块,finally块。好了,下面大家看一段代码 public class Main { public static void main(String[] args) throws CloneNotSupportedException, IOException { foo(); } static void foo() { foo(); } } 运行以后jvm报异常:Exception in thread "main" java.lang.StackOverflowError,那么程序会进入catch块,进行人工异常处理,最后进入finally退出方法体,可是杯具的是,foo方法还是一直调用自己,那么就导致了 foo方法体一直在 try-catch-finally出不来,jvm恨死你了楼主。 第三题:System.out.println(); 这个方法基本上什么对象都能答应,因为jvm会自动调用toString()方法,那么就不要在代码上去想解决方法,那么编译一般什么不通过呢,最基本的作用域问题,那好解决方法来了: {int A = 1;} System.out.println(A); 加一个{}就可以了。 看你辛苦码字半天,最后一题还是栽了! 不能在第一行和第二行中间插入代码! 你的作用域的右括号怎么插进去的....... A是一个int类型变量,请在这段代码的前、后添加任意代码(但两句之间不能再插入代码), 看好咯 是前后哦。 如果你非要较真的话 那么就这样嘛 int A; while(true) A = 2; System.out.println(A); 前面老兄提到的 道理都是一样的 就是让代码编译不过 |
|
返回顶楼 | |
发表时间:2011-07-20
hardPass 写道 dev.eye 写道 第二题没有一个答案是正确的
出题人没有问机器就凭空想. 不是一直try, 无限递归会溢出(java.lang.StackOverflowError),但是溢出又给捕获了,溢出信息没有打印 , 所以溢出不抱错,也不会使程序中止,一个无限递归直到你要它停 但是为什么没有打印出catch? 有时会打印catch, 有时不会, 更加说明这道题目的无聊, 做题目要定好前提, 是哪个Jvm的实现, jdk的版本, 1.2, 1.3, 1.4, 1.5, 1.6还是1.7, 调试状态下, 运行状态下都有可能不同. 调试状态下是哪个工具, 命令行, ide(eclipse, netbeans, ....), 每个工具在调试中肯定都有自己的附加处理, 你又不知道人是怎么处理的 , 操作系统,(windows (xp, 7, server 2003, server 2008) ,linux(各种内核), salaris, aix ...), 当前的内存情况, 少内存溢出快, ..... |
|
返回顶楼 | |
发表时间:2011-07-20
dev.eye 写道 hardPass 写道 dev.eye 写道 第二题没有一个答案是正确的
出题人没有问机器就凭空想. 不是一直try, 无限递归会溢出(java.lang.StackOverflowError),但是溢出又给捕获了,溢出信息没有打印 , 所以溢出不抱错,也不会使程序中止,一个无限递归直到你要它停 但是为什么没有打印出catch? 有时会打印catch, 有时不会, 更加说明这道题目的无聊, 做题目要定好前提, 是哪个Jvm的实现, jdk的版本, 1.2, 1.3, 1.4, 1.5, 1.6还是1.7, 调试状态下, 运行状态下都有可能不同. 调试状态下是哪个工具, 命令行, ide(eclipse, netbeans, ....), 每个工具在调试中肯定都有自己的附加处理, 你又不知道人是怎么处理的 , 操作系统,(windows (xp, 7, server 2003, server 2008) ,linux(各种内核), salaris, aix ...), 当前的内存情况, 少内存溢出快, ..... 为什么final都打出了了,但还是没有出现catch? |
|
返回顶楼 | |