JavaSE——异常

news2025/7/18 8:19:20

目录

一、基本概念

  1.1 什么是异常?

  1.2  java提供的异常处理机制有什么作用?

   1.3  java语言中异常以什么形式存在?

   例1:

二、异常处理机制

  2.1 所有Exception的直接子类都叫做编译时异常

  2.2 所有的RuntimeException及子类都属于运行时异常

  2.3 编译时异常与运行时异常的区别与相同点

  2.4 异常处理的方式

     2.4.1 在方法声明的位置使用throws关键字,抛给上一级

     2.4.2 使用try..catch语句进行异常捕捉

三、异常对象的常用方法

3.1 获取异常简单的描述信息

3.2 打印异常追踪的堆栈信息(建议使用)

四、finally 字句的使用

五、自定义异常

六、异常与方法覆盖


一、基本概念

  1.1 什么是异常?

    程序执行过程中发生了不正常的情况,而这种不正常的情况叫做异常,以类的形式存在

 

  1.2  java提供的异常处理机制有什么作用?

    java把该异常信息打印输出到控制台,供程序员参考,进一步修改程序,让程序更加健壮

 

   1.3  java语言中异常以什么形式存在?

     异常在java中以类的形式存在,每一个异常类都可以创建异常对象

   例1:


        NumberFormatException nfe = new NumberFormatException("数字格式化异常");
        System.out.println(nfe);
        

 

          NullPointerException nullPointerException = new NullPointerException("空指针异常");
          System.out.println(nullPointerException);

 

二、异常处理机制

  2.1 所有Exception的直接子类都叫做编译时异常

     那编译时异常是在编译阶段发生的吗?

     不是。这个地方是指的程序员编写程序阶段,如果不处理,编译器会报错

    

  2.2 所有的RuntimeException及子类都属于运行时异常

     运行时异常在编写程序阶段,可以选择处理也可以选择不处理

    

  2.3 编译时异常与运行时异常的区别与相同点

区别:

    编译时异常发生的概率高,运行时异常发生的概率低

    加入java中对异常没有划分,则程序将会是绝对安全的,但程序员编写程序太累,代码到处都是处理异常的代码

  共同点:

      所有异常发生时都会new对象,

      所有异常发生在运行阶段,编译阶段异常是不会发生的

  2.4 异常处理的方式

     2.4.1 在方法声明的位置使用throws关键字,抛给上一级

     一般不建议在main方法上使用throws,若异常发生则抛给JVM,导致终止程序,一般main方法中的异常建议使用try..catch捕捉

public class Test {
    public static void main(String[] args) throws FileNotFoundException {
        System.out.println("amin begin");
        m1();
        System.out.println("main over");

    }
    private  static  void m1() throws FileNotFoundException {
        System.out.println("m1 begin");
        m2();
        System.out.println("m2 over");
    }
    private  static  void m2() throws FileNotFoundException {
        System.out.println("m2 begin");
        m3();
        System.out.println("m2 over");
    }

    private  static  void m3() throws FileNotFoundException {
        new FileInputStream("D:/course");
    }
}

 

     2.4.2 使用try..catch语句进行异常捕捉

    注意!try语句块中某一行出现异常,该行后面的代码不会执行

    try...catch捕捉异常后,后续代码可以执行(指的是try...catch之外的代码)

public class Test {
    public static void main(String[] args)  {
        System.out.println("main begin");
        try {
            m1();
            System.out.println("看看是否运行");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println("main over");

    }
    private  static  void m1() throws FileNotFoundException {
        System.out.println("m1 begin");
        m2();
        System.out.println("m2 over");
    }
    private  static  void m2() throws FileNotFoundException {
        System.out.println("m2 begin");
        m3();
        System.out.println("m2 over");
    }

    private  static  void m3() throws FileNotFoundException {
        new FileInputStream("D:/course");
    }
}

 

三、异常对象的常用方法

  3.1 获取异常简单的描述信息

        NullPointerException e = new NullPointerException("空指针异常");
        System.out.println( e.getMessage());

 

 

3.2 打印异常追踪的堆栈信息(建议使用)

        NullPointerException e = new NullPointerException("空指针异常");

