前提:创建一个User类:
//实体类
class User{
private String name;
private int id;
private int age;
public User() {
}
public User(String name, int id, int age) {
this.name = name;
this.id = id;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", id=" + id +
", age=" + age +
'}';
}
}
获取类的信息:
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
//获得类的信息
public class Test08 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {
Class c1 = Class.forName("User");
//通过创建的新对象获取
User user = new User();
Class c2 = user.getClass();
System.out.println(c2);
//获得类的名字
System.out.println(c1.getName());//获得包名加类名
System.out.println(c1.getSimpleName());//获得类名
//获得类的属性
System.out.println("*********************************************");
Field[] fields = c1.getFields();//只能找到public属性
fields = c1.getDeclaredFields();//能找到全部属性
for(Field i:fields){
System.out.println(i);
}
Field name = c1.getDeclaredField("name");
System.out.println(name);
//获得类的方法
System.out.println("*********************************************");
Method[] methods = c1.getMethods();//获得本类及其父类的全部public方法
for(Method j : methods){
System.out.println("正常的"+j);
}
methods = c1.getDeclaredMethods();//获得本类的所有方法
for(Method j : methods){
System.out.println("getDeclaredMethods"+j);
}
//获得指定的类方法
System.out.println("*********************************************");
Method getName = c1.getMethod("getName");
//为什么需要参数:因为Java具有重载功能,传参是用来区别不同方法
Method setName = c1.getMethod("setName", String.class);
System.out.println(getName);
System.out.println(setName);
//获得指定的构造器
System.out.println("*********************************************");
Constructor[] constructors = c1.getConstructors();//获得public方法
for(Constructor i : constructors){
System.out.println("getConstructors "+i);
}
constructors = c1.getDeclaredConstructors();//获得本类全部方法
for(Constructor i : constructors){
System.out.println("getDeclaredConstructors "+i);
}
Constructor constructor = c1.getConstructor(String.class, int.class, int.class);
System.out.println("指定构造器:"+constructor);
}
}
结果:
class User
User
User
private java.lang.String User.name
private int User.id
private int User.age
private java.lang.String User.name
正常的public java.lang.String User.toString()
正常的public java.lang.String User.getName()
正常的public int User.getId()
正常的public void User.setName(java.lang.String)
正常的public int User.getAge()
正常的public void User.setAge(int)
正常的public void User.setId(int)
正常的public final void java.lang.Object.wait() throws java.lang.InterruptedException
正常的public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
正常的public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
正常的public boolean java.lang.Object.equals(java.lang.Object)
正常的public native int java.lang.Object.hashCode()
正常的public final native java.lang.Class java.lang.Object.getClass()
正常的public final native void java.lang.Object.notify()
正常的public final native void java.lang.Object.notifyAll()
getDeclaredMethodspublic java.lang.String User.toString()
getDeclaredMethodspublic java.lang.String User.getName()
getDeclaredMethodspublic int User.getId()
getDeclaredMethodspublic void User.setName(java.lang.String)
getDeclaredMethodspublic int User.getAge()
getDeclaredMethodspublic void User.setAge(int)
getDeclaredMethodspublic void User.setId(int)
public java.lang.String User.getName()
public void User.setName(java.lang.String)
getConstructors public User()
getConstructors public User(java.lang.String,int,int)
getDeclaredConstructors public User()
getDeclaredConstructors public User(java.lang.String,int,int)
指定构造器:public User(java.lang.String,int,int)
Process finished with exit code 0