什么是类对象
-
类的对象:基于某个类 new 出来的对象,也称为实例对象。
-
类对象:类加载的产物,封装了一个类的所有信息(类名、父类、接口、属性、方法、构造方法)
获取类对象
-
1、通过类的对象,获取类对象
-
Student s = new Student();
Class c = s.getClass();
-
-
2、通过类名获取类对象
-
Class c = 类名.class;
-
-
3、通过静态方法获取类对象【推荐使用】
-
Class c = Class.forName("包名.类名");
-
常用方法
-
public String getName();//获取类对象所代表的类名
public Package getPackage();//当前类对象所在的包
public Class<? super T> getSuperclass();//获取当前类的父类
public Class<?>[] getInterfaces();//获取当前类所实现的所有接口
public Constructor<?>[] getConstructors();//获取当前类的所有公共构造类对象
public T newInstance();//使用当前类对象来创建一个实例
public Method[] getMethods();//获取类的方法
public Field[] getFields();//获取 自身+父类 的公开属性
-
// 1,使用反射获取类的名字、包名、父类、接口
public static void reflectOpe1() throws Exception{
Class<?> class1 = Class.forName("getClassName.Person");
System.out.println(class1.getName());
System.out.println(class1.getPackageName());
System.out.println(class1.getSuperclass().toString());
System.out.println(class1.getInterfaces().toString());
}
// 2,使用反射获取类的构造方法,创建对象
public static void reflectOpe2() throws Exception{
// 2.1:获取类对象
Class<?> class2 = Class.forName("getClassName.Person");
// 2.2:获取类的构造方法
// Constructor<?>[] cons = class2.getConstructors();
// for (Constructor<?> con : cons) {
// System.err.println(con.toString());
// }
// 2.3: 获取类中无参构造
Constructor<?> con = class2.getConstructor();// 不给参数就是获取无参构造
Person zhangsan = (Person)con.newInstance();// 利用构造方法新建一个实例对象,这里就是一个 Person 类型
System.out.println(zhangsan.toString());
//简便无参构造方法,创建实例对象;类对象.newInstance()
Person wang5 = (Person)class2.newInstance();
System.out.println(wang5.toString());
// 2.4: 获取类中的带参构造方法
Constructor<?> con2 = class2.getConstructor(String.class,int.class);
Person xiaoli = (Person)con2.newInstance("小李",20);
System.out.println(xiaoli.toString());
}
// 3,使用反射获取类中的方法,并调用方法
public static void reflectOpe3() throws Exception {
// 3.1,获得类对象
Class<?> class1 = Class.forName("getClassName.Person");
// 3.2,获取类方法