1 反射之获取类 获取类有三种方法
public interface Person {
public void sayHi();
}
public class Student implements Person{
private String id;
private String name;
private int age;
public int sex=1;
//省去构造方法和get set方法
}
Class c1 = Student.class;
Class c2=Class.forName("com.study.reflect.Student");
Class c3=new Student().getClass();
System.out.println(c1==c2);
System.out.println(c1==c3);
System.out.println("类名"+c1.getName()); //获取类名
Package package1=c1.getPackage(); //获取包名
System.out.println("包名"+package1.getName());
System.out.println("接口名"+c1.getInterfaces()[0].getName()); //接口名com.study.reflect.Person
System.out.println("父类"+c1.getSuperclass()); //父类class java.lang.Object
2.反射之获取属性
Class c1 = Student.class;
//获取所有的属性(public的)
Field field=c1.getField("sex");
System.out.println("公有的(public)"+field.getName()+"---"+field.getType());
Field[] fields = c1.getFields();
for(Field field1:fields){
System.out.println("所有公有的(public)"+field1.getName()+"_"+field1.getType());
}
//获取所有的属性(private类型和public )
Field fieldprivate =c1.getDeclaredField("name"); //getDeclaredField可以获取public和private的
Field[] fieldprivate4 = c1.getDeclaredFields();
System.out.println("私有或者公有的(public or private)"+fieldprivate.getName()+"---++++++"+fieldprivate.getType());
3.获取方法 构造方法
Class c1 = Student.class;
Constructor com1 = c1.getConstructor(null);
System.out.println(com1.getParameterTypes().length); //输出 0
Constructor com=c1.getConstructor(String.class,String.class,int.class); //调用具体参数 类型的构造方法
//输出 java.lang.String java.lang.String int 输出的是参数类型
for(Class a:com.getParameterTypes()){
System.out.println(a.getName());
}
//输出 都是java.lang.class 输入原始数据类型
for(Type a:com.getGenericParameterTypes()){
System.out.println(a.getClass().getName());
}
4.获取类的相关方法
Class c1 = Student.class;
//获取方法
//1.指定某个方法
Method method = c1.getMethod("setAge", int.class);
System.out.println(method.getName()+"==========");
//2.获取所有的方法
Method[] methods=c1.getMethods();
for(Method method2:methods){
System.out.println(method2.getName());
}