自定义异常
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义异常相关的知识,希望对你有一定的参考价值。
估计他们上完课就再也不玩了,自己那段时间上完课。也就基本上很少来了,主要是 没有什么记录的习惯,奇怪的是,每每到了心情不好的时候,总会想要写点什么。
不管怎么样还是出去花钱学习了一下,这段经历。嗯,很难评价,事实上如果不留下一笔,那么的确没有什么学习的意义。
所以,李飞要一点儿一点儿扳过来。
出去学习以后发现一个事儿,那就是我真的没有很聪明,接受知识,可能也没我自诩的那么快,记忆力也没那么好。所以要想成长,我真的要做的就是,勤奋,更加勤奋才行。
这天是袁海鹏老师授课。印象中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。
以上是关于自定义异常的主要内容,如果未能解决你的问题,请参考以下文章