Java学习之路(十):异常

---恢复内容开始---数据库

异常的概述和分类

  Throwable类是Java语言中全部错误或者异常的超类(也就是说,Java中全部的报错都是继承与Throwable的),也只有当对象是此类或者此类的子类的实例之一时,才可以经过Java虚拟机或者Javathrow语句进行抛出。数组

异常的继承体系:

  • Throwable
    • Error,服务器宕机,数据库崩溃等...
    • Exception
      • RuntimeException(运行期异常)

JVM默认是如何处理异常的?

  main函数收到异常的时候,会有两种处理方式:服务器

    1.本身将该错误处理,让后继续执行代码jvm

    2.本身没有针对的处理方式,只有将其交给main的jvm来处理ide

JVM有一个默认的异常处理机制,就将该异常进行处理,并将该异常的名称、异常的信息、异常出现的位置打印在控制台上,同时程序中止运行。函数

本身处理异常的方式:

  • try...catch...finaly...
  • throws

咱们使用try...catch...finally...来捕获异常,而后呢,能够继续执行咱们的代码this

可是呢,咱们使用throw抛出异常的话就会结束程序了spa

catch(能够写多个错误类名){}    固然咱们也能够是定义多个catch指针

Java中的异常被分为两大类

  • 运行时异常
  • 编译时异常

注意:全部的RuntimeException类及其子类的实例被称为运行是异常,其余异常就是编译时异常code

编译是异常:

  • 编译时异常必须显示处理,不然程序就会发生错误,没法经过编译

运行时异常:

  • 无需显示处理,也能够像编译时异常同样进行处理
  • 好比数组越界,空指针等都是运行时异常

Throwable的几种常见的方法

Exception是一个继承Throwable的子类

Throwable有几个经常使用的方法:

  • getMJessage():获取异常信息,返回字符串
  • toString():获取异常类名和异常信息,返回字符串
  • printStackTrace():打印异常类名和异常信息,以及异常出如今程序的位置

throws的方式处理异常

  • 定义功能方法时,须要把出现的问题暴露出来让调用这去处理
  • 那么就经过throws在方法上标识
package null0801_2026;

public class Demo01 {

    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Student std = new Student(11,"n1");
        std.setAge(11);
    }

}
class Student{
    private int age;
    private String name;
    public int getAge() {
        return age;
    }
    public void setAge(int age) throws Exception {
        if(age>10){
            throw new Exception("不能大于10");
        }else{
            this.age = age;
        }
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Student [age=" + age + ", name=" + name + "]";
    }
    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }
    public Student(int age, String name) {
        super();
        this.age = age;
        this.name = name;
    }
    
}

 

throw概述和throws的区别

throw的使用场景:

  在方法内部出现某种状况,程序不能继续执行,就用throw把异常对象抛出

throws和throw的区别

thorws:

  • 用在方法声明的后面,跟的是异常类名
  • 能够跟多个异常类名,用逗号隔开
  • 它表示抛出异常,由该方法的调用者来处理

thorw:

  • 用在方法体内,跟的是异常对象名
  • 只能抛出一个异常对象名,表示抛出异常

finally关键字的特色及应用

特色:

  • finally的语句体必定会执行
  • 特殊状况:在执行到finally以前退出了(System.exit(0))

finally咱们通常用于IO流操做中的释放资源

finally,final,finalize之间的区别

1.final能够修饰类-表示不能被继承,能够修饰方法-表示不能被重写,修饰变量-表示只能赋值一次

2.finally是try语句中的一个语句体,不能单独使用,通常咱们用做IO中的释放资源

3.finalize是一个方法,当垃圾回收器肯定不存在对该对象的更多引用的时候,由对象的垃圾回收器调用此方法。

 

异常的注意事项以及如何使用异常处理

  • 子类重写父类方法时,子类的方法必须抛出相同的父类异常
  • 若是被重写的方法没有异常抛出,那么子类的方法最好不要抛出异常
  • 若是子类方法内有异常发生,那么只能只能用try catch

原则:若是本身能处理的问题就本身解决(try...catch),若是不能解决,就throws

如何自定义一个异常?例子:

package null0801_2026;

public class AgeError extends RuntimeException{

    public AgeError() {
        super();
        // TODO Auto-generated constructor stub
    }

    public AgeError(String arg0, Throwable arg1, boolean arg2, boolean arg3) {
        super(arg0, arg1, arg2, arg3);
        // TODO Auto-generated constructor stub
    }

    public AgeError(String arg0, Throwable arg1) {
        super(arg0, arg1);
        // TODO Auto-generated constructor stub
    }

    public AgeError(String arg0) {
        super(arg0);
        // TODO Auto-generated constructor stub
    }

    public AgeError(Throwable cause) {
        super(cause);
        // TODO Auto-generated constructor stub
    }
    
}
相关文章
相关标签/搜索