28.注解2.md
目录
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的更多相关文章
- 28.Hibernate-HQL查询.md
目录 1.概述 2.HQL实例 3.Criteria 查询 4.SQL本地查询 5.分页 1.概述 1)Get/load主键查询 2)对象导航查询 3)HQL查询, Hibernate Query l ...
- git基本用法
基本用法(下) 一.实验说明 本节实验为 Git 入门第二个实验,继续练习最常用的git命令. 1.1 实验准备 在进行该实验之前,可以先clone一个练习项目gitproject ...
- 【分享】Vue 资源典藏(UI组件、开发框架、服务端、辅助工具、应用实例、Demo示例)
Vue 资源典藏,包括:UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和 ...
- k8s环境搭建--基于minik8s方法
minik8s 安装 关闭selinux.开启ipv6 sudo bash selinux_ipv6.sh 下载kubectl和minikube 下载minikube,因为国外的源被墙了,所以只能用阿 ...
- git用法大全
转载自实验楼,之前有更新过两篇git的文章,毕竟内容太少,而git还有很多更丰富的技能,在实验楼上有一系列全的教程,这里做一下备案.需要时查阅. Git 实战教程 目录 一.实验说明 二.git的初始 ...
- Git基本用法2
二.比较内容 1.比较提交 - Git Diff 现在我们对项目做些修改: $ cd gitproject # 向README文件添加一行 $ echo "new line" &g ...
- Vue插件资料
UI组件element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和WeUI的组件库 iview ★5801 - 基于 Vuejs 的开源 UI ...
- Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例
Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和WeUI的组件库 ...
- 接口自动化测试平台 http://120.79.232.23
接口自动化测试平台 http://120.79.232.23 T Name Latest commit message Commit time .idea 修改自动化用例修改接口时,其他接口信息被删的 ...
随机推荐
- svn 红叉叉图标解决方法
这个图标表示当前文件夹下的某些文件或文件夹已经被计划从版本控制中 删除,或是该文件夹下某个受控的文件丢失了. 解决方法: 鼠标右键红叉小图标->->revert 更多SVN图标说明,请参考 ...
- set函数&操作
集合的交叉并补 交集, 共同的部分 set1 & set2 set1.intersection(set2) 差集 set1有set2没有的元素 set1 - set2 set1.differe ...
- [电脑知识点]win10家庭版怎么显示桌面图标
控制面板-------->外观和个性化-------->个性化-------->更改桌面图标-------->然后你就能看到你想要的东西了,勾选上就可以了
- sql语句中order by 多个字段同时排序的应用
order by 后面可以跟多个字段进行排序 用A1代表第一个字段,A2代表第二个字段 一.order by A1 , A2 desc 指的是用A1升序A2降序 二.order by A1 a ...
- Json3:使用gson做节点解析
Gson的节点对象:JsonElement : 所有的节点 都是 JsonElement 对象.JsonPrimitive : 基本的数据类型的节点对象,JsonElement的子类JsonNull ...
- Page Cache, the Affair Between Memory and Files.页面缓存-内存与文件的那些事
原文标题:Page Cache, the Affair Between Memory and Files 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限 ...
- SQL注入之代码层防御
[目录] 0x0 前言 0x1 领域驱动的安全 1.1 领域驱动的设计 1.2 领域驱动的安全示例 0x2 使用参数化查询 2.1 参数化查询 2.2 Java中的参数化语句 2.3 .NET(C#) ...
- ELK新手教程——pomelo + log4js + ELK(一)
随着项目越来越庞大,日志的数量也随之增多,游戏上线后的日志量肯定更多了,所以对日志的收集.存储.查询就非常重要了,开源界第一日志分析系统ELK必不可少. ELK系统由Elasticsearch(分布式 ...
- MySQL密码强度验证修改
MySQL5.6.6版本之后增加了密码强度验证插件validate_password,相关参数设置的较为严格. 影响的语句和函数有:create user,grant,set password,pas ...
- vim basic
1.基本用法 1.1.编辑模式 1.2.底行模式 1.3.环境配置 1.4.使用时发现的 2.编辑多个文档 3.选项 1.基本用法 1.1.编辑模式 插入 插入命令 插入位置 i 光标左侧 a 光标右 ...