java异常处理

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 + " 注册成功! 开始新的冒险");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值