java基础之注解示例详解
作者:嘿,鱼骨头^O^ 发布时间:2022-05-08 23:47:20
定义
注解也叫原数据,它是JDK1.5及之后版本引入的一个特性,它可以声明在类、方法、变量等前面,用来对这些元素进行说明。
作用
生成文档:通过代码里标识的注解生成doc文档【生成doc文档】
代码分析:通过代码里标识的注解对代码进行分析【反射】
编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】
注解与注释的区别
注解是给编译器看的,注释是给程序员看的。
JDK内置的标准注解
@Override
表示该方法是覆盖父类的,如果某个方法父类中并没有,且该方法使用了@Override,则会报错
@Deprecated
表示该方法已经过时,但还是可以用
@SuppressWarnings
压制警告
一般用在类的前面,传递参数"all",表示压制该类的所有警告
这是父类代码
public class Fu {
public void eat(){
System.out.println("Fu 吃......");
}
}
这是子类代码
@SuppressWarnings("all")//压制该类下的所有警告
public class Zi extends Fu{
@Override//表示该方法是重写父类的
public void eat(){
System.out.println("Zi eat......");
}
@Deprecated//表示该方法已经过时
public void work(){
}
}
下面是主类
自定义注解
格式:
元注解
public @interface 注解名称{
属性列表
}
注解本质其实上是一个接口,该接口默认继承Annotation接口
public interface 注解名称extends java.lang.annotation.Annotation {}
元注解
注解的注解就是元注解
下面是@Override注解的源码,我们可以看到在@Override的前面还有一些注解,下面我们来介绍一下这些注解
我们需要掌握5种元注解:
@Target
指明了注解可以在哪里使用
参数ElementType取值
TYPE:指明注解可以使用在类上
METHOD:指明注解可以使用在方法上
FIELD:指明注解可以使用在成员变量上
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})//当{}里面的内容只有一个时,{}可以省略
public @interface PersonWrite {
int age();
String name() default "22";
}
@Retention()
指明注解被保留的阶段:
注解保留到源代码阶段
@Retention(RetentionPolicy.SOURCE)
注解保留到编译阶段
@Retention(RetentionPolicy.CLASS)
注解1保留到运行阶段
@Retention(RetentionPolicy.RUNTIME)
@Documented
标识注解被抽取到doc文档中
@Inherited
标识注解被子类继承
属性
注解中的属性其实是抽象方法
属性的返回类型只能是下面几种类型:
基本数据类型
String
枚举
注解
以上类型的数组
如果注解里面定义了属性(接口),在使用时要给属性赋值
如果定义属性时使用default给属性赋值,则在使用注解时可以不给该属性赋值(当然也可以重新赋值)如果注解只有一个,且注解的名称是value,则使用时传参直接写参数即可,不用写属性名数组赋值时,使用{}包裹,如果数组中只有一个值,则{}可以省略
下面是自定义的注解:
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface PersonWrite {
int age();
String name() default "李四";
}
下面是该注解的使用:
package Java高级特性.注解;
@PersonWrite(age = 222)
public class Main {
public static void main(String[] args) {
Zi zi = new Zi();
zi.work();
}
}
来源:https://blog.csdn.net/qq_50313418/article/details/122148763


猜你喜欢
- 本文实例讲述了Java 8新增的方法参数反射。分享给大家供大家参考,具体如下:一 点睛Java 8在java.lang.reflect包下新
- 本文以实例形式讲述了C#泛型的用法,有助于读者深入理解C#泛型的原理,具体分析如下:首先需要明白什么时候使用泛型:当针对不同的数据类型,采用
- 解决 INSTALL FAILED CONFLICTING PROVIDER的问题方法 在安装Android应用时出现
- 前言Object object = new Object();世间万物的本质都可看作类的对象,面向对象(OOP)的模式让程序易维护、易复用、
- 1、unity的脚本模板新版本unity中的C#脚本有三类,第一类是我们平时开发用的C# Script;第二类是Testing,用来做单元测
- 本文实例为大家分享了C#实现串口示波器的具体代码,供大家参考,具体内容如下开发工具visual studio2019C#串口示波器,实时刷新
- association和collection用法1.单个关联查询association1.1实体之间的关联表示package com.wor
- 通过View提供的方法获取高度方式有两种:1, 当前显示的view中直接获取当前view高宽2, 通过Activity的getWindow(
- 在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取properties
- 项目上线之后,如果日志打印的很模糊或者业务逻辑比较复杂,有时候无法定位具体的错误原因,因此可以通过IDEA远程代理进行Debug。线上的代码
- 配置文件概述:应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的。它是可以按需要更改的,开发人员可以使用配置文件来更改
- 这篇文章主要介绍了Java解析json报文实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 废话不多说,直接上代码: 很简单:将类复制到项目中,最后在配置文件上配置一下:logUrl即可。 默认保存在:项目/temp/lo
- 使用WebSocketSharp自定义实现Web服务时,无法解析multipart/form-data请求的数据。通过查找资料,采用以下方式
- 一、新时间日期API常用、重要对象介绍ZoneId: 时区ID,用来确定Instant和LocalDateTime互相转换的规则Instan
- Dotnet中嵌入资源(位图、图标或光标等)有两种方式,一是直接把资源文件加入到项目,作为嵌入资源,在代码中通过Assembly的GetMa
- 1 简介之前我们在文章《K8ssandra入门-详细记录在Linux上部署K8ssandra到Kubernetes》成功地在Ubuntu上安
- Semaphore也是一个同步器,和前面两篇说的CountDownLatch和CyclicBarrier不同,这是递增的,初始化的时候可以指
- 前言volatile相关的知识其实自己一直都是有掌握的,能大概讲出一些知识,例如:它可以保证可见性;禁止指令重排。这两个特性张口就来,但要再
- 前言先简单介绍下我们的使用场景,线上5台Broker节点的kafka承接了所有binlog订阅的数据,用于Flink组件接收数据做数据中台的