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的实例。


浙公网安备 33010602011771号