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

    }
}
相关推荐
艾莉丝努力练剑29 分钟前
【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
武子康2 小时前
Java-72 深入浅出 RPC Dubbo 上手 生产者模块详解
java·spring boot·分布式·后端·rpc·dubbo·nio
_殊途2 小时前
《Java HashMap底层原理全解析(源码+性能+面试)》
java·数据结构·算法
椰椰椰耶3 小时前
【Spring】拦截器详解
java·后端·spring
没有bug.的程序员4 小时前
JAVA面试宝典 - 《MyBatis 进阶:插件开发与二级缓存》
java·面试·mybatis
倔强青铜34 小时前
苦练Python第18天:Python异常处理锦囊
开发语言·python
u_topian5 小时前
【个人笔记】Qt使用的一些易错问题
开发语言·笔记·qt
没有羊的王K5 小时前
SSM框架学习——day1
java·学习
珊瑚里的鱼5 小时前
LeetCode 692题解 | 前K个高频单词
开发语言·c++·算法·leetcode·职场和发展·学习方法
又菜又爱coding5 小时前
安装Keycloak并启动服务(macOS)
java·keycloak