欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

异常类的使用,作用,处理,自定义异常

程序员文章站 2022-03-15 11:45:11
...

异常类的作用是为了完善java程序的健壮性,适当地处理异常有利于程序的正常进行。
异常在java中以类的方式存在,每个异常类都可创建对象,在发生异常jvm会自动new对象,并且将new的对象抛出,打印到控制台。

总的来说异常类(exception)的子类有两大类:
直接继承exception的是编译时异常
继承exception的子类runTImeException是运行时的异常

编译时异常是需要我们去处理的
运行时异常可以选择进行处理

对异常的处理包括两种方式:
在方法声明的时候使用throws关键字,抛给上一级
使用try…catch语句进行异常的捕捉

Throws的使用
因为ClassNotFoundException 是编译时异常(父类是exception,而不是runtimeexception),不进行处理的话就会报错。
(此时main方法没有抛异常或捕捉异常,程序报错)

	public static void main(String[] args) {
    dosome(); //未进行处理,报错
}
public static void dosome() throws ClassNotFoundException{
}

此时main方法抛出异常:(一般不建议在main上抛出异常,程序会结束)为了程序的健壮性,一般main方法中的异常进行捕捉。

public static void main(String[] args) throws ClassNotFoundException{
    dosome(); //编译通过
}
public static void dosome() throws ClassNotFoundException{
}

进行异常捕捉:catch可以写多个,这样写有利于程序的调试。(建议一个异常写一个catch,如果catch后面写的是比较大的类。那么下一个catch只有比这类更大才行。Catch是从上往下依次匹配,类从小到大)

public static void main(String[] args){
    try {
        dosome();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch ( Exception c ){ 
    	c.printStackTrace();
  	} 
}
public static void dosome() throws ClassNotFoundException{
}

从jdk8开始catch支持:
catch( ClassNotFoundException | FileNotFoundException e){}
中间可以使用 逻辑运算符


如果一个方法抛出异常,则该方法就会结束(作用类似于return)


异常对象中的两个重要方法:

String getMessage(); 获取异常简单信息(异常类构造方法后面传的参数)

printStacklTrace(); 打印异常堆栈信息(常用)


关于try…catch中的finally语句:
在finally子句中的代码是最后执行的,并且一定会执行,即使try语句块中出现了异常。
finally子句必须和try同时出现,不能单独编写。

try{
}catch(Exception e){
	e.printStackTrace();
}finally{

}

通常在finally中完成资源的释放,即使try代码块出异常,finally也会执行(只有System.exit(0) 可以让finally不执行)


Try 可以和finally连用:

try {
    System.out.println("123");
    return;
}finally {
    System.out.println("456");
}    // 123     456

即使try中有return语句,finally也会执行


自定义异常(重点):java中提供的异常在实际开发中可能不够用
如何自定义:

  1. 编写一个类继承Exception或者RuntimeException
  2. 提供两个构造方法,一个无参,一个String参数的(接收简述信息)。
public class MyException extends RuntimeException{
    public MyException() {
        super();
    }
    public MyException(String message) {
        super(message);
    }
}
相关标签: java