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

    估计他们上完课就再也不玩了,自己那段时间上完课。也就基本上很少来了,主要是 没有什么记录的习惯,奇怪的是,每每到了心情不好的时候,总会想要写点什么。

    不管怎么样还是出去花钱学习了一下,这段经历。嗯,很难评价,事实上如果不留下一笔,那么的确没有什么学习的意义。

    所以,李飞要一点儿一点儿扳过来。

    出去学习以后发现一个事儿,那就是我真的没有很聪明,接受知识,可能也没我自诩的那么快,记忆力也没那么好。所以要想成长,我真的要做的就是,勤奋,更加勤奋才行。

    这天是袁海鹏老师授课。印象中10.13,因为是10.12走的。

    今天讲授的是自定义异常。

    自定义异常的步骤:

    1、创建一个类。继承exception或者 runtimeException。

    2、构造函数的书写。

    3、非法状态下创建该类的对象。

    示例1:

    package ExceptionPart;
    
    public class SelfDefinitionException extends Exception {
        
        public SelfDefinitionException(String message){
            super(message);
        }
        
        public static void main(String[] args) throws SelfDefinitionException{
            throw new SelfDefinitionException("lifei");
        }
        
    }

    运行结果:

    Exception in thread "main" ExceptionPart.SelfDefinitionException: lifei
    at ExceptionPart.SelfDefinitionException.main(SelfDefinitionException.java:10)

    这样好像没什么意思。什么也有没有做一样,事实上,如果单独看这个东西,确实什么也不是。这样需要考虑自定义异常是用来干什么的?就是遇到了问题,然后掷出问题。避免一些不合法的状况发生。把一些在编译环境下允许的东西以异常的形式报告给开发人员,从而更好地解决当前问题。

    比如,我们往数据库的年龄字段存储负数或值过大的数的时候,可能会在某一个未知的环节出错。如果我们在开始填入的时候就规定了这个数的值域的话,那么后期维护的成本就会很低。

    所以合理的逻辑是,如果某个数值不合乎要求,那么就会出现异常。所以。我们不需要再主函数中直接报出异常。给一个条件。

    if(年龄不合理){

      throw new AgeException("年龄不合理");

    }

    按照这个逻辑的话:

    public class AgeException extends Exception {
      public AgeException(){
        super("年龄不合理异常");
      }
    }

    所以示例2:

    package ExceptionPart;
    
    //年龄异常处理类
    public class AgeException extends Exception {
        //构造函数
        public AgeException(){
            //重写
            super("年龄不合理异常");
        }
    }
    package ExceptionPart;
    public class AgeExceptionTest {    
        public static void main(String[] args) throws AgeException {
            //设置
            int age = -5;
            //检测
            if(age>150||age<0){
                throw new AgeException();
            }//【后来标记 ,第9行】
            //输出
            System.out.println("my age is "+age);
        }
    }

    运行结果:

    Exception in thread "main" ExceptionPart.AgeException: 年龄不合理异常
    at ExceptionPart.AgeExceptionTest.main(AgeExceptionTest.java:9)

    练习:

    创建一个关于性别的自定义异常类,男女是合法的。

    package ExceptionPart;
    
    public class GenderException extends Exception {
        
        public GenderException() {
            super("输入的性别不符合规范");
        }
        public GenderException(String message){
            super(message);
        }
    
    }
    package ExceptionPart;
    
    public class GenderExceptionTest {
        public static void main(String[] args) throws GenderException {
            String gender = "s";
            if(!"男".equals(gender)&&!"女".equals(gender)){
                throw new GenderException("性别的输入不符合规范");
            }
            System.out.println("小明的性别是:"+gender);
        }
    }

    问题:

    出了一个这样的问题:并不知道 怎么解决。

    希望和小伙伴们一起探讨一下:

    问题来源:期望写一个当前类的重载函数。然后根据年龄的数值来决定调用 使用哪一个语句进行输出。

    但是出现了这样一个异常。

    package ExceptionPart;
    
    public class AgeException1 extends Exception{
        private final String NATIVETIPS = "当前年龄为负数";
        private final String BIGTIPS = "当前年龄过大";
        private static String result = "您的年龄不合法";
        public AgeException1(int age){
            
            if(age<0){
                result=NATIVETIPS;
            }
            else if(age>150){
                result = BIGTIPS;
            }
            System.out.println(age);
            System.out.println(result);
            super(result);//这里编译器 会报错
        }
        public AgeException1(){
            super(result);
        }
    }

    更改方式:

    package ExceptionPart;
    
    public class AgeException1 extends Exception{
        private final String NATIVETIPS = "当前年龄为负数";
        private final String BIGTIPS = "当前年龄过大";
        private static String result = "您的年龄不合法";
        public AgeException1(int age){
            super(result);//挪到这里就没有问题。
            if(age<0){
                result=NATIVETIPS;
            }
            else if(age>150){
                result = BIGTIPS;
            }
            System.out.println(age);
            System.out.println(result);
            //把刚刚那句话拿上去,就没有问题
        }
        public AgeException1(){
            super(result);
        }
    }

    然后报的编译错误是:

    Constructor call must be the first statement in a constructor

    猜想这句话应该翻译为:构造函数的调用必须在一个构造函数中优先(首先)声明。

    当前类在创建的时候,优先调用父类的构造函数。所以不写的话,就算了,写就只能出现在第一行。然后优先调用。不写的话,就优先,并且默认调用。

    如有问题欢迎探讨和斧正。BY Letben。

    6、自定义异常步骤:

    (1)创建异常类,继承Exception 或者 RuntimeException

    (2)在异常类中定义构造方法,实现方法体

    示例:public class AgeException()extends Exception{}

    Public AgeException(String message){

    Super(message);

    }

    (3) 抛出异常时,创建一个 异常类对象

    示例:throw new AgeException(“年龄异常”);

     

    练习:使用自定义异常实现对男女性别的验证。

     

    接口优化:

    方式:(1)先定义接口,然后让类直接实现

    2)先定义接口,然后定义实现类,如果哪个类需要对应的方法,则创建对应的实现类对象(使用接口实现多态)

    选择依据:(1)如果实现的方法不是所有子类都拥有

    2

     

     

    补充:instanceof关键字:

    语法:对象名 instanceof 类名/接口名

    注:如果对象名和接口有关系,即该对象所属类实现了该接口,表示两者有关系。如果存在关系,则该对象可以强转成对应接口

    示例:Animal cat= new Cat();//cat类和LegDao有关系

    LegDao dao = LegDaocat//对象可以转换成LegDao

  • 相关阅读:
    Windows Phone 7 ManipulationStarted 事件
    用C#实现AES加密和解密
    Windows Phone 7 程序菜单栏ApplicationBar
    Windows Phone 7 使用选择器(Chooser)
    Windows Phone 7 矢量图形编程
    Windows Phone 7 位图BitmapImage和WriteableBitmap
    Windows Phone 7 利用计时器DispatcherTimer创建时钟
    Windows Phone 7 配置文件WMAppmanifest.xml的介绍
    C#转换人民币大小金额
    Windows Phone 7 入门XAML语法介绍
  • 原文地址:https://www.cnblogs.com/letben/p/5181974.html
Copyright © 2011-2022 走看看