第6单元:java5的注解
33.了解和入门注解的应用
1.一个注解相当于一个类
2.注解相当与一个你的源程序中要调用的一个类,要在源程序中应用某个注解
就先准备好这个注解类,就像你要调用某个类,得先有开发好的类
总结:注解相当于一种标记,在程序当中加了注解就是相当于在程序打上了标记
没有加,则没有这种标记,以后在java编译器开发工具个其他程序就可以用
反射来了解你的类及各种元素上有何种标记,看你有什么标记,就干相应的事。
标记可以加上 包 类 字段 方法 方法参数 及局部变量。
34.注解的定义与反射调用
35.为注解增加各种属性
java源文件-->class文件-->内存中(字节码文件)
元注解:注解的注解(@Retention(保存到什么期间上面三个),@Documented,@Target(针对目标)..);元数据,元信息
package java_5;
import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java_5.EnumTest.TransLight;
class Person {
}
@XinYu(arr = { 1, 2, 3 }, value = "新余学院" , transLight = EnumTest.TransLight.GREEN ,
retentionModel = @Retention(value = RetentionPolicy.RUNTIME ))
public class AnnotationTest {
@XinYu(value = "得到")
private static Person person;
// 假如数组只有一个值时,则直接写=?无需大括号
@XinYu(arr = 4, value = "计算机")
public static void main(@XinYu(value = "参数") String[] args)
throws NoSuchMethodException, SecurityException {
Field[] fields = AnnotationTest.class .getDeclaredFields();
for (Field field : fields) {
// 拿到属性上的注释
if (field.isAnnotationPresent(XinYu .class)) {
Annotation annotation = field.getAnnotation(XinYu .class);
String value = (( XinYu) annotation).value();
System. out.println(value);
}
}
Method method = AnnotationTest.class .getDeclaredMethod("main",
String[]. class);
// 拿到方法参数上的注释
Annotation[][] annoS = method.getParameterAnnotations();
for (int a = 0; a < annoS.length; a++) {
for (Annotation annotation : annoS[a]) {
String anno = (( XinYu) annotation).value();
System. out.println(anno);
}
}
// 拿到方法上的注释
if (method.isAnnotationPresent(XinYu .class)) {
Annotation[] annotations = method.getAnnotations();
for (Annotation annotation : annotations) {
String value = (( XinYu) annotation).value();
System. out.println(value);
}
}
// 拿到类上的注释
if (AnnotationTest.class .isAnnotationPresent(XinYu.class)) {
Annotation annotation = AnnotationTest.class
.getAnnotation( XinYu.class );
TransLight light = (( XinYu) annotation).transLight();
Retention retetion = ((XinYu ) annotation).retentionModel();
RetentionPolicy retentionPolicy = retetion.value();
System. out.println(retentionPolicy.toString());
System. out.println(light.nextLight());
System. out.println(((XinYu ) annotation).value());
// 在局部变量中注解是没有意义的,因为方法的调用随时可以,不存在随时注入
// @XinYu(value = "TestValue")
// Type c = annotation.annotationType();
// Class clazz = c.getClass();
// Annotation annotation2 = clazz.getAnnotation(XinYu.class);
}
}
}
package java_5;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//Type is the common superinterface for all types in the Java
//include raw types, parameterized types,array types, type variables and primitive types.
//注释你这个注解保留到什么阶段(三阶段)
@Retention(value = RetentionPolicy.RUNTIME)
// 在哪个地方可以用这个注解,相同类型的注解用数组标识
@Target(value = { ElementType. FIELD, ElementType.METHOD, ElementType .TYPE ,
ElementType. LOCAL_VARIABLE,ElementType .PARAMETER })
public @interface XinYu {
// 注解中可以定义属性,也可以定义默认值
int[] arr() default { 5, 6, 7 };
// 当属性名为value时可以在调用时不写value=?(前提只有value被调用了)
String value();
// 注解中用了枚举
EnumTest.TransLight transLight() default EnumTest.TransLight.RED ;
//注释中用到注释
Retention retentionModel() default @Retention(value = RetentionPolicy.RUNTIME);
}
分享到:
相关推荐
完整版 Java高级教程 Java语言程序设计 第6章 常用设计模式(共25页).ppt 完整版 Java高级教程 Java语言程序设计 第7章 Java注解(共10页).ppt 完整版 Java高级教程 Java语言程序设计 第8章 JDBC(共24页).ppt
第6章阐释并列举Java虚拟机指令集;第7章提供一张以操作码值为索引的Java虚拟机操作码助记符表。 《Java核心技术系列:Java虚拟机规范(Java SE 8版)》完整而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机...
Java SE完整版精品优质课件 自学入门必看的优秀Java基础知识培训教案 ...第6章 异常处理 第7章 Java集合 第8章 泛型 第9章 注解&枚举 第10章 IO 第11章 多线程 第12章 Java常用类 第13章 Java反射 第14章 网络编程
*第六阶段:JDBC深入理解高级特性:包括数据库连接池,存储过程,触发器,CRM思想; *第七阶段:HTML语言学习,包括HTML标签,表单标签以及CSS,这是Web应用开发的基础; *第八阶段:JavaScript脚本语言,包括...
《Java核心技术系列:Java虚拟机规范(Java SE 8版)》由Oracle官方发布,Java虚拟机技术创建人撰写,国内资深Java...第6章阐释并列举Java虚拟机指令集;第7章提供一张以操作码值为索引的Java虚拟机操作码助记符表。
完整版 Java高级教程 Java语言程序设计 第6章 常用设计模式(共25页).ppt 完整版 Java高级教程 Java语言程序设计 第7章 Java注解(共10页).ppt 完整版 Java高级教程 Java语言程序设计 第8章 JDBC(共24页).ppt
第6章阐释并列举Java虚拟机指令集;第7章提供一张以操作码值为索引的Java虚拟机操作码助记符表。 《Java核心技术系列:Java虚拟机规范(Java SE 8版)》完整而准确地 阐释了Java虚拟机各方面的细节,围绕Java虚拟机...
完整版 Java高级教程 Java语言程序设计 第6章 常用设计模式(共25页).ppt 完整版 Java高级教程 Java语言程序设计 第7章 Java注解(共10页).ppt 完整版 Java高级教程 Java语言程序设计 第8章 JDBC(共24页).ppt
第6章阐释并列举Java虚拟机指令集;第7章提供一张以操作码值为索引的Java虚拟机操作码助记符表。 《Java核心技术系列:Java虚拟机规范(Java SE 8版)》完整而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机...
4.1回顾spring和java的注解 4.1.1 spring标注类的注解: 4.1.2 spring标注方法的注解: 4.1.3 spring标注参数的注解: 4.1.4 spring标注属性的注解: 4.2 相关注解说明 4.2.1 @Configuration 4.2.2 @Bean 配置类 ...
完整版 Java高级教程 Java语言程序设计 第6章 常用设计模式(共25页).ppt 完整版 Java高级教程 Java语言程序设计 第7章 Java注解(共10页).ppt 完整版 Java高级教程 Java语言程序设计 第8章 JDBC(共24页).ppt
第六天:线程池的高效使用策略 第七天:简洁高效的注解Lombok及注解机制讲解 第八天:注解约束参数校验的应用 第九天:jetbrains常用高效插件讲解提升开发效率 第十天:postman及其他接口调试工具详解 第十一天:代码检查...
完整版 Java高级教程 Java语言程序设计 第6章 常用设计模式(共25页).ppt 完整版 Java高级教程 Java语言程序设计 第7章 Java注解(共10页).ppt 完整版 Java高级教程 Java语言程序设计 第8章 JDBC(共24页).ppt
用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...
用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...
完整版 Java高级教程 Java语言程序设计 第6章 常用设计模式(共25页).ppt 完整版 Java高级教程 Java语言程序设计 第7章 Java注解(共10页).ppt 完整版 Java高级教程 Java语言程序设计 第8章 JDBC(共24页).ppt
JAVA语言与编程第6章数组、枚举及注解.ppt
完整版 Java高级教程 Java语言程序设计 第6章 常用设计模式(共25页).ppt 完整版 Java高级教程 Java语言程序设计 第7章 Java注解(共10页).ppt 完整版 Java高级教程 Java语言程序设计 第8章 JDBC(共24页).ppt
完整版 Java高级教程 Java语言程序设计 第6章 常用设计模式(共25页).ppt 完整版 Java高级教程 Java语言程序设计 第7章 Java注解(共10页).ppt 完整版 Java高级教程 Java语言程序设计 第8章 JDBC(共24页).ppt
完整版 Java高级教程 Java语言程序设计 第6章 常用设计模式(共25页).ppt 完整版 Java高级教程 Java语言程序设计 第7章 Java注解(共10页).ppt 完整版 Java高级教程 Java语言程序设计 第8章 JDBC(共24页).ppt