Java异常
2023/5/15大约 3 分钟
什么是异常
异常是一个在程序执行期间发生的事件,它中断了正在执行程序的正常指令流。在程序中,错误可能产生于程序员没有预料到的各种情况或者是超出了程序员可控范围的环境因素,为了保证程序有效地执行,需要对发生的异常进行相应的处理
异常分类
- Throwable接口
- Error:系统级别的问题,jvm,内存溢出等问题,代码无法解决
- Exception:java.lang包下,异常类,表示程序本身可以处理的问题
- RuntimeException:运行时异常,空指针异常,数组越界异常
- 非RuntimeException:编译时异常,编译期必须处理
- 编译型异常,在代码运行前一般要用异常处理机制来处理这段代码
运行时异常
- 继承自RunTimeException
数据越界异常 空指针异常 数学操作异常 类型转换异常 数字转换异常
常见编译时异常
- 必须要处理
IO类
JDBC类
日志解析异常处理方式
- try...catch
try{//可以try{}finally{}
}catch(){
}finally{
//无论捕获得到异常都会执行,try,catch块中的return不会影响
}- throws/throw
throw:方法内部表示抛出异常,抛出的什么时候可以控制抛出什么异常----异常处理
throws:声明一个方法有风险的,要抛出异常---代表该方法需要被处理,抛出异常给调用的方法,但更像是标记异常需要被处理
``` 如果抛出的是运行时异常,可以不做处理,但编译时异常一定要处理
```java
public class test1 {
public static void main(String[] args) {
try {
show();
} catch (Exception e) {
System.out.println("异常了");
}
System.out.println("继续");
}
public static void show() throws FileNotFoundException {
FileOutputStream f=new FileOutputStream("");
}
}- 默认方式
一层层往外抛出,直到程序终止细节
- 子类在重写父类方法的时候,子类的方法必须抛出的是与父类相同的异常,或者父类异常的子类
自定义异常
- 希望代码中的问题能够进入异常管理机制的管理,问题就一定要有对应的异常类
- 需要自己为自己的问题定义异常类
自定义异常的实现:
- 创建一个类,继承一个异常类,一般情况下编译异常,继承自Exception,运行时异常,继承自RunTimeException
- 重写构造器,提供异常信息
- 在出现自定义异常的地方,异常抛出
package 面向对象.异常;
public class test1 {
public static void main(String[] args) throws MyException {
connect("192.168.1.12",8080);
}
static void connect(String ip,int port) throws MyException {
throw new MyException();
}
}
class MyException extends Exception{
public MyException() {
super("服务器端口被占用");
}
public MyException(String message) {
super(message);
}
}package 面向对象.异常;
public class test1 {
public static void main(String[] args) {
try {
connect("192.168.1.12",8080);
} catch (MyException e) {
System.out.println(e.getMessage());
}finally {
System.out.println("继续执行程序");
}
System.out.println("程序继续执行中");
}
static void connect(String ip,int port) throws MyException {
throw new MyException();
}
}
class MyException extends Exception{
public MyException() {
super("服务器端口被占用");
}
public MyException(String message) {
super(message);
}
}