zoukankan      html  css  js  c++  java
  • 4.21Java自定义异常

    4.21Java自定义异常

    本章内容

    • 什么是自定义异常类

    • 自定义异常类特点

    • 自定义异常类处理要求


    什么是自定义异常类

    程序中JDK提供的任何标准异常类都无法充分描述清除的问题的类,需要创建自己的异常类。这个异常类就叫做自定义异常类

    自定义异常类的特点

    • 只需从Exception类或者其它的子类派生一个子类即可---继承

      • 如果继承Exception类,为受检查异常,必须进行处理

      • 继承RuntimeException类,可以不进行异常处理

    • 习惯上,自定义异常类应该包含两个构造器:

      • 默认的构造器

      • 带有详细信息的构造器

    自定义异常类:---继承了Exception类

    package com.exception;

    /**
    * 测试自定义异常类,一个不合法年龄异常类
    * @author Lucifer
    */
    public class Test04 {
       public static void main(String[] args) {

           /*创建对象,调用写好的方法*/
           Person p = new Person();
           p.setAge(-10);
      }
    }


    /*定义一个person类*/
    class Person{

       /*定义一个私有的属性*/
       private int age;

       /*JavaBean方法*/
       public void setAge(int age){
           /*加一个判断和异常处理*/
           if (age<0 || age>150){
               try {
                   throw new IllegalAgeException("年龄不合法");
              }catch (IllegalAgeException e){
                   e.printStackTrace();
              }
               /*
               创建对象,输出语句
               这里输出的语句是异常提示不是System的打印语句
               这是一个自定义异常类
               此处只是为了测试而测试
               如果继承的是Exception类,那么必须try---catch
               这是两种不同的方式
                */
          }
           this.age = age;
      }

       /*JavaBean方法*/
       public int getAge(){
           return age;
      }
    }


    /*定义年龄自定义异常类*/
    class IllegalAgeException extends Exception{

       /*按照规则里面要有两个构造器*/
       //默认的构造器
       public IllegalAgeException(){

      }

       //带有形参和信息的构造器
       public IllegalAgeException(String msg){

           //可以调用父类构造器的方法
           super(msg);
      }
       /*
       如果继承的是Exception那么就不是编译器进行异常处理
       而是人为进行处理。
       在编写代码时必须try---catch
       或者throws抛出给上一层
        */
    }

    继承RuntimeException类:

    package com.exception;

    /**
    * 测试自定义异常类,一个不合法年龄异常类
    * @author Lucifer
    */
    public class Test04 {
       public static void main(String[] args) {

           /*创建对象,调用写好的方法*/
           Person p = new Person();
           p.setAge(-10);
      }
    }


    /*定义一个person类*/
    class Person{

       /*定义一个私有的属性*/
       private int age;

       /*JavaBean方法*/
       public void setAge(int age){
           /*加一个判断和异常处理*/
           if (age<0 || age>150){
                   throw new IllegalAgeException("年龄不合
              }
               /*
               创建对象,输出语句
               这里输出的语句是异常提示不是System的打印语句
               这是一个自定义异常类
               此处只是为了测试而测试
               如果继承的是Exception类,那么必须try---catch
               这是两种不同的方式
                */
          }
           this.age = age;
      }

       /*JavaBean方法*/
       public int getAge(){
           return age;
      }
    }


    /*定义年龄自定义异常类*/
    class IllegalAgeException extends RuntimeException{

       /*按照规则里面要有两个构造器*/
       //默认的构造器
       public IllegalAgeException(){

      }

       //带有形参和信息的构造器
       public IllegalAgeException(String msg){

           //可以调用父类构造器的方法
           super(msg);
      }
       /*
       如果继承的是Exception那么就不是编译器进行异常处理
       而是人为进行处理。
       在编写代码时必须try---catch
       或者throws抛出给上一层
        */
    }

    使用异常机制的建议

    1. 避免使用异常处理代替错误处理,这样会降低程序的清晰性,并且效率低下

    2. 处理异常不可以代替简单测试---只在异常情况下使用异常机制

    3. 不要进行小粒度的异常处理---应该将整个任务包装在一个try语句块中---不要写很多try语句,同一功能进行 放在一个try下

    4. 异常往往在高层处理---由调用者处理,最后由最高层处理

    只说明了解异常,不代表具备异常处理能力

    It's a lonely road!!!
  • 相关阅读:
    帝国 标签模板 使用程序代码 去除html标记 并 截取字符串
    iis6 伪静态 iis配置方法 【图解】
    您来自的链接不存在 帝国CMS
    帝国cms Warning: Cannot modify header information headers already sent by...错误【解决方法】
    .fr域名注册 51元注册.fr域名
    帝国网站管理系统 恢复栏目目录 建立目录不成功!请检查目录权限 Godaddy Windows 主机
    星外虚拟主机管理平台 开通数据库 出现Microsoft OLE DB Provider for SQL Server 错误 '8004' 从字符串向 datetime 转换失败
    ASP.NET 自定义控件学习研究
    CSS层叠样式表之CSS解析机制的优先级
    ASP.NET程序员工作面试网络收藏夹
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14686579.html
Copyright © 2011-2022 走看看