zoukankan      html  css  js  c++  java
  • Java学习之路(十):异常

    ---恢复内容开始---

    异常的概述和分类

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

    异常的继承体系:

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

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

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

        1.自己将该错误处理,让后继续执行代码

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

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

    自己处理异常的方式:

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

    我们使用try...catch...finally...来捕获异常,然后呢,可以继续执行我们的代码

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

    catch(可以写多个错误类名){}    当然我们也可以是定义多个catch

    Java中的异常被分为两大类

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

    注意:所有的RuntimeException类及其子类的实例被称为运行是异常,其他异常就是编译时异常

    编译是异常:

    • 编译时异常必须显示处理,否则程序就会发生错误,无法通过编译

    运行时异常:

    • 无需显示处理,也可以像编译时异常一样进行处理
    • 比如数组越界,空指针等都是运行时异常

    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
        }
        
    }
  • 相关阅读:
    ASP.net中页面事件的先后顺序
    我回来了
    ASP.NET中添加引用不能显示
    VS2008中MVC无法打开项目文件,此安装不支持该项目类型
    windows2003 IIS错误
    C#中使用TimeSpan计算两个时间的差值
    javascript做在翻译
    GridView导出EXCEL
    用资源管理器限制大数据量查询
    linux单机配置DG过程记录
  • 原文地址:https://www.cnblogs.com/smiling-crying/p/9392435.html
Copyright © 2011-2022 走看看