异常
概念:异常是程序中的一些错误,会导致程序中断,但并不是所有的错误都是异常,并且错误有时候是可以避免的。
关键词 try catch finally throw throws
try 执行可能产生异常的代码
c![请添加图片描述](https://img-blog.csdnimg.cn/direct/2d66b067a66e43058ec8fbfbafa6731f.jpeg)
atch 捕获异常,如果try的代码没有问题则不执行catch代码
如果try的代码有问题且catch能捕获这个异常则执行catch代码
finally 无论是否发生异常代码都执行
throws 声明异常(用在声明方法时,表示该方法可能要抛出异常) 放置在类后
形式:(修饰符)(方法名)([参数列表])[throws(异常类)]{…}
如: public void function() throws Exception{…}
throw 是语句抛出一个异常
形式:throw(异常对象);
形式:
try{
// 注:System.exit(int) 如果是非0 退出虚拟机
执行可能产生异常的代码
}catct(Exception e){
// 注: Exception是捕获所有异常,如果想要捕获指定异常小于对应的异常进行处理如:
// ArithmeticException是捕获算术异常去如除数为0的算术异常
// 注: e.printStackTrace(); 作用是打印出捕获到的异常原因
捕获异常
}[catch(ArithmeticException e){
// 注:因为异常捕获只捕获第一个 所以捕获能力越强应放置后面用捕获能力小去捕获,因为捕获能力越小越精准
// 注:[ ]内是可选的,可以不写
// 注:System.err.println("内容") 自定义错误提示
捕获异常
throw 是抛异常 位于方法体内,可 做单独语句使用
}finally{
无论是否发生异常代码都执行
}
]
自定义异常
自定义一个编译期异常: 自定义类 并继承于java.lang.Exception。
自定义一个运行时期的异常类:自定义类 并继承java.lang.RuntimeException。
//定义构造方法
//对性别输入不是“男”或者“女” 就抛异常并提示
public class GenderException extends Exception{
//定义构造方法
public GenderException() {
}
public GenderException(String message) {
super(message);
}
}
//模拟输入,并提供方法用于判断性别
public class Student {
private String name;
private String gender;
public Student() {
}
public Student(String name, String gender) {
this.name = name;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) throws GenderException {
if(gender.equals("男")||gender.equals("女")){
this.gender = gender;
}else {
//抛出JDK中已经存在的异常类型
//throw new Exception("性别只能是男或者女");
//抛出自己定义的异常类型
throw new GenderException("性别只能是男或者女");
}
}
}
//测试
public class Test {
public static void main(String[] args) {
Student student = new Student();
//给属性赋值
student.setName("张三");
//调用一个可能产生异常的方法,要么你自行处理这个异常,要么继续向上抛出
try {
student.setGender("a");
} catch (GenderException e) {
throw new RuntimeException(e);
}
}
}