异常处理过程:
-
一旦出现异常,把异常和每个catch块进行匹配,如果匹配成功就执行catch后结束
-
如果不匹配再判断下一个catch的异常类型。
注意:如果catch中出现其他异常的父类,父类异常必须放在最后
===================================================================================
finally最终的,在finally中的代码无论如何都会执行
程序有部分代码,是必须执行,如:数据库连接关闭、文件流关闭、网络连接的关闭
try{
可能出现异常的代码
}catch(异常类型 ex){
异常处理
}finally{
如论如何都执行的代码
}
异常处理过程:
-
如果try出现异常,跳转到catch执行处理,最后执行finally代码;
-
如果try没有异常,try执行完,最后执行finally。
try-catch-finally案例
Scanner input = new Scanner(System.in);
try{
System.out.println(“输入一个数:”);
int num1 = input.nextInt();
System.out.println(“输入一个数:”);
int num2 = input.nextInt();
int result = num1 / num2;
System.out.println("result = " + result);
}catch(ArithmeticException ex){
System.out.println(“出现了算术异常”);
ex.printStackTrace();
}catch(InputMismatchException ex){
System.out.println(“出现了输入格式异常”);
ex.printStackTrace();
}catch(Exception ex){
ex.printStackTrace();
}finally{
System.out.println(“最终执行的代码”);
}
System.out.println(“程序执行完毕~~~”);
===============================================================================
throws关键字
用于方法声明异常,一旦方法声明异常,方法中可以不处理异常,由方法的调用者处理。
一般用于非运行时异常。
语法:
public 返回值类型 方法名(参数列表) throws 异常类型1, 异常类型2…{
}
throw关键字
用于手动抛出异常,给调用者进行提示
语法:
if(条件){
throw new 异常类型(“异常描述信息”);
}
练习:输入一个人的年龄,年龄必须在0~100之间,如果超过就抛出IllegalArgumentException异常
/**
-
输入年龄
-
@throws IllegalArgumentException
*/
static void inputAge() throws IllegalArgumentException{
Scanner input = new Scanner(System.in);
System.out.println(“输入年龄(0~100)”);
int age = input.nextInt();
//手动抛出异常
if(age < 0 || age > 100){
throw new IllegalArgumentException(“年龄必须在0到100之间”);
}
System.out.println(“年龄是”+age);
}
public static void main(String[] args) {
try{
inputAge();
}catch(IllegalArgumentException ex){
ex.printStackTrace();
}
}
===================================================================
在某些特定业务需求下,系统中的异常不能很好处理或表示该业务的问题,可以自定义异常类解决特定业务问题。
如:银行账户取钱时,要判断余额是否足够
实现步骤:
1)定义类继承Exception或其子类
2)满足某些条件时,在方法中用throw抛出异常
3)在声明方法时,用throws声明异常
4)调用方法时,使用try-catch处理异常
/**
-
余额不足异常
-
@author xray
*/
public class BalanceException extends Exception{
public BalanceException(String msg){
//将异常描述信息传给父类
super(msg);
}
}
/**
-
银行账户类
-
@author xray
*/
public class BankAccount {
private String name;
private int balance;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBalance() {
return balance;
}
public void setBalance(int balance) {
this.balance = balance;
}
public BankAccount(String name, int balance) {
super();
this.name = name;
this.balance = balance;
}
public BankAccount() {
super();
}
/**
-
存钱
-
@param money
*/
public void saveMoney(int money){
this.balance += money;
System.out.println(“账户”+name+“的余额是”+balance);
}
/**
-
取钱
-
@param money
-
@throws BalanceException
*/
public void takeMoney(int money) throws BalanceException{
//如果余额不足,就抛出自定义异常
if(balance < money){
throw new BalanceException(“对不起,您账户余额不足”);
}
this.balance -= money;
System.out.println(“账户”+name+“的余额是”+balance);
}
}
public class TestBank {
@Test
总结
这个月马上就又要过去了,还在找工作的小伙伴要做好准备了,小编整理了大厂java程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家
义异常
if(balance < money){
throw new BalanceException(“对不起,您账户余额不足”);
}
this.balance -= money;
System.out.println(“账户”+name+“的余额是”+balance);
}
}
public class TestBank {
@Test
总结
这个月马上就又要过去了,还在找工作的小伙伴要做好准备了,小编整理了大厂java程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家
[外链图片转存中…(img-yYVZJiDk-1714349785144)]
[外链图片转存中…(img-bLeFYYnL-1714349785145)]