exception异常

Exception

1.简介

  1. 什么是异常,java提供异常机制有什么用?
    当程序执行过程中发生了不正常的情况,而这种不正常的情况叫做:异常。

    java语言是很完善的,提供了异常处理机制,当程序执行过程中出现了不正常的情况,java把异常信息打印输出到控制台,供程序员参考,程序员看到异常信息后,可以对程序进行修改,让程序看起来更加的健壮。

  2. 如:

    public class ExceptionTest01 {
         
        public static void main(String[] args) {
         
            int a=10;
            int b=0;
            //实际上JVM在执行到此处的时候,会new一个异常对象:new ArithmeticException("/by zero")
            //并且JVM将new的异常对象抛出,打印输出到控制台。
            int c=a/b;
            System.out.println(c);
        }
    }
    

    以上程序出现了:

    Exception in thread “main” java.lang.ArithmeticException: / by zero
    at com.ma.javase.exception.ExceptionTest01.main(ExceptionTest01.java:9)

    这个信息我们称为:异常信息。这个信息是JVM打印出来的。

  3. java语言中异常是以什么形式存在的?

    异常在java中是以类的形式存在,每一个异常类都可以创建异常对象。

    如:

    public class ExceptionTest02 {
         
        public static void main(String[] args) {
         
            //通过异常类实例化异常对象
            NumberFormatException nfe=new NumberFormatException("数字格式化异常");
            System.out.println(nfe);//java.lang.NumberFormatException: 数字格式化异常
    
            //再通过异常类创建对象
            NullPointerException npe=new NullPointerException("空指针异常");
            System.out.println(npe);//java.lang.NullPointerException: 空指针异常
        }
    }
    
    

2. UML

  1. java 的异常处理机制:
  • 异常在java中以类和对象的形式存在。那么异常的继承结构是怎么样的?

  • 我们可以使用UML图来描述一下继承结构。

  • 画UML图有很多工具,例如:Rational Rose(收费的),startURL等…

  1. 什么是UML?有什么用?

    • UML是一种统一建模语言。

    • UML不是只有java中使用。只要是面向对象的编程语言,都有UML。

    • 一般画UML图的都是软件架构师或者是系统分析师。这些级别的人员使用的。

    • 在UML图中可以描述类和类之间的关系,程序执行的流程,对象状态等。

3.编译时异常和运行时异常

  1. 编译时异常:

    所有Exception的直接子类,都叫做编译时异常。编译时异常是表示必须在编写程序的时候预先对这种异常进行处理,如果不处理编译器会报错。编译时异常又称为受检异常。

  2. 运行时异常:

    运行时异常在编写程序阶段,你可以选择处理,也可以不处理。

4.异常处理的两种方式

  1. java语言中对异常的处理包括两种方式:

    第一种方式:在方法声明的位置上,使用thows关键字 抛给上一级。

    第二种方式:使用try…catch语句进行异常的捕捉。

  2. 两种方式如何选择:
    如果希望调用者来处理,选择throws上报。其他情况选择捕捉的方式。

    如:

    public class ExceptionTest04 {
         
        //第一种处理方式:在方法声明位置上继续使用throws上抛
       // public static void main(String[] args) throws ClassNotFoundException {
         
            //main方法中调用doSome();
            //因为doSome()方法声明位置上有:throws ClassNotFoundException
            //我们在调用doSome()方法的时候必须对这种异常进行预先的处理。
            //如果不处理,编译器就报错
            //编译器报错:
         //   doSome();
        //}
        
        
        //第二种处理方式:try...catch捕获异常
          public static void main(String[] args) {
         
            //main方法中调用doSome();
            //因为doSome()方法声明位置上有:throws ClassNotFoundException
            //我们在调用doSome()方法的时候必须对这种异常进行预先的处理。
            //如果不处理,编译器就报错
            //编译器报错:
            try {
         
                doSome();
            } catch (ClassNotFoundException e) {
         
                e.printStackTrace();
            }
        }
    
    
        /**
         * doSome方法在方法声明的位置上:throws ClassNotFoundException
         * 这个代码表示doSome()方法在执行过程中,有可能会出现ClassNotFoundException异常。
         * 叫类没找到异常。这个异常直接父类是:Exception 所有ClassNotFoundException属于编译时异常
         * @throws ClassCastException
         */
        public static  void doSome() throws ClassNotFoundException{
         
            System.out.println("doSome");
        }
    }
    
  3. 异常捕捉和上报的联合使用:

    /*
    * 处理异常的第一种方式:在方法声明的位置上使用throws关键字抛出,谁调用我这个方法,我就抛给谁。
    * 抛给调用者来处理
    * throws后面可以写多个异常:用逗号隔开
    * */
    public class ExceptionTest05 {
         
        //一般不建议在main方法上使用throws 因为这个异常一旦发生,JVM只有终止
        //异常处理机制的作用就是增强程序的健壮性。怎么能做到异常发生了,也不影响程序的执行。
        //所以一般main方法上的异常建议使用try..catch进行捕捉
        public static void main(String[] args) {
         
            System.out.println("main begin");
            try {
         
                //try尝试
                m1();
            } catch (FileNotFoundException e) {
         
                //这个分支中可以使用e引用,e引用保存的内存地址是那个new出来异常对象的内存地址
                //catch是捕捉异常后走的分支
                System.out.println("文件不存在,可能
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值