认识JAVA反射机制
定义
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java****反射机制,可以实现以下功能:
①在运行时判断任意一个对象所属的类;
②在运行时构造任意一个类的对象;
③在运行时判断任意一个类所具有的成员变量和方法;
④在运行时调用任意一个对象的方法;
⑤生成动态代理。
获取Class对象
public class Source {
public static void main(String[] args) {
//第一种方式:对象.class
Source s=new Source();
Class<?>c1=s.getClass();
//第二种方式:类.class
Class<?>c2=Source.class;
//第三种方式(推荐方式):
Class.forName(包名.类名)
Class<?>c3=null;
try{
c3=Class.forName("com.llllt.ref.simple.Source"); } catch (ClassNotFoundException e)
{ e.printStackTrace(); }System.out.println(c1.getName()); System.out.println(c2.getName()); System.out.println(c3.getName()); } }
获取完class对象之后就可以获取一系列东西
获取构造器
public class ReflectDemo {
public static void main(String[] args) throws Exception {
testConstructor(User.class);
}
public static void testConstructor(Class cls) throws Exception {
Constructor con=cls.getConstructor(String.class,int.class);
System.out.println(con);
//获取所有构造器
Constructor[] cons = cls.getDeclaredConstructors();
for(Constructor c:cons) {
System.out.println(c);
}
//创建对象
User user1= (User) cls.newInstance();
System.out.println(user1);
//使用私有构造器初始化
cons[1].setAccessible(true);
User user2= (User) cons[1].newInstance("song");
cons[1].setAccessible(false);
System.out.println(user2);
}
}
获取方法与调用方法
public static void methodtest(Class cls) throws Exception {
//获取方法
Method[] methods = cls.getDeclaredMethods();
System.out.println(Arrays.toString(methods));
User user = (User) cls.newInstance();
Method method2 = cls.getMethod("setAge",int.class);
System.out.println(method2);
//调用方法
method2.invoke(user,10);
System.out.println(user);
//成员
//静态
}
设置属性
public static void filedtest(Class<User> cls) throws Exception {
Field field = cls.getDeclaredField("name");
System.out.println(field);
User user = cls.newInstance();
field.setAccessible(true);
field.set(user,"宋芳强");
System.out.println(user);
//field.setAccessible(false);
//System.out.println(field.get(user));
}