异常: Error Exception
概述:
try {代码块1} :对代码块1进行代码监控
catch(){代码块2}:当代码1出现了对应捕获的异常则执行此对应的代码块内容。
finally{代码块3} :表示无论如何,是否出现异常,都会执行里面的代码内容。
有异常:代码块1 ---> 代码块2 ---->代码块3 (出现异常以后,异常后面的代码就不会执行了,代码流程改变了。)
没异常:代码块1 ---> 代码块3
我们可以分别捕获多种异常,一旦发生那种异常就进入对应catch里面的代码块。
捕获的异常的顺序:先子类到父类 先细后粗
可不可以没有finally块?可以
可以不可以没有catch块?没有finally就一定要有catch.如果有finally语法上可以没有catch,我们还是要加上catch
编译时异常:编译期间就需要捕获异常。也就是说必须有try catch捕获
运行时异常:NullPointerException 。可以根据需要有或者没有。
1 try { 2 3 //我们要对下面的代码进行监控 4 //代码块1; 5 //引用数据类型为null的时候,不能调用null上面的任何方法或者属性。否则给出空指针异常。NullPointerException 6 // String s =null; 7 // s.equals("abc"); 8 9 // System.out.println(5/0); 10 11 12 System.out.println("hello"); 13 } catch (NullPointerException e) { 14 //代码块2;// 只有出现了NullPointerException的时候才执行 15 System.out.println("你的代码出现了NullPointerException。。。。。"); 16 // e.printStackTrace(); 17 } catch (ArithmeticException e) { 18 //代码块2;// 只有出现了ArithmeticException的时候才执行 19 System.out.println("你的代码出现了ArithmeticException。。。。。"); 20 // e.printStackTrace(); 21 } finally { 22 //代码块3; 23 System.out.println("这句代码真的总是会执行吗?"); 24 }
自定义异常:
自定义一个异常类继承Exception接口
public class OutOfAgeException extends Exception{ /** * 自定义异常处理 */ private static final long serialVersionUID = 1L; public OutOfAgeException(String msg){ super(msg); } }
写一个方法抛出异常
public static void age(int age) throws OutOfAgeException { if(age<0){ throw new OutOfAgeException("年龄不合法..."); }else{ System.out.println("年龄合法"); } }
在上诉代码块1中调用方法就行
java异常中throw和throws的区别:
throws:用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用我我就抛给谁。
throw:则是用来抛出一个具体的异常类型。