1 java异常的分类
2 java处理异常的两种方式
2.1 try…catch…finally
语法:
使用try结构扩展可能出错的代码块, 紧接try部分必须跟随catch部分或finally部分
try{
可能出错的代码块…..
}catch(jdk定义错误类型或自定义错误类型 变量名){
处理语句
}finally{
}
finally块必须与try块连用,finally块作用无论try中代码是否出错,finally总会执行
两种变形:
第一种:try..catch...finally允许嵌套;
第二种:多重catch块,catch中的错误类型,必须错误范围从小到大;
练习:
接收用户输入的两个整数,要求即使用户输入除数是0,我们进程也不终止;
总结:
int test1(){
int res=0;
try{
return res;
}finally{
res=3;
}
}
//调用test1()方法后返回0,原因return语句直接返回当前res为0式的值;
int test2(){
int res=0;
try{
res=3;
return res;
}finally{
res=6;
return res;
}
}
//调用test2()方法返回6,原因finally最终执行模板,所有finally中return语句最后执行;
2.2 java异常处理的第二种方式
throw, throws
throw表示强制抛出异常,用于违反业务规定,手工抛出异常;
throws用于在方法上声明异常,当调用该方法时,必须处理异常;
语法:
throw new 异常类(“错误描述”);
throws语法
在方法声明最后使用throws语句声明该方法包含某个异常;
注意:
throws 中的异常类型分为非检查异常以RuntimeException或其子类为主,这种异常方法被调用,可以不处理方法中声明的异常;
除了RuntimException异常类型外其他,throws后面声明的异常为检查异常,这些异常方法被调用必须处理方法中声明的异常;
例如:
import java.io.IOException;
public class Demo4 {
int age;
//throws用于在方法上声明异常,当调用该方法时,必须处理异常;
public void setAge(int age)throws IOException {
if(age<1){
//throw表示强制抛出异常,用于违反业务规定,手工抛出异常;
throw new IOException("年龄输入错误");
}
this.age = age;
}
public static void main(String[] args) {
Demo4 m4=new Demo4();
try {
// //执行方法
m4.setAge(-8);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("over...");
}
/* 可以在调用时,使用throws再次抛出异常
public static void main(String[] args)throws Exception{
Demo4 m4=new Demo4();
//执行方法
m4.setAge(-8);
System.out.println("over...");
}*/
}
3 自定义异常
作用,用于企业中将错误信息进行相应的格式转换;
步骤:
① 自定义一个继承异常的自定义类;
② 在构造方法中输出自定义格式的错误信息;
③ 在对应的方法中使用throw和throws语句使用自定义异常类;
例如:
//① 自定义一个继承异常的自定义类;
class MyExp extends Exception{
//② 在构造方法中输出自定义格式的错误信息;
public MyExp(String msg){
//通过父类处理自定义异常信息
super(msg);
}
}
//③ 在对应的方法中使用throw和throws语句使用自定义异常类;
public class Demo5 {
public static void say(int x)throws MyExp{
if(x<10)
throw new MyExp("你咋不带吗?");
}
public static void main(String[] args) {
try {
say(5);
} catch (MyExp myExp) {
myExp.printStackTrace();
}
}
}