Java在运行过程当中出现的错误,比如数组下标越界,除数为0。
分为运行时异常和编译时异常,编译时异常需要编译前解决。
基本格式
//自己处理异常 public class Test1 { public static void main(String[] args) { try { int[] w = {1,6,8}; System.out.println(w[4]); //数组越界 System.out.println(10/0); //除数为0 }catch (ArrayIndexOutOfBoundsException a){ System.out.println("数组异常"); } catch (ArithmeticException b){ System.out.println("算术异常"); } catch (Exception e){ //异常的父类 System.out.println("出现异常"); }finally { //如果在上面 JVM终止运行了,就不会执行 finally //上面 return,finally依然会被执行 System.out.println("一般用来释放资源"); } } }
//获取异常 public class Test2 { public static void main(String[] args) { try { int h = 20 / 0; }catch (Exception e){ System.out.println(e.getMessage()); //获取异常信息 System.out.println(e.toString()); //获取异常类名和异常信息 System.out.println(e); //同上 e.printStackTrace(); //获取出现异常位置 } } }
//抛出异常 public class Test3 { private Integer age; public void setAge(Integer age) throws Exception { if(age >0 && age<=150){ this.age = age; }else { //运行时异常 //throw new RuntimeException("年龄不正确"); //编译时异常,必须处理,如果不处理,必须继续往上抛 //谁调用,谁处理 throw new Exception("年龄不正确"); } } //异常抛给 main方法,JVM有一个默认的异常处理机制将异常处理 public static void main(String[] args) throws Exception { Test3 t3 = new Test3(); //调用 setAge方法,因为是编译时异常,必须处理 /* 1.自己处理异常 try { t3.setAge(155); }catch (Exception e){ System.out.println(e); } */ //2.继续抛异常 t3.setAge(200); } }