异常
第一种处理方式
捕获异常,将异常信息打印,并继续执行剩余代码
try{
可能会出现异常的代码
}catch(异常的类名 变量名){
打印异常信息
}catch(异常的类名 变量名){
...这些catch中的异常类中,如果没有什么直接的继承关系,先后是没有顺序的
但如果有继承关系,父类需要放在子类后面,父类会将子类的异常捕获到,导致没有显示具体的异常信息而是显示父类的信息
}finally{
无论是否捕获到异常,finally中的内容都会执行
}
Throwable
在catch中调用
方法
String getMessage() 获取异常的简短信息 只有异常的信息 例:"文件没找到"
String toString() 获取异常的简短信息 有异常的类名 和异常的信息 java.io.FileNotFoundException: 文件没找到默认: void printStackTrace() 直接打印异常的详细信息 异常的类名 异常的信息 异常的位置等等
第二种异常的处理方式
throw 异常对象
声明此处可能会有异常
throw new FileNotFoundException("文件没找到");
调用者 throws 异常的类名
public static void main(String[] args)
throws FileNotFoundException,ClassNotFoundException {
声明后需要将异常抛出,抛给调用者,如果不try{}catch(){} 会一直抛到jvm虚拟机,虚拟机直接中断进程,报异常.
编译异常与运行时异常
Exception: 编译时异常 编译时就报错 必须处理 要么使用throws 要么使用try catch
RuntimeException:运行时异常 编译时不报错 运行时才报错 可以处理 也可以不处理 推荐不处理 因为一般出现运行时异常
都是代码写的有问题 需要改代码
自定义异常
先定一个普通类,在set方法中使用异常,对使用set方法进行一些限制
public class Person {
private int age ;
public int getAge() {
return age;
}
public void setAge(int age) throws NoAgeException {
if(age>=200 || age<0){
throw new NoAgeException("年龄有问题(0-200):"+age);//异常的声明
}
this.age = age;
}
}
然后定义异常
/*
自定义异常
1. 定义一个异常继承Exception 或者 RuntimeException
2.定义一个空参构造 定义一个带参构造
*/
public class NoAgeException extends Exception{
public NoAgeException(){}
public NoAgeException(String message){
// System.out.println(message);
super(message);
}
}
测试一下
public class Test {
public static void main(String[] args) throws NoAgeException {
Person p = new Person();
// p.age = -100;
p.setAge(-10);//小于0,编译时异常,将其抛出即可,运行后,控制台爆出异常
}
}
本文介绍了两种异常处理方式:捕获并打印异常信息继续执行,及声明并抛出异常。探讨了编译异常与运行时异常的区别,并通过实例展示了如何创建及使用自定义异常。

被折叠的 条评论
为什么被折叠?



