一、Java异常
1,异常是什么
异常指的是程序在运行是出现错误时通知调用者的一种机制。
2,几个关键字:try、catch、finally、throw、throws
• try – 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
• catch – 用于捕获异常。catch用来捕获try语句块中发生的异常。
• finally – finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
• throw – 用于抛出异常。
• throws – 用在方法签名中,用于声明该方法可能抛出的异常。
3,异常处理流程
- 程序先执行try中的代码
- try中的代码出现异常,就会终止,查看与catch中的异常类型是否匹配
- 如果找到匹配类型,就执行catch中的代码
- 否则,向上传递(调用者)
- 无论是否匹配,finally都将会被执行
- 若始终没有处理,就交给JVM处理
4,Java异常体系
5,自定义异常类
自定义异常通常会继承自 Exception 或者 RuntimeException
继承自 Exception 的异常默认是受查异常
继承自 RuntimeException 的异常默认是非受查异常.
二、举例
实现一个简单的控制台版用户登陆程序, 程序启动提示用户输入用户名密码. 如果用户名密码出错, 使用自定义异常的方式来处理
自定义异常类
package Java3_19;
public class LoginException extends Exception{
public LoginException() {
super();
}
public LoginException(String message) {
super(message);
}
}
测试类
package Java3_19;
import java.util.Scanner;
public class Login {
public String name = "admin";
public String password = "1234546";
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户名:");
String name = scanner.nextLine();
System.out.println("请输入密码:");
String password = scanner.nextLine();
Login login = new Login();
try {
if (!name.equals(login.name)) {
throw new LoginException("用户名错误!");
}
if (!password.equals(login.password)) {
throw new LoginException("密码错误!");
}
System.out.println("登陆成功!");
} catch (LoginException e) {
System.out.println(e.getMessage());
}
}
}