Java基础学习12--注解
2021-03-03 22:26
标签:exce system col 配置文件 tor 注解 标记 相关 存在 1.注解相关概念 注解(Annotation)是代码里的特殊标记,程序可以读取注解,一般用于替代配置文件。 可以通过反射技术得到类的注解,以控制类的运行方式。 创建注解使用@interface关键字,注解中只能包含属性。 注解的属性可以使用的类型:字符串、基本数字类型、Class、Enum、Annotation,以上类型的一维数组。 2.创建注解 注解的本质是一个继承了Annotation的interface,注解的属性会被转换为方法。 3.使用反射获取注解信息 Java基础学习12--注解 标签:exce system col 配置文件 tor 注解 标记 相关 存在 原文地址:https://www.cnblogs.com/asenyang/p/14385978.html1 package com.example.anno;
2
3 public @interface MyAnnotation {
4 //只能包含属性
5 String name();
6
7 int age() default 18;
8 }
1 package com.example.anno;
2
3 import com.example.eum.Gender;
4
5 public @interface MyAnnotation2 {
6 String value();
7
8 int num() default 2;
9
10 // Class> class1();
11 //
12 // Gender gender();
13 //
14 // MyAnnotation anno1();
15 }
1 package com.example.anno;
2
3 //注解写在类上
4 @MyAnnotation(name = "张三", age = 20)
5 public class Person {
6
7 //注解写在方法上,使用默认值
8 @MyAnnotation(name = "张三")
9 public void show() {
10
11 }
12
13 @MyAnnotation2(value="鸡肉")
14 public void eat() {
15
16 }
17 }
1 package com.example.anno;
2
3 import java.lang.annotation.ElementType;
4 import java.lang.annotation.Retention;
5 import java.lang.annotation.RetentionPolicy;
6 import java.lang.annotation.Target;
7
8 //元注解,
9 //@Retention(RetentionPolicy.CLASS)// 默认,运行的时候注解就不存在了
10 @Retention(RetentionPolicy.RUNTIME) // jvm级别
11 //@Retention(RetentionPolicy.SOURCE) // 编译时直接丢弃
12
13 @Target(value = {
14 ElementType.ANNOTATION_TYPE,
15 ElementType.CONSTRUCTOR,
16 ElementType.FIELD,
17 ElementType.LOCAL_VARIABLE,
18 ElementType.METHOD,
19 ElementType.PACKAGE,
20 ElementType.TYPE,
21 ElementType.TYPE_PARAMETER,
22 ElementType.TYPE_USE })
23
24 public @interface PersonInfo {
25 String name();
26
27 int age();
28
29 String sex();
30 }
1 package com.example.anno;
2
3 //注解写在类上
4 @MyAnnotation(name = "张三", age = 20)
5 public class Person {
6
7 // 注解写在方法上,使用默认值
8 @MyAnnotation(name = "张三")
9 public void show() {
10
11 }
12
13 @MyAnnotation2(value = "鸡肉")
14 public void eat() {
15
16 }
17
18 @PersonInfo(name = "张三", age = 20, sex = "男")
19 public void show(String name, int age, String sex) {
20 System.out.println(name + "--" + age + "--" + sex);
21 }
22 }
1 package com.example.anno;
2
3 import java.lang.annotation.Annotation;
4 import java.lang.reflect.Method;
5
6 public class Demo {
7
8 public static void main(String[] args) throws Exception {
9 // TODO Auto-generated method stub
10 Class> cp = Class.forName("com.example.anno.Person");
11 Method m = cp.getMethod("show", String.class, int.class, String.class);
12 PersonInfo pi = m.getAnnotation(PersonInfo.class);
13 System.out.println(pi.name() + "--" + pi.age() + "--" + pi.sex());
14
15 Person p = (Person) cp.newInstance();
16 m.invoke(p, pi.name(), pi.age(), pi.sex());
17 }
18 }