《java学习笔记》之异常处理机制

异常处理机制

一.为什么要使用异常机制

当程序出现了不正常的情况

  • java把异常信息打印到了控制台,供程序员参考,程序员看到异常信息后,可以对程序进行修改
  • 让程序更加健壮,不会因为异常就停止

二.异常处理机制的基本语法

2.1 异常的形式

public class Test01 {
   
    public static void main(String[] args) {
   
        //异常在java以类的形式存在
        //通过"异常类"实例化"异常对象"
        NullPointerException nullPointerException =new NullPointerException("空指针异常");
        System.out.println(nullPointerException);//java.lang.NullPointerException: 空指针异常

        ArrayIndexOutOfBoundsException arrayIndexOutOfBoundsException =new ArrayIndexOutOfBoundsException("数组下标越界异常");
        System.out.println(arrayIndexOutOfBoundsException);//java.lang.ArrayIndexOutOfBoundsException: 数组下标越界异常

        //mian方法中调用dosome()方法
        //因为dosome()方法上声明有:throws ClassNotFoundException
        //我们在调用dosom()方法时必须对这种异常进行预先处理
        //如果不处理:编译器报错
        //编译器报错信息:Error:(19, 15) java: 未报告的异常错误java.lang.ClassNotFoundException; 必须对其进行捕获或声明以便抛出
        //dosome();
        dosome();
        //有两种方法:
        //第一种:继续往上抛,因为是main方法调用的,所以在main方法上声明
        //第二种方法:使用try-catch对异常进行捕捉
    }

    //这个方法抛出了一个异常
    /*
     * dosom方法在方法声明的时候使用了 throws ClassNotFoundException
     * 这个代码表示dosome()方法在执行的时候,有可能出现ClassNotFoundException异常
     * 叫做类没找到异常,这个异常的父类是Exception,所以ClassNotFoundException是编译时异常
     * */
    public static void dosome() throws ClassNotFoundException{
   

    }
}

2.2 怎么处理异常

public class Test02 {
   

    //方法一:继续往上抛,谁调用,谁声明,抛给调用者
    //一般不建议在main上方上使用throws,因为这个异常一旦发生了,一定会上抛给JVM,JVM只能终止
    //异常处理机制的作用就是增强程序的健壮性。做到异常发生了,也不影响程序的执行
    //所以建议main方法的异常建议使用try...catch进行捕捉,就不要上抛了
    //public static void main(String[] args) throws ClassNotFoundException{
   
    public static void main(String[] args) {
   

        //第二种:try-catch 捕捉
        //捕捉等于把异常拦下了,异常真正的解决了(调用者是不知道的)
        try {
   
            dosome();
        } catch (ClassNotFoundException e) {
   
            e.printStackTrace();
        }
    }

    public static void dosome() throws ClassNotFoundException{
   

    }
}

2.3 try-catch理解

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.lang.reflect.Field;

public class Test03 {
   
    public static void main(String[] args) {
   
        System.out.println("main begin");

        //这里使用了try - catch 所以main方法不用再抛异常了

        try {
   
            //先执行try,如果有异常就执行 catch
            m1();
        } catch (Exception e) {
   //e是一个变量名
            //这个分支可以使用e应用,e存储了new出来的异常的内存地址
            //catch捕捉后继续的分支
            e.printStackTrace();
        }
        
        //try...catch 把异常抓住后,这里的代码会继续执行
        System.out.println("main over");
    }

    public static void m1() throws Exception {
   
        System.out.println("m1 begin");
        //这里报错是因为m2抛出了异常,m1调用就要对异常进行处理
        m2();
        System.out.println("m1 over");
    }

    //抛下面几个异常可以 Exception 是 IOException的父类  IOException是 FileNotFoundException的父类
    public static void m2() throws Exception {
   
    //public static void m2() throws IOException {
   
    //public static void m2() throws FileNotFoundException {
   
        System.out.println("m2 begin");
        //这里报错是因为m3抛了异常,m2调用,要对异常进行处理
        m3();
        System.out.println("m2 over");
    }

    public static void m3 () throws FileNotFoundException {
   
        System.out.println("m3 begin");
        new
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值