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 修改自动化用例修改接口时,其他接口信息被删的 ...
随机推荐
- solr 忽略大小写
1.types标签下加入如下fieldType <fieldType name="str_lower" class="solr.TextField" so ...
- Linux安装vsftpd组件
1 安装vsftpd组件 安装完后,有/etc/vsftpd/vsftpd.conf 文件,是vsftp的配置文件. [root@hadoop1 ~]# yum -y install vsftpd 2 ...
- pymongo
import pymongofrom bson import ObjectIdimport jsonmongo_client=pymongo.MongoClient(host='127.0.0.1', ...
- 安全测试5_服务端的安全漏洞(SQL注入、命令注入、文件操作类)
前面大致讲解了下客户端的安全漏洞,现在来讲解下服务端的安全漏洞. 1.SQL注入(SQL Injection),是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库 ...
- 【Linux】【secureCRT】下载,安装,激活攻略
以前公司使用的是SSH访问Linux服务器,今天争取了能看到数据,问了同事使用的是secureCRT,然后自己就装了一个. 下载地址:https://www.vandyke.com/download/ ...
- linux中测试py脚本使用debug模式
python -mtrace --trace ping_host.py
- 导航栏 ------ z-index
z-index 显示的层叠关系,数字越大越在上面 <!DOCTYPE html> <html lang="en"> <head> <met ...
- 插入排序(直接插入、折半、Shell)
直接插入排序(顺序插入排序) 基本思想: 排序过程,整个排序过程为n-1趟插入,即先将序列中的第1个元素看成是一个有序子序列,然后从第2个元素开始,逐个进行插入,直至整个序列有序. 在有序序列中插入一 ...
- python中from __future__ import division
ppython2.7版本中整数相除得出的结果不显示小数 a = 9 / 2 print(a) 输出结果: 4 此时就需要调用from __future__ import division 1 from ...
- python中的jion
on将列表或元组中的每个元素连接起来,举个例子: 1 a = ["hello", "world", "dlrb"] 2 a1 = " ...