Java异常处理Exceprion

​​​​​​​

目录

1、异常

1.1 现实生活的病

1.2 java异常体系图

1.3 Throwable类

1.4 程序中的异常处理

1.4.1 自行处理

1.4.2 抛出处理

1.4.3 自定义异常

1.5 运行时异常和非运行时异常

1.5.1 RuntimeException

1.5.2 非运行时异常(受检异常)

1.6 finally


1、异常

        程序运行会出现异常的状况,异常状况的出现会改变正常的程序流程.很多事情可能导致程序异常,例如:硬件故障/资源耗尽,和程序bug都会导致异常 .当Java中出现异常时,异常处理会发挥作用,它将程序执行转交给适当的异常处理程序.

1.1 现实生活的病

1:现实生活中万物在发展和变化会出现各种各样不正常的现象。

      1:例如:人的成长过程中会生病。

          |——病

             |——不可治愈(癌症晚期)

             |——可治愈

                |——小病自行解决(上火,牙痛)

                |——去医院(感冒,发烧)

1.2 java异常体系图

现实生活中的很多病况从面向对象的角度考虑也是一类事物,可以定义为类。     

java中可以通过类对这一类不正常的现象进行描述,并封装为对象。

      1:java的异常体系包含在java.lang这个包默认不需要导入。

      2:java异常体系

          |——Throwable  (实现类描述java的错误和异常)

             |——Error (错误)

             |——Exceprion (异常)

                |——RuntimeException (运行时异常)

                |——非运行时异常

      3:异常体系图的对应

1:Exception in thread "main"

java.lang.NoClassDefFoundError: Demo6 错误信息

          2:Exception in thread "main" java.lang.ArithmeticException: / by zero

                   at Demo3.main(Demo3.java:6)  异常信息,属于运行时异常。

错误:

Exception in thread "main" java.lang.NoClassDefFoundError: Demo6

Caused by: java.lang.ClassNotFoundException: Demo6

        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

        at java.security.AccessController.doPrivileged(Native Method)

        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)

        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

Could not find the main class: Demo6.  Program will exit.

运行时异常除0异常

Exception in thread "main" java.lang.ArithmeticException: / by zero

        at Demo5.main(Demo5.java:24)

运行时异常空指针异常

Exception in thread "main" java.lang.NullPointerException

        at Demo5.main(Demo5.java:26) 

1.3 Throwable类

      1:开发者可以通过异常类的名字区分类是异常还是错误

          1:后缀为Error为错误,代码无法处理

          2:后缀为Exception,需要处理

             1:在程序中程序员处理的是Exception

      2:Throwable类可以直接创建对象。

          1:查看api文档中的Throwable 类的构造。

             1:Throwable(String message) 该构造有形参,可以初始化成员变量。

                1:message是异常的信息,就像生病的病态信息一样。

          2:创建Throwable类的对象。

             1:调用该类的方法。

                1:toString() 输出该异常的类名

2:getMessage() 输出异常的信息,需要通过构造方法传入异常信息(例如病态信息)

                   1:如果不传入信息,默认是null

                3:printStackTrace() 打印栈信息

1:人生病:流鼻涕,感冒,呼吸道感染,肺炎。。。最后体现的是肺炎。

                   2:医生要处理需要获知这些信息。从外到里处理。最后找病源

/*

 Throwable

 printStackTrace() 打印栈信息

 肺炎

 上呼吸道感染

 发烧

 流鼻涕感冒

 小感冒

 */

class Demo6 {

    public static void main(String[] args) {

       // Throwable able=new Throwable();

       Throwable able = new Throwable("想吐。。。");

       System.out.println(able.toString()); // 输出该异常的类名

       System.out.println(able.getMessage()); // 输出异常的信息

       able.printStackTrace(); // 打印栈信息

    }

}

4:Exceprion类继承了Throwable类,根据继承特性也具备了这些方法。

             2:代码中出现异常情况,我们该如何处理

1.4 程序中的异常处理

1:案例实现2个整数的除法运算功能

   1:当除数是非0,除法运算完毕,程序继续执行。

1:当除数是0,程序发生异常,并且除法运算之后的代码停止运行。因为程序发生异常需要进行处理。

class Demo7 {

    public static void main(String[] args) {

       div(2, 0);

       System.out.println("over");

    }

    public static void div(int x, int y) {

        //该行代码的y值可能是0,程序会出现异常并停止

       System.out.println(x / y);

       System.out.println("除法运算");

    }

}

//ArithmeticException

  

        2:出现异常如何处理

1.4.1 自行处理

1:try{//可能发生异常的代码 }catch(异常类 变量名){//处理}

2:案例除法运算的异常处理            

class Demo7 {

    public static void main(String[] args) {

       div(2, 0);

       System.out.println("over");

    }

    public static void div(int x, int y) {

       try {

           System.out.println(x / y); // 可能出现异常的语句,放入try中。

       } catch (ArithmeticException e) { // 进行异常匹配,

             //异常信息

           System.out.println(e.toString());

           System.out.println(e.getMessage());

      e.printStackTrace();

           System.out.println("除数不能为0");

       }

       System.out.println("除法运算");

    }

}

3:如果没有进行try catch处理,出现异常程序就停止。进行处理后,程序会继续执行。

   2:多个异常

      1:案例print方法,形参中增加数组。

2:在print方法中操作数组会发生新的异常

(ArrayIndexOutOfBoundsException,NullPointerException),如何处理?

1:使用将可能发生异常的代码放入try语句中,添加多个catch语句即可。

          2:可以处理多种异常,但是同时只能处理一种异常。

             1:try中除0异常和数组角标越界同时出现,只会处理一种。

public class Demo8 {

    public static void main(String[] args) {

       System.out.println();

       int[] arr = { 1, 2 };

       arr = null;

       // print (1, 0, arr);

       print (1, 2, arr);

       System.out.println("over");

    }

    public static void print(

你可能感兴趣的:(Java基础,java,开发语言,异常)