广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解java注解相关知识
  • 968
分享到

详解java注解相关知识

2024-04-02 19:04:59 968人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

定义  1、如果注解中有属性,那么必须给属性赋值。 package com.lxc.Test; // 定义一个注解 public @interface Annota

定义

 1、如果注解中有属性,那么必须给属性赋值。


package com.lxc.Test;
 
// 定义一个注解
public @interface Annotation {
    String name(); // 看似name像一个方法,实际上我们把name称为属性
}

使用上边注解:


package com.lxc.Test;
 
public class Test {
    @Annotation(name="lxc")
    public void test() {
    }
}

2、如果注解中有属性,且没有定义默认值,那么在使用注解的时候,必须给属性赋值。


public @interface Annotation {
    String name();
    int age();
}

public class Test {
    @Annotation(name="lxc", age=20)
    public void test() {
    }
}

但是注解中如果有默认值,在使用注解时,可以不给属性赋值


public class Test {
    @Annotation(name="lxc")
    public void test() {
    }
}

public @interface Annotation {
    String name();
    String password() default "123";
}

3、value() 属性

如果注解中的一个属性名是value,且有且只有一个value(),在使用注解的时候,属性名可以省略


public class Test {
    @Annotation("lxc")
    public void test() {
    }
}

public @interface Annotation {
    String value();
    String password() default "123";
}

注解中属性的类型有哪些

byte、short、int、float、double、boolean、char、String、Class、枚举

数组:

如果数组属性中有一个元素,那么数组的大括号可以省略:


public @interface Annotation {
    String[] name();
}

public class Test {
    // @Annotation(name={"lxc"}) // 写法一
    @Annotation(name="lxc") // 写法二
    public void test() {
    }
}

枚举:


public enum MyEnum {
    className, name, age,
}

public @interface Annotation {
    String[] name();
    MyEnum[] student();
}

public class Test {
    @Annotation(name="lxc", student = {MyEnum.className, MyEnum.age})
    public void test() {
    }
}

注解如何使用:

(1)标记一个注解只能出现在类或者方法上


@Target(value = {ElementType.TYPE, ElementType.METHOD})
public @interface Annotation {
    String userName();
    MyEnum[] student();
}

(2)标记一个注解可以被反射机制所读取


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
// 标记注解只能出现在类上
@Target(value = {ElementType.TYPE, ElementType.METHOD})
// 标记注解可以被反射机制所读取
@Retention(RetentionPolicy.RUNTIME)
public @interface Annotation {
    String userName();
    MyEnum[] student();
}

获取注解中的属性值

通过反射机制来获取。

(1)获取类上边注解的属性:

注解类:


package com.lxc.Test;
 
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
// 标记注解只能出现在类上
@Target(value = {ElementType.TYPE, ElementType.METHOD})
// 标记注解可以被反射机制所读取
@Retention(RetentionPolicy.RUNTIME)
public @interface Annotation {
    String userName() default "吕星辰";
}

使用注解类:


// myAnnotation 
@Annotation(userName = "哈哈")
public class myAnnotation {
}

获取注解类中 的属性:


package com.lxc.Test;

public class Test {
    public static void main(String[] args) throws Exception{
        Class c = Class.forName("com.lxc.Test.myAnnotation");
        System.out.println(c.isAnnotationPresent(Annotation.class));
        // 判断一个类是否有:Annotation这个注解
        if(c.isAnnotationPresent(Annotation.class)) {
            // 获取注解对象
            Annotation ann = (Annotation) c.getAnnotation(Annotation.class);
            // 通过注解对象获取属性值
            System.out.println(ann.userName());
        }
    }
}

(2)获取类中方法上边注解的属性:

注解类:


package com.lxc.Test;
 
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
// 标记注解只能出现在类上
@Target(value = {ElementType.TYPE, ElementType.METHOD})
// 标记注解可以被反射机制所读取
@Retention(RetentionPolicy.RUNTIME)
public @interface Annotation {
    String userName();
    String password();
}

在方法上使用注解及获取方法上边的注解:
分析:想获取方法上的注解,首先需要获取该方法,获取该方法的前提,获取该方法的类:


package com.lxc.Test;
 
import java.lang.reflect.Method;
 
public class UserAnnotation {
    @Annotation(userName = "lxc", passWord = "123")
    public void getUser() {}
 
    public static void main(String[] args) throws Exception{
        // 通过反射获取类
        Class c = Class.forName("com.lxc.Test.UserAnnotation");
        // 通过反射获取类中的方法
        Method getUserMethod = c.getDeclaredMethod("getUser");
        // 判断方法是否有 Annotation 这个注解
        if(getUserMethod.isAnnotationPresent(Annotation.class)) {
            Annotation ann = getUserMethod.getAnnotation(Annotation.class);
            System.out.println(ann.userName()); // lxc
            System.out.println(ann.password()); // 123
        }
    }
}

到此这篇关于详解java注解的使用的文章就介绍到这了,更多相关java注解内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解java注解相关知识

