Exception 异常类
概念:
异常就是程序的一些错误,当我们传入的参数,不符合java规定的时候,就会出现异常
java已经定义了异常类,专门用来处理异常,其继承自Throwable类
所有异常都是java.lang.Exception 类的子类。
常见异常 | 描述 |
---|---|
ArrayIndexOutOfBoundsException | 数组越界异常 |
ClassCastException | 对象强制转换为不是实例的子类时,异常 |
NullPointerException | 当应用程序试图在需要对象的地方使用 null 时,空指针异常 |
InterruptedException | 一个线程被另一个线程中断,抛出该异常 |
异常常用方法:
常用方法 | 描述 |
---|---|
public String getMessage() | 返回关于发生的异常的详细信息 |
public void printStackTrace() | 打印多个异常信息,即错误输出流 |
捕获异常(try/catch)
捕获异常,需要用try 和 catch 关键字(自己处理)。
public class TrayCtach {
public static void main(String[] args) {
try {
//可能发生异常的类型很多
int[] arr = null;
int length = arr.length;//捕捉到空指针异常 跳到下面 catch语句,后面的不在执行
System.out.println(1/0);
}catch (ArithmeticException a){//异常类型
System.out.println(a + "抛出了");
}catch (NullPointerException e){
System.out.println(e + "抛出了");
}finally{//finaly关键字,一定会执行的语句块:一般用来释放锁,关闭流资源
System.out.println("finally 除非jvm关闭 一定能执行 无视前面的跳出程序语句");
}
System.out.println("运行try后面的程序...");
}
}
抛出异常(throws)
捕获到异常,自己不处理,可以用throws关键字向上抛出,不影响当前程序运行。
注意:
throws 关键字放在方法签名的尾部;
一个方法可以同时抛出多个异常,中间用“,”隔开;
直接抛出一个大的异常Exception: 数据类型的兼容。
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class ThrowsException {
public static void main(String[] args) {
try {
test1();
} catch (Exception e) {
e.printStackTrace();//输出异常信息查看 继承的父类Throwable的方法
}
System.out.println("try异常后面的主程序代码");
}
static void test1() throws ParseException,ArithmeticException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
System.out.println("异常,前面的代码");
simpleDateFormat.parse("sss");//采用抛出的方式 后面的代码不会执行的
System.out.println("抛出异常,后面的代码不会被执行...");
}
}
自定义异常(throw)
Java中,我们也可以自定义异常,用来控制程序流程。
注意:
需要继承异常父类Exception;
需要使用关键字throw new;
throws一层一层往上抛,如果不做处理的话。
1.自定义异常类
//自定义异常,继承父类
// 因为父类已经把异常信息的操作都完成了,所在子类只要在构造时,将异常信息传递给父类通过super 语句即可。
// 重写 有参 和 无参 构造方法
public class UserExistException extends Exception{
public UserExistException(String msg){
super(msg);//传入父类
}
}
2.测试
public class ThrowTest {
static String[] names = {"大佬","龙儿","林三"};//准备已有数据,用作对比
public static void main(String[] args) throws UserExistException{
login("大佬");
}
static void login(String name) throws UserExistException{
for (int i = 0; i < names.length; i++) {
if(name.equals(names[i])){//一旦为true:数据库里面已经有这个用户[意外的情况 异常来表达]
//System.out.println(name + " 这个用户已经存在,请重写输入...");
//return;
throw new UserExistException("该用户已经存在");//自定义异常,输入提示,异常名字
}
}
System.out.println(name + " 注册成功! 开始新的冒险");
}
}