java反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

  java不是一种动态语言(程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言),但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。

  • 应用

  java反射引用最多的场合就是在java的第三方框架中,一般类都是在配置文件中配置,然后在项目启动的时候进行加载,这其中就是反射的功劳。下面就从反射的基础一点点的深入到其核心来研究一下。

  Person代码:

复制代码
 1 public interface Chinese {
 2     public static final String name="abc";
 3     public static  int age=20;
 4     public void sayChina();
 5     public void sayHello(String name, int age);
 6 }
 7 public class Person implements Chinese{
 8     private String sex;
 9     private String address;
10     public Person() {
11 
12     }
13     public Person(String sex) {
14         this.sex = sex;
15     }
16     public String getAddress() {
17         return address;
18     }
19     public void setAddress(String address) {
20         this.address = address;
21     }
22     public Person(String sex, String address) {
23         this.sex = sex;
24         this.address = address;
25     }
26     public String getSex() {
27         return sex;
28     }
29     public void setSex(String sex) {
30         this.sex = sex;
31     }
32     public void sayChina() {
33         System.out.println("say,chinese");
34     }
35     public void sayHello(String name, int age) {
36         System.out.println(name+" "+age);
37     }
38     @Override
39     public String toString() {
40         return this.name+" "+this.age+" "+this.sex;
41     }
42 }
复制代码

  1、返回一个类的class的几种方式:

复制代码
 1 Class<?> class1 = Person.class;
 2 Class<?> class2 = new Person().getClass();
 3 Class<?> class3 = Person.class;
 4 try {
 5     class1 = Class.forName("reflecttest.Person");
 6 } catch (ClassNotFoundException e) {
 7     // TODO Auto-generated catch block
 8     e.printStackTrace();
 9 }
10 System.out.println(class1.getName());
11 System.out.println(class2.getName());
12 System.out.println(class3.getName());
复制代码

  所有类的对象其实都是Class的实例。

posted @ 2016-04-24 21:50  擎峰  阅读(146)  评论(0)    收藏  举报