异常想必大家都不陌生那么我们先来说一下什么是异常
异常呢通俗点就是程序在运行或者代码编写的时候出现了错误就这是异常
异常呢它又分为两大类
编译时异常:就是程序在进行代码编写的时候 编译器检测到某段代码可能会发生问题需要程序员来提前给出问题的解决方案否则编译是不可能通过的;
运行时异常:它呢就是程序编译时侯不会报错,但是在运行时候会报出错误;
异常呢也有它的体系结构
最顶层异常类Throwable ,Throwable下面又分为 Error和Exception
Error:他是严重错误 举例 拿递归举例 大家都知道递归是自己调用自己,它需要一个出口 如果没有这个出口它就会死循环导致栈内存溢出,这就属于严重错误 我认为如果程序员出现这个问题就该好好反思反思自己了;
Exception:里面又分为RuntimeException运行时异常和 !RuntimeException编译时异常 他们就是我们上面讲的编译时异常和运行时异常
那么Java它产生异常的原理是怎么样的我们来了解下
Java它对异常的默认处理方式是将异常抛给上一级但是在他抛之前他会根据产生错误的异常类,创建出该类的对象,然后底层通过throw关键字来抛给上一级知道抛到 Jvm虚拟机,jvm就会根据你抛出异常的原因跟位置打印到控制台上
对于编译时异常我们的解决办法又有哪些呢
问题可以自己处理掉的:通过 try…catch的处理方式,自己将问题解决,不影响后续代码执行
还有自己处理不掉的问题
那么什么是自己处理不掉的我们通过代码给大家展示一下
//调用者
public void main(String[] args) throws java.lang.Exception {
person person = new person();
person.setAge(-23);
}
//提供者
class person{
private int age;
public int getAge() {
return age;
}
public void setAge(int age) throws java.lang.Exception {
if (age>=0&&age<=200){
this.age = age;
}else {
throw new java.lang.Exception("您的年龄输入有误");
}
从这段代码我们可以看出我们就提供者提供了一个person类, 类里面有age的属性,跟他的set,get方法 那么我们就根据这段代码给大家讲解 好比我们就是提供者那么我们能保证调用者给我们传正确的参数吗? 显然是不可能的那么这就叫自己处理不了的异常对于这种异常的解决办法我们可以通过throws进行抛出;
throws抛出处理方式:如果发现问题自己解决不了,就可以通过throw关键字来抛出异常对象,但是方法上必须加上throws的声明来告诉调用者此方法存在异常;
小细节:如果抛出的是RuntimeException,方法上就不需要加throws声明;