Test4_理解java反射机制的概念以及应用
来源:互联网 发布:知著投资咨询有限公司 编辑:程序博客网 时间:2024/04/30 19:28
1.反射就是把Java类中的各种成分映射成相应的java类;
--------------------------------------------------------------------
2.一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示
,通过调用Class类的方法可以得到这些实例对象后,得到这些事例对象
有什么用呢?怎么用呢?这正是学习和应用反射的要点。
--------------------------------------------------------------------
Constructor 类 字节码中的构造方法
--------------------------------------------------------------------
3.
//得到String类所有的构造方法
上面两行代码中,在编译的时候并不知道第二行中的constructor对象是哪个类的构造方法
只知道他是一个构造方法,而在运行期,通过执行第一行代码,constructor才被覆上值,证明他是
String类型的构造方法,但是这点在编译的时候是不得而知的,所以 .newInstance()方法返回的是Object
类型的对象。
编译(翻译成.class)的时候,只是进行语法检查,并不执行
---->之前没有明白的问题,今天终于解开了
--------------------------------------------------------------------
4.也可以通过Class.newInstance() 实例化一个 对象
->通过看JDK源代码得知,Class.newInstance()方法是先取得无参的构造方法,然后缓存起来,再实例化对象
以后再实例化的时候就不用实力化了,而是直接到内存中调用,
从以上也可以从侧面反映出,反射消耗性能(缓存缘故)
--------------------------------------------------------------------
Field 类 -->字节码中的成员变量
--------------------------------------------------------------------
5.
--------------------------------------------------------------------
6.题目:把一个类中的所有Stirng类型的变量中的"b"换成"a";
--------------------------------------------------------------------
Method 类 (字节码中的方法)
--------------------------------------------------------------------
7. 取得String类的charAt()方法
--------------------------------------------------------------------
2.一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示
,通过调用Class类的方法可以得到这些实例对象后,得到这些事例对象
有什么用呢?怎么用呢?这正是学习和应用反射的要点。
--------------------------------------------------------------------
Constructor 类 字节码中的构造方法
--------------------------------------------------------------------
3.
Constructor[] constructor = Class.forName("java.lang.String").getConstructor()
//得到String类所有的构造方法
Constructor constructor = String.class.getConstructors(StringBuffer.class);//表示得到一个参数是StringBuffer类型的构造方法String str2 = (String)constructor.newInstance(new StringBuffer("xxx"));//利用刚才取得String类构造方法的实例 new一个对象 注意:参数要相符取得什么参数的构造方法// new对象的时候就传什么参数
上面两行代码中,在编译的时候并不知道第二行中的constructor对象是哪个类的构造方法
只知道他是一个构造方法,而在运行期,通过执行第一行代码,constructor才被覆上值,证明他是
String类型的构造方法,但是这点在编译的时候是不得而知的,所以 .newInstance()方法返回的是Object
类型的对象。
编译(翻译成.class)的时候,只是进行语法检查,并不执行
---->之前没有明白的问题,今天终于解开了
--------------------------------------------------------------------
4.也可以通过Class.newInstance() 实例化一个 对象
->通过看JDK源代码得知,Class.newInstance()方法是先取得无参的构造方法,然后缓存起来,再实例化对象
以后再实例化的时候就不用实力化了,而是直接到内存中调用,
从以上也可以从侧面反映出,反射消耗性能(缓存缘故)
--------------------------------------------------------------------
Field 类 -->字节码中的成员变量
--------------------------------------------------------------------
5.
public class ReflectPoint{private int x;public int y;public ReflectPoint(int x,int y){this.x = x;this.y = y;}}public class ReflectTest{public static void main(String[] args){ReflectPoint pt1 = new ReflectPoint(3,5);Field fieldY = pt1.getClass().getField("y");//fieldY的值是5吗? 错! ReflectPoint可以生成多个对象 每个对象都有fieldY//fieldY代表类中的变量 而不是对象的变量,要用它去取每个对象上的fieldY的值fieldY.get(pt1);//取出pt1对象的fieldY的值//Field fieldY = pt1.getClass().getField("x");//fieldX.get(pt1);//此时报错 因为x是private的修饰的 看不见Field fieldX = pt1.getClass().getDeclareField("x");//看见了 拿不到fieldX.setAccessible(true);// 加此句 能拿到了System.out.println(fieldX.get(pt1));}}
--------------------------------------------------------------------
6.题目:把一个类中的所有Stirng类型的变量中的"b"换成"a";
import java.lang.reflect.Field; class Person{ String name ="abc"; int age =20; String sex = "man"; String fav = "basketball";}public class Test {public static void main(String[] args) throws Exception{Person p = new Person();Field[] f =p.getClass().getFields();for(int i =0;i<f.length;i++){if(f[i].getType()==String.class){String s =(String)f[i].get(p);s=s.replace("b", "a");f[i].set(p, s);//System.out.println(f[i].get(p));}}}}
--------------------------------------------------------------------
Method 类 (字节码中的方法)
--------------------------------------------------------------------
7. 取得String类的charAt()方法
Method methodCharAt = String.class.getMethod("charAt",int.class);//第一个参数是方法名,第二个参数是方法参数的Class类型System.out.println(methodCharAt.invoke(str1,1));//如果Str="abc" 打印值为 b//str1在这里是指调用此方法的变量 ,1是指调用此方法传的参数(charAt方法)//如果为静态方法,则写null
- Test4_理解java反射机制的概念以及应用
- (Java基础--反射)理解反射的概念
- java 反射机制的理解
- java反射机制的理解
- Java 反射机制的理解
- java反射机制的理解
- Java 反射机制的理解
- java的反射机制理解
- Java反射机制概念
- JAVA反射机制的应用
- java反射机制的应用
- java反射机制的应用
- java 反射机制的应用
- java反射机制的应用
- 反射机制的理解与应用
- Java反射机制概念及构造方法的反射
- java反射机制理解
- 理解JAVA反射机制
- struts2 ongl漏洞解决方案
- Test3_透彻分析java反射机制的基础概念
- twitterAPI接入
- void*
- 学习oracle 创建db和创建用户
- Test4_理解java反射机制的概念以及应用
- tomcat配域名方式
- iBATIS sql中的处理特殊符号的做法
- 守护进程(Daemon)
- Servlet+Mysql笔记
- web.py学习随笔
- 线程创建的函数选择问题
- fatal error LNK1112: module machine type 'THUMB' conflicts with target machine type 'ARM'
- struts2和jquery_validator简单使用