我们平时所处理的异常都是Exception异常。
为什么使用异常?
在程序调用方法的时候,可能会出错,比如数组下标越界,空指针,数值转换异常等等,又比如取款必须小于余额,而我们在输入的时候可能会出错,由此导致异常。
处理异常:
抛出异常-捕获异常-处理异常
处理异常基本写法:
try
{
语句组
}
catch(Exception ex)
{
异常处理语句组
}
代码实现:
public class Test {
public static void main(String[] args)throws Exception //声明异常类型
{
Account ac=new Account(); //创建一个账户对象
boolean continueInput=true;
do
{
try //try-catch语句测试-捕获异常
{
System.out.println("Enter the money:");
ac.withdraw(new Scanner(System.in).nextDouble());
continueInput=false;
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
System.out.println("Reset the money!");
}
}while(continueInput);
System.out.println("Finish this action!");
}
}
class Account throws Exception //创建一个账户类,声明异常类
{
double balance=5000; //定义余额
public void withdraw(double money)throws Exception //取款方法,可能抛出异常
{
if(money>this.balance)
{
throw new Exception("余额不足!"); //抛出一个异常对象
}
else
balance-=money;
}
}
上述代码使用的是Exception异常类,除了RuntimeException异常可以不需要声明或者处理外(因为这是非检测异常,运行时JVM会处理),其他的Exception异常都需要处理和声明(比如自定义的)。
异常的注意事项:
1.throws的应用:
定义方法时,以后调用此方法,需要进行try-catch语句处理。
如果对语句不希望处理try-catch语句,以用throw进行抛出。
2.异常的处理结构:
try-catch-finally,finally语句可以没有,如果有,不管try-catch执不执行,它都会执行。
3.自定义异常类:https://blog.csdn.net/weixin_42247720/article/details/80424433
必须继承Exception。
4.在自定义位置需要写明:throws Exception
catch语句为if-else结构,在catch块中,把父类的异常放在下面,子类异常先处理。
5.在类的继承时:
子类throw的异常必须是父类异常的子异常,不能throw新的异常,只能比父类的少,不能比父类的多。
6.在捕获异常后:
如果不能处理,要重新抛出,让其他调用者知道,不要自己随便处理。
欢迎大家评论讨论~~~