09-JAVA中的异常处理

1.

程序执行结果:

也就是它根本就没抛出异常,更别提捕获异常了。那么,为什么会这样呢?

原来,

如上面程序展示,程序运行到k=i/j;的时候,就会直接终止,根本就不会运行到监视的程序,更不会运行到捕获的程序。

结论:程序出错后,会自动终止,根本不会继续往下运行的。

当把上面几行代码注释掉之后,结果就会一切正常。

结果截图:

可以看到,不光是catch里的,就连finally里的也都正常执行了。

 

2. 

为什么把类型改成double就会没事了呢?

原因是double类型的变量在做除法运算时,是允许除数为零的。

 

 3.

预测的结果:

ArrayIndexOutOfBoundsException/内层try-catch
发生ArithmeticException

 

4.

预测结果:ArrayIndexOutOfBoundsException/外层try-catch

 

5.

运行结果截图:

前三个是顺序执行try里的语句,当第三个try里出现异常时,调到catch语句里,执行catch里的语句,

执行完catch之后,再顺序执行下面的语句,finally被执行,

再往下,

由于没有异常了,所以,跳过catch,执行了后面的finally,

直到最后。

 

结论:有异常时,就会立刻跳出,寻找catch语句处理异常,

一旦异常被处理好之后,那么,其余的catch语句就不会再被执行,

但是,finally语句是无论有没有异常都会执行的语句,

当然这也不是绝对的。

 

6.

 

 finally并不是所有情况都执行的,

经过我上网查资料,得知finally不执行的几种情况:

1)在finally语句块中发生了异常。
2)在前面的代码中用了System.exit()退出程序。
3)程序所在的线程死亡。
4)关闭CPU。

 

7.

源程序:

 

class IllegalFormat extends Exception{
    //输入的分数格式不正确
    IllegalFormat(String m){
        super(m);
    }
}

public class ShuZu {

    public static void main(String[] args) throws IllegalFormat {
        
        // TODO Auto-generated method stub

        int control=1;
        
        System.out.println("请输入分数:");
        Scanner input= new Scanner(System.in);
        String score=new String ();  //分数
        score=input.next();   // 输入分数
        
        char score1[]=new char [100];
        
        score1=score.toCharArray();
        
        int i;
        
        
        while(control==1){
        
        
        try{
        
            for(  i=0;i<score.length();i++){
            
                if(score1[i]<48||score1[i]>57){
                
                    throw new IllegalFormat("您输入的分数格式不正确,应为整数格式,请重新输入:");
            
                }
        
            }
        control=0;
        }
        catch(IllegalFormat e){
            System.out.println(e);
            score=input.next();
            score1=score.toCharArray();
        }
        }
        
        int score2=Integer.parseInt(score);
        
        
        System.out.println("这个同学:");
        
        
        if(score2>=0&&score2<60){
            System.out.println("不及格。");
        }
        else if(score2>=60&&score2<70){
            System.out.println("及格。");
        }
        else if(score2>=70&&score2<80){
            System.out.println("中。");
        }
        else if(score2>=80&&score2<90){
            System.out.println("良");
        }
        else if(score2>=90){
            System.out.println("优。");
        }
        

程序结果截图:

 

posted @ 2016-11-24 17:37  Kefi123  阅读(221)  评论(0编辑  收藏  举报