概述
通过Class在运行操作对象的非静态成员变量和方法和静态成员变量和方法
示例
Star:
package com.ycy1;
import java.io.Serializable;import java.util.Date;
public class Star extends Object implements Serializable{
//private static修饰的属性
private static final long serialVersionUID = 1693448743370688474L;
//public修饰的属性
public String name;
//private修饰的属性
private String city;
private int age;
//public修饰的无参构造函数
public Star() {
super();
System.out.println("Star无参public构造方法");
}
//public修饰的带参构造函数
public Star(String name, String city, Integer age) {
super();
System.out.println("Star带参public构造方法");
this.name = name;
this.city = city;
this.age = age;
}
//private修饰的带参构造函数
private Star(Integer age) {
super();
System.out.println("Star带参private构造方法");
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCity() {
return city;
}
//private修饰的私有方法
private void setCity(String city) {
this.city = city;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Star [name=" + name + ", city=" + city + ", age=" + age + "]";
}
private String printInfo(String message) {
System.out.println("Star中的私有方法printInfo() 输入参数 message="+message);
String result="最新消息:"+message;
return result;
}
//static修饰的静态方法
public static void printDate() {
System.out.println(new Date());
}
}
获取成员变量测试类:
package com.ycy1;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
public class Test01 {
public static void main(String[] args) throws Exception {
testField2();
}
public static void testField1() throws Exception {
Class<?> clazz = Class.forName("com.ycy1.Star");
Constructor<?> constructor = clazz.getDeclaredConstructor(String.class, String.class, Integer.class);
// 调用有参构造函数创建对象
Object star = constructor.newInstance("lll", "km", 18);
// 获取字段
Field field = clazz.getDeclaredField("city");
// 取消安全性检查以便获取私有成员
field.setAccessible(true);
// 获取对象的成员变量值
Object object = field.get(star);
System.out.println(object);
// 设置成员变量的值
field.set(star, "chengdu");
System.out.println(star);
}
// 访问静态成员变量
public static void testField2() throws Exception {
Class<?> clazz = Class.forName("com.ycy1.Star");
Field field = clazz.getDeclaredField("serialVersionUID");
field.setAccessible(true);
Object object = field.get(null);
System.out.println(object);
}
}
获取成员方法测试类:
package com.ycy1;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Test02 {
public static void main(String[] args) throws Exception {
testMethod2();
}
// 访问非静态成员方法
public static void testMethod1() throws Exception {
Class<?> clazz = Class.forName("com.ycy1.Star");
Object instance = clazz.newInstance();
Method setMethod = clazz.getDeclaredMethod("setName", String.class);
setMethod.invoke(instance, "ycy");
Method getMethod = clazz.getMethod("getName");
Object value = getMethod.invoke(instance);
System.out.println(value);
System.out.println();
}
// 访问静态成员方法
public static void testMethod2() throws ClassNotFoundException, NoSuchMethodException, SecurityException,
IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Class<?> clazz = Class.forName("com.ycy1.Star");
Method method = clazz.getDeclaredMethod("printDate");
Object object = method.invoke(null);
System.out.println(object);
}
}