Exception
/*
导致程序中断的错误。
Error:JVM出错,内存不足等。
不能处理,程序无法恢复。
Exception:代码逻辑错误,程序不严谨。
可以处理,程序还能继续运行。
运行时异常(unchecked):编译器不要求我们处理的错误。
NullPointerException,ArrayIndexOutOfBoundsException
都是继承自RuntimeException
异常(checked):编译器要求我们必须处理的错误。
继承自Exception
处理异常的两种方式
1。使用try-catch-finally语法处理。
这是自己处理的方式。
2。使用throw和throws关键字交给方法的调用者进行处理。
交给别人处理。
抛出(throw)异常,当我们程序运行产生异常,会自动生成异常对象,提交给JVM。
捕获(catch)异常,JVM收到异常对象后,自动寻找能够处理这个异常的代码并把异常对象交给他。
*/
// 自定义异常,继承自 Exception
// 并不是所有会导致程序崩溃的错误叫做异常,
// 所有不符合预期效果的现象都可以叫做异常
public class NumberException extends Exception {
public NumberException() {
super();
// TODO Auto-generated constructor stub
}
public NumberException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
// TODO Auto-generated constructor stub
}
public NumberException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
}
public NumberException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
public NumberException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
}
}
public void tryCatchTest(int a, int b) {
// 使用 try-catch 捕获和处理异常
try {
// 可能产生异常的代码
// 从上往下执行,直到产生异常,后续的代码不在执行
System.out.println("准备开始除法计算");
int c = a / b;
System.out.println("除法计算正常执行");
String text = null;
// 如果产生多个异常,就需要多个 catch 分别处理
int lenght = text.length();
}catch (ArithmeticException e) {
// try 中代码产生异常以后,对异常进行处理
// e 就是捕获到的异常对象
// 只要捕获到异常,程序就不会终止,继续向下执行
// try 中没有产生异常,catch 中的代码就不会执行
System.out.println("程序产生异常了");
// 通常不适用 Exception,而是使用具体的异常类型,让异常处理更具有针对性
// 获取异常的描述信息 e.getMessage()
System.out.println(e.getMessage());
// 打印异常产生的堆栈信息,方法调用过程,错误代码位置
e.printStackTrace();
}catch (NullPointerException e) {
// catch 可以有多个,每个 catch 只处理一种异常
System.out.println("产生了空指针异常");
}finally {
// finally 是可选的,可写可不写
// 无论是 try 还是 catch 执行完后都会执行这里的代码
System.out.println("finally 执行了");
}
}
// 声明方法的时候,可以通过 throws 说明当前方法可能产生的异常
// 方法抛出异常,方法内部产生的异常不处理,抛调用方法谁来处理
public void throwTest() throws ArithmeticException {
int a = 10;
int b = 0;
int c = a / b;
}
public void addNumber(int a) throws NumberException {
// 输入的数字小于 10
if (a > 10) {
// 运行时异常由系统抛出
// 自定义异常都是继承在 Exception 的,
// 需要使用 throw 关键字手动抛出
// 告诉方法调用者,方法执行的过程各种产生错误,改如何处理
throw new NumberException("你输入的数字大于 10");
}
int b = a * 10;
}