异常
异常概述:异常是Java程序运行过程中出现的错误
异常分类:API查找Throwable
1.Error(服务器宕机,数据库崩溃等)
2.Exception C(异常的继承体系)API查RuntimeException
运行时异常:一般是程序员的错误异常可以让我们发现错误并修改
编译时异常:Exception下除了RuntimeException其他都是编译时异常 在写代码时就要处理掉 不然编译不通过
异常处理的两种方式
1.try catch(抓取)
try catch finally
2.throws(抛出) //直接抛给Jvm java虚拟机执行 缺点:程序会终止
try...catch处理异常的基本格式 try…catch…finally
通过 try{}carch(){} 把问题处理后程序会继续执行
public static void main(String[] args) {try{int a=10;System.out.println(a/0);}catch(ArithmeticException e){//ArithmeticException类 中重写了Object中的toString()e=new ArithmeticException("不能除0");System.out.println(e);}finally{//这里的代码不管有没有抓取异常都会执行}//通过 try{}carch(){} 把问题处理后程序会继续执行System.out.println("出现异常行以下的程序-----------------------------------------");}
开发常用:
异常 名字.printStackTrace();
//打印堆栈信息 输出异常名字和问题的原因 以及问题出现在某个类中某一行
例:java.lang.ArrayIndexOutOfBoundsException: 7
at com.muzhou.lesson.exception.Demo02.main(Demo02.java:8) //异常代码位置
类中抛异常案例:
public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) throws Exception {if(age>0&&age<=120){this.age = age;}else{//抛出异常/* try{throw new Exception();}catch( Exception e){e=new Exception("年龄非法");System.out.println(e);}*/throw new Exception();//不处理异常 再次往方法上抛出 使用场景:在数据库}}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}
Person p=new Person();p.setName("张三");try{p.setAge(130);//调用者被告知这个方法中有异常抛出 传值调用要注意 让调用者来处理}catch(Exception e){e.printStackTrace();}System.out.println(p);}
public void setAge(int age) {if(age>0&&age<=120){this.age = age;}else{throw new RuntimeException("年龄非法");//运行异常 不需要手动处理 由jvm默认的异常处理机制处理}}
throw和throws的区别
throw:在功能方法内部出现某种情况 程序不能继续运行 需要跳转时 就用throw把异常对象抛出
1.用在方法体内 跟的是异常对象
2.只能抛出一个异常对象名
3.表示抛出异常 由方法体内的语句处理
throws:
1.用在方法声明后面 跟的是异常类名
2.可以根多个异常类名 用逗号隔开
3.表示抛出异常 由该方法的调用者处理
自定义异常:
自定义异常是给了异常名字 可以更好的识别异常解决问题
自定义异常继承Exception 继承自RuntimeException
public class AgeException extends Exception{//自定义编译异常public AgeException() {super();}public AgeException(String s) {super(s);}
}
public class AgeRuntimeException extends RuntimeException{//自定义运行时异常public AgeRuntimeException() {super();}public AgeRuntimeException(String s) {super(s);}
}
注意:
子类继承父类 不能抛出>父类的异常 只能抛出<=父类的异常
父类没有抛异常 子类不允许抛异常