Java中的反射机制
2015-09-13 22:44
531 查看
反射定义:反射就是把Java累中的各个成分映射成Java对象,在使用的时候,,可以利用反射机制进行使用。
反射的作用:主要是用在框架里,被称为框架的“灵魂”。
反射原理:
一、访问反射构造方法
注:下面凡是访问到私有方法的时候,都需要用到:
二、访问反射构造方法
反射的作用:主要是用在框架里,被称为框架的“灵魂”。
反射原理:
一、访问反射构造方法
注:下面凡是访问到私有方法的时候,都需要用到:
<pre name="code" class="cpp"><span style="white-space:pre"> </span>//代表Reflection类的字节码对象 Class c=Class.forName("com.dp.java.Reflection.Reflection"); //得到Reflection构造方法 Constructor c1=c.getDeclaredConstructor(int.class);//得到含有int参数的私有构造方法?用来创建对象 c1.setAccessible(true)
public class Reflection_test { /** * 反射 */ @Test public void test1() throws Exception { //代表Reflection类的字节码对象 Class c=Class.forName("com.dp.java.Reflection.Reflection"); //得到Reflection构造方法 Constructor c1=c.getConstructor(null);//得到没有参数的构造方法?用来创建对象 c1.newInstance(null);//创建了构造方法的对象 } @Test public void test2() throws Exception { //代表Reflection类的字节码对象 Class c=Class.forName("com.dp.java.Reflection.Reflection"); //得到Reflection构造方法 Constructor c1=c.getConstructor(String.class);//得到含有string参数的构造方法?用来创建对象 c1.newInstance("Mr_Li13");//创建了构造方法的对象 } @Test public void test3() throws Exception { //代表Reflection类的字节码对象 Class c=Class.forName("com.dp.java.Reflection.Reflection"); //得到Reflection构造方法 Constructor c1=c.getConstructor(String.class,int.class);//得到含有string参数的构造方法?用来创建对象 c1.newInstance("Mr_Li13",21);//创建了构造方法的对象 } @Test public void test4() throws Exception { //代表Reflection类的字节码对象 Class c=Class.forName("com.dp.java.Reflection.Reflection"); //得到Reflection构造方法 Constructor c1=c.getDeclaredConstructor(int.class);//得到含有int参数的私有构造方法?用来创建对象 c1.setAccessible(true); Reflection r=(Reflection) c1.newInstance(21);//创建了构造方法的对象 System.out.println(r.name);//访问类成员变量 } public static void main(String[] args) throws Exception { Reflection_test t1=new Reflection_test(); t1.test1(); t1.test2(); t1.test3(); t1.test4(); } }
public class Reflection { public String name="Mr_Li13的博客"; public Reflection() { // TODO Auto-generated constructor stub System.out.println(getClass().getName()+"类中默认的构造方法执行!"); } public Reflection(String name) { // TODO Auto-generated constructor stub System.out.println("名字:"+name); } public Reflection(String gd,int age) { // TODO Auto-generated constructor stub System.out.println("年龄: "+age+" 成绩:"+gd); } private Reflection(int gz) { // TODO Auto-generated constructor stub System.out.println("工资: "+gz); } }
二、访问反射构造方法
public class Construction_function { /** * 反射中的普通方法访问 */ @Test public void test1() throws Exception{//未运行成功 Class c=Reflection.class; Reflection R=(Reflection) c.newInstance(); Method m=c.getMethod("m1", null);//m1方法名称,方法的可变参数 m.invoke(R, null); } @Test public void test2() throws Exception{ Class c=Reflection.class; Reflection R=(Reflection) c.newInstance(); Method m=c.getMethod("m2", String.class);//m1方法名称,方法的可变参数 m.invoke(R, "李三"); } @Test public void test3() throws Exception{ Class c=Reflection.class; Reflection R=(Reflection) c.newInstance(); Method m=c.getMethod("m3", String.class,int.class);//m1方法名称,方法的可变参数 m.invoke(R, "李三",23); } @Test public void test4() throws Exception{//未运行成功 Class c=Reflection.class; Reflection R=(Reflection) c.newInstance(); Method m=c.getDeclaredMethod("m4", Data.class);//m1方法名称,方法的可变参数 m.setAccessible(true);//强暴它强制运行 m.invoke(R,new Date()); } @Test public void test5() throws Exception{//访问公共静态方法 Class c=Reflection.class; //Reflection R=(Reflection) c.newInstance();访问静态方法就不需要这个了 Method m=c.getMethod("m5", null);//m1方法名称,方法的可变参数 m.invoke(null, null); } }
public class Reflection { public String name="Mr_Li13的博客"; /** * 以下是普通方法 */ private void m1() { // TODO Auto-generated method stub System.out.println("成绩:"); } public void m2(String name) { // TODO Auto-generated method stub System.out.println("普通方法执行了!"+name); } public String m3(String name,int age) { // TODO Auto-generated method stub System.out.println("名字:"+name+" 年龄:"+age); return null; } private void m4(Data d) { // TODO Auto-generated method stub System.out.println("时间:"+d); } public static void m5() { // TODO Auto-generated method stub System.out.println("公共静态方法执行了:"); } }
相关文章推荐
- Java记录 -31- Java数组
- Struts2配置
- “>>”和“>>>” java
- “>>”和“>>>” java
- java 继承
- java中异常总结
- [JavaWeb基础] 017.Struts2 和 ajax交互简介
- (转)spring 框架介绍
- springMVC(12) springMVC和spring集成
- 浅析java中的hashMap
- JAVA基础学习(十一)--多线程一线程的创建,运行,同步和锁
- Java并发编程:volatile关键字解析
- 简单理解Java异常处理机制
- java的volatile机制(前篇)
- java sax解析xml
- Eclipse执行Hadoop WordCount
- java文件的过滤器
- Java计算器
- 我的Java Web作业---个人简历
- java实现大数的乘法: