java注解(java内容的标签)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 标准解释:java中的类、构造器、方法、成员变量、参数都可以被注解进行贴上标签。

一、概念解释

1.什么是注解?

标准解释:java中的类、构造器、方法、成员变量、参数都可以被注解进行贴上标签。

直白理解:注解也可以理解为标签。对一个人的评价高矮胖瘦,好人坏人或者渣男老实人等,就是起到你给它贴上这个标签,但是这些标签又不会对他本人产生什么影响。因为那个标签只是你的看法

2.注解有什么作用?

答:就是为了方便对类中的信息进行标注注释,方便查看。不会对实际代码产生什么影响。

3.注解的分类?

(1)自定义注解

答:自己可以任意DIY定义的注解:比如给其他人打上你想打的任意标签信息

(2)元注解

答:注解的注解(就是标签上面再贴标签):对自定义的标签设置可以在哪里使用和能存活多久

常用的有两个:

@Target:约束自定义注解只能在哪些地方使用

//括号里面加入以下哪个,哪种类型就可以允许贴上这个标签

类、接口----TYPE

成员变量----FIELD

成员方法----METHOD

方法参数----PARAMETER

构造器----CONSTRUCTOR

局部变量----LOCAL_VARIABLE

@Retention:申明注解的生命周期

只在源码阶段(用的比较少)-----SOURCE

源码、字节码阶段(默认)---CLASS

源码、字节码、运行阶段(开发常用)--RUNTIME

(3)注解解析

答:对已经被这个注解过的地方进行提取自定义的注解信息

提取被该注解的类就创建该类的信息,然后按照步骤提取。

提取被该注解的方法就创建该类的信息,然后按照步骤提取。

提取被该注解的属性就创建该类的信息,然后按照步骤提取。

二、实战案例分析

1.自定义注解

创建格式:

public @interface 注解名称 {

      属性类型 属性名()defalt 默认值;

}

创建步骤:

1.创建一个类(类名就是注解名称),把类中的class改为@interface。然后定义要贴上的标签数据

//注解
package learn2;
public @interface  BadBoy {
     String name() default "坏男孩";//自定义标签值            这个default "坏男孩";----不写也可以,那就没有默认值了
     int age();//自定义标签值
     String value();//特殊标签值。(标签里面写上这个,被打上这个标签的属性,必须要有具体赋值。就像试吃食品,吃一个没事,吃多了就必须要给钱--赋值)
}

2.给需要的地方打上注解标签

//被测试的类
package learn2;
@BadBoy(name="汉奸",age = 45,value = "自定义")//在类上面建立就是类的注释
public class People {
    @BadBoy(name = "方法",age = 15,value = "自定义") //在方法上面建立就是方法的注释
    public static void main(String[] args) {
    @BadBoy(name = "成员属性",age = 19,value = "自定义")//在属性上面建立就是属性的注释
    String hobby="打篮球";
    @BadBoy(age = 19,value ="自定义")//在属性上面建立就是属性的注释
    String hobby1="跳舞";
    }
}

2.元注解

创建步骤:

1.在注解的上面创建@Target@Retention这两个常用的元注解,里面的参数根据不同需要填入,参数不懂的滑到上面概念解析那里看。

//被测试的元注解
package learn2;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//里面参数不懂的返回上面看概念解析
//元注解--表示可以在哪里贴上
@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER,ElementType.CONSTRUCTOR,ElementType.LOCAL_VARIABLE})
//元注解---表示一直在运行阶段
@Retention(RetentionPolicy.RUNTIME)
//自定义注解
public @interface  BadBoy {
     String name() default "坏男孩";
}

2.元注解限制了自定义标签给谁用和生命周期等

//正常使用到的类
package learn2;
@BadBoy(name="汉奸")
public class People {
    @BadBoy(name = "方法")
    public static void main(String[] args) {
    @BadBoy(name = "爱好")
    String hobby="打篮球";
    }
}

3.注解解析

解析类

创建步骤:

1.创建要解析的类对象

2.if用isAnnotationPresent判断这个类是否有注解,(注解.class)

3.用getDeclaredAnnotation方法直接获取,(注解.class)

4.打印需要该解析类里面的某个自定义属性

解析方法

创建步骤:

1.创建要解析的类对象

2.用getDeclaredMethod获取方法("要获取的方法名")

3.if用isAnnotationPresent判断这个类是否有注解,(注解.class)

4.用getDeclaredAnnotation方法直接获取,(注解.class)

5.打印需要该解析类里面的某个自定义属性

