黑马程序员--高薪技术--反射
来源:互联网 发布:手机视频保密软件 编辑:程序博客网 时间:2024/05/17 04:02
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一、反射的概念:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制;
要想解剖一个类,必须先要获取到该类的字节码文件对象。
而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.
二、通过反射获取构造方法并使用
获取构造方法
getConstructors
getDeclaredConstructors
newInstance()
con.newInstance(“zhangsan",20);
三、通过反射获取成员变量并使用
getFields,getDeclaredFields
getField,getDeclaredField
set(Object obj,Objectvalue)
将指定对象变量上此 Field对象表示的字段设置为指定的新值了
四、通过反射获取成员方法并使用
获取所有方法
getMethods
getDeclaredMethods
获取单个方法
getMethod
getDeclaredMethod
暴力访问
method.setAccessible(true);
下面演示一个暴力反射的例子:
代码如下:
/*<span style="white-space:pre"></span>先建立一个反射点*/public class ReflectPoint {private int x ;public int y;public String str1 = "ball";public String str2 = "basketball";public String str3 = "itcast";public ReflectPoint(int x ,int y){super();this.x = x;this.y = y;}public String toString(){return str1+ ":" +str2+":"+str3;}}
反射代码如下:
/*获取其他类里的属性和方法*/import java.lang.reflect.*;class ReflectTest3 {public static void main(String[] args)throws Exception {//创建对象ReflectPoint pt1 = new ReflectPoint(5,6);//获取字节码文件,和字段Field fieldY = pt1.getClass().getField("y");System.out.println(fieldY.get(pt1));//因为x为私有变量,所以要暴力反射Field fieldX = pt1.getClass().getDeclaredField("x");fieldX.setAccessible(true);System.out.println(fieldX.get(pt1));//获取字符串也一样Field fieldS = pt1.getClass().getDeclaredField("str1");fieldS.setAccessible(true);System.out.println(fieldS.get(pt1));changeStringValue(pt1);System.out.println(pt1);}//实现字符的替换public static void changeStringValue(Object obj)throws Exception{//得到所有的字段Field[] fields = obj.getClass().getFields();//遍历取出所有字段for (Field field : fields ){//判断是否是String 类字节码文件//是就全部替换if (field.getType()==String.class){String oldValue = (String)field.get(obj);String newValue = oldValue.replace('b','a');field.set(obj,newValue);}}}}
这只是运用了反射的最基本方法,其他的方法可以自己试试看!
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
- 黑马程序员--高薪技术--反射
- 黑马程序员-----高薪技术(反射)
- 黑马程序员_高薪技术一(java反射)
- 黑马程序员——高薪技术——反射
- 黑马程序员----高薪技术(JavaBean)
- 黑马程序员_高薪技术
- 黑马程序员-----(高薪课程一-----扩展(反射))
- 黑马程序员_Java高薪技术之构造方法的反射应用
- 黑马程序员————java高薪技术---反射单元1
- 黑马程序员_高薪技术_7
- 黑马程序员_高薪技术_9
- 黑马程序员_高薪技术笔记
- 黑马程序员-java基础06高薪技术
- 黑马程序员_高薪技术(一)
- 黑马程序员_高薪技术(二)
- 黑马程序员_Java高薪技术1
- 黑马程序员_Java高薪技术2
- 黑马程序员_高薪技术(3)
- 正向代理,反向代理,透明代理 简介
- 提升方式创建自己的QT控件(弹出式菜单按钮)
- 标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和 const_cast
- 1164_上班路线
- 按照字节数截取一个字符串,“abc你好” 如果截取到半个中文,舍弃,比如 截取4个字节 abc。截取 5个字节abc你
- 黑马程序员--高薪技术--反射
- Android中ImageButton边框完全填充
- Spring学习笔记——Spring实例化Bean的三种方式
- getElementsByClassName
- Havok教程
- Swift 函数Count,Filter,Map,Reduce
- 编程与创造
- UVALive 6959签到(水题)
- MySql 高性能 5.5 维护索引和表 189页