         e.printStackTrace();
        System.out.println("helloword");

值得说明的是,打印堆栈信息可能在打印“HelloWord”下面,因为打印堆栈信息是其他线程(异步线程)在后台执行的

 

四、finally 字句的使用

  •     finally子句中的代码是最后执行的,并且是一定会执行的,即使try语句块中的代码出现了异常
  •     finally子句必须和try一起出现,不能单独编写
  •     finally语句经常使用在完成资源的释放或关闭,因为finally中的代码比较有保障

 

下图代码中,即使在try中添加了return,finally语句依然会执行

        try{
            System.out.println("try....");
            return;
        }finally {
            System.out.println("finally....");
        }

 

其他易错点可以查看下面这一篇博客

Java中finally的易错点_我爱布朗熊的博客-CSDN博客

但是在try语句中退出JVM之后,finally语句中的代码就不会执行了

五、自定义异常

第一步:编写一个类继承Exception或RuntimeException

              发生的概率高就继承Exception,发生的概率低就继承RuntimeException

第二步:提供一个无参,一个String参数的有参

public class MyException extends Exception {
    public MyException() {
    }
    public MyException(String msg) {
        super(msg);
    }
}
public class Test {
    public static void main(String[] args) {
        MyException e = new MyException("用户名不可为空");
        e.printStackTrace();

    }
}

六、异常与方法覆盖

重写之后的方法不能比重写之前的方法抛出更更多(更宽泛)的异常,可以更少

 比如下端这段代码,出现了报错现象,因为父类对应的方法并没有异常,而子类重写之后的方法多了异常,最终导致出现错误

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring面试

1. IOC (1)如何实现一个IOC容器 (2)IOC理解 (3)BeanFactory BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身;ApplicationContext 面向使用 Spring 框架的开发者&#xff…

Zookeeper和Eureka的区别

Zookeeper: CP设计(强⼀致性),⽬标是⼀个分布式的协调系统,⽤于进⾏资源的统⼀管理。当节点crash后,需要进⾏leader的选举,在这个期间内,zk服务是不可⽤的。 eureka: AP设计(高可用&…

动态规划--(不同的子序列,编辑距离,两个字符串的删除)

代码随想录day56 动态规划模块 不同的子序列,编辑距离,两个字符串的删除 文章目录1.leetcode 115. 不同的子序列1.1思路及详细步骤1.2 代码示例2.leetcode 583. 两个字符串的删除操作2.1思路及详细步骤2.2 代码示例3.leetcode 72. 编辑距离3.1思路及详细步骤3.2 代码…

绝对最直白的MySQL MVCC机制总结,免费拿走

🍁 作者:知识浅谈,CSDN签约讲师,后端领域优质创作者,阿里云社区技术博主,热爱分享创作 💒 公众号:知识浅谈 📌 擅长领域:全栈工程师、爬虫、ACM算法 绝对最直…

项目实战 - tpshop商城项目环境搭建

一、环境部署准备 1、软件工具准备 1.1、Vmware虚拟机 1. 在本机上安装好Vmware虚拟机 2. 在虚拟机上安装并运行Linux系统 3. 注意: 实际工具中使用云服务器 1.2、远程连接工具 1. 在本机上安装好远程连接工具 (xshell / putty / FinalShell(推荐)) …

三种常见的特征选择方法

特征选择 特征选择是特征工程里的一个重要问题,其目标是寻找最优特征子集。特征选择能剔除不相关(irrelevant)或冗余(redundant )的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目的。并且常能听到“数据和特征决定…

k8s master 实现高可用

Kubernetes高可用master架构 k8s的高可用,主要是实现Master节点的高可用。那么我们看看各个组件是如何解决高可用的。 Kubelet、Kube-proxy:只工作在当前Node节点上,无需高可用。 etcd:etcd如果是放在集群内部的,在…

长文讲解Linux内核性能优化的思路和步骤

一.性能调优简介 1.为什么要进行性能调优? 1) 编写的新应用上线前在性能上无法满足需求,这个时候需要对系统进行性能调优 2) 应用系统在线上运行后随着系统数据量的不断增长、访问量的不断上升,系统的响应速度通常越…

js-学习链表

