指的是程序在执行过程中,出现的非正常的情况,最终会导致jvm的非正常停止
在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象,Java处理异常的方式是中断处理
异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行。
异常体系异常分类
一种是运行期异常 运行期异常 我们无需处理
一种是捕捉异常 thow关键字我们可以在指定的方法里面抛出指定的异常
Java处理异常的五个关键字:try-catch、finally、throw、throws Objects非空判断_requireNonNulpackage cn.itcast.day12.demo04;
import java.util.Objects;
public class Demo02 {
public static void main(String[] args) {
method(null);
}
public static void method(Object obj){
//对传递过来的参数进行一个合法性的校验
//Exception in thread "main" java.lang.NullPointerException
Objects.requireNonNull(obj,"传递的对象的值是null"); // Exception in thread "main" java.lang.NullPointerException: 传递的对象的值是null
}
}
_throws关键字_异常处理的第一种方式
throws 和 try-catch的区别就是
throws发生异常的时候中断程序后续代码不在执行
而try-catch对异常进行捕获,捕获到Catch里面,后续代码继续执行
Throwable类中3个异常处理的方法
package cn.itcast.day12.demo04;
import java.io.FileNotFoundException;
public class Demo03 {
public static void main(String[] args) {
try {
readfile("c:\a.tx");
} catch (FileNotFoundException e) {
// System.out.println("e = " + e.getMessage());// 传递的文件路径不是c:a.txt
// System.out.println(e.toString());// java.io.FileNotFoundException: 传递的文件路径不是c:a.txt
e.printStackTrace();
}
System.out.println(" 后续代码 ");
}
public static void readfile(String fileName) throws FileNotFoundException {
if (!fileName.equals("c:\a.txt")){
throw new FileNotFoundException("传递的文件路径不是c:\a.txt");
}
System.out.println("路径没有问题,继续执行");
}
}
finally代码块
package cn.itcast.day12.demo04;
public class DDemo06 {
public static void main(String[] args) {
int a = getA();
System.out.println("a = " + a);// a = 200
}
private static int getA() {
int a = 110;
try {
return a;
} catch (Exception e) {
e.printStackTrace();
} finally {
return 200;
}
}
}
子父类异常
package cn.itcast.day12.demo04;
public class Fu {
public void show1() throws NullPointerException,ClassCastException{};
public void show2() throws IndexOutOfBoundsException{};
public void show3() throws IndexOutOfBoundsException{};
public void show4() {};
public void show5(){};
class Zi extends Fu{
//子类重写父类方法时,抛出和父类相同的异常
public void show1() throws NullPointerException,ClassCastException{};
//子类重写父类方法时,抛出父类异常的子类
public void show2() throws ArrayIndexOutOfBoundsException{};
//子类重写父类方法时,不抛出异常
public void show3() throws IndexOutOfBoundsException{};
//父类该方法没有抛出异常 子类不能异常
//父类该方法没有抛出异常 子类只能捕获处理
public void show5(){
throw new NullPointerException("声明异常");
}
}
}
自定义异常类
package cn.itcast.day12.demo04;
public class RegisterException extends Exception{
// 添加一个空参数的构造方法
public RegisterException(){
super();
};
// 添加一个带异常信息的构造方法
//查看源码发现 所以的异常类都会有一个带异常信息的构造方法,方法内部会调用父类带异常信息的构造方法,让父类来处理这个异常信息
public RegisterException(String messages){
super(messages);
};
}



