1. 异常
2. throws声明异常
在方法定义处 声明 要捕获的异常
使用throws关键字 加 异常名
public static void method() throws NullPointerException{
int[] arr =null;
System.out.println(arr[2]);
}
运行时异常可以省略,但编译时异常不能省略声明,否则不能正常执行
3. throw抛出异常
使用 thorw new 关键字 加 异常 可以在代码块中直接抛出一个异常
System.out.println("接下来要new一个异常");
throw new NullPointerException();
4. try catch
try {
pringArr(arr); // 可能会发生异常的代码块
System.out.println("发生异常后异常语句try后面的代码不会继续执行");
} catch (NullPointerException a){
System.out.println("捕获到异常"); // 如果捕获到异常执行的代码块
}
System.out.println("捕获到异常后并不会结束虚拟机");
4.1. 多个catch
try {
System.out.println(Integer.parseInt("123"));
System.out.println(2 / 0);
//catch 可以有多个 ,用来捕获多个异常
} catch (NumberFormatException err) {
System.out.println("格式化异常");
} catch (ArithmeticException err) {
System.out.println("数字运算异常");
}
如果多个异常中存在子父类,那么父类异常应该写在最后,因为如果写在最前面会捕抓到所有的子类异常,后面的子类异常语句并没有任何效果.
4.2. 捕抓所有异常 Exception
try {
System.out.println(Integer.parseInt("123"));
System.out.println(2 / 0);
} catch (Exception err) {
System.out.println("捕抓所有异常");
//不推荐使用,因为我们捕获不同异常可能会有不同的处理方式
}
4.3. error中的内部方法
- getMessage() 返回异常的信息
- toString() 返回异常的类型 和信息
- printStackTrace() 将异常信息以红色字体呈现在控制台中,与默认异常报错不同,这些方法并不会结束虚拟机
try {
int[] arr ={1,2,3,4};
System.out.println(arr[10]);
} catch (ArrayIndexOutOfBoundsException e) {
String message = e.getMessage(); // 返回异常的信息
System.out.println(message);
String s = e.toString(); //返回异常的类型 和信息
System.out.println(s);
e.printStackTrace(); // 将异常信息以红色字体呈现在控制台中,与默认异常报错不同,这些方法并不会结束虚拟机
System.out.println("123");
}
5. 自定义异常
自定义异常 只需要给予一个 无参构造方法 和 带参构造方法 并且继承运行时异常或编译时异常即可
public class AgeOutofBoundsException extends RuntimeException {
public AgeOutofBoundsException() {
}
public AgeOutofBoundsException(String message) {
super(message);
}
}