注解和异常的详细笔记

news2024/9/22 11:34:43

注解的理解

  1. 注解(Annotation)也被称为元数据(Metadata),用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息。
  2. 和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。
  3. 在 JavaSE 中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在 JavaEE 中注解占据了更重要的角色,

例如用来配置应用程序的任何切面,代替 java EE 旧版中所遗留的繁冗代码和 XML 配置等

基本的 Annotation 介绍

使用 Annotation 时要在其前面增加 @ 符号, 并把该 Annotation 当成一个修饰符使用。用于修饰它支持的程序元 素 三个基本的 Annotation:

  1. @Override: 限定某个方法,是重写父类方法, 该注解只能用于方法
  2. @Deprecated: 用于表示某个程序元素(类, 方法等)已过时
  3. @SuppressWarnings: 抑制编译器警告

@Override 注解

在这里插入图片描述

@Override 使用说明

  1. @Override表示指定重写父类的方法(从编译层面验证)如果父类没有fly方法,则会报错

  2. 如果不写@Override注解,而父类仍有 public void fly(){},仍然构成重写

  3. @Override只能修饰方法,不能修饰其它类,包,属性等等

  4. 查看@Override注解源码为@Target(ElementType.METHOD),说明只能修饰方法

  5. @Targe是修饰注解的注解,称为元注解,

@Deprecated 注解

  1. 用于表示某个程序元素(类,方法等)已过时

  2. 可以修饰方法,类,字段,包,参数等等

  3. @Target(value={CONSTRUCTOR, FIELD, LOCAL VARIABLE, METHOD,PACKAGE, PARAMETER, TYPE})

  4. @Deprecated的作用可以做到新旧版本的兼容和过渡

@SuppressWarnings 注解

  1. 当我们不希望看到这些警告的时候,可以使用 SuppressWarnings 注解来抑制警告信息
  2. 在{“”} 中,可以写入你希望抑制(不显示)警告信息

可以指定的警告类型有

  1. all,抑制所有警告
  2. boxing,抑制与封装/拆装作业相关的警告
  3. cast,抑制与强制转型作业相关的警告
  4. dep-ann,抑制与淘汰注释相关的警告
  5. deprecation,抑制与淘汰的相关警告
  6. fallthrough,抑制与 switch 陈述式中遗漏 break 相关的警告
  7. finally,抑制与未传回 finally 区块相关的警告
  8. hiding,抑制与隐藏变数的区域变数相关的警告
  9. incomplete-switch,抑制与 switch 陈述式(enum case)中遗漏项目相关的警告
  10. javadoc,抑制与 javadoc 相关的警
  11. nls,抑制与非 nls 字串文字相关的警告
  12. null,抑制与空值分析相关的警告
  13. rawtypes,抑制与使用 raw 类型相关的警告(传参时没有指定泛型错误警告)
  14. resource,抑制与使用 Closeable 类型的资源相关的警告
  15. restriction,抑制与使用不建议或禁止参照相关的警告
  16. serial,抑制与可序列化的类别遗漏 serialVersionUID 栏位相关的警告
  17. static-access,抑制与静态存取不正确相关的警告
  18. static-method,抑制与可能宣告为 static 的方法相关的警告
  19. super,抑制与置换方法相关但不含 super 呼叫的警告
  20. synthetic-access,抑制与内部类别的存取未最佳化相关的警告
  21. sync-override,抑制因为置换同步方法而遗漏同步化的警告
  22. unchecked,抑制与未检查的作业相关的警告
  23. unqualified-field-access,抑制与栏位存取不合格相关的警告
  24. unused,抑制与未用的程式码及停用的程式码相关的警告

关于 SuppressWarnings 作用范围是和你放置的位置相关

比如 @SuppressWarnings 放置在 main 方法,那么抑制警告的范围就是 main 通常我们可以放置具体的语句, 方法, 类

看看 @SuppressWarnings 源码 修饰的程序元素为,查看@Target放置的位置就是

TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE

生成@SupperssWarnings时,不用背,直接点击左侧的黄色提示,就可以选择(注意可以指定生成的位置)

元注解

JDK 的元 Annotation 用于修饰其他 Annotat

元注解的种类

  1. Retention //指定注解的作用范围,三种 SOURCE,CLASS,RUNTIME
  2. Target // 指定注解可以在哪些地方使用
  3. Documented //指定该注解是否会在 javadoc 体现
  4. Inherited //子类会继承父类注解

@Retention 注解

  1. RetentionPolicy.SOURCE: 编译器使用后,直接丢弃这种策略的注释

  2. RetentionPolicy.CLASS: 编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM 不会保留注解。 这是默认值

  3. RetentionPolicy.RUNTIME:编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM 会保留注解. 程序可以 通过反射获取该注解

@Target 注解

用于修饰 Annotation 定义,用于指定被修饰的 Annotation能用于修饰哪些程序元素.@Target也包含一个名为 value的成员变量。
在这里插入图片描述

@Documented注解

基本说明

@Documented:用于指定被该元 Annotation修饰的 Annotation类将被javadoc 工具提取成文档,即在生成文档时,可以看到该注解。

