概述
2022Java学习笔记七十四(异常处理:编译时异常的处理机制、异常处理方式、运行时异常处理、自定义异常)
一、编译时异常的处理机制
编译时异常的处理有三种:
1、出现异常直接抛出去给调用者,调用者也继续抛出去
2、出现异常自己捕获处理,不麻烦别人
3、前两者的结合,出现异常直接抛出去给调用者,调用者捕获处理
二、异常处理方式一:throws
1、throws:用在方法上,可以将方法内部出现的异常抛出去给本方法的调用者处理
方式并不好,发送异常的方法自己不处理异常,如果异常最终抛出去给虚拟机将引起程序死亡
格式:
方法 throws 异常1,异常2...{}
throws异常可以抛出很多个,所以不建议使用,建议将上面的异常改为下面的格式
方法throws Exception{}
Exception为最高级的,所以定义一个就可以了
三、异常处理方式二:try-catch
1、监视捕获异常,用在方法内部,可以将方法内部出现的异常直接捕获处理
发送异常的方法自己独立完成异常的处理,程序可以继续往下执行
官方建议格式
try{
}catch(Exception e){
e.printStackTrace(); // 打印异常信息
}
Exception可以捕获一切异常类型
四、异常处理方式3:前两者的集合【理论上最好的】
1、方法直接将异常通过throws抛出去给调用者
2、调用者收到异常后直接处理,而不是像方式一一样再抛出去
调用者接收异常使用try-catch处理
五、运行时异常处理
建议在最外层调用处集中捕获异常处理
示例代码
package 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 自定义对象抛出
作用:编译时异常是编译阶段就会报错,提醒更加强烈,一定需要处理
编译时异常示例代码
定义一个异常类
package com.zcl.d3_execption_handle;
/*
自定义编译时异常
1、继承Exception
2、重写构造器
*/
public class AgeIlleagalException extends Exception{
public AgeIlleagalException() {
}
public AgeIlleagalException(String message) {
super(message);
}
}
调用编译异常示例代码
package 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 自定义对象抛出
作用:提醒不强烈,编译阶段不报错,运行时才可能出现
异常类示例代码
package com.zcl.d3_execption_handle;
/*
自定义编译时异常
1、继承Exception
2、重写构造器
*/
public class AgeIlleagalRuntimeException extends RuntimeException{
public AgeIlleagalRuntimeException() {
}
public AgeIlleagalRuntimeException(String message) {
super(message);
}
}
测试实例代码
package 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学习笔记七十四(异常处理:编译时异常的处理机制、异常处理方式、运行时异常处理、自定义异常)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复