这篇博客主要是总结一下Java中自定义异常的相关的知识。
在Java中,已经提供了很多的异常类的定义,但是我们在实际项目中,可能需要使用一些自己的异常类,那么可以通过集成Exception类或已有的异常类的方式完成一个自定义异常类的操作。
所谓的自定义异常就是以异常的方式来告知用户程序逻辑上的一些错误。
受检异常:在编译期检查的异常定义方法时必须声明所有可能会抛出
的exception,在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去,exception是从java.lang.Exception类衍生出来的。
public class LogicException extends Exception{
public LogicException()
{
super();
}
public LogicException(String errorMessage)
{
super(errorMessage);
}
}
使用上述类来测试受检异常
public class Game {
//打飞机的次数
public static int count =5;
public void play() throws LogicException
{
Scanner input = new Scanner(System.in);
System.out.println("打飞机游戏开始");
while (true)
{
System.out.println("开始请输入非0数字,退出请输入0");
int yesno=input.nextInt();
if(yesno==0)
{
System.out.println("退出游戏");
}
if(count==0)
{
throw new LogicException("你的飞机已经打光了");
}
System.out.println("你还有"+(--count)+"架飞机");
}
}
public static void main(String args[])
{
Game g = new Game();
try {
g.play();
}catch (LogicException lg)
{
lg.printStackTrace();
}
}
}
非受检异常:在定义方法时不需要声明会抛出runtime exception;在调用这个方法时不需要捕获这个runtime exceptionruntime exception是从java.lang.RuntimeException或java.lang.Error类衍生出来的。
public class MyException extends RuntimeException{
public MyException()
{
super();
}
public MyException(String Message)
{
super(Message);
}
}
public class Test {
public static void test()
{
//运行时异常直接抛出异常,而不用在定义函数的时候声明异常
throw new MyException("运行时异常");
}
public static void main(String args[])
{
//也不用对异常进行捕获
test();
}
}
受检异常用起来可能比较麻烦,有较多的try-catch语句但是更加符合用户的逻辑。
非受检异常可能不那么符合用户的逻辑但是使得代码比较简洁
assert关键字 表示断言
当程序执行到某个固定的位置的时候,程序中的某个变量的取值肯定是预期的结果,那么这种操作可以使用断言完成
断言的操作语法:
assert 表达式;
public class AssertDemo {
public static void main(String args[]) {
int x = 11;
assert x == 10 : "结果不正确";
}
}
在含有断言的程序运行的时候需要设置虚拟机的参数。