第二篇 java中的反射

java中的反射

一、反射的概述

     JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;

这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。

而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

1、创建实体类

 1 public class User {
 2     private int id;
 3     private int age;
 4     private String uname;
 5     
 6     public User(int id, int age, String uname) {
 7         super();
 8         this.id = id;
 9         this.age = age;
10         this.uname = uname;
11     }
12     public User() {
13         super();
14         // TODO Auto-generated constructor stub
15     }
16     public int getId() {
17         return id;
18     }
19     public void setId(int id) {
20         this.id = id;
21     }
22     public int getAge() {
23         return age;
24     }
25     public void setAge(int age) {
26         this.age = age;
27     }
28     public String getUname() {
29         return uname;
30     }
31     public void setUname(String uname) {
32         this.uname = uname;
33     }
34     
35     @Override
36     public String toString() {
37         return "User [id=" + id + ", age=" + age + ", uname=" + uname + "]";
38     }
39     
40 }

2、测试java.lang.Class对象的获取方式

 1 /**
 2  * 各种不同的类型的class对象的获取
 3  * 测试java.lang.Class对象的获取方式
 4  * @author Zhang XiaoDao
 5  *
 6  */
 7 public class Demo01 {
 8     public static void main(String[] args) {
 9         String path = "com.zzp.bean.User";    
10         try {
11             //加载javaBean
12             Class clazz = Class.forName(path);
13             
14             //对象是表示或封装一些数据,一个类被加载后(只能加载一次),jvm会创建一个对应该类的class对象,
15             //类的整个结构信息会放到对应的class对象中,这个class对象就像是一面镜子
16             //通过这面镜子,我们能看见对应类的全部信息
17             System.out.println(clazz);
18             //一个类只对应一个class对象,只被加载一次
19             Class clazz2 = Class.forName(path);
20             
21             //通过.class和getClass()获取对象
22             Class clazz3 =User.class;
23             Class clazz4 = path.getClass();
24             
25             //通过.class也能获取基本数据类型
26             Class int1 = int.class;
27             
28             //也能获取数组对象,一维数组arr01和arr02都是一样的,二维数组arr03与前面两个不同,
29             //数组的类型不一样,获取到的对象也不一样d与前面三个都不相同
30             int[] arr01 = new int[10];
31             int[] arr02 = new int[30];
32             int[][] arr03 = new int[10][20];
33             double[] d = new double[10];
34                     
35         } catch (ClassNotFoundException e) {
36             // TODO Auto-generated catch block
37             e.printStackTrace();
38         }
39     }
40 }

猜你喜欢

转载自www.cnblogs.com/zhangzhipeng001/p/9119690.html