Java8:异常处理
2020-12-24 00:28
标签:code flow 存在 roc get 运行时 char 大于 valueof Error:Java虚拟机无法解决的严重问题: 抛——程序在正常执行的过程中, 一旦出现异常,会产生并抛出一个异常类的对象,之后代码不执行 抓——处理异常的方式 说明: 异常代码处生成一个异常类的对象,此对象满足throws后的异常类型时,就会被抛出。异常代码后续的代码不会再执行。 try-cathch-finally:真正将异常处理掉了 (1)如果父类中被重写的方法没有throws处理异常,则子类重写方法也不能用throws 1.运行时异常可以不在方法声明里throws 1.继承现有的异常体系结构RuntimeException,Exception throw:抛出一个异常类的对象,生成异常对象的过程声明在方法体内 Java8:异常处理 标签:code flow 存在 roc get 运行时 char 大于 valueof 原文地址:https://blog.51cto.com/14234228/2507572
JVM系统内部错误,资源耗尽,如:StackOverflow \OOM堆栈溢出
处理办法:只能修改代码,不能编写处理异常的代码
Exception:可以处理的异常
(1)空指针访问
(2)试图读取不存在的文件
(3)网络连接中断
(4)数组角标越界
处理异常的最佳时间:编译期间
编译时异常----受检异常-----更严重,执行javac.exe命令时可能出现的异常
运行时异常---非受检异常---执行java.exe命令时,出现的异常---一般也不用try-catch处理(实际开发中)
异常的体系结构:
常见的异常类型,举例说明:/* **************运行时异常************ */
@Test
//ArithmeticException
public void test1(){
int a=2;
int b=0;
System.out.println(a/b);
}
@Test
//InputMismatchException
public void test2(){
Scanner scanner=new Scanner(System.in);
int score=scanner.nextInt();
System.out.println(score);
scanner.close();
}
@Test
//NullPointerException
public void test3(){
int[] num=null;
System.out.println(num[3]);
String str=null;
System.out.println(str.length());
}
@Test
//ArrayIndexOutOfBoundsException
//StringIndexOutOfBoundException
public void test4(){
int[] num = new int[2];
System.out.println(num[3]);
String str="abc";
System.out.println(str.charAt(5));
}
@Test
//ClassCastException
public void test5(){
Object obj=new Date();
System.out.println(obj);
String str=(String)obj;
}
@Test
//NumberFormatException
public void test6(){
String str="abc";
System.out.println(Integer.valueOf(str));
}
二、异常处理机制
1.抓抛模型
关于异常类对象的产生:(1)系统自动生成的异常对象
(2)手动生成一个异常对象并抛出throw new 异常名();
(1)try-catch-finally
(2)throws 往外抛,最多抛到main就要处理 2.异常处理方式一:try-catch-finally
try{
// 可能产生异常的代码
}catch(异常类型1 变量名1){
//处理异常的方式1
}catch(异常类型2 变量名2){
//处理异常的方式2
}finally{
//一定会执行的代码
}
(1)finally是可以省略的
(2)使用try将可能产生异常的代码包装起来,一旦出现异常,就会生成一个对应的异常类对象
根据此对象的类型,去catch中进行匹配
(3)一旦try中的异常对象匹配到某一个catch,就会进入catch中进行异常的处理,一旦处理完成,
就跳出当前的try-catch结构(在没有写finally时),继续执行其后的代码
(4)catch中的异常类型如果没有子父类关系,则谁声明在上,在下无所谓
catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面,否则会报错
(5)常用的异常对象处理方式:
①String getMessage()
②e.printStackTrace()
(6)在try结构中声明的变量,出了try结构以后,就不能再被调用
finally的认识
(1)finally中声明的语句是一定会被执行的代码,即使catch中又出现了异常,try中有return,catch种有return语句等
(2)finally中的语句会在所有return语句执行前被执行
finally中如果有return,直接执行finally中的return
(3)finally的使用场景:
像数据库连接、输入输出流、网络编程Socket等资源,
JVM是不能自动回收的,需要手动进行资源释放,就需要声明在finally中
体会:
(1)使用try-catch-finally处理编译时异常,使得程序在编译时不再报错,但运行时仍可能报错
相当于shiyongtry-catch-finally将一个编译时可能出现的异常,延迟到运行时出现
(2)开发中,由于运行时异常比较常见,所以通常不针对运行时异常编写try-catch-finally
编译时异常,一定要考虑异常处理3.异常处理方式二:throws+异常类型
写在方法的声明处,指明此方法执行时,可能会抛出的异常类型。一旦当方法体执行时,出现异常,仍会在
4.对比两种处理方式
throws+异常类型:只是将异常抛给了方法的调用者,并没有真正将异常处理掉
体会
(1)父类没有抛出异常,子类也不能抛异常
(2)子类抛出的异常不大于父类抛出的异常5.开发中如何选择使用try-catch-finally还是throws
只能用try-catch-finally
(2)执行的方法中,先后调用了另外几个方法,这几个被调用的方法是递进关系执行的,
建议使用throws处理这几个方法,执行方法使用try-catch-finally三、手动抛出异常对象 throw
2.编译时异常需要在方法声明中抛出四、用户自定义异常
2.提供序列版本号
3.提供重载的构造器五、throw和throws的区别
throws:属于异常处理的一种方式,在方法声明处声明
上一篇:融入python-6-赋值