测试需要的类,接口,注解
public interface MyInterface {
void info() throws RuntimeException, IOException;
}
/**
* 自定义注解
*/
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value() default "hello";
}
/**
* 父类
*/
public class Creature<T> implements Serializable {
//性别
private char gender;
//体重
public double weight;
private void breath() {
System.out.println("会呼吸");
}
public void eat() {
System.out.println("会吃饭");
}
}
/**
* 学生类
*/
@MyAnnotation("学生类")
public class Student extends Creature<String> implements Comparable<String>, MyInterface {
public int id;
private String name;
int age;
public Student() {
}
@MyAnnotation("构造器")
private Student(String name) {
this.name = name;
}
Student(String name, int age) {
this.name = name;
this.age = age;
}
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
@MyAnnotation("show方法")
private String show(String nation, int age) {
System.out.println("我的国籍是:" + nation +", 我的年龄:" + age);
return nation;
}
public String sports(String yd) {
System.out.println(this.name + " 喜欢的运动是: " + yd);
return yd;
}
@Override
public void info() throws RuntimeException, IOException {
System.out.println("我是一个学生");
}
@Override
public int compareTo(String o) {
return 0;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
public static void staticMethod() {
System.out.println("我是静态方法");
}
}
1: 获取当前运行类的属性
/**
* 获取当前运行类的属性
*/
@Test
public void test1() {
Class<Student> clazz = Student.class;
//获取类的属性结构:
//getFields():此方法只获取当前运行时类及其父类中声明为public访问权限的属性
Field[] fields = clazz.getFields();
for (Field field : fields) {
System.out.println(field);
}
System.out.println("----------------------");
//getDeclaredFields():此方法只获取当前运行时类中声明的所有属性,不包含父类的
Field[] declaredFields = clazz.getDeclaredFields();
for (Field field : declaredFields) {
System.out.println(field);
}
}
运行结果:
public int com.reflex.java1.Student.id
public double com.reflex.java1.Creature.weight
----------------------
public int com.reflex.java1.Student.id
private java.lang.String com.reflex.java1.Student.name
int com.reflex.java1.Student.age
2: 获取当前运行时类属性的:权限修饰符,数据类型,变量
/**
* 获取当前运行时类属性的:权限修饰符,数据类型,变量
*/
@Test
public void test2() {
Class clazz = Student.class;
Field[] declaredFields = clazz.getDeclaredFields();
for (Field field : declaredFields) {
System.out.println(field);
//1: 权限修饰符
int modifiers = field.getModifiers();
System.out.println("权限修饰符:" + modifiers + "====>>" + Modifier.toString(modifiers));
//2: 数据类型
Class type = field.getType();
System.out.println("数据类型:" + type.getName());
//3: 属性名
String name = field.getName();
System.out.println("属性名:" + name);
System.out.println();
}
}
运行结果:
public int com.reflex.java1.Student.id
权限修饰符:1====>>public
数据类型:int
属性名:id
private java.lang.String com.reflex.java1.Student.name
权限修饰符:2====>>private
数据类型:java.lang.String
属性名:name
int com.reflex.java1.Student.age
权限修饰符:0====>>
数据类型:int
属性名:age