try{
//可能出现异常的代码
}catch(异常类型1 变量名e){
//处理异常的方式1
}catch(异常类型2 变量名e){
//处理异常的方式2
}
…
finally{
//一定会执行的代码
}
如果明确知道产生的是何种异常,可以用该异常类作为catch的参数;也可以用其父类作为catch的参数。比 如 : 可 以 用 ArithmeticException 类 作 为 参 数 的 地 方 , 就 可 以 用RuntimeException类作为参数,或者用所有异常的父类Exception类作为参数。但不能是与ArithmeticException类无关的异常。NullPointerException(catch中的语句将不会执行)。
使用try将可能出现异常代码包装起来,在执行过程中,一旦出现异常, 就会生成一个对应异常类的对象,根据此对象的类型,去catch中进行匹配。一旦try中的异常对象匹配到某一个catch时, 就进入catch中进行异常的处理。处理完成,就跳出当前的try-catch结构(在没有写finally的情况)。继续执行其后的代码。
catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓。
catch中的异常类型如果存在子父类关系,则要求子类一定声明在父类的上面,否则会报错。
异常对象处理(一般写在catch语句里面,如e.printStackTrace()
):
①返回String的getMessage()
,获取异常信息。
②没有返回值的printStackTrace()
,获取异常类名和异常信息,以及异常出现在程序中的位置。
在try结构中声明的变量,再出了try结构以后,就不能再被调用。
try-catch-finally结构可以嵌套。
使用try-catch-finally处理编译时异常,是得程序在编译时就不再报错,但是运行时仍可能报错。相当于我们使用try-catch-finally将一个编译时可能出现的异常,延迟到运行时出现。
开发中,由于运行时异常比较常见,所以我们通常不针对运行时异常编写try-catch-finally。而针对于编译时异常,一定要考虑异常的处理。
通过throws方式
"throws 异常类型
"写在方法的声明处,指明此方法执行时,可能会抛出的异常类型。一旦当方法体执行时,出现异常,会在异常代码处生成一个异常类的对象,此对象满足throws后写的异常类型时,就会被抛出。异常代码后续的代码不再执行。
public void readFile(String file) throws FileNotFoundException {
…
// 读文件的操作可能产生FileNotFoundException类型的异常
FileInputStream fis = new FileInputStream(file);
…
}
try-catch-finally真正地将异常给处理掉了。
throws的方式只是将异常抛给了方法的调用者,并没有真正将异常处理掉。
重写方法不能抛出比被重写方法范围更大的异常类型。在多态的情况下,对methodA()方法的调用-异常的捕获按父类声明的异常处理。
public class A {
public void methodA() throws IOException {
…
}
}
public class B1 extends A {
public void methodA() throws FileNotFoundException {
…
}
}
public class B2 extends A {
public void methodA() throws Exception { //报错
…
}
}
如果父类中被重写的方法没有throws方式处理异常,则子类重写的方法也不能使用throws,意味着如果子类重写的方法中有异常,必须使用try-catch-finally方式处理。
手动抛出(生成创建)异常(throw)
Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要使用人工创建并抛出。
首先要生成异常类对象,然后通过throw语句实现抛出操作(提交给Java运行环境)。例如:
IOException e = new IOException();
throw e;
或者直接
throw new IOException();
用户自定义异常类
一般地,用户自定义异常类都是RuntimeException的子类。
自定义异常类必须继承现有的异常类。
自定义异常类通常需要编写几个重载的构造器。
自定义异常需要提供serialVersionUID。
自定义的异常通过throw抛出。
最后如何让自己一步步成为技术专家
说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。
当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。
推荐一份Java架构之路必备的学习笔记,内容相当全面!!!
成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。
你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!
进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!
【关注】+【转发】+【点赞】支持我!创作不易!
看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。
你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!
进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!
【关注】+【转发】+【点赞】支持我!创作不易!