java 反射和注解

本贴最后更新于 2302 天前,其中的信息可能已经沧海桑田

反射

Class<?> aClass = Class.forName("reflect.Student"); Constructor<?> constructor = aClass.getConstructor();//构造函数,用于创建对象 Object obj = constructor.newInstance(); //创建对象,用于执行函数 Method[] methods = aClass.getMethods();//获取方法 for (Method method : methods) { System.out.println(method); } Method out = aClass.getMethod("out");//获取指定方法 out.invoke(obj);//执行方法 Field[] fields = aClass.getDeclaredFields();//获取所有属性(包括private) for (Field field : fields) { System.out.println(field.getName()); } fields[0].setAccessible(true); //给属性解锁 fields[0] private name; fields[0].set(obj, "小明"); //给属性赋值 System.out.println(obj); //获取注解 Class<BookStore> bookStoreClass = BookStore.class; Method buyBook = bookStoreClass.getMethod("buyBook"); //判断是否有注解,如果用buyBook则获取的是类上的注解 if (bookStoreClass.isAnnotationPresent(Book.class)) { Book annotation = bookStoreClass.getAnnotation(Book.class); //输出注解 System.out.println(annotation.value()); System.out.println(Arrays.toString(annotation.authors())); }

注解

元属性

@Target ElemenetType: TYPE:用在类,接口上 FIELD:用在成员变量上 METHOD用在方法上 PARAMETER:用在参数上 CONSTRUCTOR:用在构造方法上 LOCAL_VARIABLE:用在局部变量上 @Retention RetentionPolicy: SOURCE:注解只存在于Java源代码中,编译生成的字节码文件中就不存在了。 CLASS:注解存在于Java源代码、编译以后的字节码文件中,运行的时候内存中没有,默认值。 RUNTIME:注解存在于Java源代码中、编译以后的字节码文件中、运行时内存中,程序可以通过反射获取该注解。

自定义注解

@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Book { // 当注解中只有一个属性且名称是value,在使用注解时给value属性赋值可以直接给属性值 //书名 String value(); //价格 double price() default 100; //作者 String[] authors(); }

使用案例

@Book(value = "红楼梦",authors = "曹雪芹",price = 998) public class BookStore { @Book(value = "西游记",authors = {"吴承恩"}) public void buyBook(){ } }
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3196 引用 • 8215 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • DevYui

    hello

  • 其他回帖
  • someone

    你好,我刚使用这个博客,请多多指教。

    1 回复
  • tianyunperfect via macOS

    嗯嗯,正在研究中ing

  • DevYui

    这个博客有一个非常不错的社区,记得来看看哦。

    1 回复