java8中的异常处理介绍
这篇文章的知识点包括:异常处理的简介、异常处理的工作机制以及异常处理的使用,阅读完整文相信大家对java8中的异常处理有了一定的认识。
企业建站必须是能够以充分展现企业形象为主要目的,是企业文化与产品对外扩展宣传的重要窗口,一个合格的网站不仅仅能为公司带来巨大的互联网上的收集和信息发布平台,成都创新互联公司面向各种领域:OPP胶袋等网站设计、营销型网站建设解决方案、网站设计等建站排名服务。
一、异常概述与异常体系结构
Error:Java虚拟机无法解决的严重问题:
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+异常类型
写在方法的声明处,指明此方法执行时,可能会抛出的异常类型。一旦当方法体执行时,出现异常,仍会在
异常代码处生成一个异常类的对象,此对象满足throws后的异常类型时,就会被抛出。异常代码后续的代码不会再执行。
4.对比两种处理方式
try-cathch-finally:真正将异常处理掉了
throws+异常类型:只是将异常抛给了方法的调用者,并没有真正将异常处理掉
体会
(1)父类没有抛出异常,子类也不能抛异常
(2)子类抛出的异常不大于父类抛出的异常
5.开发中如何选择使用try-catch-finally还是throws
(1)如果父类中被重写的方法没有throws处理异常,则子类重写方法也不能用throws
只能用try-catch-finally
(2)执行的方法中,先后调用了另外几个方法,这几个被调用的方法是递进关系执行的,
建议使用throws处理这几个方法,执行方法使用try-catch-finally
三、手动抛出异常对象 throw
1.运行时异常可以不在方法声明里throws
2.编译时异常需要在方法声明中抛出
四、用户自定义异常
1.继承现有的异常体系结构RuntimeException,Exception
2.提供序列版本号
3.提供重载的构造器
五、throw和throws的区别
throw:抛出一个异常类的对象,生成异常对象的过程声明在方法体内
throws:属于异常处理的一种方式,在方法声明处声明
看完上述内容,你们对java8中的异常处理有进一步的了解吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读。
当前名称:java8中的异常处理介绍
当前地址:http://scyanting.com/article/jdiioe.html