import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* 获取Class对象的方式: 1、Class.forName("类全名"); //加上包名的类名
* 2、类名.class
* 3、new出一个对象后直接用getClass()方法来获取
*
* 注意: 1、同一个字节码文件(*.class)在同一个程序当中只会被加载一次,不论用哪一种方式都得到的Class对象都是同一个。
* 2、每一个类对应一个字节码文件(*.class)
*
*
* Class对象的获取功能 1、获取成员变量们 Field[] getFields() : 获取所有的public成员变量
* Field getField() : 获取特定的public成员变量(只能是公有)
*
* Field[] getDeclaredFields(): 获取所有的成员变量,不考虑权限修饰符,但在使用非公有变量的时候要用setAccessible(ture)来忽略权限修饰符
* Field getDeclaredField() : 获取特定的public成员变量
*
* 2、获取构造方法们 Constructor<T> getConstructor(类<?>...parameterTypes)
* Constructor<?>[] getConstructors()
* Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
* Constructor<?>[] getDeclaredConstructors()
*
* 3、获取成员方法们 Method[] getMethods() Method getMethod(String name, 类<?>...parameterTypes)
*
* Method[] getDeclaredMethods() Method getDeclaredMethod(String name, 类<?>...parameterTypes)
* 4、获取类名 getName()
*/
public class Day1 {
public String name;
public String game;
private int number;
public static void main(String[] args) throws Exception {
// 1、Class.forName("类全名"); //加上包名的类名
Class<?> class1 = Class.forName("com.hzu.se21090706.reflect.Day1");
// 2、类名.class
Class<?> class2 = Day1.class;
// 3、new出一个对象后直接用getClass()方法来获取
Day1 day1 = new Day1();
Class<?> class3 = day1.getClass();
// 注意: 1、同一个字节码文件(*.class)在同一个程序当中只会被加载一次,不论用哪一种方式都得到的Class对象都是同一个。
// 2、每一个类对应一个字节码文件(*.class)
System.out.println(class1 == class2);
System.out.println(class1 == class3); // 两个结果都是true
//Field[] getFields() : 获取所有的public成员变量
Field[] fields = class1.getFields();
for (Field field: fields) {
System.out.println(field);
}
//Field getField() : 获取特定的public成员变量
Field field = class1.getField("name");
System.out.println(field);
// Field[] getDeclaredFields(): 获取所有的成员变量,
// 不考虑权限修饰符,但在使用非公有变量的时候要用setAccessible(ture)来忽略权限修饰符
System.out.println("=========================");
Field[] fields2 = class1.getDeclaredFields();
for (Field field2 : fields2) {
System.out.println(field2);
}
System.out.println("=====================");
Method[] methods = class1.getMethods();
for (Method method : methods) {
System.out.println(method);
}
}
@Override
public String toString() {
return "Day1 []";
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
}