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("代码继续执行");

    }
}
相关推荐
程序猿阿伟1 分钟前
《声音的变形记:Web Audio API的实时特效法则》
开发语言·前端·php
东阳马生架构3 分钟前
订单初版—2.生单链路中的技术问题说明文档
java
咖啡啡不加糖18 分钟前
暴力破解漏洞与命令执行漏洞
java·后端·web安全
风象南21 分钟前
SpringBoot敏感配置项加密与解密实战
java·spring boot·后端
DKPT31 分钟前
Java享元模式实现方式与应用场景分析
java·笔记·学习·设计模式·享元模式
Percep_gan39 分钟前
idea的使用小技巧,个人向
java·ide·intellij-idea
缘来是庄40 分钟前
设计模式之迭代器模式
java·设计模式·迭代器模式
Humbunklung41 分钟前
Rust方法语法:赋予结构体行为的力量
开发语言·后端·rust
Liudef061 小时前
基于HTML与Java的简易在线会议系统实现
java·前端·html
萧曵 丶1 小时前
Rust 内存结构:深入解析
开发语言·后端·rust