2022Java学习笔记七十四(异常处理:编译时异常的处理机制、异常处理方式、运行时异常处理、自定义异常)
一、编译时异常的处理机制
编译时异常的处理有三种:
1、出现异常直接抛出去给调用者,调用者也继续抛出去
2、出现异常自己捕获处理,不麻烦别人
3、前两者的结合,出现异常直接抛出去给调用者,调用者捕获处理
二、异常处理方式一:throws
1、throws:用在方法上,可以将方法内部出现的异常抛出去给本方法的调用者处理
方式并不好,发送异常的方法自己不处理异常,如果异常最终抛出去给虚拟机将引起程序死亡
格式:
1
2方法 throws 异常1,异常2...{}
throws异常可以抛出很多个,所以不建议使用,建议将上面的异常改为下面的格式
1
2方法throws Exception{}
Exception为最高级的,所以定义一个就可以了
三、异常处理方式二:try-catch
1、监视捕获异常,用在方法内部,可以将方法内部出现的异常直接捕获处理
发送异常的方法自己独立完成异常的处理,程序可以继续往下执行
官方建议格式
1
2
3
4
5
6try{ }catch(Exception e){ e.printStackTrace(); // 打印异常信息 }
Exception可以捕获一切异常类型
四、异常处理方式3:前两者的集合【理论上最好的】
1、方法直接将异常通过throws抛出去给调用者
2、调用者收到异常后直接处理,而不是像方式一一样再抛出去
调用者接收异常使用try-catch处理
五、运行时异常处理
建议在最外层调用处集中捕获异常处理
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28package com.zcl.d3_execption_handle; import java.util.Scanner; public class Demo { public static void main(String[] args) { Scanner s = new Scanner(System.in); while (true){ // 通过try来捕获异常 try { System.out.println("请输入一个合法的价格:"); String s1 = s.nextLine(); // 接收一整行输入内容 // 将输入的内容转换成double类型 Double aDouble = Double.valueOf(s1); // 判断价格是否大于0 if(aDouble > 0){ System.out.println("定价:"+aDouble); }else { System.out.println("请输入一个合法的价格"); } } catch (NumberFormatException e) { System.out.println("请输入没有毛病的价格"); } } } }
六、自定义异常
编译时异常
1、定义一个异常类继承Exception
2、重写构造器
3、在出现异常的地方用throw new 自定义对象抛出
作用:编译时异常是编译阶段就会报错,提醒更加强烈,一定需要处理
编译时异常示例代码
定义一个异常类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package com.zcl.d3_execption_handle; /* 自定义编译时异常 1、继承Exception 2、重写构造器 */ public class AgeIlleagalException extends Exception{ public AgeIlleagalException() { } public AgeIlleagalException(String message) { super(message); } }
调用编译异常示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28package com.zcl.d3_execption_handle; public class Test { public static void main(String[] args) { try { checkAge(-15); } catch (AgeIlleagalException e) { e.printStackTrace(); } } // 定义一个方法 public static void checkAge(int age) throws AgeIlleagalException { // 判断年龄异常 if(age<0||age>120){ // 抛出去一个异常给调用者 /* throw:在方法内部直接创建一个异常对象,并从此抛出异常 throws:用作方法中声明上的,抛处方法内部的异常 */ throw new AgeIlleagalException(age+" is illeagel!"); }else { System.out.println("年龄合法推荐商品"); } } }
异常输出结果
自定义运行时异常
1、定义一个异常类继承RuntimeException
2、重写构造器
3、在出现异常的地方用 throw new 自定义对象抛出
作用:提醒不强烈,编译阶段不报错,运行时才可能出现
异常类示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package com.zcl.d3_execption_handle; /* 自定义编译时异常 1、继承Exception 2、重写构造器 */ public class AgeIlleagalRuntimeException extends RuntimeException{ public AgeIlleagalRuntimeException() { } public AgeIlleagalRuntimeException(String message) { super(message); } }
测试实例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25package com.zcl.d3_execption_handle; public class Test { public static void main(String[] args) { checkAge(-15); } // 定义一个方法 public static void checkAge(int age){ // 判断年龄异常 if(age<0||age>120){ // 抛出去一个异常给调用者 /* throw:在方法内部直接创建一个异常对象,并从此抛出异常 throws:用作方法中声明上的,抛处方法内部的异常 */ // throw new AgeIlleagalException(age+" is illeagel!"); throw new AgeIlleagalRuntimeException(age+" is illeagel!"); }else { System.out.println("年龄合法推荐商品"); } } }
最后
以上就是激动蜜粉最近收集整理的关于2022Java学习笔记七十四(异常处理:编译时异常的处理机制、异常处理方式、运行时异常处理、自定义异常)的全部内容,更多相关2022Java学习笔记七十四(异常处理:编译时异常内容请搜索靠谱客的其他文章。
发表评论 取消回复