(目录)
1. 异常的介绍
Throwable有两个子类
1.错误 Error
- 不常见
- 基本上不能解决
- 尽量避免
2.异常 Exception
- 常见
- 可以定位,通过修改代码解决
- 不是编译失败问题,代码语法没有问题
2. 异常举例以及解决常见错误bug方案
- 定位错误:编写好程序后,运行程序,在输入运行结果栏中会存在异常提示,红色中蓝色链接,就能找到自己的代码错误
- 解决错误:先阅读异常提示,如果了解就直接修改,如果不了解那就搜索异常提示,了解问题所在,解决问题
最经典异常展示
3. RuntimeException
异常类有两个主要的子类:IOException
类和 RuntimeException
类
1.运行时异常
- 运行时异常可修改也可不修改,不会对项目运行产生影响
- 运行时异常像游戏漏洞,它不影响我们玩游戏,但是我们有一些漏洞可以捡,比如更新以后某个英雄的技能,在某个时间可以无限的放或者平A就能秒死人
2.非运行时异常
- 非运行时异常必须修改,因为这样会使得项目直接无法运行(现在的编译器比较智能,一定会让你
try catch
) - 但是非运行时异常导致你进不去游戏
编译器中,运行时异常不会要求你捕获,但是非运行时异常会强制要求你捕获,所以我们在编写自定义异常的时候不会定成运行时异常
4. trycatch作用,闲扯淡诱骗毕业设计
try catch
的作用
- 定位一个代码块的异常,运行完成这个代码块后,抛出这个代码块的异常
try catch
可以搭配finally
使用,意思是在捕获完成以后使用,也可以不搭配- 但使用
finally
就必须搭配try catch
- try catch的捕获内容可以自定义,可以让它抛出异常,也可以不让它抛出异常,所以根据这个小漏洞,你可以去骗毕业设计,但工作中绝对不能用!
抛出异常,正常捕获,运行可以通过,但会显示异常的结果和定位异常
不抛出异常,欺骗老师,运行还是通过,但不会定位异常
5. NullPointerException空指针异常
空指针异常的情况
Calling the instance method of a null object.
调用空对象的实例方法Accessing or modifying the field of a null object.
访问或修改空对象的字段Taking the length of null as if it were an array.
将null的长度当作一个数组Accessing or modifying the slots of null as if it were an array.
访问或修改null的插槽,就好像它是一个数组一样Throwing null as if it were a Throwable value.
将null视为Throwable值
在有关对象判断类中会有抛出空指针异常的情况
6. throws
throw
的作用就是抛出异常,有什么用呢?
- 通过捕获异常的功能,我们可以写判断或抛出异常的方法
- 在不通过的情况下提醒程序员,这样程序员可以快速的更改代码,以防止程序在后面出现更严重的问题
7. throws和trycatch区别,用途区别
throw
和try catch
的区别
throw
是用来抛出异常的,而try catch
是尝试运行并捕获- 两者结合可以达到十分好的效果
创建MyException
类,Alt+Insert
调出Generate
,选择Constructor
全选
Exception
由此抛出编译异常
在StringTest
类中测试抛出异常
也可以通过调用函数的形式抛出异常
如果未抛出异常,则会显示编译异常,未报告的异常错误,必须对其进行捕获或声明以便抛出
而如果把
MyException
改成RuntimeException
,就不会抛出编译异常,而是出现运行异常
8. 手把手教你编写装X自定义异常
创建ErrorCode
接口
编写自定义异常代码
public interface ErrorCode {
/**
* 获取错误码
* @return
*/
String getcode();
/**
* 获取错误信息
* @return
*/
String getMsg();
}
创建MyCodeEnum
枚举类
编写代码实现接口中的所有方法
public enum MyCodeEnum implements ErrorCode{
NOT_FOUND_PAGE("404","找不到网站资源"),
NOT_FOUND_FILE("888","找不到文件"),
NOT_O_TEN("bad", "只能求10以内的加法")
;
MyCodeEnum(String code, String msg) {
this.code = code;
this.msg = msg;
}
private final String code;
private final String msg;
@Override
public String getcode() {
return code;
}
@Override
public String getMsg() {
return msg;
}
}
创建MyException
类继承RuntimeException
public class MyException extends RuntimeException{
public MyException(ErrorCode errorCode) {
super(errorCode.getMsg());
}
}
在String Test
类中抛出异常,并可枚举选择异常形式