异常:程序执行过程中的不正常情况
异常的作用:增强程序的健壮性
int a = 10;
int b = 0;
int c = a / b;
// 实际上JVM在执行到此处的时候,会new异常对象:new ArithmeticException("/ by zero");
//并且JVM将new的异常对象抛出,打印输出信息到控制台了。
System.out.println(c);
检查性异常:
? 最具代表的检查性异常使用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在的文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略
运行时异常:
? 运行时异常是可能被程序员避免的异常。与检查性异常相反 ,运行时异常可以在编译时被忽略
错误ERROR:
? 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如:当栈溢出时,一个错误就发生了,它们在编译也检查不到
第一种:抛出异常
在方法声明的位置上,使用throws关键字,抛给上一级。
上抛类似于推卸责任(继续把异常传递给调用者)
public class Exception {
// 第一种处理方式:在方法声明的位置上继续使用throws来完成异常的继续上抛。抛给调用者
public static void main(String[] args) throws ClassNotFoundException{
doSome();
}
public static void doSome() throws ClassNotFoundException{
System.out.println("ClassCastException");
}
}
第二种:捕获异常
使用try...catch语句进行异常的捕获。
捕捉等于把异常拦下了,异常真正地解决了,(调用者不知道)
public class Exception {
//第二种处理方式:try...catch进行捕捉
public static void main(String[] args){
try {
doSome();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void doSome() throws ClassNotFoundException{
System.out.println("ClassCastException");
}
}
注意:Java中异常发生之后如果一直上抛,最终抛给了main方法,main方法继续上抛,抛给了调用者JVM,程序将被终止。
如果希望调用者处理异常就用throws上报,其余情况使用try...catch
异常处理五个关键字
try、catch、finally、throw、throws
public class Test{
public static void main(String[] args){
int a = 1;
int b = 0;
//IEDA快捷键:Ctrl + Alt + T
try{//try监控区域
System.out.prtinln(a/b);
}catch(Exception e){//catch(想要捕获的异常类型!) 捕获异常 表示是否有这个异常,有则执行此处代码块
System.out.println("程序出现异常");
}finally{// 处理善后工作,一定会执行
System.out.println("finally");
}
//finally 可以不要finally, 假设IO,资源,关闭
}
}
public class Exception {
public static void main(String[] args) {
try {
new Exception().test(1,0);
} catch (java.lang.Exception e) {
e.printStackTrace();
} finally {
}
}
// 假设这方法中,处理不了这个异常。方法上抛异常
public void test(int a , int b) throws ArithmeticException{
if (b==0){//throw throws
throw new ArithmeticException();//主动地抛出异常,一般在方法中使用
}
}
}
两步:
原文:https://www.cnblogs.com/Susunshome/p/15024783.html