package learn2;
import java.lang.reflect.Method;
@BadBoy(name="我的名字就是类啊")
public class People {
    @BadBoy(name = "我的名字就是方法啊")
    public static void main(String[] args) throws NoSuchMethodException {
    //注解的解析
        //一、解析类步骤
        //1.解析这个类的对象
        Class p = People.class;
        //2.判断这个类是否有这个注解
        if (p.isAnnotationPresent(BadBoy.class)){
            //3.直接获取该注释对象
            BadBoy b = (BadBoy) p.getDeclaredAnnotation(BadBoy.class);//这里不用到万能键补全键,要手动进行强转
            //5.打印需要的值
            System.out.println(b.name());
        }
        //二、解析方法步骤
        //1.解析这个类的对象
        Class p2 = People.class;
        //2.获取要获取的方法
        Method m = p2.getDeclaredMethod("main", String[].class);
        //3.判断这个类是否有这个注解
        if (m.isAnnotationPresent(BadBoy.class)){
            //4.直接获取该注释对象
            BadBoy b2 = (BadBoy) m.getDeclaredAnnotation(BadBoy.class);//这里不用到万能键补全键,要手动进行强转
            //5.打印需要的值
            System.out.println(b2.name());
        }
    }
}

运行结果:

我的名字就是类啊

我的名字就是方法啊

旁白:注解就是对类或者方法,属性什么的进行备注贴标签,在庞大的代码中能更快的寻找阅读代码,这些注解不会对实际代码产生什么影响,注解有自定义的,还有注解的注解,也就是元注解,还有可以对这些注解里面写入的内容进行解析读取出来。

目录
相关文章
|
1月前
|
Java 开发者 UED
【实战宝典】Java异常处理大师级教程:throws关键字,让异常声明成为你的专属标签!
【实战宝典】Java异常处理大师级教程:throws关键字,让异常声明成为你的专属标签!
40 3
|
2月前
|
Java Maven 编译器
Java编译器注解运行和自动生成代码问题之@AutoService工作问题如何解决
Java编译器注解运行和自动生成代码问题之@AutoService工作问题如何解决
136 1
|
24天前
|
Arthas Java 测试技术
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
|
1天前
|
Java 编译器 程序员
Java注解,元注解,自定义注解的使用
本文讲解了Java中注解的概念和作用,包括基本注解的用法(@Override, @Deprecated, @SuppressWarnings, @SafeVarargs, @FunctionalInterface),Java提供的元注解(@Retention, @Target, @Documented, @Inherited),以及如何自定义注解并通过反射获取注解信息。
Java注解,元注解,自定义注解的使用
|
3天前
|
XML JavaScript Java
NekoHTML 是一个基于Java的HTML扫描器和标签补全器
**NekoHTML** 是一个基于Java的HTML扫描器和标签补全器(tag balancer),由J. Andrew Clark开发。它主要用于解析HTML文档,并能够“修正”许多在编写HTML文档过程中常犯的错误,如增补缺失的父元素、自动用结束标签关闭相应的元素,以及处理不匹配的内嵌元素标签等。这使得程序能够以标准的XML接口来访问HTML文档中的信息。 ### NekoHTML的主要特点包括: 1. **错误修正**:能够自动修正HTML中的常见错误,如未闭合的标签等。 2. **DOM树生成**:将HTML源代码转化为DOM(Document Object Model)结构,便
|
15天前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
18天前
|
Java 编译器 测试技术
|
4天前
|
Java
扫盲java基础-注解
扫盲java基础-注解
|
29天前
|
存储 JSON 前端开发
【Java】用@JsonFormat(pattern = “yyyy-MM-dd“)注解,出生日期竟然年轻了一天
在实际项目中,使用 `@JsonFormat(pattern = "yyyy-MM-dd")` 注解导致出生日期少了一天的问题,根源在于夏令时的影响。本文详细解析了夏令时的概念、`@JsonFormat` 注解的使用方法,并提供了三种解决方案:在注解中添加 `timezone = GMT+8`、修改 JVM 参数 `-Duser.timezone=GMT+08`,以及使用 `timezone = Asia/Shanghai
50 0
【Java】用@JsonFormat(pattern = “yyyy-MM-dd“)注解,出生日期竟然年轻了一天
|
1月前
|
Java
Java系列之 IDEA 为类 和 方法设置注解模板
这篇文章介绍了如何在IntelliJ IDEA中为类和方法设置注解模板,包括类模板的创建和应用,以及两种不同的方法注解模板的创建过程和实际效果展示,旨在提高代码的可读性和维护性。