Java异常 Exception类及其子类

C语言时用if…else…来决定甚,Java语言有的可怜且得就此一个近似来表示,不同门类的很对承诺不同的子类异常,每个异常且对应一个不行类的靶子。

 Java异常处理通过5单重点字try、catch、finally、throw、throws进行管理。基本过程是为此try包住要监视的讲话,如果当try内出现异常,则非常会于抛弃来,catch中捕获抛来之坏并举行拍卖,finally一定会完结未尽事宜。

练习:

package com.swift;

public class Exception1
{
    public static void main(String args[]){
        System.out.println("=========计算开始=========");
        try{
            int i=Integer.parseInt(args[0]);
            int j=Integer.parseInt(args[1]);
            int temp=i/j;
            System.out.println("计算结果:"+ temp);
        }catch(ArithmeticException e){
            System.out.println("出现了数学异常 "+ e);
        }catch(ArrayIndexOutOfBoundsException e){
            System.out.println("出现了数组异常 "+ e);
        }catch(NumberFormatException e){
            System.out.println("出现了格式异常 "+ e);
        }catch(Exception e){
            System.out.println("其他异常 "+e);
        }finally{
            System.out.println("不管是否有异常,我都执行。");
        }
        System.out.println("=========计算结束=========");
    }
}

throws标识是措施来好而不处理,谁调谁处理。

package com.swift;

public class Exception3
{
    public static void main(String args[]) throws Exception{
        Operate o=new Operate();
        System.out.println("=============计算之前==============");

            int temp=o.div(Integer.parseInt(args[0]),Integer.parseInt(args[1]));
            System.out.println("计算结果"+temp);
        System.out.println("=============计算之后==========");
    }
}
class Operate
{
    public int div(int i,int j) throws Exception{
        int temp=i/j;
        return temp;
    }
}

要main也throws了,异常抛给了JVM,其实你一个throws不写,JVM依然会暗自地拍卖着老大

专注:一旦方法throws,main必须来对,否则编译不过。main继续抛相当给有怪后的程序戛然而止(没有”=============计算后==========”),这时可用catch捕获抛来之良进行拍卖。

 

package com.swift;

public class Exception3
{
    public static void main(String args[]) throws Exception{
        Operate o=new Operate();
        System.out.println("=============计算之前==============");
        try {
            int temp=o.div(Integer.parseInt(args[0]),Integer.parseInt(args[1]));
            System.out.println("计算结果"+temp);
        }catch(Exception e){
            System.out.println("出现了什么异常情况 "+e); 
        }
        System.out.println("=============计算之后==========");
    }
}
class Operate
{
    public int div(int i,int j) throws Exception{
        int temp=i/j;
        return temp;
    }
}

 

生被处理,计算前后正常输出。

throw与throws不同,throw抛来底未是甚类,而是对象,可以人工的目标。

package com.swift;

public class Exception4 {
    public static void main(String args[]) {
        try {
            throw new Exception("抛着玩呢 "); // 抛出人造异常对象
        } catch (Exception e) { // 再捕捉这个对象
            System.out.println("你抛的是什么呢?"+e);
        }
    }

}

若无思量抛Exception类的对像,要丢自己之

package com.swift;

public class Exception5 {
    public static void main(String args[]) {
        try {
            throw new MyException("自定义异常。");
        } catch (Exception e) {
            System.out.println("这个异常是 " + e); // e.printStackTrace();
        }
    }
}
//通过继承实现自己的异常类
class MyException extends Exception {
    public MyException(String msg) {
        //把参数传给父类
        super(msg);
    }
}