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);}}
