Java拾贝第七天——throws和throw、自定义异常

发布时间 2023-10-20 22:29:47作者: ocraft

Java拾贝不建议作为0基础学习,都是本人想到什么写什么

throws

在定义一个方法时可以使用throws,表示此方法不处理异常,转而交给方法的调用处进行处理。

public class Test7 {
    public static void main(String[] args) {
        Math math = new Math();
        try {
            math.div(10,0);//方法调用处进行处理
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
class Math{
    public  int div(int i,int j)throws Exception{//抛出异常并且方法中不处理异常
        return i/j;
    }
}

既然可以使用throws抛出异常,那么main方法抛出异常可以吗?

public class Test7 {
    public static void main(String[] args) throws Exception {
	//主方法抛出了异常,那么主方法就可以不处理异常。
        Math math = new Math();
        math.div(10,0);
    }
}
class Math{
    public  int div(int i,int j) throws Exception{
        return i/j;
    }
}

程序运行结果:

Exception in thread "main" java.lang.ArithmeticException: / by zero
	at moudle1.Math.div(Test7.java:13)
	at moudle1.Test7.main(Test7.java:6)

虽然main方法可以抛出异常。但main方法作为程序的起点,只能将异常抛给JVM(虚拟机)处理了,这也就到头了。如果说Java有"头"的概念,那JVM就是Java的"头"。

如果在主方法中使用throws,程序出现问题后肯定交给JVM处理,这将会导致程序中断。

throw

可以人为的实例化一个异常对象并使用throw抛出。

    public static void main(String[] args)  {
        try {
            new NullPointerException();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

上述代码中我们人为的创造了一个异常并捕获处理了。

在finally中,要尽量避免出现throw或return这样的语句。

自定义异常

虽然Java提供了很多异常,难免出现意外情况,至此Java还提供了自定义异常。

public class Test7 {
    public static void main(String[] args) {
        try {
            throw new MyException();//抛出一个自定义的异常
        } catch (Exception e) {
            System.out.println("捕获自定义的异常");
        }
    }
}

class MyException extends Exception {//自定义的异常
    public MyException() {
        super();
    }
}

程序运行结果:

捕获自定义的异常