首先异常是什么呢?不好说,我的结论就是一种你可以去避免的问题,我们不能因为一些存在的异常,就让整个程序停止,这让不好,你的程序就太瘦弱了,健壮性不足,所以要学会异常,师夷长技以制夷。
异常体系图
异常分运行时异常,这个你可以try catch ,另一个是编译异常必须要改,相当于癌症晚期了属于是
常见的运行异常
Animals cat = new Cat();
Cat cat1 = (Cat)cat;
Cat cat2 = (Dog)cat1;//这里就不行,你是猫这么还能变成狗讷?
处理异常
一种是try+catch+final,一定有try
还有一种是throw,甩锅组合,把他甩到上一级,看啊看会不会处理,知道jvm,直接输出错误信息终止程序,其实只要你不用try catch都会默认throw
我觉得值得说说的就是一旦发生异常,try里面的语句就会转到catch或者final(无catch的情况且不会执行下面的语句了捏),要是有catch的话就还会执行下面的语句,其实也没什么。
放几道练习题就好了
这里唯一的一点就是只能return 一个,就是catch里的return只能做return的操作,
实践的案例如下,你让用户输入,用户指不定给你输入些牛马,所以这时就可以try catch
public class Text
{
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
int lbk = 0;
while (true)
{
try {
Scanner scanner1 = new Scanner(System.in);
lbk = scanner1.nextInt();
break;
} catch (Exception e) {
System.out.println("你的输入有误");
}
}
System.out.println(lbk);
}
}
这里说一点要注意的就是有多个异常的话,把子类的异常写前面,主要是逻辑问题,你要是第一个就写了父类的异常要是有的话,铁进入,后面再次重复也不好
我说说那个final其实无论如何都要执行,就是在程序快到异常,既无catch时会,会最后一个执行,普通的开摆就行
throws和throw
throw就是摆烂,看有无人员接手,一直摆烂,最后会摆到jvm上,jvm就会直接给你停了,叫你运行
细节一
throw和throws的区别
我觉得可以这么理解,方法只有一个throw,但类里却可以有许多方法所以用throws
细节二
自定义异常,就是extend继承运行异常,因为运行异常会有有默认的,但是你编译异常的一个个写,烦死了
细节三
当父类抛出异常时,子类重写的方法是不能超过父类异常的范围,就是说你子类的异常只能是父类的异常或其异常的子类。就像范问权限一样捏