目录

1. 特点

  • 注释:给程序员阅读使用
  • 注解:给编译器阅读使用

2.优点

  • 简化配置文件
  • 灵活方便

3. 源注解-部分

//修饰范围
@Target({ElementType.TYPE, //类
ElementType.FIELD, //字段
ElementType.METHOD, //方法
ElementType.PARAMETER, //参数
ElementType.CONSTRUCTOR, //构造
ElementType.LOCAL_VARIABLE}) //局部变量
//有效范围
@Retention(value = RetentionPolicy.SOURCE) //Annotation只保留在源代码中,编译器直接丢弃这种Annotation。
@Retention(value = RetentionPolicy.CLASS) //编译器把Annotation记录到class文件中,当运行Java程序时候,JVM不能获取Annotation信息,这个是默认值。
@Retention(value = RetentionPolicy.RUNTIME) //编译器把Annotation记录到class文件中,当运行Java时,JVM也可以获取Annotation信息,程序可以通过反射获取该Annotation信息。

4.自定义注解

  • 自定义注解关键字:@interface
  • 注解使用时候注意只能定义方法
  • 注解可以用default来写默认值
  • 注解方法不能有实体
  • 只有一个属性时候可以不写名称
package per.liyue.code.teset;
/*
* 注解的使用
*/
public @interface MyAn {
//数字
int id();
//字符
String name();
//默认值
String com() default "";
//默认值
long time() default 9L;
//数组
int[] a();
//字符串数组
String[] ss();
//如果只有一个熟悉,且名字为value时候可以不写名称
//String value();
}
package per.liyue.code.teset;
/*
* 一个注解的例子
*/
//注解可以写到这里
@MyAn(id=1, name="hah", a={1, 2}, ss={"aa", "bb"})
public class demo1 {
//需要将注解内容都写出来
@MyAn(id=1, name="hah", com="sss", time=8l, a={1, 2}, ss={"aa", "bb"})
public void Fun(){} //某些注解使用默认值
@MyAn(id=1, name="hah", a={1, 2}, ss={"aa", "bb"})
public void Fun1(){} }

5.使用注解获

Demo:

package per.liyue.code.annotion_demo;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
/*
* 自定义注解
*/
//修饰范围
@Target({ElementType.TYPE, //类
ElementType.FIELD, //字段
ElementType.METHOD, //方法
ElementType.PARAMETER, //参数
ElementType.CONSTRUCTOR, //构造
ElementType.LOCAL_VARIABLE}) //局部变量
//有效范围
//@Retention(value = RetentionPolicy.SOURCE) //Annotation只保留在源代码中,编译器直接丢弃这种Annotation。
//@Retention(value = RetentionPolicy.CLASS) //编译器把Annotation记录到class文件中,当运行Java程序时候,JVM不能获取Annotation信息,这个是默认值。
@Retention(value = RetentionPolicy.RUNTIME) //编译器把Annotation记录到class文件中,当运行Java时,JVM也可以获取Annotation信息,程序可以通过反射获取该Annotation信息。
public @interface Person {
int age() default 20;
String name() default "叫啥来";
}
package per.liyue.code.annotion_demo;
/*
* 使用注解的类
*/
public class Employee {
@Person(age = 30, name = "张三")
public void funE(){ }
}
package per.liyue.code.annotion_demo;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
import org.junit.Test;
/*
* 获取注解使用注解
*/
public class UsePerson {
@Test
public void Fun() throws NoSuchMethodException, SecurityException, ClassNotFoundException{
/*
* 获取注解信息
*/
//先获取到类
//Class clazz = Class.forName("per.liyue.code.annotion_demo.Employee");
Class clazz = Employee.class; //获取到方法
Method m = clazz.getMethod("funE"); //获取方法上的注解
Person p = m.getAnnotation(Person.class); //输出
System.out.println("这个员工的年龄:" + p.age() + " 名字:" + p.name());
}
}

