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,
"您的输入有误,请重新输入!");//消息提示框提示
}
}
}
}
运行结果: