异常
异常处理的最大父类是Throwable,但开发中不使用,其下有两个子类:
Error:表示JVM错误,与程序无关
Exception:一般指程序中的错误,开发中想要进行异常处理,基本使用此类。
throws 关键字
使用此关键字后,方法中不处理任何异常,而交给调用处去处理。
如果throws在主方法上,则所有的异常都交给JVM去处理。
throw 关键字
程序中可以使用throw关键字人为的抛出一个异常。
在异常处理中,每次产生异常的时候都是产生了一个异常类的实例化对象
1 package com.fwj.exceptiondemo; 2 3 public class Math { 4 5 public int div(int i,int j) throws Exception{ 6 int temp = 0; 7 try { 8 System.out.println("出发开始...."); 9 temp = i/j; 10 } catch (Exception e) { 11 throw e; 12 }finally{ 13 System.out.println("虽然产生异常但我们希望完成这一步操作,又向上抛出异常..."); 14 } 15 return temp; 16 } 17 }
1 package com.fwj.exceptiondemo; 2 3 public class Test { 4 5 public static void main(String[] args) { 6 7 Math math = new Math(); 8 try { 9 int temp = math.div(5, 0); 10 System.out.println(temp); 11 } catch (Exception e) { 12 e.printStackTrace(); 13 } 14 } 15 16 }
RuntimeException
public static int parseInt(String s)throws NumberFormatException
Integer类中的parseInt(String s)方法虽然抛出了异常,但在程序中不进行异常处理。
NumberFormatException是runtimeException的子类
说明只要是runtimeException异常对象,虽然方法使用了throws,程序中也可以不进行处理。
自定义异常
1 package com.fwj.exceptiondemo; 2 3 public class MyException extends Exception { 4 5 public MyException(String msg){ 6 super(msg); 7 } 8 }
1 package com.fwj.exceptiondemo; 2 3 public class TestMyException { 4 5 public static void main(String[] args) { 6 7 try { 8 throw new MyException("自定义异常哦"); 9 } catch (Exception e) { 10 e.printStackTrace(); 11 } 12 } 13 14 }
assert关键字
jdk1.4新添加的
当程序执行到某条语句后,其结果肯定是固定的值。
程序运行的时候需要给JVM加入-ea参数
1 package com.fwj.exceptiondemo; 2 3 public class AssertDemo { 4 5 public static void main(String[] args) { 6 7 int i = 10; 8 //assert i==80;//两种断言方式 9 assert i==100:"值错了"; 10 } 11 }