链表基础概念 链表和数组一样,可以用于存储一系列连续的元素。链表中的元素在内存中不必是连续的空间。链表的每一个元素有一个由一个存储元素本身的节点和一个指向下一个元素的引用组成(指针和连接)。 链表构成 数据指针 链表优点 1.内存空间不是必须连续的&a…

实践分享:30分钟在电脑端运行小程序

预计实现效果:在电脑桌面端实现小程序运行 技术实现:小程序容器技术实现(案例使用FinClip SDK) 技术的原理: 该 SDK 主要包括应用交互层、安全防护、网络通信控制和安全运行容器四个组件。 应用交互层:应用交互层是…

DBSCAN算法实现【超详细注释】

DBSCAN 算法步骤 设置每个对象为未访问 随机选择一个未访问的点ppp,标记ppp表示访问 如果p的半径为nnn的邻域中至少存在MinPts个对象 我们就创建一个新的簇,并将ppp加入ccc设N 是ppp邻域中对象的集合对在NNN中的每个点p′pp′ 如果p′pp′是未访问的 标记p′pp′…

Matlab:数值积分与符号计算

Matlab数值积分定积分的数值求解实现自适应积分算法梯形积分法累计梯形积分多重定积分的数值求解实现符号计算符号对象及其运算符号微积分符号极限符号导数求不定积分符号方程求解数值积分 数值积分,用于求定积分的近似值。在数值分析中,数值积分是计算定…

SQL Server简介

SQL Server是微软的一款关系型数据库。某些平台吹得天花烂坠,今天第一次在自己的项目中使用了下,感觉不是那么好,特别是SQL语句的支持度还是很欠缺,如limit等都不支持,还有特别单双引号都是需要特别注意的,下面是SQL S…

从0到1CTFer成长之路——1git(全网最详细)

1.1.2.1 git 泄露 (1) 常规git泄露 安装docker sudo apt-get update sudo apt-get install docker 安装容器 docker pull ubuntu:18.04 然后发现请求超时 我们需要阿里云的镜像加速器 我们按照要求配置文件 没有/etc/docker 就自己创建 sudo mkdir -p /etc/docker 然后写入…

Cookie与Session 以及给CBV添加装饰器

文章目录Cookie与Session1、Django操作cookie简单实现用户登录加入装饰器2、Django操作session设置session获取session过期时间清除sessionCBV添加装饰器Cookie与Session HTTP被设计为”⽆态”,也就是俗称“脸盲”。 这⼀次请求和下⼀次请求 之间没有任何状态保持&…

跨模态神经搜索实践VCED 环境准备

跨模态神经搜索实践 环境准备 本文基于WSL2及docker进行环境搭建 1. 安装和配置WSL2 Ubuntu发行版 1.1 安装WSL2 Ubuntu 相关安装命令: wsl --install:默认安装Ubuntu发行版wsl --list --online:查看可支持的发行版本wsl --install -d &…

如何将 wordfile 添加到 UltraEdit 或 UEStudio

UltraEdit 本身支持开箱即用的最常用编程和标记语言的语法突出显示。我们也有数百个其他语言的 wordfile,但是,很容易找到和添加您需要的语言! 重要提示:此电源提示适用于运行 UltraEdit v15.00或 UEStudio v09.10及更高版本的用户…

Ubuntu18.04系统安装nginx

Ubuntu18.04系统安装nginx一、在线安装 Nginx二、离线安装 Nginx参考链接请确保以具有 sudo 权限的用户身份登录,并且您没有在端口 80 或 443 上运行 Apache 或任何其他 Web 服务器。 一、在线安装 Nginx 简介:Nginx (engine x) 是一个免费的&#xff0…

swift-类属性

了解属性之前,需要先了解前面的swift-类结构内容 - swift-类结构源码探寻 FieldDescriptor TargetClassDescriptor {var Flags: ContextDescriptorFlags // uint32var Parent: TargetRelativeContextPointer // Int32var Name: TargetRelativeDirectPointer // I…

Markdown还能这么玩?这款开源神器绝了!

Markdown是一款轻量级标记语言,由于它易读易写的特性,很多程序员用它来写项目文档。其实Markdown的功能不止于此,结合一些工具使用还可以用来做PPT,今天带大家使用Markdown来做一个PPT,看看到底有多炫酷! S…