异常基础

                       异常基础

一:异常是一种程序运行时出现错误的通知调用者的一种机制。
在程序出现错误时,要及时通知程序媛,主要有两种方式1.LBYL:在操作之前做充分的检查
2.EAFP(异常的核心思想):先操作,遇到问题再处理
二:基本语法
try{
有可能出现异常的语句
}catch (异常类型 异常对象){
}
[finally{
异常的出口
}]
1.try代码块中放的是可能出现异常的代码
2.catch代码块中放的是出现异常后的行为,catch中异常捕捉的参数,需要个try中抛出的异常相匹配,当有多个catch语句时,则会匹配相应的catch,其他catch则忽略不执行。若多个异常处理的方式是完全相同的,也可以写成catch{ArrayIndexoutofBoundsException|NullpointerException}
一般不建议直接catch{Exception E}
3.finally代码块中的代码用于处理善后工作,会在最后执行,如释放资源,文件关闭等。不管是否有异常,finally中的语句一定会被执行到。
三:如果在本方法中没有合适的异常处理方式,那么就会沿着调用栈向上传递,找到匹配的处理方式。

public class Trycatch {
    public static void main(String[] args) {
        try{
            func();
        }catch (ArrayIndexOutOfBoundsException e){
            e.printStackTrace();
        }
        System.out.println("after try catch");
    }
    public static void func(){
        int [] arr={1,2,3};
        System.out.println(arr[100]);
    }
}

结果:

after try catch
java.lang.ArrayIndexOutOfBoundsException: 100
	at homeworks.Trycatch.func(Trycatch.java:14)
	at homeworks.Trycatch.main(Trycatch.java:6)

如果一直向上传递到main方法都没有合适的异常处理方式,那么最终就会教给JVM处理,程序就会终止(如同最初没有用trycatch一样)。
异常处理流程(做多了就理解了)
在这里插入图片描述
四:抛出异常/异常说明
程序媛可以手动抛出一个异常,使用throw关键字完成
当我们想要将抛出的异常显示的标注在方法定义的位置,用来提醒调用者要注意捕获这些异常,则可以使用throws关键字进行异常说明
区别:throw:现在立刻马上就要抛出异常
throws:执行到这个方法时,可能会抛出异常。
五:JAVA异常体系
继承关系:
1.Error类供JVM内部使用,Exception类供程序员使用
2.Error类指的是java运行时内部出现错误或者资源耗尽错误,应用程序不抛出此类异常。一旦出现,程序终止。
3.Exception类是所使用的所有异常类的父类。
4.派生于error类或者RuntimeException类的所有异常称为非受查异常(粉色的);其他成为受查异常。
如果抛出受查异常,那么必须显示进行处理当场处理,
a)使用try catch包裹起来
b)使用throws将异常交给异常调用者处理。

在这里插入图E片描述
六:自定义异常类

import java.util.Scanner;

public class UserLogin {
    Scanner scanner=new Scanner(System.in);
    private static String userName="admin";
    private static String password="123456";
    public static void main(String[] args){
        try{
            login("admin","12456");
        }catch (UserError userError){
            //打印出现异常的调用栈,将JVM栈之间方法的调用关系打印出来
            userError.printStackTrace();
        }catch(PasswordError passwordError){
            passwordError.printStackTrace();
        }
    }
    public static void login(String username,String password)throws UserError,PasswordError{
        if (!UserLogin.userName.equals(username)){
            throw new UserError("用户名错误");
        }
        if (!UserLogin.password.equals(password)){
            throw new UserError("密码错误");
        }
        System.out.println("登录成功");

    }

}
class UserError extends Exception{
    public UserError(String message){
        super(message);
    }
}
class PasswordError extends Exception{
    public PasswordError(String message){
        super(message);
    }
}

继承自Exception的异常默认是受查异常
继承自RuntiemException的异常是非受查异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值