一、什么是异常 异常的处理机制
所谓异常,就是在程序的执行过程中,出现了种种非正常情况,最终导致JVM虚拟机非正常的停止
在Java的世界中,我们本身就存在一个一个异常的类,产生异常的无非就是创建一个异常的对象并且将它抛出,一些前辈们已经为我们罗列了成百上千的异常情况。 Java处理异常的的方式是中断处理
1、异常的分类
特别强调,error的JVM两个异常第一个是栈溢出,第二个是内存溢出
(1)Error:
(2)Exception:
2、异常处理的五个关键字
try/catch/finally | throw/throws
3、异常处理机制三个关键字的作用,以及 他们的执行过程
try - catch - finally
补充:finally可有可无,Io和资源关闭的时候,里面放这些代码;但是try和catch一定要有的!
4、想要捕获多个异常可以在直接罗列即可,要把最大的异常写到最后面,要不然执行第一个捕获异常就停止了(当我们把范围大的异常写到上面的时候,系统会报错,报错的内容是上面的错误异常范围大,已经包含了小的异常)
注意:catch中变量后面的字母可以随便定义
5、生成try/catch快捷键
ctrl + Alt + T
6、我们也可以选择主动抛出异常,这里就用到了throw和throws
二者的区别在于:
throw是写在方法体上的;
throws是写在方法的定义上的
二、常见的异常类及解决办法
1、UnsupportedClassVersionError : 提示当前的jdk版本过低,需要更新jdk版本
那么更换JDK版本的方法如下:
(1)点击File中的Project Structure
(2)点击SDKs
(3)点击“+”号,然后点击“Add JDK”
(4)点击Modules,选择切换的JDK语言标准
(5)点击Dependencies,导入JDK对应版本的原生依赖
(6)点击Project,查看JDK默认值是否是新的版本号,如果不是则手动调整一下
(7)最后点击Apply,点击OK即可!
2、InvalidClassException:序列化冲突异常
(1)出现原因:
(2)解决方法:
在类中加这么一个属性,就像但与我们在对这个类修改的时候,当我们再次进行序列化或者反序列化时,程序不会认定这是一个新的类而是把它当作这个类的版本升级
三、自定义异常
方法很简单,要继承Exception类
//测试自定义异常类
public class TestException extends Exception{
private int datail;
public TestException(int a) {
this.datail = a;
}
@Override//作用就是可以打印异常信息
public String toString() {
return "TestException{" +
"datail=" + datail +
'}';
}
}
//测试类
public class Test {
static void test(int a) throws TestException {
//写一个容易出现异常的方法
System.out.println("传递的参数为:" + a);
if (a > 10) {
throw new TestException(a);
}
System.out.println("OK");
}
public static void main (String[]args){
try {
test(11);
} catch (TestException e) {//这个e会调用异常类的toString方法,打印异常信息
//当然这里面还可以自己加一些处理异常的代码块,解决出现的问题
System.out.println("TestException->" + e);
}
}
}