VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • java入门之反射机制(reflection)(2)

  


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package cn.lhl.Test;
 
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
 
import cn.lhl.Test.bean.User;
 
/**
 *通过反射API动态操作:构造器、方法、属性
 * @author Administrator
 *
 */
public class Demo03 {
    public static void main(String[] args) {
        String path = "cn.lhl.Test.bean.User";
        
        try {
            Class<User> clazz = (Class<User>) Class.forName(path);
            
            //通过反射API调用构造方法,构造对象
            User u = clazz.newInstance();  //调用了User无参构造方法
            System.out.println(u);
            
            Constructor<User> c = clazz.getDeclaredConstructor(int.class,int.class,String.class);
            User u1 = c.newInstance(100,18,"华哥");
            System.out.println(u1.getUname());
            
            //通过反射API调用普通方法
            User u2 = clazz.newInstance();
            Method method = clazz.getDeclaredMethod("setUname",String.class);
            method.invoke(u2, "华哥二");
            System.out.println(u2.getUname());
            
            //通过反射API操作属性
            User u3 = clazz.newInstance();
            Field f = clazz.getDeclaredField("uname");
            f.setAccessible(true); //这个属性不需要安全检查,可以直接访问,可以提高效率(大概为4倍)
            f.set(u3, "华哥三");       //通过反射直接写属性
            System.out.println(u3.getUname());//通过反射直接读取属性的值
            System.out.println(f.get(u3));
            
        catch (Exception e) {
            e.printStackTrace();
        }
        
    }
}
相关教程