• Reflect in Java


    java反射的使用:

      1 package com.test.struts2;
    2
    3 import java.lang.reflect.Constructor;
    4 import java.lang.reflect.Field;
    5 import java.lang.reflect.Method;
    6
    7 import com.opensymphony.module.sitemesh.util.ClassLoaderUtil;
    8
    9 public class TestReflect {
    10
    11 private String userName;
    12
    13 private String passWord;
    14
    15 public String userNamePublic;
    16
    17 public String passWordPublic;
    18
    19 private ClassLoader classLoader;
    20
    21 public static void main(String[] args) throws Exception {
    22
    23 Class clazz = Class.forName("com.test.struts2.TestReflect");
    24
    25 // 通过线程获取ClassLoder
    26 Class clazz1 = Thread.currentThread().getContextClassLoader()
    27 .loadClass("com.test.struts2.TestReflect");
    28
    29 // 通过.class获取ClassLoder(TestReflect参数只可以使自己包中命名的类)
    30 Class clazz2 = TestReflect.class.getClassLoader().loadClass(
    31 "com.test.struts2.TestReflect");
    32
    33 // Struts2中的ClassLoaderUtil类,对线程获取进行了分装
    34 Class clazz3 = ClassLoaderUtil.loadClass(
    35 "com.test.struts2.TestReflect", String.class);
    36
    37 // 新建实例(newInstance建立)
    38 TestReflect testReflect = (TestReflect) clazz.newInstance();
    39
    40 // 属性(所有的的属性)
    41 Field[] fields = clazz.getDeclaredFields();
    42 System.out.println("---------所有属性 ");
    43 for (Field field : fields) {
    44 System.out.println(field.getName());
    45 }
    46
    47 // 属性(public的属性)
    48 System.out.println("---------public属性 ");
    49 Field[] fieldsPublic = clazz.getFields();
    50 for (Field field : fieldsPublic) {
    51 System.out.println("public属性: " + field.getName());
    52 }
    53
    54 // 通过getXXX和setXXX方法访问八个基本类型的值
    55 // 如果该属性类型是引用类型则直接使用get(Object obj)
    56 Field f = clazz.getDeclaredField("userName");
    57 testReflect.setUserName("Hello");
    58 System.out.println(f);
    59 f.setAccessible(true);
    60 f.set(testReflect, "111");
    61 System.out.println(testReflect.getUserName());
    62 System.out.println("调用了该方法:" + f.get(testReflect));
    63
    64 System.out.println("---------所有方法 ");
    65 // 所有的方法
    66 Method[] methods = clazz.getDeclaredMethods();
    67 for (Method method : methods) {
    68 System.out.println(method.getName());
    69 }
    70
    71 System.out.println("---------public方法 ");
    72 // public的方法
    73 Method[] methodsPublic = clazz.getDeclaredMethods();
    74
    75 for (Method method : methodsPublic) {
    76 System.out.println("public方法: " + method.getName());
    77 }
    78
    79 // 方法的调用
    80 for (Method method : methodsPublic) {
    81 System.out.println("调用了方法: " + method.getName());
    82 // method.invoke(obj, args);
    83 }
    84
    85 System.out.println("---------构造器 ");
    86 // 构造器
    87 Constructor[] Constructors = clazz.getConstructors();
    88 for (Constructor constructor : Constructors) {
    89 System.out.println("构造器: " + constructor.getName());
    90 }
    91
    92 if (testReflect instanceof TestReflect) {
    93 System.out.println("YES: 我是TestReflect实例变量");
    94 } else {
    95 System.out.println("YES: 我不是TestReflect实例变量");
    96 }
    97
    98 // 通过构造器实例化(),默认构造器
    99 Constructor constructor = clazz.getConstructor(new Class[] {});
    100 testReflect = (TestReflect) constructor.newInstance();
    101 if (testReflect instanceof TestReflect) {
    102 System.out.println("YES: 我是TestReflect实例变量");
    103 } else {
    104 System.out.println("YES: 我不是TestReflect实例变量");
    105 }
    106
    107 // 通过构造器实例化(),默认构造器
    108 Constructor constructorss = clazz.getConstructor(new Class[] {
    109 String.class, String.class, String.class, String.class });
    110 testReflect = (TestReflect) constructorss.newInstance(new Object[] {
    111 "a", "b", "c", "4" });
    112 if (testReflect instanceof TestReflect) {
    113 System.out.println("YES: 我是TestReflect实例变量");
    114 } else {
    115 System.out.println("YES: 我不是TestReflect实例变量");
    116 }
    117 System.out.println("密码为:" + testReflect.getPassWord());
    118
    119 // 测试方法的调用
    120 Method method = clazz.getDeclaredMethod("setUserName",
    121 new Class[] { String.class });
    122 method.invoke(testReflect, new Object[] { "good" });
    123
    124 method = clazz.getDeclaredMethod("getUserName", null);
    125 System.out.println(method.invoke(testReflect, null));
    126 }
    127
    128 public String getUserName() {
    129 return userName;
    130 }
    131
    132 public void setUserName(String userName) {
    133 this.userName = userName;
    134 }
    135
    136 public String getPassWord() {
    137 return passWord;
    138 }
    139
    140 public void setPassWord(String passWord) {
    141 this.passWord = passWord;
    142 }
    143
    144 public ClassLoader getClassLoader() {
    145 return classLoader;
    146 }
    147
    148 public void setClassLoader(ClassLoader classLoader) {
    149 this.classLoader = classLoader;
    150 }
    151
    152 public String getUserNamePublic() {
    153 return userNamePublic;
    154 }
    155
    156 public void setUserNamePublic(String userNamePublic) {
    157 this.userNamePublic = userNamePublic;
    158 }
    159
    160 public String getPassWordPublic() {
    161 return passWordPublic;
    162 }
    163
    164 public void setPassWordPublic(String passWordPublic) {
    165 this.passWordPublic = passWordPublic;
    166 }
    167
    168 public TestReflect(String userName, String passWord, String userNamePublic,
    169 String passWordPublic) {
    170 super();
    171 this.userName = userName;
    172 this.passWord = passWord;
    173 this.userNamePublic = userNamePublic;
    174 this.passWordPublic = passWordPublic;
    175 }
    176
    177 public TestReflect() {
    178 super();
    179 }
    180
    181 }



    I believe that we are who we choose to be. Nobody‘s going to come and save you, you‘ve got to save yourself. 我相信我们成为怎样的人是我们自己的选择。没有人会来拯救你,你必须要自己拯救自己。
  • 相关阅读:
    keepalived
    设置Suse linux 用户远程登录超时时间
    启用Linux云平台oracle数据库实口令复杂性函数:PASSWORD_VERIFY_FUNCTION=NULL
    将tomcat7解压版注册为windows系统服务
    linux 在后台运行数据库导入导出命令
    suse enterprise Linux 11上配置 oracle11g和tomcat开机自启动
    Linux下的Tomcat JVM 调优
    oracle 11g 常用命令
    如何运行jnlp文件
    查询oracle 数据库 SQL语句执行情况
  • 原文地址:https://www.cnblogs.com/caroline/p/2382555.html
Copyright © 2020-2023  润新知