测试类:
package com.liaoxiang.java1;
@MyAnnotation(value="rose")
public class Person extends Creature<String> implements Comparable,MyInterface{
public String name;
private Integer age;
int id;
//省略getter、settter
public Person() {
System.out.println("调用了Person的空参构造器");
}
public Person(String name){
this.name = name;
}
private Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", id=" + id +
'}';
}
@Override
public int compareTo(Object o) {
return 0;
}
@MyAnnotation(value = "jack")
public void show(){
System.out.println("我是一个人!");
}
private Integer display(String nation, Integer i) throws Exception{
System.out.println("我的国籍是:"+ nation);
return i;
}
public static void info(){
System.out.println("静态方法:我是一个中国人");
}
// 内部类
class Bird{}
}
父类:
public class Creature<T> {
public double weight;
public void breath(){
System.out.println("呼吸!");
}
}
/**
* 获取Person运行时类的属性
* getFields(): 只能获取到运行时类中及其父类中声明为public的属性
* getDeclaredFields(): 获取运行时类本身所声明的所有属性
*/
@Test
public void test1(){
Class<Person> personClass = Person.class;
Field[] fields = personClass.getFields();
for (int i = 0; i < fields.length; i++) {
System.out.println(fields[i]);
}
System.out.println("-----------------");
Field[] fields1 = personClass.getDeclaredFields();
for (Field field : fields1) {
System.out.println(field.getName());
}
}
输出:
public java.lang.String com.liaoxiang.java1.Person.name
public double com.liaoxiang.java1.Creature.weight
-----------------
name
age
id
/**
* 获取属性的各个部分的内容(修饰符 类型)
*/
@Test
public void test2(){
Class<Person> personClass = Person.class;
Field[] fields1 = personClass.getDeclaredFields();
for (Field field : fields1) {
// 1、获取每个属性的权限修饰符
int i = field.getModifiers();
String string = Modifier.toString(i);
System.out.print(string+" ");
// 2、获取属性的变量类型
Class<?> type = field.getType();
System.out.print(type.getName()+" ");
// 3、获取属性名
System.out.println(field.getName());
System.out.println();
}
}
输出:
public java.lang.String name
private java.lang.Integer age
int id
/**
* 调用运行时类中指定的属性,掌握
*/
@Test
public void test3() throws Exception {
Class<Person> personClass = Person.class;
Field name = personClass.getField("name");
Person person = personClass.newInstance();
System.out.println(person);
name.set(person,"jack");
System.out.println(person);
Field age = personClass.getDeclaredField("age");
age.setAccessible(true);
age.set(person,24);
System.out.println(person);
Field id = personClass.getDeclaredField("id");
id.set(person,1001);
System.out.println(person);
}
输出:
调用了Person的空参构造器
Person{name='null', age=null, id=0}
Person{name='jack', age=null, id=0}
Person{name='jack', age=24, id=0}
Person{name='jack', age=24, id=1001}