1、注解
2、反射
Person person = new Student();
System.out.println("这个人是:" + person.name);
//方式一:通过对象获得
Class c1 = person.getClass();
//方拾二:forname获得
Class c2 = Class.forName("com.kuang.Student");
//方式三:通过类名.class获得
Class<Student> c3 = Student.class;
// 方式四:基本内置的包装类都有一个Type属性
Class c4 = Integer.TYPE;
//获得父类类型
Class c5 = c1.getSuperclass();
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class Person{
public String name;
}
class Student extends Person{
public Student() {
this.name = "学生";
}
2.1、通过反射过去类的属性、方法、构造器等
/获得类的名字
System.out.println(c1.getName()); //com.kuang.User
//获得类的全部属性
Field[] fields = c1.getDeclaredFields();
for (Field ficld : fields) {
System.out.println(ficld);
/*
private java.lang.String com.kuang.User.name
private int com.kuang.User.id
private int com.kuang.User.age
*/
}
//获得类的指定属性
Field name = c1.getDeclaredField("name");
System.out.println(name); //private java.lang.String com.kuang.User.name
//获得类的全部方法
Method[] methods = c1.getMethods();
for (Method method : methods) {
System.out.println(method);
}
//获得指定方法
Method getName = c1.getMethod("getName", null);
System.out.println(getName); //public java.lang.String com.kuang.User.getName()