异常

异常

异常的含义:

异常就是指不正常,在软件开发中常指程序错误。

在java中经常会出现异常,比如NullPointerException空指针异常,出现异常时如果没有任何处理,则会交由jvm处理,暂停程序并报错,所以在开发过程中都会有对应的异常处理方案。

异常处理:

解决方法1:

​ 通过大量的if判定来确保程序没有异常,但是程序开发最终是要面向用户, 编写的判定逻辑不可能将所有情况都囊括进去,程序在执行过程中如果出现问题,出现异常此时由于没有异常处理方案,会导致jvm暂停程序报错。用户肯定是不能忍受的。同时,通过if判定完成异常校验会使代码臃肿、不利于阅读以及维护。

解决方法2:

​ 通过try catch 内部处理异常,下面是try catch里常用的几种形式

try catch
try{
	有可能出现异常的代码块
}catch(异常声明){
	异常处理
}
try 多重catch
try{
	有可能出现异常的代码块
}catch(异常声明1){
	异常处理
}catch(异常声明2){
	异常处理
}....{
    
}catch(异常声明n){
	异常处理
}
try catch finally
try{
	有可能出现异常的代码块
}catch(异常声明1){
	异常处理
}....{   

}finally{
	代码块(放关闭资源的代码)
}
//finally块的作用就是尽早关闭资源,防止内存的浪费
try catch块执行顺序

先执行try{}里的代码块,如果出现异常,jvm会自动创建一个异常对象,然后去catch块中寻找是否有匹配的异常信息,匹配上之后继续执行catch方法,(从上往下匹配只执行第一个匹配上的catch块,所以不要把父类异常写在前面,否则后面的块永远不会被执行,会出现编译错误),如果没有匹配的catch块会交给jvm,jvm会直接抛出异常中断程序。

注:如果使用了finally,那么一定会执行finally里的代码块,无论是否匹配上ctach块。如果try{}块里面有return语句,会在执行完finally之后再执行。(可以通多System.exit强行退出finally块,不建议)

try-with-resource

finally块需要手动去关闭资源,如果开启的资源很多,那么关闭资源的代码将会很臃肿,所以在jdk1.7之后多了try-with-resource 之后可以使用直接在try后面(开启资源),无需再显式地去在finally里关闭资源。

try(Scanner in = new Scanner(System.in)) {//系统自动关闭资源,无需手动去关闭扫描器
			System.out.println("请输入第一个数");
			int num1 = in.nextInt();
			System.out.println("请输入第二个数");
			int num2 = in.nextInt();
			System.out.println(num1+"/"+num2+"="+num1/num2);
			InputStream stream = new FileInputStream(new File(""));
		} catch (InputMismatchException e) { 
			System.out.println("输入异常");
		} catch (ArithmeticException e) { 
			System.out.println("算数异常");
		} catch (FileNotFoundException e) {
			System.out.println("io异常");
		} catch (Exception e) {
			System.out.println("网络异常");
		} 
解决方法3

​ 通过在方法的参数列表后面throws 异常,对外抛出异常来将异常交给调用者处理,在main方法中使用会直接交给jvm执行。

异常分类

编译时异常(检查时异常)

编译时异常不能通过编译,所以一定要立即处理,只能通过try catch或者 throws向外抛出异常。

运行时异常

运行时异常在编译过程中不会报错,运行时才会报错,可以不立即处理。

throws throw

throw:

1:throw 声明当前代码块中可能存在的异常信息,并且将当前异常信息抛出给调用者。

对于调用者而言,可以通过try-catch捕获异常 ,如果调用者不处理则当前异常交由jvm解决

2:throw会导致当前程序中断掉,后续代码不执行

throws:

1:throws 在方法外对外抛出某个异常,调用者解决当前异常。main方法中对外抛出的异常全部都交由jvm做。

2:throws抛出异常,是异常解决的一种办法定义在方法声明的参数列表后,可以抛出多个异常通过","分割

两者比较:

throw 定义在方法内部,声明当前方法可能出现的异常信息,可以导致当前程序中断。

一般throws和throw会一起使用,throw 声明的异常是检查时异常需要和throws一起使用 。

但是throws可以单独使用,throw单独使用会中断程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值