反射:通过class对象后- - >得到类的信息
首先,创建一个类:
class Student{
private String name="caocao";
public int age=18;
public Student(){//构造函数
System.out.println("Student.init!!");
}
public void fun(){//公共方法
System.out.println("public Student.fun1()!!");
}
private void fun2(){//私有方法
System.out.println("private Student.fun2()!!");
}
}
1、通过s1.getClass();
Student s1=new Student();//Student类的一个对象
//s1.getClass();
Class c1=s1.getClass();//Class的一个对象
System.out.println(c1);
输出结果:
2、直接通过类名 .class 安全可靠
//说明任何一个类都有一个隐含的静态成员变量 class
Class c2=Student.class;
System.out.println(c2);
输出结果同上。
3、通过Class对象的forName()静态方法来获取
//可能要抛出异常ClassNotFoundException
Class c3=Class.forName("com.tulun.src.Student");
System.out.println(c3);
4、一个类型对应一个class对象(和类型一一对应)
System.out.println(c1.equals(c2));
System.out.println(c1.equals(c3));
System.out.println(c2.equals(c3));
输出结果为:
Class有很多方法:
- getName():获得类的完整名字。
- getFields():获得类的public类型的属性.
- getDeclaredFields():获得类的所有属性。包括private 声明的和继承类
- getMethods():获得类的public类型的方法。
- getDeclaredMethods():获得类的所有方法。包括private 声明的和继承类
- getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字, parameterTypes 参数指定方法的参数类型。
- getConstructors():获得类的public类型的构造方法。
- getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型。
newInstance():通过类的不带参数的构造方法创建这个类的一个对象。
接下来,我们来实现几个方法:
1、getName():获得类的完整路径
String classname=c1.getName();
System.out.println(classname);
2、获得类的所有属性,包括私有成员变量
扫描二维码关注公众号,回复:
2566125 查看本文章
Field[] field1=c1.getDeclaredFields();
for(Field field:field1){
System.out.println(field.getName());
}
3、getConstructors():获得类的public类型的构造方法
Constructor[] conArray=c1.getConstructors();
for(Constructor c:conArray){
System.out.println(c);
}