您的位置:首页 > 职场人生

黑马程序员——个人对JAVA反射的一些理解

2015-03-27 09:29 281 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

因为反射部分是转载的,没通过老师的审核,现在自己写下对反射的理解。纯手打哦!

先说概念:”反射就是把JAVA类中的各种成分,映射成新的JAVA类“

举个例子:

class Student

{

private String name;

int age;

Student(String name,int age)

{

this.name = name;

this.age = age;

}

public void outInfo()

{

System.out.println(name+"::"+age);

}

}

上面是简单地定义一个类,这个类中包含了,构造方法,成员变量,成员方法。

那么,构造方法可以提取出来,形成一个类,我暂且称之为“构造方法类”吧。用Constructor表示。

成员变量可以提取出来,形成一个类,我暂且称之为“成员变量类”吧。用Field表示。

成员方法可以提取出来,形成一个类,我暂且称之为“成员方法类”吧。用Method表示。

所有的JAVA类中都有构造方法,成员变量,成员方法。所以可以理解为:所有的构造方法是一个类,所有的成员变量是一个类,所有的成员方法是一个类。

这三个类就分别是:Constructor、Field、Method

这三个类中还封装了不同的方法,来方便我们操作,具体的可以查看API

——————————————————————————————————————————————————————————————

下面分别针对这三个类,举一个例子。这些例子在视频里都有讲过

(1)构造方法的反射:

Constructor c1 = String.class.getConstructor(StringBuffer.class);

String str2 = (String)c1.newInstance(new StringBuffer("abc"));

//或者是String obj = (String)Class.forName("java.lang.String").newInstance();

(2)成员变量的反射:

Student s1 = new Student("zhangsan",20);

Field f = s1.getClass().getField("age");

System.out.println(f.get(s1));

如果变量被private修饰,那么就要用到“暴力反射”

getDeclaredField("age");

f.setAccessible(true);

(3)成员方法的反射:

method methodCharAt = String.class.getMethod("charAt",int.class);

methodCharAt.invoke(str1,1);

//第一个参数是“你想invoke谁的方法”,第二个参数是“这个方法的参数”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: