异常
异常
异常(Exception)
异常指的是在程序运行过程中发生的异常事件,通常是由外部问题(如硬件错误、输入错误)所导致的
人做事一般都不会一帆风顺,会出现意外或者突发情况
检查性异常:检查性异常是由于用户输入和问题引发的异常,这是程序猿无法预见的,这些异常在编译时不能被简单的忽略
运行时异常:运行时异常时可能被程序猿避免的问题,而这些异常在编译时能被简单的忽略
错误(Error)
错误不是异常,而是脱离程序源控制的问题,错误在代码中通常被忽略,一般都是java虚拟机生成的
异常与错误的区别
异常(Exception)都是运行时的。编译时产生的不是异常,而是错误(Error)。
最开始大家都将程序设计导致的错误(Error)认定为不属于异常(Exception)。
但是一般都将Error作为异常的一种,所以异常一般分两类,Error与Exception。
出现error一般java虚拟机都会选择终止线程,而出现Exception一般都在程序中处理
异常的结构

他们的超类(最大的类)是Throwable,有两个重要的子类Exception和Error,Exception包括了程序的编译和运行时异常,Error一般都是由于jvm的原因导致的,所以要尽量的避免出现Error因为它属于严重的错误
异常的处理机制
捕获异常
public class Exception {
public static void main(String[] args) {
int a=0;
int b=1;
try { //监控区域
System.out.println(b/a);
}catch (java.lang.Exception e){ //捕获异常,catch括号里面是想要捕获的异常类型
System.out.println("被除数不能为0");
}finally { //一般用来关闭资源,无论如何fanally下面的代码块都会执行
System.out.println("finally");
}
}
}
注意点:
- try里面的代码发生异常,就会去catch寻找适合的异常类型,然你输出catch的代码块
- catch代码块可以有多个,但是catch里面的捕获异常类型必须从小到大的异常类
- idea的快捷键ctrl+alt+t
- try,catch,finally,可以少一个catch,可以少一个finally,但是必须要有try和其中一个
抛出异常
public class Exception {
public static void main(String[] args) {
//一般向上抛出异常,调用时实现try-catch
try {
new Exception().test();
} catch (ArithmeticException e) {
e.printStackTrace(); //打印异常信息
}
}
//处理不了这个异常,方法上抛出异常,交给调用的类实现try-catch
public void test() throws ArithmeticException{
System.out.println(1/0);
throw new ArithmeticException(); //一般在方法中使用,主动的抛出异常
}
}
自定义异常
一般java内置的异常够我们使用了,但是用户也可以自定义异常
自定义异常的类
public class MyException extends java.lang.Exception {
private int detail; //定义一个变量
public MyException(int message) { //使用构造方法接受传进来的值
this.detail = message; //将私有的变量值等于传进来的值
}
@Override
public String toString() { //打印输出信息
return "MyException{" +
"detail='" + detail + '\'' +
'}';
}
}
测试类
public class Test {
static void test(int a) throws MyException {
if(a>10){ //当传进来的值大于10
throw new MyException(a); //调用自定义异常的类中构造器的方法
}
System.out.println(a); //输出传进来的值
}
//要么给这个方法往上抛出,要么实现try-catch
public static void main(String[] args) {
try {
test(11); //调用静态test的方法
} catch (MyException e) {
System.out.println("出现异常"+e); //输出自定义类中的打印输出方法
//当我们调用 print 或者 println 打印一个对象时,它会打印出这个 对象的 toString()的最终根源
//不懂的可以看看百度
}
}
}
It's never too late to be the person you want to be.
去做你想成为的那个人永远都不会晚

浙公网安备 33010602011771号