Java异常处理总结

1.java中常见的异常有大概四种:1.1.算数异常 java.lang.ArithmeticException

[Java] 纯文本查看 复制代码
1
2
3
int a = 0;
        int b = 10;
        System.out.println(b/a);

1.2.空指针异常 java.lang.NullPointerException

[Java] 纯文本查看 复制代码
1
2
String a = null;
    a.charAt(3);


1.3.类型转换异常 java.lang.ClassCastException

[Java] 纯文本查看 复制代码
1
2
3
Object o = new Integer(1);
    String s = (String)o;
    System.out.println(s);


1.4.数组下标越界 java.lang.ArrayIndexOutOfBoundsException

[Java] 纯文本查看 复制代码
1
2
String[] s = new String[2];
    System.out.println(s[5]);


2.对异常的处理:
2.1基本语句:
使用 try{
可能会出现异常的代码}
catch(ParseException e){
捕获执行的代码}
finally{
无论是否发生异常都执行的代码}
注意:
没有使用try catch的时候程序出现异常,后续程序不能执行;使用try catch以后,异常被封装在try catch里,后续程序仍能执行。

附上一段代码以便验证

[Java] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
9
try{
        int a = 0;
        int b = 10;
        int c = b/a;
        System.out.println("执行成功");
    }catch(Exception e){
        System.out.println("出现异常");
    }
        System.out.println("------");



2.2try{}catch{}的机制是一经发现异常就转入catch

代码举例:

 

[Java] 纯文本查看 复制代码
1
2
3
4
5
6
<font style="color:rgb(77, 77, 77)"><font face="&quot"><font style="font-size:16px">//出现异常就转入catch
try{
        throw new Exception();
    }catch(Exception e){
        System.out.println("xxxx");
    }</font></font></font>

 

2.3多分支异常:

附上代码:

 

[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
<font style="color:rgb(77, 77, 77)"><font face="&quot"><font style="font-size:16px">String st = "2019年12-01";
    SimpleDateFormat d = new SimpleDateFormat("yyyy-MM-dd");
try{
    Date dt = d.parse(st);  //解析异常
     
    String s = null;//空指针异常
    s.charAt(1);
     
    int a = 0;
    int b = 10;
    int c = b/a;//算术异常
     
}catch(ParseException e){
    System.out.println("解析异常");
}catch(NullPointerException e1){
    System.out.println("空指针异常");
}catch(ArithmeticException e2){
     System.out.println("算术异常");
}finally{
    System.out.println("无论如何都会执行");
}
</font></font></font>

 

3.关于throw与自定义异常3.1关于throw的一些看法Throws的含义是抛出异常自己不处理,谁调用谁处理;不推荐把异常扔给主方法

Cat类:

 

[Java] 纯文本查看 复制代码
1
2
3
4
5
6
<font style="color:rgb(77, 77, 77)"><font face="&quot"><font style="font-size:16px">public class Cat {
public void MiaoWu() throws ParseException{
    Dog a = new Dog();
    a.bit();
}
}</font></font></font>

 

Dog类:

 

[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
public class Dog {
 
public void bit() throws ParseException{
 
    String st = "从那个坏人身上撕了一块肉";
 
    SimpleDateFormat d = new SimpleDateFormat("yyyy-MM-dd");
 
    Date dt = d.parse(st);
 
    System.out.println("汪汪汪");
 
}
 
}

 

ThrowsTest测试类:

 

[AppleScript] 纯文本查看 复制代码
1
2
3
4
5
public static void main(String[] args) throws ParseException {
    // TODO Auto-generated method stub
    Dog d = new Dog();
    d.bit();
}

 

由于在主方法也进行了抛出,故出现了以下错误。

由于在主方法也进行了抛出,故出现了以下错误。

如果此时改成try{}catch处理异常会如何呢?下面我们来验证

 

[AppleScript] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
9
public static void main(String[] args){
    // TODO Auto-generated method stub
    try{
    Dog d = new Dog();
    d.bit();
    }catch(ParseException e){
        System.out.println("出现解析异常");
    }
}

 

出现解析异常

3.2自定义异常

自定义一个异常:

 

[Java] 纯文本查看 复制代码
1
2
<font style="color:rgb(77, 77, 77)"><font face="&quot"><font style="font-size:16px">public class LuckyException extends Exception{
}</font></font></font>

 

Hello类:

 

[AppleScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
<font style="color:rgb(77, 77, 77)"><font face="&quot"><font style="font-size:16px">public class Hello {
public void hi() throws LuckyException{
    // TODO Auto-generated method stub
    if(Math.random()<0.1)    //百分之九十是异常的,百分之十输出Hello World!
    System.out.println("Hello World!");
    else
    throw new LuckyException();
}
}
</font></font></font>

 

Test测试类:

 

[Java] 纯文本查看 复制代码
1
2
3
4
<font style="color:rgb(77, 77, 77)"><font face="&quot"><font style="font-size:16px">public static void main(String[] args) throws LuckyException {
Hello h = new Hello();
h.hi();
}</font></font></font>
posted @ 2020-03-03 11:17  幽暗森林之猪大屁  阅读(129)  评论(0)    收藏  举报