java常见异常

一、异常概述
Exception 类是 Throwable 类的子类。它是因编程错误或由于偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。
除了 Exception 类外,Throwable 还有一个子类 Error 。
Error 是指运行时环境发生的错误,Java 虚拟机无法解决的严重问题 。
例如,JVM 内存溢出。一般地,程序不会从错误中恢复, 一般不编写针对性
的代码进行处理。
异常类有两个主要的子类:IOException 类和 RuntimeException 类。
java常见异常
二、编译时异常
编译时异常也称为受检异常

[Java] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

package com.zxy.java.exception;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileReader;

import java.io.IOException;

 

/**

 * @Description: FileNotFoundException

 * @Author: zhangxy

 * @Date: Created in 2019/11/20

 * @Modified By:

 */

public class ExceptionTest1 {

    public static void main(String[] args) {

        FileReader fileReader = null;

        try {

            // 实例化File对象

            File file = new File("test.txt");

            // 实例化FileReader流,用于数据的读入

            fileReader = new FileReader(file);

            // 读入数据

            char[] chars = new char[5];

            int length;

            while ((length = fileReader.read(chars)) != -1) {

                String s = new String(chars, 0, length);

                System.out.println(s);

            }

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            // 不再使用的时候,关闭流资源

            if (fileReader != null) {

                try {

                    fileReader.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }

}


测试结果:

[Java] 纯文本查看 复制代码

?

1

2

3

4

5

6

java.io.FileNotFoundException: test.txt (系统找不到指定的文件。)

    at java.io.FileInputStream.open0(Native Method)

    at java.io.FileInputStream.open(FileInputStream.java:195)

    at java.io.FileInputStream.<init>(FileInputStream.java:138)

    at java.io.FileReader.<init>(FileReader.java:72)

    at com.zxy.java.exception.ExceptionTest1.main(ExceptionTest1.java:21)


三、运行时异常
运行时异常也被称作非受检异常
1.空指针异常

[Java] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

package com.zxy.java.exception;

 

/**

 * @Description: NullPointerException

 * @Author: zhangxy

 * @Date: Created in 2019/11/20

 * @Modified By:

 */

public class ExceptionTest2 {

    public static void main(String[] args) {

        String s = "HelloWorld";

        s = null;

        System.out.println(s.charAt(1));

    }

}


测试结果:

[Java] 纯文本查看 复制代码

?

1

2

Exception in thread "main" java.lang.NullPointerException

    at com.zxy.java.exception.ExceptionTest2.main(ExceptionTest2.java:13)


2. 数组下标越界异常

[Java] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

package com.zxy.java.exception;

 

/**

 * @Description: ArrayIndexOutOfBoundsException

 * @Author: zhangxy

 * @Date: Created in 2019/11/20

 * @Modified By:

 */

public class ExceptionTest3 {

    public static void main(String[] args) {

       int[] array = new int[5];

        System.out.println(array[6]);

    }

}


测试结果:

[Java] 纯文本查看 复制代码

?

1

2

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6

    at com.zxy.java.exception.ExceptionTest3.main(ExceptionTest3.java:12)


3. 数字格式异常

[Java] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

package com.zxy.java.exception;

 

/**

 * @Description: NumberFormatException

 * @Author: zhangxy

 * @Date: Created in 2019/11/20

 * @Modified By:

 */

public class ExceptionTest4 {

    public static void main(String[] args) {

        String str = "111";

        str = "abc";

        int num = Integer.parseInt(str);

        System.out.println(num);

    }

}


测试结果:

[Java] 纯文本查看 复制代码

?

1

2

3

4

5

Exception in thread "main" java.lang.NumberFormatException: For input string: "abc"

    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)

    at java.lang.Integer.parseInt(Integer.java:580)

    at java.lang.Integer.parseInt(Integer.java:615)

    at com.zxy.java.exception.ExceptionTest4.main(ExceptionTest4.java:13)


4. 类型转换异常

[Java] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

package com.zxy.java.exception;

 

import java.util.Date;

 

/**

 * @Description: ClassCastException

 * @Author: zhangxy

 * @Date: Created in 2019/11/20

 * @Modified By:

 */

public class ExceptionTest5 {

    public static void main(String[] args) {

        Object obj = new Date();

        String str = (String) obj;

    }

}


测试结果:

[Java] 纯文本查看 复制代码

?

1

2

Exception in thread "main" java.lang.ClassCastException: java.util.Date cannot be cast to java.lang.String

    at com.zxy.java.exception.ExceptionTest5.main(ExceptionTest5.java:14)


5. 算术异常

[Java] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

package com.zxy.java.exception;

 

import java.util.Date;

 

/**

 * @Description: ArithmeticException

 * @Author: zhangxy

 * @Date: Created in 2019/11/20

 * @Modified By:

 */

public class ExceptionTest6 {

    public static void main(String[] args) {

        int m = 8;

        int n = 0;

        System.out.println(m / n);

    }

}


测试结果:

[Java] 纯文本查看 复制代码

?

1

2

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

    at com.zxy.java.exception.ExceptionTest6.main(ExceptionTest6.java:15)


6. 输入不匹配异常

[Java] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

package com.zxy.java.exception;

 

import java.util.Scanner;

 

/**

 * @Description: InputMismatchException

 * @Author: zhangxy

 * @Date: Created in 2019/11/20

 * @Modified By:

 */

public class ExceptionTest7 {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int wage = scanner.nextInt();

        System.out.println(wage);

    }

}


测试结果:

[Java] 纯文本查看 复制代码

?

1

2

3

4

5

6

7

aaa

Exception in thread "main" java.util.InputMismatchException

    at java.util.Scanner.throwFor(Scanner.java:864)

    at java.util.Scanner.next(Scanner.java:1485)

    at java.util.Scanner.nextInt(Scanner.java:2117)

    at java.util.Scanner.nextInt(Scanner.java:2076)

    at com.zxy.java.exception.ExceptionTest7.main(ExceptionTest7.java:14)

 

更多java学习资料可关注:itheimaGZ获取