一、异常的分类
Throwable是异常体系的顶层类,派生出Error和Exception两个子类。Error是Java虚拟机无法解决的重大问题,如JVM内部错误。Exception是我们平时所说的异常,异常分为受查异常和非受查异常,受查异常必须手动去用throw抛出和用try{}catch语句捕获(必须显式处理,如果不显式处理编译器会报错),非受查异常不需要手动去throw或try{}catch(不要求显式处理,不会有编译器检查)。处理异常的5个关键字:throw,throws,try,catch,final。
二、异常的捕获
throw用于抛出异常。throws用于对异常进行声明(写在方法的参数的后面,用来告诉方法的调用者当前方法内部会出现什么异常)。try,catch,final用于对异常进行捕获和处理。
try {
//将可能出现异常的代码放在这里
}catch(要捕获的异常类型 e) {
//如果try中的代码抛出异常了,此时catch捕获的异常类型与try中抛出的异常类型一致时,或者是try中抛出异常的父类时,
//就会被捕获到,对异常就可以进行处理,处理完成后,跳出try-catch结构,继续执行后序代码
}catch(要捕获的异常类型 e) {
//对异常进行处理
}finally {
//此处代码一定会被执行到
}
//当异常被捕获到时,异常被处理了,这里的代码就会执行
//如果捕获异常时类型不对,那就没有捕获到异常,这里的代码就不会被执行
三、自定义异常
自定义异常实现登录,定义两个继承Exception类的异常类,在下载函数内部用throw抛出这两个异常,在下载函数名称处声明这两个异常,将调用下载函数写入try{}中,将这两异常以及异常的处理写入catch{}中。
import java.util.Scanner;
class UserPasswordException extends Exception {
public UserPasswordException(String message) {
super(message);
}
}
class UserNameException extends Exception {
public UserNameException(String message) {
super(message);
}
}
public class Login {
private static String name = "zhangsan";
private static String password = "123456";
public static void loginException(String name1, String password1) throws UserNameException, UserPasswordException{
if(!name1.equals(name)) {
throw new UserNameException("用户名错误!");
}
if(!password1.equals(password)) {
throw new UserNameException("密码错误!");
}
System.out.println("登陆成功!");
}
public static void main(String[] args) {
while(true) {
Scanner scanner = new Scanner(System.in);
String name1 = scanner.nextLine();
String password1 = scanner.nextLine();
try {
loginException(name1, password1);
}catch(UserNameException e) {
e.printStackTrace();
}catch(UserPasswordException e) {
e.printStackTrace();
}
}
}
}