java注解
时间:2021-07-26 16:52:58
收藏:0
阅读:0
注解
anno1
package com.ding.anno1;
/**
* @Description TODO
* @Author 丁帅帅
* @Date 21/07/24 23:41
* @Version 1.0
*/
public class Fu {
public void show(){
System.out.println("父类的方法");
}
}
package com.ding.anno1;
/**
* @Description TODO
* @Author 丁帅帅
* @Date 21/07/24 23:42
* @Version 1.0
*/
public class Zi extends Fu {
@Override//告诉编译器这个方法是重写了父类中的show方法
public void show(){
System.out.println("子类的方法");
}
@Deprecated//表示这是一个过时的方法
public void method(){
System.out.println("过时的方法>>>");
}
public void fun(){
int a=10;
}
@SuppressWarnings(value = "all")//压制本方法中所有的警告
public void fun2(){
int b=10;
}
}
anno2
package com.ding.anno2;
/**
* @Description TODO
* @Author 丁帅帅
* @Date 21/07/24 23:51
* @Version 1.0
*/
public @interface Anno1 {
//定义一个基本类型的属性
int a() default 12;
//定义一个String类型的属性
public String name() default "ding";
//定义一个Class类型的属性
public Class clazz() default Anno2.class;
//定义一个注解类型的属性
public Anno2 anno() default @Anno2;
//定义一个枚举类型的属性
public Season season() default Season.SPRING;
//int数组
public int[] arr() default {1,2,3,4,5};
//枚举数组
public Season[] seasons() default {Season.SPRING,Season.SUMMER};
}
package com.ding.anno2;
/**
* @Description TODO
* @Author 丁帅帅
* @Date 21/07/24 23:52
* @Version 1.0
*/
public @interface Anno2 {
}
package com.ding.anno2;
/**
* @Description TODO
* @Author 丁帅帅
* @Date 21/07/25 00:00
* @Version 1.0
*/
//在使用注解的时候如果注解里面的属性没有指定默认值。
//那么我们就需要手动给出注解属性的设置值。
//@Anno1(name="abc")
@Anno1(a=17)
public class AnnoDemo {
}
package com.ding.anno2;
/**
* @Description TODO
* @Author 丁帅帅
* @Date 21/07/24 23:51
* @Version 1.0
*/
public enum Season {
SPRING,SUMMER,AUTUMN,WINTER;
}
anno3
package com.ding.anno3;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* @Description TODO
* @Author 丁帅帅
* @Date 21/07/25 00:06
* @Version 1.0
*/
//表示Test这个注解的存活时间
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Test {
}
package com.ding.anno3;
/**
* @Description TODO
* @Author 丁帅帅
* @Date 21/07/25 00:04
* @Version 1.0
*/
public class UserTest {
//没有使用Test注解
public void show(){
System.out.println("UserTest....show>>>");
}
//使用Test注解
@Test
public void method(){
System.out.println("使用了test注解");
}
}
package com.ding.anno3;
import java.lang.reflect.Method;
/**
* @Description TODO
* @Author 丁帅帅
* @Date 21/07/25 00:08
* @Version 1.0
*/
public class AnnoDemo {
public static void main(String[] args) throws Exception{
//1.通过反射获取UserTest类的字节码文件对象
Class<?> clazz = Class.forName("com.ding.anno3.UserTest");
//创建对象
UserTest userTest = (UserTest) clazz.newInstance();
//2.通过反射获取这个类里面所有的方法对象
Method[] Methods = clazz.getDeclaredMethods();
//3.遍历
for (Method method : Methods) {
if(method.isAnnotationPresent(Test.class)){
method.invoke(userTest);
}
}
}
}
anno4
package com.ding.anno4;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @Description TODO
* @Author 丁帅帅
* @Date 21/07/25 00:18
* @Version 1.0
*/
@Target({ElementType.FIELD,ElementType.TYPE,ElementType.METHOD})//指定注解使用的位置(成员变量,类,方法)
@Retention(RetentionPolicy.RUNTIME)//指定该注解的存活时间
public @interface Anno {
}
package com.ding.anno4;
/**
* @Description TODO
* @Author 丁帅帅
* @Date 21/07/25 00:21
* @Version 1.0
*/
@Anno
public class Person {
}
package com.ding.anno4;
/**
* @Description TODO
* @Author 丁帅帅
* @Date 21/07/25 00:21
* @Version 1.0
*/
public class Student extends Person {
public void show(){
System.out.println("student.......show..........");
}
}
package com.ding.anno4;
/**
* @Description TODO
* @Author 丁帅帅
* @Date 21/07/25 00:22
* @Version 1.0
*/
public class StudentDemo {
public static void main(String[] args) throws Exception{
Class<?> clazz = Class.forName("com.ding.anno4.Student");
Class<?> clazz1 = Class.forName("com.ding.anno4.Person");
//获取注解
boolean result = clazz.isAnnotationPresent(Anno.class);
boolean result1 = clazz1.isAnnotationPresent(Anno.class);
System.out.println(result);
System.out.println(result1);
}
}
评论(0)