Java异常1

异常:

1、异常不上编译错误,编译错误是运行之前就检查出的

2、异常是程序运行过程中出现不正常现象

异常的危害

1、从出现异常的语句开始,程序就中断了

2、提供异常的信息不友好

异常处理机制

为什么需要有异常的处理机制,

如果使用if......else来处理代码漏洞,这个不上一个长久之计

1、首先如果是使用if ......else会使代码非常臃肿

2、处理异常的代码和执行功能的代码在一起会十分混乱

3、不能堵住所有的漏洞

异常处理机制的方式

1、try......catch:

原理:

1、try语句块,:有可能出现异常的代码

2、catch语句块:如果异常被成功捕获了,处理异常的代码

3、如果出现异常,try语句块李出现异常的语句开始,try语句块之后的代码就不会执行

4、如果catch了异常,执行异常处理语句,执行完成后面程序不会中断,还会继续执行

5、如果没有catch住程序一样会执行

catch语句块

1、printStatchTrace();

2、getMessage();

System.out.print(e.getMessage());

3、System.err.println("自定义需要输出的错误信息")

4、System.out.println("自定义输出信息")

5、toString();

System.out.print(e);

java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a,b,c;
try {
    System.out.println("请输入被除数");
    a=sc.nextInt();
    System.out.println("请输入除数");
    b=sc.nextInt();
    System.out.println("结果");
    c=a/b;
} catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
    System.out.println("输出");
    System.err.println("格式不对");
    System.err.println(e);
    System.out.println("输出错误");
    System.out.println(e);
}

    }
}

2、异常处理机制,try后面跟多个catch语句块

try......catch......catch:

执行原理:从上到小依次匹配catch语句中的异常类型,执行第一个匹配到catch语句块,如果后面还有匹配的也不在执行,跳出try......catch结构执行后面的语句,如果能catch异常,就执行一条

catch语句的顺序,子类型放在前面,父类型放在后面

java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a,b,c;
try {
    System.out.println("请输入被除数");
    a=sc.nextInt();
    System.out.println("请输入除数");
    b=sc.nextInt();
    System.out.println("结果");
    c=a/b;
    System.out.println(c);
} catch (InputMismatchException e) {
  System.out.println("输入的数据格式不对");
}catch(ArithmeticException e){
    System.out.println("除数不能是零");

}catch(Exception e){
    System.out.println("程序出现异常");
}

System.out.println("代码继续执行");

    }
}

3、异常处理机制:try......catch......finally

finally的执行结果:

1、没有异常:能执行

2、有异常,捕获到了:能执行

3、有异常,没捕获到:能执行

4、finally语句前如果有return,先执行finally在执行return

5、System.exit(1);退出虚拟机,只有这种情况,finally才不执行

finally语句一般是收尾语句,如关闭资源,断开连接等

java 复制代码
import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a,b,c;
try {
    System.out.println("请输入被除数");
    a=sc.nextInt();
    System.out.println("请输入除数");
    b=sc.nextInt();
    System.out.println("结果");
    c=a/b;
    System.out.println(c);
} catch (InputMismatchException e) {
  System.out.println("输入的数据格式不对");
}catch(ArithmeticException e){
    System.out.println("除数不能是零");

}catch(Exception e){
    System.out.println("程序出现异常");
}finally{
    System.out.println("执行finally语句");
}

System.out.println("代码继续执行");

    }
}
相关推荐
lsx2024061 分钟前
SQL MID()
开发语言
Dream_Snowar4 分钟前
速通Python 第四节——函数
开发语言·python·算法
西猫雷婶5 分钟前
python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分
开发语言·python·opencv
鸿蒙自习室6 分钟前
鸿蒙UI开发——组件滤镜效果
开发语言·前端·javascript
星河梦瑾6 分钟前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
黄名富9 分钟前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
love静思冥想11 分钟前
JMeter 使用详解
java·jmeter
言、雲14 分钟前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
TT哇20 分钟前
【数据结构练习题】链表与LinkedList
java·数据结构·链表
汪洪墩43 分钟前
【Mars3d】设置backgroundImage、map.scene.skyBox、backgroundImage来回切换
开发语言·javascript·python·ecmascript·webgl·cesium