Java异常处理机制

文章目录

  • try-catch-finally
  • throws
  • try-catch-finally内容
  • throw异常处理


try-catch-finally

try{
代码可能有异常
}catch(Exception e ){
捕获异常
当异常发生时
系统将异常封装成Exception对象e,传递给 catch
得到异常对象后,程序员自己处理
注意,如果没有发生异常,catch代码块不执行
}finally{
不管try代码块是否有异常发生,始终要执行finally
所以,通常将释放资源的代码放在finally
可写可不写
}


throws

throws给顶级的JVM后
JVM直接输出异常信息
直接退出程序
如果你没有显示的使用两个异常中的一个,它会默认的使用throws


try-catch-finally内容

1.如果异常发生了,则异常发生后面的代码就不会执行,直接进入catch
2.如果异常没有发生,则顺序执行try代码块的内容,不会进入catch
3.如果希望不管是否发生异常,都执行某段代码,(比如关闭连接,释放资源等等)则使用 finally

package com.ylxstudy.exception_.try_;

/**
 * @author 
 * @version 1.0
 */
public class TryCatchDetail {
    public static void main(String[] args) {
        /*
        * 1.如果异常发生了,则异常发生后面的代码就不会执行,直接进入catch
        * 2.如果异常没有发生,则顺序执行try代码块的内容,不会进入catch
        * 3.如果希望不管是否发生异常,都执行某段代码,(比如关闭连接,释放资源等等)则使用 finally
        * 4.
        * */
        try {
            String name= "小黄";
            int a = Integer.parseInt(name);
            System.out.println("数字为" + a);
        } catch (NumberFormatException e) {
            System.out.println("异常信息=" + e.getMessage());
        }finally {
            System.out.println("finally被执行");
        }
        System.out.println("程序继续...");
    }
}

内容:
1.如果try代码块有可能有多个异常,第一个异常发现之后,第二个异常就不会在执行使用多个catch分别捕获不同的异常,相应处理
2.要求,子类异常写在前面,父类异常写在后面

package com.ylxstudy.exception_.try_;

/**
 * @author 
 * @version 1.0
 * 多个catch 分别捕获不同的异常
 */
public class TryCatchDetail02 {
    public static void main(String[] args) {
        /*
        * 1.如果try代码块有可能有多个异常,第一个异常发现之后,第二个异常就不会在执行
        * 使用多个catch 分别捕获不同的异常,相应处理
        * 2.要求,子类异常写在前面,父类异常写在后面
        * */
        try {
            Person person = new Person();
            person = null;
            System.out.println(person.getName());
            int n1 = 11;
            int n2 = 0;
            int res = n1 / n2 ;
            System.out.println(res);
        } catch (NullPointerException e){
            System.out.println("空指针异常=" + e.getMessage());
        }catch (ArithmeticException e){
            System.out.println("数学算数异常=" + e.getMessage());
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}
class Person{
    private String name;

    public String getName() {
        return name;
    }
}

内容:
可以进行try-finally配合使用,使用这种方法相当于没有捕获异常,因此程序会直接崩掉退出

package com.ylxstudy.exception_.try_;

/**
 * @author 
 * @version 1.0
 * try-finally配合使用
 */
public class TryCatchDetail03 {
    public static void main(String[] args) {
        /*
        * 可以进行try-finally配合使用,使用这种方法相当于没有捕获异常
        * 因此程序会直接崩掉退出,
        * */
        try {
            int n1 =10 ;
            int n2 =0;
            System.out.println(n1 / n2);
        } finally {
            System.out.println("执行了Finally..");
        }
        System.out.println("程序继续执行..");
    }
}

throw异常处理

throw异常处理,当一个方法中出现异常时,该方法没有进行异常处理,而是将它交给上一级的方法,也就是调用出现异常的方法,此时如果该方法没有进行try-catch,则需要继续throws到上一级调用的,直到JVM,最后JVM显示异常,直接停止运行

  1. 当异常是运行异常时,进行throws异常处理可以不需要在方法名或者类名后面显式的throws,默认就是throws
  1. 当异常是编译异常时,就需要进行显式的throws异常处理

package com.ylxstudy.exception_.throws_;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * @author 
 * @version 1.0
 */
public class Throws01 {
    public static void main(String[] args) {

    }
//    public void f1() throws FileNotFoundException {
    public void f1() throws Exception {
        //创建一个文件流对象
        //这里的异常是一个FileNotFoundException的编译异常
        //使用throws抛出异常,让调用f1方法的调用者(方法处理)
        //throws后面的异常类型可以是方法中产生的异常类型,也可以是他的父类
        //throws关键字后也可以是异常列表,既可以抛出多个异常
        FileInputStream fis = new FileInputStream("d://aa.txt");
    }
}

package com.ylxstudy.exception_.throws_;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * @author 
 * @version 1.0
 *              异常处理的各种细节
 */
public class ThrowsDetail01 {
    public static void main(String[] args) {

    }
    public void f2(){
        //1.对于编译异常,程序中必须处理,
        //2.对于运行异常,程序中如果没有处理,默认处理机制为 throws
        //
    }


    public static void f3() throws FileNotFoundException{
//        f4(); 抛出的是编译异常,必须显示处理
//        所以,f3必须要抛出异常
        f4();
    }
    public static void f4() throws FileNotFoundException {
        FileInputStream fileInputStream = new FileInputStream("d://aa.txt");
    }

    //同理,当一个方法抛出的是运行异常时,调用的该方法的方法就不需要显式的异常处理
}
class Father{
    public void method() throws RuntimeException{

    }
}
class son extends Father{
    //3.子类重写父类的方法时,对抛出异常的规定:子类重写的方法
    //所所抛出的异常类型要么和父类的异常一样,要么就是父类的异常类型的子类
    //4.throws 和 try-catch只能二选一
    @Override
    public void method() throws NullPointerException {
        super.method();
    }
}

你可能感兴趣的:(笔记,java,jvm,开发语言)