注解类代码,注解的属性可以有多个:

package reflect;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; /***
* java注解默认只会保留在字节码文件里面
* 运行期间注解会被抹掉
* 可以用@Retention来指定注解的保留时间
* 注:
* @Retention是元注解,即用来解释其他注解的注解
* Retentionpolicy.RUNTIME是表示注解保留到运行时。
* @author zlq1252
*
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
/*
* 注解的属性
    *
   *注解可以有多个属性。
   *如果属性名为value时,可以不制定属性名(只有一个属性时)
*/
public String value();
}

方法类,在方法类的方法上加上注解代码如下:

package reflect;

public class C {

    public void f1() {
// TODO Auto-generated method stub
System.out.println("C'S f1");
}
@Test(value="淡淡")
public void hello() {
// TODO Auto-generated method stub
System.out.println("C'S hello");
}
@Test(value="洋洋")
public void bala() {
// TODO Auto-generated method stub
System.out.println("C'S bala");
}
}

反射类代码,通过反射类获得所有具有代码注解的方法并执行,同时可以过的注解的属性:

package reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Scanner; public class TestCase3 { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String className = sc.nextLine();
Class clazz = Class.forName(className);
Object obj = clazz.newInstance();
Method[] methods = clazz.getDeclaredMethods();
for(Method mh:methods){
//获得加在方法前面的@Test
Test test = mh.getDeclaredAnnotation(Test.class);
System.out.println("@Test:"+test);
//执行带有注解的方法
if(test!=null){
mh.invoke(obj);
//读取@Test的属性值
String v1 = test.value();
System.out.println("@Test的属性值:"+v1);
}
}
} }

最新文章

  1. IT软件开发常用英语词汇
  2. linux网络编程-(socket套接字编程UDP传输)
  3. java、java -version 可以javac没有内部命令的问题
  4. 非web项目中使用XDT的实例(续)
  5. 怎么解决div覆盖内容却没覆盖的问题?
  6. swift基本语法
  7. Node.js : 我只需要一个店小二
  8. Java 的swing.GroupLayout布局管理器的使用方法和实例(转)
  9. STL sort函数的用法
  10. ECMAScript简介以及es6新增语法
  11. 10个用于处理日期和时间的 Python 库
  12. Codefoces909E Coprocessor(拓扑排序)
  13. CSS 基础:CSS 工作原理(2)<思维导图>
  14. SQL 清理缓存 更新无效
  15. jvm系列五、jvm垃圾回收机制、jvm各种参数及调优
  16. 贪吃蛇Controller Java实现(二)
  17. 微信隐藏的webJS Api汇总
  18. 解决Resource doesn't have a corresponding Go package.问题
  19. T分布(T-Distribution)
  20. mnesia怎样改动表结构

热门文章

  1. 【Linux】ping命令详解
  2. 用 React 编写的基于Taro + Dva构建的适配不同端(微信小程序、H5、React-Native 等)的时装衣橱
  3. Day3 Form表单
  4. php一种面向对象的语言,那么什么是面向对象呢?
  5. vue-router配置
  6. 工作流常使用API
  7. SQL Server 2008 角色
  8. java:数据库操作JDBC
  9. mybase修改内部文件免费使用
  10. 关于ASP.NET页面事件的知识点