本文链接: https://www.lsjlt.com/news/129143.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解java注解相关知识
    定义  1、如果注解中有属性,那么必须给属性赋值。 package com.lxc.Test; // 定义一个注解 public @interface Annota...
    99+
    2022-11-12
  • 详解Java接口的相关知识
    一、接口概述 接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法、成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前)、...
    99+
    2022-11-12
  • Java SpringBoot的相关知识点详解
    目录1. IOC和DI2. Spring容器加载Bean/创建对象的时机3. @Autowired注解4. @Configuration配置类5. @Conditional条件注解6...
    99+
    2022-11-12
  • 浅谈Java自定义注解相关知识
    目录一、自定义注解格式二、注解本质分析三、注解属性及类型四、注解属性类型五、注解属性赋值简化操作一、自定义注解格式 分析 Java 中自带的 @Override 注解 , 源码如下 ...
    99+
    2022-11-12
  • 详解SpringIOC容器相关知识
    目录一、前言二、IOC原理实战三、IOC本质四、spring helloworld五、小结一、前言 IOC控制反转,不是一种技术,而是一种设计思想,就是将原本在程序中手动创建对象的控...
    99+
    2022-11-12
  • 详解Java注解知识点
    目录一、注解是什么二、jdk支持的注解有哪些2.1 三种常用的注解:2.2 元注解三、注解实例四、总结一、注解是什么 Java 注解用于为 Java 代码提供元数据,看完这句话也许你...
    99+
    2022-11-12
  • 详解Java进阶知识注解
    目录一、注解的概念1、注解官方解释2、注解与注释的区别二、内置注解与元注解1、常用的内置注解2、常用的元注解三、自定义注解1、自定义注解基础知识2、演示自定义注解的使用3、演示注解在...
    99+
    2022-11-12
  • JavaScript数据类型相关知识详解
    目录一、字面量1.1 数字字面量1.2 浮点数字面量1.3 特殊值1.4 字符串字面量二、变量2.1 变量的定义2.2 变量的赋值三、数据类型3.1 简单数据类型3.2 检测数据类型...
    99+
    2022-11-12
  • Java全面解析IO流相关知识
    目录前言一、File1.File类的概述和构造方法2.File类创建功能3.File类判断和获取功能4.File类删除功能二、字节流1.IO流的概述和分类2.字节流写数据3.字节流写...
    99+
    2022-11-12
  • Java IO流相关知识代码解析
    一、IO流的分类字符流ReaderInputStreamReader(节点流)BufferedReader(处理流)WriterOutputStreamWriter(节点流)BufferedWriter(处理流)PrintWriter字节流...
    99+
    2023-05-30
    java io流 相关知识
  • R语言中循环的相关知识详解
    目录repeatwhile向量for循环break和nextrepeat repeat是最存粹的循环,只要不让出来,就一直重复{}中的代码,可以在命令行中输入 repeat{prin...
    99+
    2023-03-19
    R语言 循环使用 R语言 循环
  • JavaSwing基础之Layout布局相关知识详解
    目录一、View layout方法二、ViewGroup layout方法三、自定义垂直布局VerticalLayout四、效果展示一、View layout方法 首先,还是从Vie...
    99+
    2022-11-12
  • R语言中因子相关知识点详解
    因子是用于对数据进行分类并将其存储为级别的数据对象。 它们可以存储字符串和整数。 它们在具有有限数量的唯一值的列中很有用。 像“男性”,“女性”和True,False等。它们在统计建...
    99+
    2022-11-12
  • IOC容器注解的相关知识点有哪些
    这篇文章主要讲解了“IOC容器注解的相关知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“IOC容器注解的相关知识点有哪些”吧!xml配置与类配置1...
    99+
    2022-10-19
  • 解读Vue-loader的相关知识
    目录什么是Vue-loader一、处理资源路径转换规则 为什么要转换资源URL(好处)二、使用预处理器三、Scoped CSS3.1 混用组件和全局样式3.2 子组件根元素...
    99+
    2023-03-24
    Vue-loader相关知识 Vue-loader 解读Vue-loader
  • 深入理解Java显式锁的相关知识
    目录一、显式锁二、Lock的常用api三、Lock的标准用法四、ReentrantLock(可重入锁)五、ReentrantReadWriteLock(读写锁)六、Condition...
    99+
    2022-11-12
  • SQL注入相关知识整理
    SQL注入相关知识整理 SQL注入 什么是SQL注入  SQL注入(Sql Injection ) 是一种将SQL语句插入或添加到应用(用户)的输入参数中的攻击 这些参数传递给后台的SQL数据库服务器加以解析并执行 哪里存在SQL注入?...
    99+
    2019-01-31
    SQL注入相关知识整理 数据库入门 数据库基础教程 数据库 mysql
  • Java基础知识之注解、元注解
    目录注解注解作用Java预定义的注解自定义注解元注解实例:注解使用总结总结注解 Java注解也称Java标注,是jdk1.5(5.0)后的新特征。Java语言中的类、方法、变量、参数...
    99+
    2022-11-13
  • SwiftUI中@ViewBuilder的相关知识点解密
    前言 在SwiftUI框架中使用很多的注解,虽然使语法看上去非常简洁,但是增加了初学者的理解难度,这篇文章我们来看一下@ViewBuilder的相关知识。主要包括以下内容: ...
    99+
    2022-11-12
  • JavaScript中Math对象相关知识全解
    目录前言常用属性常用方法实例参考总结前言 除了简单的加减乘除,在某些长和开发者需要进行更为复杂的数学运算。JavaScript的Math对象提供了一系列属性和方法,能够满足大多数场合...
    99+
    2022-11-16
    js math对象 js中math对象 javascript math对象
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作