说明:定义为Documented的注解必须设置Retention值为RUNTIME

在这里插入图片描述

@Inherited 注解

被它修饰的Annotation 将具有继承性.如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解

说明:实际应用中,使用较少,了解即可

元注解:本身作用不大,看源码时,可以知道他是干什么

异常-Exception

基本概念

Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)

执行过程中所发生的异常事件可分为两大类

  1. Error(错误):Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError[栈溢出]和OOM(out ofmemory),Error是严重错误,程序会崩溃。

  2. Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针访问,试图读取不存在的文件,网络连接中断等等,Exception分为两大类:运行时异常[程序运行时,发生的异常]和编译时异常[编程时,编译器检查出的异常]

异常体系图

在这里插入图片描述

异常体系图的小结

1.异常分为两大类,运行时异常和编译时异常

2.运行时异常,编译器检查不出来。一般是指编程时的逻辑错误,是程序员应该避免其出现的异常。java.lang.RuntimeException类及它的子类都是运行时异常

3.对于运行时异常,可以不作处理,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响

4.编译时异常,是编译器要求必须处置的异常。

常见的运行时异常包括

  1. NullPointerException 空指针异常

  2. ArithmeticException 数学运算异常

  3. ArrayIndexOutOfBoundsException 数组下标越界异常

  4. ClassCastException 类型转换异常

  5. NumberFormatException 数字格式不正确异常[]

编译异常

介绍

编译异常是指在编译期间,就必须处理的异常,否则代码不能通过编译

常见的编译异常

√ SQLException//操作数据库时,查询表可能发生异常

√ IOException/操作文件时,发生的异常

√ FileNotFoundException/当操作一个不存在的文件时,发生异常

√ ClassNotFoundException/加载类,而该类不存在时,异常

√ EOFException/操作文件,到文件末尾,发生异常
√ IllegalArguementException/参数异常

异常处理

异常处理就是当异常发生时,对异常处理的方式。

异常处理的方式

​ try-catch-finally

程序员在代码中捕获发生的异常,自行处理

​ throws

将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM

示意图

在这里插入图片描述

在这里插入图片描述

try-catch 方式处理异常说明

1)Java提供try和catch块来处理异常。try块用于包含可能出错的代码。catch块用于处理try块中发生的异常。可以根据需要在程序中有多个try.catch块。

在这里插入图片描述

try-catch 方式处理异常-注意事项

1)如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块

2)如果异常没有发生,则顺序执行try的代码块,不会进入到catch

在这里插入图片描述

3)如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等)则使用如下代码-finally{}

4)可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如(Exception在后NullPointerException在前),如果发生异常,只会匹配一个catch

5)可以进行try-finally配合使用,这种用法相当于没有捕获异常,因此程序会直接崩掉/退出。应用场景,就是执行一段代码,不管是否发生异常,都必须执行某个业务逻辑

小结

1)如果没有出现异常,则执行try块中所有语句,不执行catch块中语句,如果有finally,最后还需要执行finally里面的语句

2)如果出现异常,则try块中异常发生后,try块剩下的语句不再执行。将执行catch块中的语句,如果有finally,最后还需要执行finally里面的语句!

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

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

相关文章

OpenMMLab-AI实战营第二期——相关1. COCO数据集格式和pycocotools使用(目标检测方向)

文章目录 1. COCO数据集1.1 COCO数据集介绍1.2 COCO数据集格式1.2.1 常见目标检测数据格式1.2.2 COCO数据集文件结构及标注文件说明1.2.3 COCO的evaluation指标 1.3 其他 2. pycocotools2.1 pycocotools简介和安装2.2 基本使用 3. 图像的EXIF使用3.1 图像的EXIF3.1.1 基本介绍3…

车载以太网MACsec

车载以太网MACsec 1.概述 MACsec(Media Access Control Security)定义了基于 IEEE 802 局域网络的数据安全通信的方法。MACsec 可为用户提供安全的 MAC 层数据发送和接收服务,包括用户数据加密(Confidentiality)、数…

新浪股票接口获取历史数据

这两天做了一个调用新浪股票接口获取实时以及历史股票数据的应用,因为新浪没有公开关于其接口的官方文档,所以通过各种百度差了很多关于新浪股票接口的使用,不过大家基本都是转载或者直接复制,对于实时数据的获取讲的很详细&#…

Linux【系统学习】(shell篇)

