首页 > 编程语言 > 详细

java反射机制反射属性, 方法, 构造方法 / 设置属性值, 调用方法, 调用构造方法

时间:2021-06-24 00:32:54      阅读:16      评论:0      收藏:0      [点我收藏+]

1. 获取类名

// 1. 静态方法
Class c = Class.forName("类的路径, 带类包名");
// 2. 任何类都有 getName() 方法 返回类的名字
// 3. 类的class属性

 

2. 获取类中的属性(反射属性)

package com.fmg.restudy;
?
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
?
public class FieldTest {
   public static void main(String[] args) throws Exception {
       // 1. 属性都有class
       Class c = Class.forName("com.fmg.restudy.study");
       Field[] fields = c.getDeclaredFields();
       StringBuffer str = new StringBuffer();
       str.append("public class study {");
       for (Field filed : fields) {
           // 修饰符属性
           // System.out.println(Modifier.toString(filed.getModifiers()));
           // 修饰符
           // System.out.println(filed.getType().getSimpleName());
           // 获取属性名
           // System.out.println(filed.getName());
           str.append("\n");
           str.append(" ");
           str.append(Modifier.toString(filed.getModifiers()));
           if (filed.getModifiers() > 0)  str.append(" ");
           str.append(filed.getType().getSimpleName());
           str.append(" ");
           str.append(filed.getName());
           str.append(";");
      }
       str.append("\n}");
       System.out.println(str);
  }
}
?

3. 反射方法

package com.fmg.restudy;
?
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
?
public class ReflectMethods {
   public static void main(String[] args) throws Exception {
       Class c = Class.forName("java.lang.String");
       Method[] methods = c.getDeclaredMethods();
       StringBuffer sbf = new StringBuffer();
       for (Method method: methods) {
           // 修饰符列表 结果 public
           // System.out.println(Modifier.toString(method.getModifiers()));
           sbf.append(Modifier.toString(method.getModifiers()));
           sbf.append(" ");
           // 返回结果 Boolean
           // System.out.println(method.getReturnType());
           sbf.append(method.getReturnType());
           sbf.append(" ");
           // 返回方法名
           // System.out.println(method.getName());
           sbf.append(method.getName());
           sbf.append(" (");
           // 获取方法参数
           Class[] cl = method.getParameterTypes();
           for (Class cla : cl) {
               // System.out.println(cla.getSimpleName());
               sbf.append(cla.getSimpleName() + ",");
          }
           sbf.deleteCharAt(sbf.length() - 1);
           sbf.append(") {}");
           sbf.append("\n");
      }
       System.out.println(sbf);
  }
}
?

4. 反射构造器

package com.fmg.restudy;
?
import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
?
public class ReflectConstructor {
   public static void main(String[] args) throws Exception {
       Class c = Class.forName("com.fmg.restudy.study");
       // 获取构造方法数组
       Constructor[] ct = c.getDeclaredConstructors();
       // 遍历构造方法数组
       for (Constructor cr : ct) {
           Class[] s = cr.getParameterTypes();
           for (Class s2 : s) {
               // 拿构造器方法的名字
               System.out.println(s2.getSimpleName());
          }
      }
?
  }
}
?

5. 通过反射调用方法

package com.fmg.restudy;
?
import java.lang.reflect.Method;
?
public class UseMethod {
   public static void main(String[] args) throws Exception {
       Class c = Class.forName("com.fmg.restudy.study");
       Object obj = c.newInstance();
       Method method = c.getDeclaredMethod("soSome", int.class, int.class);
       method.invoke(obj, 3, 9);
  }
}
?

6. 通过反射调用构造方法

package com.fmg.restudy;
?
import java.lang.reflect.Constructor;
?
public class UseConstructor {
   public static void main(String[] args) throws Exception {
       Class c = Class.forName("com.fmg.restudy.study");
       Constructor ct = c.getDeclaredConstructor(String.class, String.class);
       ct.newInstance("fmg", "123456");
  }
}
?

7. 通过反射机制设置属性值

package com.fmg.restudy;
?
import java.lang.reflect.Field;
import java.lang.reflect.Method;
?
public class ReflectSetField {
   public static void main(String[] args) throws Exception {
       Class c = Class.forName("com.fmg.restudy.study");
       Object obj = c.newInstance();
       Field num = c.getDeclaredField("num");
       num.set(obj, 1000);
       System.out.println(obj);
  }
}
?

 

 

做测试用的java  study 代码

package com.fmg.restudy;

public class study {
    String username = "fmg";
    private String password = "123";
    int num;
    public boolean check(String username, String password) {
        return this.username.equals(username) && this.password.equals(password);
    }

    public study() {
    }

    public study(String username) {
        this.username = username;
    }

    public study(String username, String password) {
        this.username = username;
        this.password = password;
        System.out.println(this.username + "---------" + this.password);
    }

    public void soSome(int a, int b) {
        System.out.println(a + "+" + b + "=" + (a + b));
    }

    @Override
    public String toString() {
        return "study{" +
                "username=‘" + username + ‘\‘‘ +
                ", password=‘" + password + ‘\‘‘ +
                ", num=" + num +
                ‘}‘;
    }
}

 

 

java反射机制反射属性, 方法, 构造方法 / 设置属性值, 调用方法, 调用构造方法

原文:https://www.cnblogs.com/l24118028/p/14924741.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!