获取类的信息
从访问权限来分
private
public
信息的本质
属性
构造方法
//获取该类的无参构造器
Constructor<?> c = clazz.getConstructor();
//创建对象
c2.newInstance();
创建出来的对象是使用默认值进行初始化对象的
//获取带参构造器
Constructor<?> c2 = clazz.getConstructor(String.class,int.class);
//创建对象
c2.newInstance("张三",22);
使用newInstance时传入的实参进行初始化对象
普通方法
Method[] methods = clazz.getMethods();
返回本类所有的public的方法以及从父类继承而来的方法
package org.lanqiao.classdemo;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
private Student(String name) {
this.name = name;
}
public String getName() {
//System.out.println(this.name);
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Stduent [name=" + name + ", age=" + age + "]";
}
private void showInfo() {
}
}
package org.lanqiao.classdemo;
public class TestClass {
public static void main(String[] args) throws ClassNotFoundException {
//获取Student类的Class对象
Class<?> clazz = Class.forName("org.lanqiao.classdemo.Student");
System.out.println(clazz);
// 通过Object类的一个方法getClass来获取Class对象
Student stu = new Student();
Class<?> clazz1 = stu.getClass();
System.out.println(clazz1);
//通过使用类的属性class属性类获取该类的Class对象
Class<?> clazz2 = Student.class;
System.out.println(clazz2);
//获取该类的类加载器
ClassLoader cl = clazz.getClassLoader();
System.out.println(cl);
}
}
package org.lanqiao.classdemo;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/*
* 通过Class对象来获取类的信息
*/
public class GetClassInfo {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
// 获取类的构造方法
Class<?> clazz = Class.forName("org.lanqiao.classdemo.Student");
/*获取该Class对象中的所有的public构造方法*/
/*Constructor<?>[] cs = clazz.getConstructors();
for(Constructor c :cs) {
System.out.println(c);
}*/
//获取该类的无参构造器
Constructor<?> c = clazz.getConstructor();
System.out.println(c);
Student stu = (Student) c.newInstance();
System.out.println(stu);
//获取带参构造器
Constructor<?> c2 = clazz.getConstructor(String.class,int.class);
Student stu2 = (Student) c2.newInstance("张三",22);
System.out.println(stu2);
System.out.println("----------获取所有的方法---------");
//获取该类的方法
Method[] methods = clazz.getMethods();
for(Method m:methods) {
System.out.println(m);
}
System.out.println("--------获取特定的无参方法-----------");
Method m = clazz.getMethod("getName");
System.out.println(m);
String name = (String) m.invoke(stu2);
System.out.println(name);
System.out.println("--------获取特定的带参方法-----------");
Method mm = clazz.getMethod("setName", String.class);
//执行方法
mm.invoke(stu2, "李四");
System.out.println(stu2);
}
}