目录
一、异常的概念;
二、异常的分类;
三、异常处理;
四、自定义异常;
一、异常的概念;
1、生活中的异常:例如小王每日开车上班,耗时大概30分钟,但是生活中异常时常发生,例如发生堵车或撞车的情况,这些都需要我们人为的去解决;(文章底部附源代码)
2、程序中的异常:
public class Test1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("请输入被除数:");
int num1 = in.nextInt();
System.out.print("请输入除数:");
int num2 = in.nextInt();
System.out.println(String.format("%d / %d = %d",num1, num2, num1/ num2));
System.out.println("感谢使用本程序!");
}
}
这个程序运行时会出现除数为零的情况,可是在数学逻辑当中除数不能为零,所以会出现代码执行异常的结果;那么如何解决问题呢?我们试着通过if-else来解决异常问题
package Exception.text;
import java.util.Scanner;
/**
* @Author: ASUS
* @Data: 2022/4/27 17:06
* @Version: 1.0
* @Description: IDEAHomeWork
*/
public class Test2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("请输入被除数:");
int num1 = in.nextInt();
System.out.print("请输入除数:");
int num2 = 0;
if (in.hasNextInt()){//如果输入的除数是整数
num2 = in.nextInt();
if (0 == num2){//如果输入的除数是0
System.out.println("输入的除数是0。程序退出");
System.exit(1);
}
}else {//如果输入的除数不是整数
System.out.println("输入的数不是整数,程序退出");
System.exit(1);
}
System.out.println(String.format("%d / %d = %d",num1, num2, num1/ num2));
System.out.println("感谢使用本程序!");
}
}
但是,通过使用if-else有很多的弊端:1、代码臃肿;2、程序员要花很大精力堵漏洞;3、程序员很难堵住所有漏洞;
因此需要使用到我们Java中的异常处理机制;
在我们现实生活中,根据不同的异常进行相应的处理,而不会就此中断我们的生活;
二、异常的分类;
1、常见的异常类型
异常类型 | 说明 |
Exception | 异常层次结构的父类 |
ArithmeticException | 算术错误情形,如以零作除数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 尝试访问null对象成员 |
ClassNotFoundException | 不能加载所需的类 |
legaArgumentEception | 方法接收到非法参数 |
ClassCastException | 对象强制类型转换出错 |
NumberFormatException | 数字格式转换异常如把“abc”转换成数字 |
三、异常处理;
1、什么是异常处理;
~Java编程语言使用异常处理机制为程序提供了处理错误的能力
程序中预先设置好对付异常的处理方法---程序运行--->异常---对异常进行处理--->处理完 毕,程序继续运行------>
2、Java中如何进行异常处理;
·Java的异常处理是通过5个关键字来实现的:try,catch,finally,throw,throws
·捕获异常:
try:执行可能产生异常的代码
catch:捕获异常
finally:无论是否发生异常,代码总能执行
·声明异常:throws:声明方法可能要抛出的异常
·抛出异常:throw:手动抛出异常
3、try-catch语句块:
public void method(){
try {
//代码段(此处不会产生异常)
}catch (NumberFormatException){//异常类型+Exception
//对异常进行处理的代码段
}
//代码段
}
四、自定义异常;
1、何时需要自定义异常
·当JDK中的异常类型不能满足程序的需要时,可以自定义异常类
·1、定义异常类--->2、编写构造方法,继承父类的实现--->3、实例化自定义异常对象 --->4、使用throw抛出; 继承Exception或RuntimeException;
上机练习一:
package Work07;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Homework1 {
public void test(){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入课程代号(1~3之间的数字):");
try {
int i = scanner.nextInt();
if (i == 1){
System.out.println("java");
}else if (i == 2){
System.out.println("Mysql数据库");
}else if (i == 3){
System.out.println("HTML+CSS");
}else {
System.out.println("您输入的课程编号有误,请重新输入!");
}
}catch (InputMismatchException e) {
System.out.println("输入参数不匹配!");
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}finally{
System.out.println("欢迎提出建议!");
}
}
public static void main(String[] args) {
Homework1 homework1 = new Homework1();
homework1.test();
}
}