package com.person;
import java.io.Serializable;
/**
* @author 21115 @ date 2021/8/25
*/
public class Creature<T> implements Serializable {
private char gender;
public double weight;
private void breath() {
System.out.println("生物呼吸");
}
public void eat() {
System.out.println("生物吃东西");
}
}
package com.person;
/**
* @author 21115 @ date 2021/8/25
*/
// 改变值
@MyAnnotation(value = "hi")
public class Person extends Creature<String> implements Comparable<String>, MyInterface {
private String name;
int age;
public int id;
public Person() {}
@MyAnnotation(value = "abc")
private Person(String name) {
this.name = name;
}
Person(String name, int age) {
this.name = name;
this.age = age;
}
@MyAnnotation
private String show(String nation) {
System.out.println("我的国籍是: " + nation);
return nation;
}
public String display(String interests, int age) {
return interests + age;
}
@Override
public void show() {
System.out.println("我是一个人");
}
@Override
public int compareTo(String o) {
return 0;
}
}
packagecom.person2;importjava.lang.reflect.Field;importjava.lang.reflect.Modifier;importorg.junit.Test;importcom.person.Person;/**
* 获取当前运行时类的属性结构
*/publicclassFieldTest{@Testpublicvoidtest1(){Class clazz =Person.class;// 获取属性结构// getFields():获取当前运行时类及其父类中声明为 public 访问权限的属性Field[] fields = clazz.getFields();for(Field f : fields){System.out.println(f);}// public int com.person.Person.id// public double com.person.Creature.weight// getDeclaredFields():获取当前运行时类中声明的所有属性。(不包含父类中声明的属性)Field[] declaredFields = clazz.getDeclaredFields();for(Field f : declaredFields){System.out.println(f);}// private java.lang.String com.person.Person.name// int com.person.Person.age// public int com.person.Person.id}// 权限修饰符 数据类型 变量名@Testpublicvoidtest2(){Class clazz =Person.class;Field[] declaredFields = clazz.getDeclaredFields();for(Field f : declaredFields){// 1.权限修饰符int modifier = f.getModifiers();System.out.println(Modifier.toString(modifier)+"\t");// private// java.lang.String// name// 2.数据类型Class type = f.getType();System.out.println(type.getName()+"\t");// int// age// 3.变量名String fName = f.getName();System.out.println(fName);// public// int// idSystem.out.println();}}}
packagecom.person2;importjava.lang.annotation.Annotation;importjava.lang.reflect.Method;importjava.lang.reflect.Modifier;importorg.junit.Test;importcom.person.Person;/**
* @author 21115 @ date 2021/8/25
*/publicclassMethodTest{@Testpublicvoidtest1(){Class clazz =Person.class;// getMethods():获取当前运行时类及其所有父类中的声明为 public 权限的方法Method[] methods = clazz.getMethods();for(Method m : methods){System.out.println(m);}// public int com.person.Person.compareTo(java.lang.String)// public int com.person.Person.compareTo(java.lang.Object)// public void com.person.Person.show()// public java.lang.String com.person.Person.display(java.lang.String)// public void com.person.Creature.eat()// 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 java.lang.String java.lang.Object.toString()// 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()System.out.println();// getDeclaredMethods(): 获取当前运行时类中声明的所有方法.(不包含父类中声明的方法)Method[] declaredMethods = clazz.getDeclaredMethods();for(Method m : declaredMethods){System.out.println(m);}// public int com.person.Person.compareTo(java.lang.String)// public int com.person.Person.compareTo(java.lang.Object)// public void com.person.Person.show()// private java.lang.String com.person.Person.show(java.lang.String)// public java.lang.String com.person.Person.display(java.lang.String)}/**
* @Xxxx 权限修饰符 返回值类型 方法名(参数类型1 形参名1,...) throws XxxException{}
*/@Testpublicvoidtest2(){Class clazz =Person.class;Method[] declaredMethods = clazz.getDeclaredMethods();for(Method m : declaredMethods){// 1.获取方法声明的注解Annotation[] annos = m.getAnnotations();for(Annotation a : annos){System.out.println(a);}// 2.权限修饰符System.out.print(Modifier.toString(m.getModifiers())+"\t");// 3.返回值类型System.out.print(m.getReturnType().getName()+"\t");// 4.方法名System.out.print(m.getName());System.out.print("(");// 5.形参列表Class[] parameterTypes = m.getParameterTypes();if(!(parameterTypes ==null&& parameterTypes.length ==0)){for(int i =0; i < parameterTypes.length; i++){if(i == parameterTypes.length -1){System.out.print(parameterTypes[i].getName()+" args_"+ i +",");break;}System.out.print(parameterTypes[i].getName()+" args_"+ i +",");}}System.out.print(")");// 6.抛出的异常Class[] exceptionTypes = m.getExceptionTypes();if(exceptionTypes.length >0){System.out.println("throws");for(int i =0; i < exceptionTypes.length; i++){if(i == exceptionTypes.length -1){System.out.println(exceptionTypes[i].getName());break;}System.out.println(exceptionTypes[i].getName()+",");}}System.out.println();}// public int compareTo(java.lang.String args_0,)// public volatile int compareTo(java.lang.Object args_0,)// public void show()// @com.person.MyAnnotation(value=hello)// private java.lang.String show(java.lang.String args_0,)// public java.lang.String display(java.lang.String args_0,int args_1,)}}