例子:
首先定义一个目标类User
package com.example.demo;
public class User {
private String uname;
private int age;
private int id;
public User(String uname, int age, int id) {
this.uname = uname;
this.age = age;
this.id = id;
}
public String getUname() {
return uname;
}
public void setUname(){
this.uname="test";
}
public void setUname(String uname) {
this.uname = uname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
获取属性、方法、构造器:
public class DemoApplication {
public static void main(String[] args) throws Exception {
//SpringApplication.run(DemoApplication.class, args);
boolean result=true;
Class clazz=Class.forName("com.example.demo.User");
//获取包名+类名:
String name=clazz.getName();
System.out.println("包名+类名"+name);
//获取类名
String simpleName=clazz.getSimpleName();
System.out.println("简单类名"+simpleName);
//获取属性
Field[] pubfields=clazz.getFields();
System.out.println("公共属性长度"+pubfields.length);
//获取包含私有的全部属性
Field[] fields=clazz.getDeclaredFields();
for (Field field:fields){
System.out.println("方法的全部属性:"+field);
}
//获取指定姓名的属性
Field uname=clazz.getDeclaredField("uname");
System.out.println("获取指定姓名属性:"+uname);
System.out.println();
//getMethods返回某个类的所有公用(public)方法包括其继承类的公用方法,
// 当然也包括它所实现接口的方法。
System.out.println("getMethods返回某个类的所有公用(public)方法包括其继承类的公用方法," +
"当然也包括它所实现接口的方法。");
Method[] allmethods=clazz.getMethods();
for (Method method:allmethods){
System.out.println("公用方法:"+method);
}
System.out.println();
System.out.println("getDeclaredMethods()对象表示的类或接口声明的所有方法," +
"包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。当然也包括它所实现接口的方法。");
Method[] pubmethods=clazz.getDeclaredMethods();
for (Method method:pubmethods){
System.out.println("所有方法:"+method);
}
System.out.println();
System.out.println("--------------使用名称获取方法---------------");
System.out.println("有参数类型的方法需要传参数类型对应的class对象,比如String类型要传String.class");
Method setUname=clazz.getDeclaredMethod("setUname",String.class);
System.out.println(setUname);
System.out.println("没有参数类型的方法参数传null:");
Method setUname1 = clazz.getDeclaredMethod("setUname", null);
System.out.println(setUname1);
System.out.println();
System.out.println("------------获得构造器-----------------");
System.out.println("获得所有构造器:");
Constructor[] constructors=clazz.getDeclaredConstructors();
for (Constructor constructor:constructors){
System.out.println("构造器:"+constructor);
}
Constructor theConstructor=clazz.getDeclaredConstructor(String.class,int.class);
System.out.println("获得入参是String、int的指定构造器:"+theConstructor);
}
}