IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 认识Java中的异常并解决 -> 正文阅读

[Java知识库]认识Java中的异常并解决

异常就是在程序运行时出现错误通知调用者的一种机制,运行时表示的是程序已经编译通过生成class文件,再由JVM执行的时候。
异常中的基本概念:
错误代码是客观存在的,所以当出现问题的时候要及时通知调用者,主要有两种方式:
LBYL:Look Before You Leap. 在操作之前做充分的准备
EAFP:It’s Easier to Ask Forgiveness than Permission. 事后获得原谅比事前获得许可更容易
防御式编程:
防御式编程就是我们先执行代码,碰到异常再解决,其实它的核心思想就是EAFP。

异常的基本用法:
捕获异常:
基本语法:

try{
? //可能产生异常的代码
}
?
//捕获异常(非必须存在也可以有多个
catch(异常类型 异常对象){
?//Exception是所有异常类型的父类
?//我们可以利用Exception捕获所有异常
?
?//这里可以自己写碰这种异常我们想要给出什么方式的提示
? System.out.println(“出现“异常类型”类型的异常!”);
?
?//也可以直接利用系统写好的
?异常对象.printStackTrace();
}
?
//善后工作(非必须存在)
finally{
?//无论前面的代码有没有问题finally部分的代码都会执行
?//一般将资源关闭、文件关闭、数据库连接关闭等操作放在这个部分
}

当出现异常但是我们没有catch或者没有合适对应的catch时,就会沿着调用栈向上传递,到方法的调用者,最终到JVM来解决,到JVM时的效果就是我们之前没有用try…catch时的样子。
若try、catch以及finally都有return时,finally的return就会覆盖try和catch的
异常处理的存在可以保证无论是否有异常正确的代码一定会执行

异常处理的流程:
1、程序先执行try中的代码
2、如果try中的代码出现异常,就会结束try中的代码,看catch中的异常类型是否匹配
3、如果找到匹配的异常类型,就会执行catch中的代码
4、如果没有找到匹配的异常类型就会向上传递到上层调用者
5、无论是否找到匹配的异常类型,finally中的代码都会被执行到(在该方法结束之前执行)
6、如果上层调用者也没有处理异常,就继续向上传递
7、一直到主方法也没有合适的代码处理异常 ,就会交给JVM处理,此时程序就会异常终止

抛出异常:
用在方法内部手动抛出异常,人工产生一个异常对象。
除了Java内置的类会抛出异常,我们也可以手动抛出异常,使用throw关键字来完成这个操作。这个操作通常搭配自定义异常来进行。
异常说明:
用在方发声明,表示该方法有可能出现异常,并且出现异常后不处理,向上抛出。
我们在处理异常的时候,通常希望知道这段代码哪里会出现异常,就可以使用throws关键字,给可能出现异常的方法进行标注,从而提醒调用者。也是搭配自定义异常来进行。

抛出异常和异常说明我们用一段模拟用户登陆的代码演示一下:

//用户登录过程中可能会出现两种异常
//用户名错误
//Exception是所有异常的父类
//所以我们自定义异常的时候也可以利用extends关键字继承父类
class userNameError extends Exception{
    //构造方法
    public userNameError(String warning) {
        super(warning);
    }
}
//密码错误
//继承父类Exception
class passWordError extends Exception{
    //构造方法
    public passWordError(String warning) {
        super(warning);
    }
}

public class login {
    //登录方法(有可能产生异常)
    //利用throws关键字标注方法
    public static void userLogin(String userName , String name, String passWord ,String num)throws userNameError,passWordError{
        if(!name.equals(userName))
        {
            //当用户名错误的时候抛出异常
            //手动创建一个异常对象
            throw new userNameError("用户名错误");
        }
        if(!num.equals(passWord))
        {
            //当密码错误时抛出异常
            //手动创建一个异常对象
            throw new passWordError("密码错误");
        }
        System.out.println("登陆成功!");
    }
    //主方法
    public static void main(String[] args) {
        String name="xiaoli";
        String num="010102";
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String userName=scanner.next();
        System.out.println("请输入密码:");
        String passWord = scanner.next();
        try {
            //登录时可能出现异常放在try里
            userLogin(userName, name, passWord, num);
        }
        //若是密码错误则调用我们自定义的密码错误异常解决
        catch (passWordError passWordError) {
            passWordError.printStackTrace();
        }
        //若是用户名错误则调用我们自定义的用户名错误异常解决
        catch (userNameError userNameError) {
            userNameError.printStackTrace();
        }
    }
}

异常体系:
非受查异常:程序可以不用显示处理该异常(Error类和RuntimeException及其子类)
受查异常:程序必须try…catch或者throws向上抛出
在这里插入图片描述
顶层类Throwable派生出两个子类Error和Exception。
Error表示java运行时内部错误或资源耗尽错误,出现这种内部错误程序只能终止。一般我们常见的Error就是栈溢出(StackOverFlowError)和内存溢出(OutofMemoryError)。
其中Exception也派生出了四个子类,其中RuntimeException以及其子类是非受查异常。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-20 18:15:31  更:2021-11-20 18:16:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:42:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码