java异常原理

程序的异常:Throwable
严重问题:Error 我们不处理,这种问题一般都是很严重的,比如说内存溢出
问题:Exception
编译期问题:不是RuntimeException的异常必须处理的,如果不处理,编译就不能通过
运行期问题:RuntimeException 这种问题我们也不处理,因为这个问题出现肯定是我们的代码不够严谨,需要修正代码

我们如何处理异常呢?
A:try…catch…finally
try{
可能出现的问题
}catch(异常名 变量){
针对问题的处理;
}finally{
释放资源
}
注意:
1. 一旦try里面出现了问题,就会在这里把问题给抛出去,然后和catch里面的问题进行匹配,一旦有匹配的,
就执行catch里面的处理,然后结束了try…继续执行后面的语句
2.平级关系的异常谁前谁后无所谓,如果出现了子父级关系,父必须在后面
A:try里面的代码越少越好
B:catch里面必须有内容,哪怕是一个简单的提示
B:throws 抛出,可以抛出多个异常(不处理异常,谁调用谁处理)
目的:在方法声明上抛出,是为了告诉调用者,我有问题,需要处理
注意:这个格式必须跟在方法的括号后面,尽量不要在main方法上抛出异常
小结:
编译期异常抛出,将来调用者必须处理异常
运行期异常,将来调用者可以不用处理异常
throw:如果出现了异常情况,我们可以把该异常抛出,这个时候的抛出异常应该是异常的对象

throw和throws的区别是什么(面试题)?
throw:
用在方法体内,跟的是异常的对象名
只能抛出一个异常的对象名
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw则一定是抛出了某种异常
throws:
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用这来处理
throws表示出现异常的一种可能性,并不一定会发生这些异常

JDK7出现了一个新的异常方案:
try{

}catch(异常名1 |异常名2 |异常名3 ...变量 ){
	
}
注意:这个方法虽然简洁,但是也不够好
     A:处理方式是一致的。(实际开发中,好多时候可能就是针对同类型的问题,给出同一个处理)
     B:多个异常间必须是平级关系

编译时异常和运行时异常的区别?
编译时异常:java程序必须显示处理,否则程序就会发生错误,无法通过编译
运行时异常:无需显示处理,也可以和编译时异常一样处理
异常中要了解的几个方法
public String getMessage():异常的消息字符串
public String toString():返回异常的简单信息描述
此对象的类的name(全路径名)
“:”(冒号和一个空格)
调用此对象getLocalizeMessage()方法的结果(默认返回的是getMessaeg()的内容)
printStackTrace()获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void,把信息输出在控制台
异常注意事项

1.子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类
2.如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他得到子集,子类不能抛出父类没有的异常
3.如果被重写的方法没有异常抛出,那么子类的方法上绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws

finally特点:被finally控制的语句一定会执行
注意:如果在执行finally之前jvm退出了,就不执行了(System.exit(0))
作用:用于释放资源
final,finally,finalize的区别(面试题)?
final:最终的意思,可以修饰类,成员变量,成员方法
修饰类,类不能被继承
修饰方法,方法不能被重写
修饰变量,变量是常量
finally:是异常处理的一部分,用于释放资源
一般来说,代码肯定会执行,特殊情况:在执行finally之前jvm退出就不执行了
finalize:是Object类的一个方法,用于垃圾回收
如果catch里面有return语句,请问finally里面的代码还会执行吗?
如果会,请问在return前,还是return后
准确的说,应该是在中间

java不可能对所有的异常情况都考虑到,所以在实际开发中,我们可能需要自己定义异常
而我们自己随意写一个类,是不能作为异常类看的,想要定义一个异常类,必须继承Exceptiong或者RuntimeException
两种方式:
A:继承Exception
B:继承RuntimeException

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值