Excpetion和error都是Throwable的子类
error 不可解决的错误 比如 运行内存不够,或者代码编写有误 都会报错 jvm自动终止程序
Excpetion 分为编译期异常和运行期异常 编译期异常可以被检查出来,比如Thread.sleep会爆红
运行期异常就交给jvm去做。
处理编译异常的两种方式:
1.自己处理 try catch
2.throw 交给jvm处理 jvm处理方式: 直接中断程序
处理异常:
1. try catch 立刻马上自己就给处理了
2. throw catch 抛出异常 给调用本方法的人处理, 调用本方法的人有两种处理方式:
a try catch b 也扔出去 给别人处理 如果最终都没有人处理 最终会抛给jvm jvm采用中断处理
Throwable 类常⽤⽅法
public string getMessage() :返回异常发⽣时的简要描述
public string toString() :返回异常发⽣时的详细信息
public string getLocalizedMessage() :返回异常对象的本地化信息。使⽤ Throwable 的⼦类覆
盖这个⽅法,可以⽣成本地化信息。如果⼦类没有覆盖该⽅法,则该⽅法返回的信息与
getMessage 返回的结果相同
public void printStackTrace() :在控制台上打印 Throwable 对象封装的异常信息
public class test1 {
//第一种方法 抛出异常给jvm处理
public static void main(String[] args) throws Exception {
try{
int a = 1/0;
}catch (Exception e)
{
// throw new Exception("异常!");
}
}
}
class test2{
//第二种方法 抛出异常给jvm处理
public static void main(String[] args) {
try{
int a = 1/0;
}catch (Exception e)
{
// System.out.println(e.getMessage());/// by zero
// System.out.println(e);//java.lang.ArithmeticException: / by zero
e.printStackTrace();
/*
java.lang.ArithmeticException: / by zero
at 面试.异常.test2.main(test1.java:47)*/
}
}
}
class test3{
//为了演示得更清楚 这次的异常写在另一个方法里
public static void main(String[] args) throws ArithmeticException {
//method的方法没有处理异常 把异常抛出 谁调用它 谁就会获得该异常 处理方法 要么还是抛出 要么自己处理
method();
//我们这里处理的是抛异常 或者第二种方法 不抛 自己处理:
// try{
method();
}catch (Exception e )
{
e.printStackTrace();
}
}
public static void method() throws ArithmeticException
{ //这是运行期异常 可以不处理 jvm会处理 但是为了演示处理异常的抛异常方法 我们这里抛一下异常
int a = 1/0;
}
}