java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对与任意一个对象,都能够调用他的任意一个方法和属性,这种动态的获取的信息以及动态调用对象的方法的功能成为java反射机制,
一旦class文件被加载到内存,就会为其创建一个Class对象。任何类被使用时都会创建一个Class对象。 Class类是Java反射机制的基础,通过Class类,可以得到一个类的基本信息。
class类的对象理解 每一个被内加载器到内存中,都会创建一个class的对象,来储存类的信息 反射的起点的就是会的类的class对象
public class Student {
private int id;
String name;
protected boolean sex;
public float score;
}
public class Get {
//获取反射机制三种方式
public static void main(String[] args) throws ClassNotFoundException {
//方式一(通过建立对象)
Student stu = new Student();
Class classobj1 = stu.getClass();
System.out.println(classobj1.getName());
//方式二(所在通过路径-相对路径)
Class classobj2 = Class.forName("fanshe.Student");
System.out.println(classobj2.getName());
//方式三(通过类名)
Class classobj3 = Student.class;
System.out.println(classobj3.getName());
}
}
uclass.getConstructor()
Constructor con = uclass.getConstructor();//获得的是默认无参的构造方法(公共)
User user = (User)con.newInstance();
System.out.println(user);
uclass.getConstructor
Constructor con = uclass.getConstructor(int.class,String.class);//获得的是默认无参的构造方法(公共)
User user = (User)con.newInstance(23,"张三");
System.out.println(user);
uclass.getDeclaredConstructor
con.setAccessible(true);
//设置访问权限
Constructor con = uclass.getDeclaredConstructor(String.class,int.class);//获得的是默认无参的构造方法(私有也可以)
con.setAccessible(true);//设置访问权限
User user = (User)con.newInstance("张三",23);
System.out.println(user)
Constructor[] declaredConstructors = uclass.getDeclaredConstructors();
for (Constructor con : declaredConstructors){
con.setAccessible(true);
}
可以获得属性的基本信息、属性的值,也可以对属性进行赋值
uclass.getField("num");
//获得指定的公共的成员变量
uclass.getDeclaredField("name");
获得指定私有的成员变量
Field[] fs = uclass.getDeclaredFields();
for (Field f : fs){
f.setAccessible(true);
System.out.println(f.getName());
}
Method类将类中的方法进行封装,可以动态获得方法的信息,例如
除了动态获取方法信息外,method还能动态调某一个对象的具体放方法
本文来源面相薪水编程,由javajgs_com转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处