黑马程序员_反射学习心得
来源:互联网 发布:js中window对象的方法 编辑:程序博客网 时间:2024/05/16 00:54
------- android培训、java培训、期待与您交流! ----------
Java的所有类都有一个与之对应的Class类的对象,用来描述类的属性,如:类名,包名,构造器(Constructor),成员变量(Field),成员方法(Method)……每个Class对象对应一份字节码。
获得某个类的Class对象,有三种方法(以String类为例):
1. String.class;
2. Class.forName(“java.lang.String”);
3. String str = “abc”; str.getClass();
9个预定义的Class对象:
boolean, byte, char, short, int, long, float,double, void
基本类型的包装类封装了常量TYPE保存基本类型的Class对象(字节码)
数组也是一种类型,有对应的Class对象
反射
反射就是把java类中的各种成分映射成相应的java类。
import java.lang.reflect.*;public class TestClass {public static void main(String[] args) throws Exception {A a = new A();Class cls1 = A.class;Class cls2 = Class.forName("A");Class cls3 = a.getClass();System.out.println(cls1.isPrimitive());//是否是9个基本类型之一//System.out.println(void.class.isPrimitive());a = (A)cls1.newInstance();System.out.println("int[] isArray : " + int[].class.isArray());String className = cls1.getName();//取得类名Package pak = cls1.getPackage();//取得类所在的包名/** * 构造方法反射 */Constructor con = cls1.getConstructor(null);//取得具有指定参数列表的public构造器Constructor[] cons = cls1.getConstructors();//取得所有public构造器A b = (A)con.newInstance(null);//通过构造器创建实例对象/** * 成员变量反射 */Field fld1 = cls1.getField("str1");//取得具有指定名字的public字段Field fld2 = cls1.getDeclaredField("str4");fld2.setAccessible(true);Field[] flds = cls1.getFields();//取得所有public字段String s = (String)fld2.get(a);fld1.set(a, "abc");System.out.println(a.str1);for(Field field : flds) {if(field.getType()==String.class) {//getTpe()取得字段的类型String ss = (String)field.get(a);ss = ss.replace('a', 'b');field.set(a, ss);}}System.out.println(a.str1);/** * 成员方法反射 */Method mhd = cls1.getMethod("f1", null);//取得指定名称和指定参数列表的public方法Method[] mhds = cls1.getMethods();//取得所有public方法mhd.invoke(a, null);}}class A {public String str1 = "aaa";protected String str2 = "bbb";String str3 = "ccc";private String str4 = "ddd";public A() {}public void f1() {System.out.println("f1 is invoked.");}protected void f2() {}void f3() {}private void f4() {}}
0 0
- 黑马程序员_反射学习心得
- 黑马程序员_关于反射的学习心得
- 黑马程序员_编程学习心得
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员_反射
- android WIFI学习总结
- 那些不能错过的Xcode插件
- 微信公众平台开发(5)-上传下载多媒体文件
- 第十一周项目5-当年第几天(循环累加、简单)
- JSP页面跳转方法总结
- 黑马程序员_反射学习心得
- 兼容IE、谷歌Chrome、火狐Firefox的图片上传预览功能
- String字符串拼接陷阱
- 万家灯火黎明照亮了夜空,我们的家服有了新生
- Android 开源开发框架
- NYOJ 364 田忌赛马
- 冰风谷黄日华回复难过福特给她
- 谈学习:合格的编程自学者必须知道的几点
- 多台linux服务器ssh相互无密码访问