第 1 章 Shell 概述 1)Linux 提供的 Shell 解析器有 Ubuntu 使用的是dash 2)bash 和 sh 的关系 3)Centos 默认的解析器是 bash 第 2 章 Shell 脚本入门 1)脚本格式 (结尾不是必须以 .sh 结尾,只是为了区…

《网络安全0-100》VPN 讲解

1、前言 VPN虽好可不要贪玩哦 2、VPN的概念和结构 VPN:虚拟专用网(virtual personal network)是利用internet等公共网络的基础设施,通过隧道技术,为用户提供的专用网络具有相同通信功能的安全数据通道。 ‘虚拟’是指用户无需建立各逻辑上的专用物理线…

​AVS3支持下的8K内容生产和传输应用实践

AVS标准经过20年发展,到AVS3这一代实现了国产标准从跟跑到领跑的突破。博雅睿视团队深度参与AVS3标准制定,开发的8K AVS3实时、离线编解码设备有力支持了我国8K超高清视频产业的落地和推广。 本次分享将会分为三个部分,第一部分重点介绍AVS标…

MusicGen配乐工具开源,教你怎么给抖音短视频配乐,助你涨粉1000!

大家好,我是千与千寻,好久不见了,很多粉丝私信我说,千寻哥这是去哪了?难道被野外捕捉了。 哈哈哈,当然不是了,千寻依然在学习ChatGPT的道路上和大家一起学习,一起搞钱! 但…

TC8:TCP_MSS_OPTIONS_05-09

TCP_MSS_OPTIONS_05: Illegal option length for MSS in a SYN-ACK segment 目的 TCP能够处理SYN+ACK报文段中MSS选项的长度非法,而不会崩溃 可以正常地响应,就是不崩溃,这里指的应该是DUT发送ACK 测试步骤 Tester:让DUT侧的应用程序发起主动open调用DUT:发送SYNTester:…

C++类和对象--构造函数和析构函数

0.前言 在我们写某些需要动态开辟内存空间的函数时候,会经常忘记初始化、销毁,而且有时候程序返回的情况很多,那么销毁函数写起来就会很繁琐,那么有没有什么办法解决这个问题呢?答案是:当然有!在…

Java类 继承

Java是一种面向对象的编程语言,类是Java中最基本的编程单元。一个类可以包含变量、方法和构造函数等。类的定义需要使用关键字class,例如: public class Person { private String name; private int age; public Person(St…

文心一言 VS 讯飞星火 VS chatgpt (44)-- 算法导论6.1 1题

一、在高度为h的堆中,元素个数最多和最少分别是多少? 文心一言: 在高度为 h 的二叉搜索树(BST)中,元素个数最多和最少的情况分别如下: 1.最多情况:当每个节点都包含两个子节点时&#xff0c…

CSS3-盒子模型-边距问题

1 清除默认内外边距 场景:浏览器会默认给部分标签设置默认的margin和padding,但一般在项目开始前需要先清除这些标签默认的margin和padding,后续自己设置 比如:body标签默认有margin:8px、p标签默…

一句提示词生成整个代码库——Gpt Engineer神级项目开源(附演示视频)

近日,一个名为Gpt Engineer神级项目开源,并迅速火爆全网。 短短几天内,该项目已经得到了25K的星星。 使用GPT-engineer进行人工智能软件开发,可以改变软件开发的未来。 在软件开发领域,一场巨大的革命正在开始。这一转…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(6月 22 日论文合集)

文章目录 一、检测相关(9篇)1.1 Wildfire Detection Via Transfer Learning: A Survey1.2 Polygon Detection for Room Layout Estimation using Heterogeneous Graphs and Wireframes1.3 Exploiting Multimodal Synthetic Data for Egocentric Human-Object Interaction Detec…

前端中的相关概念

谁道人生无再少, 门前流水尚能西。 桃花落尽胭脂透, 庭院无声五更鸡。 —— 杜甫《端午节》 HTML中class属性 HTML中class属性是一种用于为元素定义样式和标识的属性,以下是class属性的几种常见用法实例,包括标识元素、定义样…

利用OpenCV计算条形物体的长度

0、前言 在图像处理中,我们可能会遇到求一个线条长度的场景,比如,现在有一条裂缝,需要求其长度,或者有一个长条形的零件需要知道其长度。 本文利用OpenCV和skimage两个库,提供了一个解决方案。 1、解决步…

贪心法与动态规划的对比分析

高级算法设计课程论文 题 目:贪心法与动态规划的对比分析 作者姓名: 作者学号: 专业班级: 提交时间: 2023/6/3 目 录 1 引言 1 2 分析过程 2 2.1多段图的最短路径问题 2 2.2最小生成树问题 4 3动态规划与贪心法的对…

【动态规划算法练习】day3

文章目录 一、931. 下降路径最小和1.题目简介2.解题思路3.代码4.运行结果 二、64. 最小路径和1.题目简介2.解题思路3.代码4.运行结果 三、面试题 17.16. 按摩师1.题目简介2.解题思路3.代码4.运行结果 总结 一、931. 下降路径最小和 1.题目简介 931. 下降路径最小和 题目描述&…

浅析 GeoServer CVE-2023-25157 SQL注入

原创稿件征集 邮箱:eduantvsion.com QQ:3200599554 黑客与极客相关,互联网安全领域里 的热点话题 漏洞、技术相关的调查或分析 稿件通过并发布还能收获 200-800元不等的稿酬 更多详情,点我查看! 简介 GeoServer是一个开…

十八、网络基础(一)

一、协议 (一)前置 协议其实是一种约定!!! 计算机之间的传输媒介是光信号和电信号 , 通过 " 频率 " 和 " 强弱 " 来表示 0 和 1 这样的信息 , 要想传递各种不同的信息 , 就需要约定好双方的数据…