简单的异常、异常链介绍

本文介绍了Java编程中异常的概念,展示了如何通过try-catch解决异常导致的程序中断问题。通过示例代码解释了如何捕获并处理异常,确保程序的线程安全。同时,提到了异常链的产生,并给出一个异常处理的例子。此外,还提及了ThreadLocal在处理线程内共享数据时的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常

什么是异常?

异常是java程序在运行期间的一种事件,通过异常处理机制能够处理程序正常之外的时间


举一个简单例子

会导致整个线程无法执行
package com.weiyang;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
       int a1=change("234");
       int a2=change("4456");
       int a3=change("serith");//转换不了也输出不了,会导致整个无法进行
       System.out.println("hai");//也输出不了'hai'
	}
	public static Integer change(String x) {
		return Integer.parseInt(x);
	}

}

结果如图:


解决方法:

可以使用try catch 来解决异常问题

throws 直接抛出异常 其中Exception是所有异常的祖宗,通常写这一个就可以

catch  是接住异常,throw抛出的异常是第一个catch接住并处理

	public static void main(String[] args) {
		// TODO Auto-generated method stub
       try {
		int a1=change("234");
		int a2=change("4456");
		int a3=change("serith");
	} catch (Exception e) {
		// TODO Auto-generated catch block
		 //e.printStackTrace();
		 System.out.println("错误原因:"+e.getMessage());
	}
     
 
       System.out.println("Hi!");
	}                                         //这里是throws
	public static Integer change(String x) throws Exception{//直接抛出异常
		try {
			return Integer.parseInt(x);
		}catch(Exception e) {
			throw new Exception("传入参数有问题,参数值是"+x);//百分之白出问题,把异常传给e.getmessage()
		}    //这里是throw    catch可以接住异常 并处理 第一个catch接住异常
		
		
	}

结果如图:

异常链产出:

package com.weiyang;

public class Test2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
      m1();
	}
	public static void m1(){
		m2();
		
	}
   public static void m2(){
		
	   try {
		m3();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		System.out.print(e.getMessage()+"m2");//获取m5抛出的异常给到e。getmassage
	}//e 是线程内共享
	}
   public static void m3() throws Exception{
	m4();
	
   }
    public static void m4() throws Exception{
	 m5();
	
    }
     public static void m5() throws Exception{
	   throw new Exception("有病");
	
}

}

结果:

Tips:

ThreadLocal 是一个类,线程内共享,只能在自己的类中访问,是线程级别的作用域

System.out.print(e.getMessage()+"m2");   //其中e 是线程内共享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值