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

    }
}
相关推荐
咖啡教室2 小时前
java日常开发笔记和开发问题记录
java
咖啡教室2 小时前
java练习项目记录笔记
java
鱼樱前端3 小时前
maven的基础安装和使用--mac/window版本
java·后端
RainbowSea3 小时前
6. RabbitMQ 死信队列的详细操作编写
java·消息队列·rabbitmq
RainbowSea3 小时前
5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
java·消息队列·rabbitmq
我不会编程5555 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
李少兄5 小时前
Unirest:优雅的Java HTTP客户端库
java·开发语言·http
此木|西贝5 小时前
【设计模式】原型模式
java·设计模式·原型模式
可乐加.糖5 小时前
一篇关于Netty相关的梳理总结
java·后端·网络协议·netty·信息与通信
无名之逆5 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust