java 捕获和抛出异常
捕获和抛出异常
java中有两种异常机制:1.捕获并处理异常:当运行环境得到一个异常对象时,将会沿着方法的调用栈逐层回溯,
寻找处理这些异常的代码,运行环境把当前异常对象交给这个方法进行处理,这一过程
称为捕获(catch)异常。
2.将方法中产生的异常抛出,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,
声明抛出异常。
捕获并处理异常
try catch finally 语句
通常使用代码框架来进行异常的捕获与处理;
try{
//可能出现的异常的代码
}catch(.....){
//异常处理代码
}finally{
//执行最终清理的句子
}
1.try选定捕获异常范围,代码块中的语句可能会生成异常对象并抛出。
2.catch每try代码块可以伴随一个或者多个catch语句用于处理try所产生的的异常事件,catch语句只需要一个形
式参数指明它所能捕获的异常类型,这个类是Throwable的子类,运行时try的异常对象传递给catch,如果try
产 生的异常与某个catch语句处理的异常类型相匹配,则执行catch语句块。
3.finally语句块是否发生生异常都要执行,一般用于关闭文件 或者释放其它系统资源。
异常抛出
1.如果在一个方法中生成了一个异常,但是这个方法并不确切地知道该如何对这异常事件进行处理,这时,
一 个 方法就应该声 明抛出异常,使得异常对象可以从调用栈向后传播,直到有合适的方法捕获它为止。
2.声明异常:异常是在方法的声明中使用throws子句进行声明的
具体格式: *返回类型 方法名() throws exceptionlist
带有throws子句的方法所抛出的异常有两种来源:1.一种是方法中调用了可能抛出的异常
2.另一种异常对象来源就是方法体中生成并抛出异常对象。
package exception;
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 0;
try {//监控区域
System.out.println(a / b);
} catch (ArithmeticException e)//捕获异常 (catch(想要捕获的异常类型!))
{
System.out.println("程序出现异常,变量b不能为0");
} finally {//处理善后工作
System.out.println("finally");//finally 可以不要finally,假设io,资源,关闭!
}
try {
new Test().a();
} catch (Throwable e) {
System.out.println("程序出现异常,变量b不能为0");
} finally {
System.out.println("finally");
}
// 假设要捕获多个异常;从小到达!
try {
System.out.println(a / b);
} catch (Error e) {
System.out.println("Error");
} catch (Exception e) {
System.out.println("Eception");
} catch (Throwable e) {
System.out.println("Throwable");
} finally {
System.out.println("finally");
}
}
public void a() {
b();
}
public void b() {
a();
}
}
package exception;
public class Test2
{
public static void main(String[] args)
{
int a=1;
int b=0;
//Ctrl+Alt+T
try {
System.out.println(a/b);
} catch (Exception e) {
//System.exit(0);
throw new RuntimeException(e);//打印错误的栈信息
} finally {
}
}
}
public static void main(String[] args) {
int a = 1;
int b = 0;
try {//主动的抛出异常 throw throws
if (b == 0) {
throw new ArithmeticException();//主动的抛出异常
}
System.out.println("a/b");
} catch (Error e) {
System.out.println("Error");
} catch (Exception e) {
System.out.println("Eception");
} catch (Throwable e) {
System.out.println("Throwable");
} finally {
System.out.println("finally");
}
}
package exception;
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 0;
try {//可以让代码继续执行
new Test().test(a,b);
} catch (ArithmeticException e) {
e.printStackTrace();
}
}
//假设这个方法中,处理不了这个异常,方法上抛出异常
public void test(int a,int b) throws ArithmeticException
{
if (b == 0) {
throw new ArithmeticException();//主动的抛出异常,一般在方法中使用
}
//System.out.println("a/b");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY