【JavaSE_学习笔记】异常体系

《JavaSE系列教程》 本专栏内容是为零基础正在学习Java的学习者量身定制的学习路线及方案,本教程字数超20w+,插图超过400+,知识体系极其全面,案例极其丰富。本配备有专门的学习群及学习视频,读者可加学习群与正在学习该阶段的人一同学习,有任何不懂的也可以观看于此教程配套的学习视频。 阅读详情

【JavaSE_学习笔记】异常体系

Java程序也会出现许多不正常的情况,Java使用了许多类描述这些不正常的情况,这些类堆积在一起就形成了Java的异常体系
———| Throwable 所有错误与异常的父类
—————| Error 错误,错误一般都是由于jvm或者是硬件引发的问题。一般都不会通过代码处理错误
—————| Exception 异常, 异常我们是需要通过代码去处理的
这里写图片描述
Throwable常用的方法:
  1.toString() 返回此throwable的简短描述(全路径名称)
  返回的是用于描述该异常情况的类的完整类名如:java.lang.Throwable
  2.getMesage() 返回创建Throwable对象的时候传入的消息字符串
  3.printStackTrace()
  打印异常的栈信息  可以追踪到异常的行号
Error:错误一般都是由于jvm或者硬件引发的问题,一般都不会通过代码去处理
Exception:如果程序出现异常,一般就需要通过代码处理
 如果不正常情况的消息是以Error结尾的,则代表这是一个错误
 如果不正常情况的消息是以Exception结尾的,则代表这是一个异常
   运行时异常: RunTimeException及其子类
   编译时异常: 非运行时异常,受检异常

异常的处理方式:

  方式一:捕获处理
    格式:

try{可能会发生异常的代码
}catch(异常的类型 变量名){
    异常处理的代码;
}

举例:

public class Demo2 {
    public static void main(String[] args) {
        int a=10;
        int b=0;
        try {
            System.out.println(a/b);
        } catch (ArithmeticException e) {
            System.out.println("被除数不能为零!");
            System.out.println("下次注意");
        }
        System.out.println("异常被处理");
    }
}

结果:

被除数不能为零!
下次注意
异常被处理

注意:
  1.如果一个try块的的代码出现了异常经过处理后,那么try-catch块外面的代码可以正常执行;
  2.如果一个try块中出现了异常的代码,那么在try块中出现异常代码后的所有代码都无法正常执行;
  3.一个try块后可以跟有多个catch块,即一个try块可以捕捉多种异常的类型;
  4.一个try块后面可以跟多个catch块,但捕捉的异常类型必须按照从小到大进行捕捉,否则后面的代码无法执行
举例:

public class Democracy {
    public static void main(String[] args) {
        div(4,0,null );
    }
    public static void div(int a, int b,int[] arr){
        int c = 0;
        try{
             System.out.println("数组的长度:"+ arr.length);  // 
             c = a/b;    // jvm发现除数为0的时候,就会创建一个异常的对象。
        }catch(ArithmeticException e){   //捕获的异常类型 
            System.out.println("出了算术异常...");
            e.printStackTrace();
        }catch(NullPointerException e){
            System.out.println("出现了空指针异常....");
        }catch(Exception e){    // new NullPointerException();  Exception之所以可以捕获任意类型的异常,是因为Exception是所有异常类的父类。
            System.out.println("我是急诊室,能治百病...");

        }
        System.out.println("结果:"+ c);
    }
}

结果:

出现了空指针异常....
结果:0

  方式二:抛出处理
举例:

class Demo2 
{
    public static void main(String[] args) 
    {
        try{
            div(4,0,null);
        }catch(Exception e){
            System.out.println("哎呀,出错了...");
        }
    }

    public static void div(int a , int b,int[] arr) throws Exception ,NullPointerException{
        if(b==0){
            throw new Exception();//抛出一个异常对象。
        }else if(arr==null){
            throw new NullPointerException();
        }
        int c  = a/b;
        System.out.println("结果:"+ c);
    }

}

注意:
   1. 如果一个方法的内部抛出了一个编译时异常对象,那么必须 要在方法声明抛出;
  2. 如果调用了一个声明抛出编译时异常类型的方法,那么调用者必须要进行处理,否则编译报错;
  3. 一个方法如果遇到了throw关键字,那么该方法会马上停止执行;
  4. 在一个种情况下只能抛出一种异常对象。
throw与throws区别:
  1. throw关键字是用于在一个方法的内部抛出异常对象的,throws是用于在方法上声明抛出异常类型的。
  2. throw关键字后面跟的是一个异常的对象,throws后面跟的是异常的类型。
  3. throw关键字一次只能抛出一个异常对象,throws一次可以声明抛出多种异常类型。

什么时候使用抛出处理?什么时候使用捕获处理?
  如果需要通知调用者出了异常,那么则需要使用抛出处理。
  如果与用户直接打交道的代码就使用捕获处理,千万不能抛出,一旦抛出就抛给了用户。

  运行时异常:如果一个方法内部抛出了一个运行时异常对象,方法声明可以声明抛出也可以不声明抛出,如果调用了一个声明抛出运行时异常类型的方法,调用者可以处理也可以不处理
  编译时异常:方法必须要声明抛出,如果调用了一个声明抛出编译时异常类型的方法,调用者必须要处理

自定义异常类
class NoIPException extends Exception{

    public NoIPException(String message){
        super(message); //调用了父类一个参数的构造函数
    }
}



class Demo4 
{
    public static void main(String[] args) 
    {
        try{
            feiQ(null);
        }catch(NoIPException e){
            e.printStackTrace();
            System.out.println("马上就插上网线!!");
        }
    }

    public static void feiQ(String ip) throws NoIPException{
        if(ip==null){
            throw new NoIPException("没有插网线啊,小白");
        }
        System.out.println("好友列表是....");
    }   

}
finally块

使用前提:必须要配合try块使用,不能单独使用
finally块的代码在任何情况下都可以执行(不论catch块中的代码有没有执行)只有在jvm退出的情况下才不会执行
举例:

class Demo6 
{
    public static void main(String[] args) 
    {
        try{
            int c = 4/2;
            System.out.println("结果:"+ c);
            //return;
            //System.exit(0); // 0表示正常退出jvm,非0表示异常退出jvm。 
        }finally{
            System.out.println("finally块的代码执行了...");
        }
    }
}
try块的表现形式:

  方式1: 适用于没有资源文件释放,只需要处理异常的代码使用

try{ 
    可能发生异常的代码 
    } catch( 异常类的类型 e){
    异常的处理代码..
}   

  方式2: 适用于既有资源释放也需要处理异常的代码去使用

try{ 
    可能发生异常的代码 
    } catch( 异常类的类型 e){
    异常的处理代码..
}   finally{
     释放资源的代码;
}

  方式3: 只需要 释放资源文件,不需要处理异常的代码去使用

try{ 
    可能发生异常的代码 
    } finally{
 释放资源的代码;
}

  方式4:必须都是平级异常

try{可能出现异常的代码;
    }catch(异常类名1|异常类名2|...){
    处理代码;
}

注意:
  1)子类在重写父类中的方法的时候,如果父类中方法有抛出异常,那么子类重写的这个方法,抛出异常不能够比父类中该方法异常大
  2)子类继承父类,要重写父类中的方法的时候,如果本身父类中该方法没有异常,那么在子类中重写该方法的时候,不能抛出异常,只能捕获异常

面试题:如果catch里面有return语句,那么finally中的代码还会执行吗?如果可以,是在return前执行还是return后执行?
   会执行;并且在return 前执行!

public class Demo4 {
    public static int a1=10;
    public static void main(String[] args) {
        System.out.println(getInt());
    }


    //方法
    private static int getInt() {
        int a=20;
        try{
            System.out.println(a/0);
            a = 20 ;
        }catch(ArithmeticException e){
            a = 30 ;
            System.out.println("a为:"+a);
            return a1 ;
            /**
             * 代码走到这里,return a,return 30 ,在这里形成了一个方法返回路径
             * 但是,finally中代码只有在Jvm退出了,才不会执行,所以a = 40 ;
             * 但是,由于之前已经返回路径,代码就要执行到return 前;
             */
        }finally{
            a1 = 40 ;
            System.out.println("a1为:"+a1);
        }
        return 0;

    }
}

结果:

a为:30
a1为:40
10
双目深度相机--10.双目视觉的主要步骤讲解分析 双目视觉技术通过模拟人眼原理,利用两个相机从不同视角采集图像,实现三维坐标计算。其核心流程包括:1)系统标定,消除相机畸变并建立坐标映射关系;2)图像同步采集与预处理;3)立体匹配,寻找左右图像对应点;4)基于视差图的深度计算;5)三维重建生成点云或网格模型;6)结果应用如目标测距、三维建模等。关键技术难点在于精确标定和准确匹配,这两步直接影响最终深度计算的精度。该技术广泛应用于自动驾驶、工业检测、VR等领域,实现了从二维图像到三维空间的精准转换。 阅读详情

相关推荐

EPLAN 设备接线图模板制作

属性摆放 设备连接图设置(选项 - - 设置) 连接图生成

weixin_36447711的博客 7865

[JavaSE]异常体系

目录 1异常 1.1异常的理解 1.2调用栈e.printStackTrace(); 2异常体系 2.1异常的类继承关系: 2.2异常处理(throw/throws) 2.3自定义异常 1异常 1.1异常的理解 我们编写代码的时候,例如打印一个数字除以0或者给定数组长度不够打印需要的数组下标等等问题 一旦出现了异常,程序就会终止。 异常...

weixin_42645168的博客 317

ubuntu虚拟机搭建OP-TEE

在网上找了一些搭建OP-TEE的过程,模仿着进行搭建,结果有好多报错,为了方便自己以后重新搭建,所以将整个过程记录下来。

weixin_44213847的博客 1001

javase-异常体系

这个异常体系,在平常写代码的时候,还是会经常遇到的。我想用一个综合全局的视角,来讲一下这个异常体系在日常写接口的时候,我们知道这个要让程序正常的执行,不至于崩溃这里主要聚焦3点1.有哪些异常2.程序如何处理这些异常3.接口如何处理这些异常。

在技术领域里形成深刻,全面的认识,知道来龙去脉,深入浅出的讲到实用点。 1109

ANSYS APDL齿轮建模实战:从渐开线方程到完整3D模型的保姆级教程

本文详细介绍了使用ANSYS APDL进行齿轮建模的全过程,从渐开线方程的数学基础到完整3D模型的创建。通过参数化命令流实现高精度齿轮建模,特别适合机械设计和仿真分析需求。教程包含关键参数计算、APDL环境配置、单齿齿廓建模以及全齿轮阵列复制等实用技巧,帮助工程师快速掌握ANSYS APDL在齿轮建模中的应用。

lg888的博客 446

3D点云目标检测Complex-YOLO(训练篇)(一)———KITTI数据集预处理与制作

KITTI dataset Download dataset KITTI 3D Object Detection Evaluation 2017 link 下载四个部分,共41.4GB 解压后为四部分内容(相机校准矩阵calib、RGB图像image_2、标签label_2、点云数据velodyne) 对应的testing和training数据。其中,training数据为7481张(图片和点云对应的场景),testing数据 7518张(无label_2数据)。 Data Preprocess

“知识最大的敌人不是无知,而是错觉” 7151

我的javaSE学习笔记

layout: post title: “我的JAVASE自学笔记” date: 2019-05-18 20:23:25 +0800 我的JAVASE自学笔记 作者:吴甜甜 个人博客网站: wutiantian.github.io 基础知识 学习书籍:《疯狂JAVA讲义》李刚 搭建命令行编译环境 下载软件jdk jdk是开发java要用到的工具,里面包括 ①jre (java ru...

吴甜甜的技术博客 1954

Pytest 常见问题及其解决方案

Pytest 是一个强大且灵活的测试框架,但初学者在使用过程中难免会遇到各种问题。希望通过这篇文章,你能更好地应对常见的挑战,写出更高效、更稳定的测试代码。测试不是负担,而是保障。写好测试不仅能提高代码质量,还能让你在面对变更时更加从容自信。

qq_52137592的博客 900

JavaSE学习笔记 Day7

debug、数组(初始化、遍历、默认值)

CHiN_951的博客 1264

超详细MySQL 8.0安装与配置

MySQL的安装与配置 还不会安装MySQL的同学们,还不会配置MySQL的同学们,赶紧按照下面步骤操作起来,超详细安装步骤如下: 进入MySQL官网 1、点击download 2、点击MySQL Community Server 3、选好选项点击go to download page 4、点击download 5、点击no thanks,just start my download 6、选Server only,点击Next 7、点击Execute 8、点击

Turniper的博客 8756

【数据集处理】中国地面气候资料日值数据集(V3.0)(含MATLAB全代码)

简介数据集数据处理

WW、forever的博客 1万+

【Java】JavaSE学习笔记

本文包括Dos命令、基础概念、变量类型、类型转换、变量与常量、运算符、包、JavaDoc、输入输出、程序流程、数组、常用类以及面向对象编程(OOP)的基础知识。文章详细介绍了Java的运行机制、环境变量配置、变量命名规范、逻辑运算符、数组的声明与初始化、Arrays类的常用方法、时间类、字符串类、浮点数运算类、随机数类等。此外,还简要提及了面向对象编程的本质,即以类组织代码,以对象封装数据。这些内容为Java学习者提供了全面的基础知识和操作指南。

ayaishere_的博客 1011

❤️爆肝十二万字《python从零到精通教程》,从零教你变大佬❤️(建议收藏)

文章目录强烈推荐系列教程,建议学起来!!一.pycharm下载安装二.python下载安装三.pycharm上配置python四.配置镜像源让你下载嗖嗖的快4.1pycharm内部配置4.2手动添加镜像源4.3永久配置镜像源五.插件安装(比如汉化?)5.1自动补码神器第一款5.2汉化pycharm5.3其它插件六.美女背景七.自定义脚本开头八、这个前言一定要看九、python入门十、python缩进十一、Python注释1.单行注释2.多行注释十二、Python 变量1.变量定义理解2. 变量名命名3. 分

全栈川川 26万+

javaSE学习笔记_目录

IO字节流 javaSE (二十九)IO.read()输出是int的原因、fileoutputstream的追加功能、用byte[]优化拷贝文件、Buffered缓冲区内存示意图 javaSE (三十)IO流异常处理、图片加密处理、输入文件路径并拷贝文件内容、在文件中键入内容 计算机基础知识 javaSE (一)数据类型转换、++/–运算符 javaSE (二)逻辑/位运算符、左移右移运算符、sw...

PizAn的博客 7717

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

JavaSE学习笔记 Day18

单列集合实现类

CHiN_951的博客 1102

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JAVASE————java基本异常体系介绍

异常就是错误的意思,指程序运行时发生的不被期望的事件,阻止了程序按照预期正常执行🍬🍬🍬 编译错误:新手最常见,没遵循语法规范🍬🍬🍬 运行时错误:程序执行时🍬🍬🍬 逻辑错误:程序没有按照预期的逻辑顺序执行。

2301_80303982的博客 838

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

JavaSE学习笔记

JavaSE 第一章 JavaSE基础 1.1、十进制与二进制的相互转换 十进制转二进制: ​ 除2 以15为例 ​ 2/15 余数 ​ 2/7 1 ​ 2/3 1 ​ 2/1 1 ​ 0 1 从下往上读为:1 1 1 1 二进制转十进制:乘以二的幂指数 以1 1 1 1为例 1 1 1 1 ...

adad3的博客 1319

JavaSE学习笔记第一弹

JavaSE学习笔记第一弹

PleaSure乐事的博客 1370

JavaSE学习笔记 Day16

常用工具类、字符串

CHiN_951的博客 961

javaSE继承总结-异常

javaSE继承总结-集合 异常体系图 Exception 通常是由于程序员写的代码造成的可以通过修改代码排除,比如空指针异常,索引越界异常,类型匹配异常等 Error 标示程序员无法通过修改代码来修复的错误,比如服务器宕机,服务器被断网,断电等 异常中常用的方法 方法名 方法结构 方法简介 printStackTrace() public void printStackTr...

LAN961205的博客 368

【JavaSE进阶学习笔记】

JavaSE进阶是对Java基础进一步的提升,内容更加全面深入,如:对Java面向对象编程进行深入剖析,同时全 面讲解常用API,集合框架、IO流体系、通信原理、并发编程、Java高级技术、JDK新特性、底层源码、设计模式 等,本阶段均一网打尽,并配备了大量的实战案例。 ........................................................................

日语专业转码中的博客 544

javaSE学习笔记

JavSE笔记 编者的话 ​ 这个笔记是本人在重新学习javaSE后,大部分是在bilibili动力结点杜老师的视频上学习,本笔记中大量引用整合了其中的笔记,截图,代码等等非常感谢,感觉收获颇多,但是收获的知识点又太过分散,且担心忘记这些来之不易的精华,特做此总结,因为是个人笔记,难免会有一些这样那样的问题,如果读者发现错误或者影响到您正常的知识架构,望正在读此的您见谅! ​ ————————tyong–汤勇 文章目录JavSE笔记编者的话数组须知优点和

m0_49039508的博客 707

(java学习笔记)JavaSE基础

Java技术体系平台 JavaSE :标准版 面向桌面型应用(Windows下的应用程序)的Java平台。提供完整的Java核心API,也叫J2SE. JavaEE:企业版 开发企业环境下的应用程序。该技术体系中包含的技术 Servlet Jsp。主要针对Web应用程序开发。也叫J2EE. JavaME:小型版 支持Java程序运行在移动终端(手机、PDA:掌上电脑 条码扫描器、RFID读写器、P...

陌然白(小白)的博客 4057

【JavaSE学习笔记】chapter07-集合-小练习

JavaSE学习笔记-chapter07-集合-小练习 学习资源:动力节点java学习

Addery的学习日常 561

JavaSE学习笔记 Day6

方法

CHiN_951的博客 1016

JavaSE学习笔记 Day19

单列集合实现类、双列集合、泛型

CHiN_951的博客 1040
上一篇: 【JavaSE_学习笔记】Collections集合工具类
下一篇: 【JavaSE_学习笔记】File类
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值