- Class对象
在Java中有两种对象:Class对象和实例对象,实例对象是类的实例,通常是通过new关键字构建的。
Class对象是JVM生成用来保存对象的类的信息的。Java程序执行之前需要经过编译、加载、链接和初始化这几个阶段,编译阶段会将源码文件编译为.class字节码文件,编译器同时会在.class文件中生成Class对象,加载阶段通过JVM内部的类加载机制,将Class对象加载到内存中。在创建对象实例之前,JVM会先检查Class对象是否在内存中存在,如果不存在,则加载Class对象,然后再创建对象实例,如果存在,则直接根据Class对象创建对象实例。JVM中只有一个Class对象,但可以根据Class对象生成多个对象实例。
-
- 获取成员变量们
l* Field[] getFields() :获取所有public修饰的成员变量
l* Field getField(String name) 获取指定名称的 public修饰的成员变量
l* Field[] getDeclaredFields() 获取所有的成员变量,不考虑修饰符
l* Field getDeclaredField(String name)
-
- 获取构造方法们
l* Constructor<?>[] getConstructors()
l* Constructor<T> getConstructor(类<?>... parameterTypes)
l* Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
l* Constructor<?>[] getDeclaredConstructors()
-
- 获取成员方法们:
l* Method[] getMethods()
l* Method getMethod(String name, 类<?>... parameterTypes)
l* Method[] getDeclaredMethods()
l* Method getDeclaredMethod(String name, 类<?>... parameterTypes)
import java.io.FileReader;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class fansheText {
public static void main(String[] args) throws Exception {
Class aclass =Class.forName("fanshe");
// System.out.println(aclass);
fanshe f1=new fanshe();
Class<? extends fanshe> bclass = f1.getClass();
Class<fanshe> cclass = fanshe.class;
// System.out.println(aclass==bclass);
Field[] f1s = cclass.getFields();
for (Field ff : f1s) {
// System.out.println(ff.getName());
}
Field f2=cclass.getField("age");
// System.out.println(f2);
Field[] f3 = cclass.getDeclaredFields();
for (Field field : f3) {
// System.out.println(field.getName());
}
Constructor<?>[] f4 = cclass.getConstructors();
for (Constructor<?> c1 : f4) {
// System.out.println(c1);
}
Constructor<fanshe> f5 = cclass.getConstructor(String.class,String.class);
fanshe fasnhe1 = (fanshe) f5.newInstance("张三", "123456");
// System.out.println(fasnhe1.getName());
Method[] ms1 = cclass.getMethods();
for (Method method : ms1) {
// System.out.println(method.getName());
}
Method m2= cclass.getDeclaredMethod("setName",String.class);
m2.setAccessible(true);
fanshe f6=(fanshe) cclass.newInstance();
m2.invoke(f6,"OK");
}
}
class fanshe {
private String name;
private String pwd;
public int age;
public fanshe() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
System.out.println(name);
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public fanshe(String name, String pwd) {
this.name = name;
this.pwd = pwd;
}
}