Java无限循环问题
发布网友
发布时间:2022-05-06 15:22
我来回答
共4个回答
热心网友
时间:2022-07-01 04:45
程序二中: System.out.println(greetings[i]);
当你的i=3时, 就会报 ArrayIndexOutOfBoundsException 这样的一个错误,try捕获了这个错误,那么程序就会执行 catch,从而不执行 i++,所以 i 的值 一直都是3,永远小于4,所以无限循环!
热心网友
时间:2022-07-01 04:46
第一个不出现,是因为,先执行的是i++,当下标越界后(i=3,i++变为4),所以i>4不成立,跳出循环。
第二个出现,是因为,当下标越界后(i=3),此时i<4成立,但i++操作没有执行,因为 System.out.println(greetings[i])已经抛出异常。所以为死循环。
注意表达式的执行顺序问题,这样的问题就很好解释了
热心网友
时间:2022-07-01 04:46
这个问题的关键在于第二个程序当i=2时,i++ 然后变成3 进入下个循环。
greetings[3] 取值时,抛出异常 所以 i++就没有机会执行了。所以i将一直停留在3,不会递增了。
程序一
在greetings[i++] // i=2时,正常运行
greetings[3++] // 先取值,之后i变成4 ,然后抛出异常,进入catch 和finally块
退出循环
个人猜测,程序一能运行的关键在于(++)运算的优先级要高于一般的程序语句。其实程序是否运行一致,可以用javap去看下字节码,相当有用。追问说的很有道理
我猜测:异常抛出机制可能要等到该语句System.out.println(greetings[i++]);里面的多个操作都(尝试)执行了再抛出,高手觉得呢?
热心网友
时间:2022-07-01 04:47
程序2:当i为3时System.out.println(greetings[i]);会报异常,这时候i还是为3,直接走System.out.println("数组下标越界异常"); i++不执行;然后执行finally 打印i为3,再执行while 再抛异常,然后重复上面的操作,所以死循环。程序1:当i为3时System.out.println(greetings[i++]);也抛异常 不过 i++ 已经执行了 所以i为4 不符合while条件 程序停止。