异常
什么是异常?
Java把异常当做对象处理,分为error和exception,并定义一个基类Java.lang.Throwable作为异常的超类(顶级的那种)
-
检查性异常:最常见的就是用户的错误与造成的问题引起的异常,比如用户输入不规范,或文件不存在和格式不对
-
运行性异常:编译正常但运行不正常,可能是内存溢出
-
error:由Java虚拟机JVM生成抛出,当JVM所需的内存超出时,出现OutOfMemoryError的错误并终止运行.且这些错误是不易发现的,因为他在程序的控制与处理能力之外
注意:以上是与编写程序的人员无太大关系,而以下exception与程序的逻辑错误有关;error会让JVM直接终止,而exception编译失败,但改正后就能运行
异常处理机制
int a=1,b=0;
try {
System.out.println(a/b);
}catch (Error c){
System.out.println("Error");
}catch (Exception d){
System.out.println("Exception");
}catch (Throwable e){
System.out.println("Throwable");
}finally {
System.out.println("finally");
}
//选中有异常的语句,CTRL+ALT+T快捷键8自动生成
try {
System.out.println(a/b);
} catch (Exception e) {
e.printStackTrace();//打印出错的栈信息
} finally {
}
try:判断是否有异常就像switch-case中的switch,只要符合try括号中存在异常,就执行catch语句
catch(可以有多个):捕获异常,就像case,先符合case括号中的exception类型,就只执行其中语句,随后跳到finally语句;哪怕Throwable的级别必Error,exception高,相反Throwable的顺序比exception高,就执行其语句
finally:可以不出现,但出现就必须放在最后面执行,一般做善后工作,比如关闭IO,资源
自定义异常
//继承Exception
public class Demo02 extends Exception {
int Detail;
public Demo02(int a){
this.Detail=a;
}
}
/测试方法:抛出并捕获异常
static void test(int a) {
System.out.println("输入的参数为" + a);
if (a > 10) {
try {
throw new Demo02(a);
} catch (Demo02 demo02) {
demo02.printStackTrace();
}
}
}
public static void main(String[] args) {
test(11);
}
注意:以下是使用throws,使用后就要在别的方法使用try-catch
static void test(int a) throws Demo02 {
System.out.println("输入的参数为" + a);
if (a > 10) {
throw new Demo02(a);
}
}
public static void main(String[] args) {
try {
test(11);
} catch (Demo02 demo02) {
demo02.printStackTrace();
}
}