异常
什么是异常?
异常是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 是线程内共享