3:Throwable-Java API 实战

简介: 3:Throwable-Java API 实战

1. 异常的介绍


Throwable有两个子类


1.错误 Error


  • 不常见


  • 基本上不能解决


  • 尽量避免


2.异常 Exception


  • 常见


  • 可以定位,通过修改代码解决


  • 不是编译失败问题,代码语法没有问题


2. 异常举例以及解决常见错误bug方案


  • 定位错误:编写好程序后,运行程序,在输入运行结果栏中会存在异常提示,红色中蓝色链接,就能找到自己的代码错误


  • 解决错误:先阅读异常提示,如果了解就直接修改,如果不了解那就搜索异常提示,了解问题所在,解决问题


最经典异常展示



3. RuntimeException


异常类有两个主要的子类:IOException 类和 RuntimeException


1.运行时异常


  • 运行时异常可修改也可不修改,不会对项目运行产生影响


  • 运行时异常像游戏漏洞,它不影响我们玩游戏,但是我们有一些漏洞可以捡,比如更新以后某个英雄的技能,在某个时间可以无限的放或者平A就能秒死人


2.非运行时异常


  • 非运行时异常必须修改,因为这样会使得项目直接无法运行(现在的编译器比较智能,一定会让你try catch


  • 但是非运行时异常导致你进不去游戏


编译器中,运行时异常不会要求你捕获,但是非运行时异常会强制要求你捕获,所以我们在编写自定义异常的时候不会定成运行时异常


4. trycatch作用


try catch的作用


  • 定位一个代码块的异常,运行完成这个代码块后,抛出这个代码块的异常


  • try catch可以搭配finally使用,意思是在捕获完成以后使用,也可以不搭配


  • 但使用finally就必须搭配try catch


  • try catch的捕获内容可以自定义,可以让它抛出异常,也可以不让它抛出异常,所以根据这个小漏洞,你可以去骗毕业设计,但工作中绝对不能用!


抛出异常,正常捕获,运行可以通过,但会显示异常的结果和定位异常



不抛出异常,欺骗老师,运行还是通过,但不会定位异常




5. NullPointerException空指针异常


空指针异常的情况


  • Calling the instance method of a null object. 调用空对象的实例方法


  • Accessing or modifying the field of a null object.访问或修改空对象的字段


  • Taking the length of null as if it were an array.将null的长度当作一个数组


  • Accessing or modifying the slots of null as if it were an array.访问或修改null的插槽,就好像它是一个数组一样


  • Throwing null as if it were a Throwable value.将null视为Throwable值


在有关对象判断类中会有抛出空指针异常的情况



6. throws


throw的作用就是抛出异常,有什么用呢?


  • 通过捕获异常的功能,我们可以写判断或抛出异常的方法


  • 在不通过的情况下提醒程序员,这样程序员可以快速的更改代码,以防止程序在后面出现更严重的问题



7. throws和trycatch区别,用途区别


throwtry catch的区别


  • throw是用来抛出异常的,而try catch是尝试运行并捕获


  • 两者结合可以达到十分好的效果


创建MyException类,Alt+Insert调出Generate,选择Constructor



全选Exception



由此抛出编译异常



StringTest类中测试抛出异常



也可以通过调用函数的形式抛出异常



如果未抛出异常,则会显示编译异常,未报告的异常错误,必须对其进行捕获或声明以便抛出



而如果把MyException改成RuntimeException,就不会抛出编译异常,而是出现运行异常



8. 手把手教你编写装X自定义异常


创建ErrorCode接口



编写自定义异常代码


public interface ErrorCode {
    /**
     * 获取错误码
     * @return
     */
    String getcode();
    /**
     * 获取错误信息
     * @return
     */
    String getMsg();
}


创建MyCodeEnum枚举类



编写代码实现接口中的所有方法


public enum MyCodeEnum implements ErrorCode{
    NOT_FOUND_PAGE("404","找不到网站资源"),
    NOT_FOUND_FILE("888","找不到文件"),
    NOT_O_TEN("bad", "只能求10以内的加法")
    ;
    MyCodeEnum(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    private final String code;
    private final String msg;
    @Override
    public String getcode() {
        return code;
    }
    @Override
    public String getMsg() {
        return msg;
    }
}


创建MyException类继承RuntimeException


public class MyException extends RuntimeException{
    public MyException(ErrorCode errorCode) {
        super(errorCode.getMsg());
    }
}


String Test类中抛出异常,并可枚举选择异常形式



目录
相关文章
|
22天前
|
Java API C++
Java 8 Stream Api 中的 peek 操作
本文介绍了Java中`Stream`的`peek`操作,该操作通过`Consumer<T>`函数消费流中的每个元素,但不改变元素类型。文章详细解释了`Consumer<T>`接口及其使用场景,并通过示例代码展示了`peek`操作的应用。此外,还对比了`peek`与`map`的区别,帮助读者更好地理解这两种操作的不同用途。作者为码农小胖哥,原文发布于稀土掘金。
Java 8 Stream Api 中的 peek 操作
|
11天前
|
缓存 负载均衡 Dubbo
Dubbo技术深度解析及其在Java中的实战应用
Dubbo是一款由阿里巴巴开源的高性能、轻量级的Java分布式服务框架,它致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
32 6
|
9天前
|
Java 程序员 API
Java 8新特性之Lambda表达式与Stream API的探索
【9月更文挑战第24天】本文将深入浅出地介绍Java 8中的重要新特性——Lambda表达式和Stream API,通过实例解析其语法、用法及背后的设计哲学。我们将一探究竟,看看这些新特性如何让Java代码变得更加简洁、易读且富有表现力,同时提升程序的性能和开发效率。
|
7天前
|
SQL Java Linux
Java 8 API添加了一个新的抽象称为流Stream
Java 8 API添加了一个新的抽象称为流Stream
|
13天前
|
Java
领略Lock接口的风采,通过实战演练,让你迅速掌握这门高深武艺,成为Java多线程领域的武林盟主
领略Lock接口的风采,通过实战演练,让你迅速掌握这门高深武艺,成为Java多线程领域的武林盟主
22 7
|
10天前
|
存储 前端开发 API
告别繁琐,拥抱简洁!Python RESTful API 设计实战,让 API 调用如丝般顺滑!
在 Web 开发的旅程中,设计一个高效、简洁且易于使用的 RESTful API 是至关重要的。今天,我想和大家分享一次我在 Python 中进行 RESTful API 设计的实战经历,希望能给大家带来一些启发。
25 3
|
10天前
|
Java
flyway报错Caused by: java.lang.NoSuchMethodError: org.flywaydb.core.api.configuration.FluentConfigurat
flyway报错Caused by: java.lang.NoSuchMethodError: org.flywaydb.core.api.configuration.FluentConfigurat
14 2
|
14天前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
54 1
|
25天前
|
监控 Java 大数据
【Java内存管理新突破】JDK 22:细粒度内存管理API,精准控制每一块内存!
【9月更文挑战第9天】虽然目前JDK 22的确切内容尚未公布,但我们可以根据Java语言的发展趋势和社区的需求,预测细粒度内存管理API可能成为未来Java内存管理领域的新突破。这套API将为开发者提供前所未有的内存控制能力,助力Java应用在更多领域发挥更大作用。我们期待JDK 22的发布,期待Java语言在内存管理领域的持续创新和发展。
|
21天前
|
存储 负载均衡 Java
Jetty技术深度解析及其在Java中的实战应用
【9月更文挑战第3天】Jetty,作为一款开源的、轻量级、高性能的Java Web服务器和Servlet容器,自1995年问世以来,凭借其卓越的性能、灵活的配置和丰富的扩展功能,在Java Web应用开发中占据了举足轻重的地位。本文将详细介绍Jetty的背景、核心功能点以及在Java中的实战应用,帮助开发者更好地理解和利用Jetty构建高效、可靠的Web服务。
32 2