异常处理动手动脑

1.阅读以下代码,写出程序运行结果

运行结果:

2.写出CatchWho2.java的运行结果:

运行结果:

 3.阅读EmbededFinally,java示例,并运行它,观察其输出并进行总结:

public class EmbededFinally {
public static void main(String args[]) {

int result;

try {

System.out.println("in Level 1");


try {

System.out.println("in Level 2");
// result=100/0; //Level 2

try {

System.out.println("in Level 3");

result=100/0; //Level 3

}

catch (Exception e) {

System.out.println("Level 3:" + e.getClass().toString());

}


finally {

System.out.println("In Level 3 finally");

}


// result=100/0; //Level 2


}

catch (Exception e) {

System.out.println("Level 2:" + e.getClass().toString());

}
finally {

System.out.println("In Level 2 finally");

}

// result = 100 / 0; //level 1

}

catch (Exception e) {

System.out.println("Level 1:" + e.getClass().toString());

}

finally {

System.out.println("In Level 1 finally");

}

}
}

总结:当有多层嵌套的finally时,异常在不同层次抛出,在不同的位置抛出,可能会导致不同的finally语句块执行顺序

4.finally语句块一定会执行吗?,请通过SystemExitAndFinally,java示例程序回答上述问题。

public class SystemExitAndFinally {
public static void main(String[] args)
{

try{


System.out.println("in main");

throw new Exception("Exception is thrown in main");

//System.exit(0);


}

catch(Exception e)

{

System.out.println(e.getMessage());

System.exit(0);

}

finally

{

System.out.println("in finally");

}

}
}

回答:如果finally块中的代码过多会导致字节码条数”膨胀”,因为finally中的字节码会被”复制”到try块和所有的catch块中,出异常了。System.out.println("F")不在finally里。而只有finally里的语句才会不论如何都会执行。

5.自行归纳总结java多层嵌套异常处理的基本流程

1)在java语言中,通常将可能出现异常的语句放入try{}语句中,将出现错误后需要执行的语句放入到catch{}语句中,将无论是否发生异常都要执行的语句放在finally{}语句中。

2)当程序执行出现异常的时候,系统会抛出一个异常,然后由try{}语句中中出现异常的地方转到catch{}语句中。不过不管有没有异常产生,finally{}中的语句都将执行。

3)如果系统出现系统错误或者运行Runtime异常,jvm会结束程序运行,不一定会执行finally{}中的语句。

4)如果try{}中产生的异常在catch中没有处理,系统将停止程序,也不会执行finally中的语句。

6.编写一个程序,此程序在运行时要求用户输入一个整数,代表某门课程的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。

编程源代码:

import javax.swing.JOptionPane;//引用消息框
public class chengji {//创建一个公共类
public static void main(String[] args){//java入口方法
for(;;)//无限循环语句
{
String a = JOptionPane.showInputDialog("请输入一个成绩:");//提示框提示输入一个数
try{
int b = Integer.parseInt(a);//强制类型转换
if(b>0&&b<60){
JOptionPane.showMessageDialog(null,
"不及格!");//消息提示框提示
break;//跳出循环
}
else if(b>=60&&b<=70)
{
JOptionPane.showMessageDialog(null,
"及格!");//消息提示框提示
break;//跳出循环
}
else if(b>70&&b<=80)
{
JOptionPane.showMessageDialog(null,
"成绩中等!");//消息提示框提示
break;//跳出循环
}
else if(b>80&&b<=90)
{
JOptionPane.showMessageDialog(null,
"成绩良好!");//消息提示框提示
break;//跳出循环
}
else if(b>90&&b<=100)
{
JOptionPane.showMessageDialog(null,
"成绩优秀!");//消息提示框提示
break;//跳出循环
}
else if(b>100||b<0)
{
JOptionPane.showMessageDialog(null,
"您输入的成绩超出范围,请重新输入!");//消息提示框提示
}
}
catch(Exception e){
JOptionPane.showMessageDialog(null,
"您的输入有误,请重新输入!");//消息提示框提示
}
}

}
}

运行结果:

原文地址:https://www.cnblogs.com/2016excellent-3584/p/7846343.html