先看看百度里面给的图片吧。
异常的出现以及处理
异常的分类
用户造成的异常
这种就无法避免了,因为用户的行为,我无法控制,但是可以进行提醒。
程序员造成的异常
这种异常就要避免,能catch就catch,否则就throws.
异常的根基Throable
子类Error,目前我还没有遇到过。因为这个是jvm虚拟机抛出的严重问题。一般不可处理
Execption :一般可处理的异常。
这里给一篇比较好一点的文章吧。
try-catch-finally
空指针异常
这里有一篇写的比较好的空指针异常文章。
https://www.cnblogs.com/ttflove/p/6033393.html
产生原因:
- 引用类型,常见的是对象没有开辟空间,那么就会赋值给一个默认值null。结果你给属性赋值和调用方法就会报空指针异常。
引用类型:目前我知道的有String, int [ ] arr , 对象。
null就是引用类型的默认值,这个可以通过基本数据类型像int 默认值为0,但是实际情况下,基本数据类型不给初值会报错。
但是因为引用类型可以不用赋初值,所以系统就自己给你赋初值,给null
给个例子吧
先写一个类
public class TestClass {
public int getNum(int num) {
return 0;
}
public void inputName() {
System.out.println("输出用户的名字");
}
public void add() {
System.out.println("添加用户信息");
}
}
再写个main方法
public class TestMain {
public static void main(String[] args) {
TestClass test = null ; //赋值给null ,
TestClass test1 ; //上行代码以及这行代码千万别写,你会被批得狗血淋头。
test.add(); //调用成员方法。会报空指针异常
}
}
解决方法
上面得例子为例,解决方法是在调用该对象时,加个判断语句。
if( test != null ) {
test.add();
}
try-catch-finally
有异常语句的代码块才放到try中,
catch可以一个没有,也可以很多。
finally可以没有,最多只能有一个。finally里面的语句一定会执行。
try{
Thread.sleep(1);
}catch(子类异常名Expecton e){ //子类异常放上面,因为子类异常更加的具体
//****啥语句
}catch(Expecton e){ //最后写父类Expetion 异常。
//****啥语句
}
finally{
//这里的代码一定会执行。
}