28.注解2.md的更多相关文章

  1. 28.Hibernate-HQL查询.md

    目录 1.概述 2.HQL实例 3.Criteria 查询 4.SQL本地查询 5.分页 1.概述 1)Get/load主键查询 2)对象导航查询 3)HQL查询, Hibernate Query l ...

  2. git基本用法

    基本用法(下)           一.实验说明 本节实验为 Git 入门第二个实验,继续练习最常用的git命令. 1.1 实验准备 在进行该实验之前,可以先clone一个练习项目gitproject ...

  3. 【分享】Vue 资源典藏(UI组件、开发框架、服务端、辅助工具、应用实例、Demo示例)

    Vue 资源典藏,包括:UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和 ...

  4. k8s环境搭建--基于minik8s方法

    minik8s 安装 关闭selinux.开启ipv6 sudo bash selinux_ipv6.sh 下载kubectl和minikube 下载minikube,因为国外的源被墙了,所以只能用阿 ...

  5. git用法大全

    转载自实验楼,之前有更新过两篇git的文章,毕竟内容太少,而git还有很多更丰富的技能,在实验楼上有一系列全的教程,这里做一下备案.需要时查阅. Git 实战教程 目录 一.实验说明 二.git的初始 ...

  6. Git基本用法2

    二.比较内容 1.比较提交 - Git Diff 现在我们对项目做些修改: $ cd gitproject # 向README文件添加一行 $ echo "new line" &g ...

  7. Vue插件资料

    UI组件element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和WeUI的组件库 iview ★5801 - 基于 Vuejs 的开源 UI ...

  8. Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例

    Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和WeUI的组件库 ...

  9. 接口自动化测试平台 http://120.79.232.23

    接口自动化测试平台 http://120.79.232.23 T Name Latest commit message Commit time .idea 修改自动化用例修改接口时,其他接口信息被删的 ...

随机推荐

  1. Hibernate SQL

    SQL查询: 5.2之后的版本: NativeQuery<Order> sqlQuery = session.createNativeQuery("select * from t ...

  2. 第7章 网络层协议(4)_IGMP协议

    4. IGMP协议(Internet Group Management Protocol) 4.1 什么是组播(多播) (1)单播同一个视频要发送90个副本,但支持收看者“快进”和“倒退”. (2)组 ...

  3. Android Studio将项目打包成apk

    Android Studio将项目打包成apk 第一种方法:适合自己调试用. (1)直接在项目中生成: (2)位置是在你的项目中 第二种方法:适合发布应用. (1)找到Generate Signed ...

  4. Mysql-Client编码问题

    Mysql编码问题! 首先,安装完mysql之后,登录进去(从控制台), 先要查看mysql编码:SHOW VARIABLES LIKE 'char%': (我这里是修改好的) 如果是没修改的,因为当 ...

  5. NodeJs安装以及注意事项

    1.测试NodeJs是否安装成功 node --version npm -v 配置node的可执行文件路径到环境变量path 2.安装相关环境 npm install express -g npm i ...

  6. Junit Rdeis No tests found matching 单机版安装

    redis安装(SecureCRT工具上传redis 3.0.0) 1.mkdir redis 创建文件夹2.tar –zxvf redis-3.0.0.tar.gz –C /redis/ 解压到re ...

  7. 获取get请求后面的参数

    var str = "www.baidu.com?id=1&name=zhangsan"; var data = str.split("?"); con ...

  8. REST api文档管理工具

    问题: 不同软件/程序在网络中互相传递信息不统一. 交互不便. REST API 作用: RESTful API就是一套协议,用来规范多种形式的前端和同一个后台的交互方式. 原理: 组成/流程/规范: ...

  9. ftp的安全问题

    ftp漏洞http://www.4hou.com/technology/3507.html

  10. 55.纯 CSS 创作一个太阳、地球、月亮的运转模型

    原文地址:https://segmentfault.com/a/1190000015313341 感想:主要运用边框.伪元素.动画. HTML code: <div class="co ...