java中的反射(学习框架的基础)(二)
2013-05-11 21:34
579 查看
接着java中的反射(学习框架的基础)(一):
继续利用第一篇中的代码用例:
3.反射一个类的成员方法
a.反射一个无参的成员方法public void f1()
Animal a=new Animal();
Class clazz=Class.forName("cn.liao.Animal");
Method method=clazz.getMethod("f1", null);//getMethod()方法返回的是一个Method类对象
//第一个参数是要获取的方法的名称,第二个参数是一个可变参数,是要获取的方法的参数
method.invoke(a, null);//invoke(调用方法),第一个参数是要获取的方法f1()所在类的一个对象,
//第二个参数是要获取的方法的参数,
b.反射一个具有两个参数的方法public void f1(String name,char[] passwd)
Method method=clazz.getMethod("f1", String.class,char[].class);
method.invoke(a,"name",new char[]{'1','2','3'});
c.反射一个静态的方法public static void f1(int passwd)
Method method=clazz.getMethod("f1", int.class);
method.invoke(a,123);
//method.invoke(null,123);//因为该方法是静态的,所以也可以不传递一个对象,两种方式都可以使用
d.反射一个类的main方法
//注意,public static void main(String[]args)方法的反射与一般的方法的反射不同
Method method=clazz.getMethod("main", String[].class);
/下面这样做的原因:这是因为在进行API升级时,为了兼容以前的版本(没有出现泛型)而导致的
method.invoke(null,(Object)new String[]{"aa","bb"});
method.invoke(null,new Object[]{new String[]{"aa","bb"}});
4.反射一个类的字段
a.public String name="aaa";
b.对字段的值进行设置
Field f=clazz.getField("name");
f.set(a, "abcd");//对字段name的值进行设置
c.获取一个private的字段 private int weight=123;
Field f=clazz.getDeclaredField("weight");//注意,因为weight这个字段是private,所以需要使用getDeclaredField()方法来获取,而不能用getField(0
f.setAccessible(true);//获取private字段的访问权限
System.out.println(f.get(a));
d.获取一个static的字段public static int size=12;
Field f=clazz.getField("size");
System.out.println(f.get(null));
继续利用第一篇中的代码用例:
3.反射一个类的成员方法
a.反射一个无参的成员方法public void f1()
Animal a=new Animal();
Class clazz=Class.forName("cn.liao.Animal");
Method method=clazz.getMethod("f1", null);//getMethod()方法返回的是一个Method类对象
//第一个参数是要获取的方法的名称,第二个参数是一个可变参数,是要获取的方法的参数
method.invoke(a, null);//invoke(调用方法),第一个参数是要获取的方法f1()所在类的一个对象,
//第二个参数是要获取的方法的参数,
b.反射一个具有两个参数的方法public void f1(String name,char[] passwd)
Method method=clazz.getMethod("f1", String.class,char[].class);
method.invoke(a,"name",new char[]{'1','2','3'});
c.反射一个静态的方法public static void f1(int passwd)
Method method=clazz.getMethod("f1", int.class);
method.invoke(a,123);
//method.invoke(null,123);//因为该方法是静态的,所以也可以不传递一个对象,两种方式都可以使用
d.反射一个类的main方法
//注意,public static void main(String[]args)方法的反射与一般的方法的反射不同
Method method=clazz.getMethod("main", String[].class);
/下面这样做的原因:这是因为在进行API升级时,为了兼容以前的版本(没有出现泛型)而导致的
method.invoke(null,(Object)new String[]{"aa","bb"});
method.invoke(null,new Object[]{new String[]{"aa","bb"}});
4.反射一个类的字段
a.public String name="aaa";
Animal a=new Animal(); Class clazz=Class.forName("cn.liao.Animal"); Field f=clazz.getField("name");//获取名为name的字段 Class type=f.getType();//返回这个字段的类型 Object obj=f.get(a);//get()方法返回一个Object类型的值 注意get()方法中要接收一个Animal的对象才行 if(type.equals(String.class)) { String str=(String)obj; System.out.println(str); }
b.对字段的值进行设置
Field f=clazz.getField("name");
f.set(a, "abcd");//对字段name的值进行设置
c.获取一个private的字段 private int weight=123;
Field f=clazz.getDeclaredField("weight");//注意,因为weight这个字段是private,所以需要使用getDeclaredField()方法来获取,而不能用getField(0
f.setAccessible(true);//获取private字段的访问权限
System.out.println(f.get(a));
d.获取一个static的字段public static int size=12;
Field f=clazz.getField("size");
System.out.println(f.get(null));
相关文章推荐
- java中的反射(学习框架的基础)(一)
- JavaSE基础学习笔记-提高篇-Java反射概要
- JAVA基础学习之IP简述使用、反射、正则表达式操作、网络爬虫、可变参数、了解和入门注解的应用、使用Eclipse的Debug功能(7)
- 黑马程序员--Java基础加强学习笔记之Class类、反射(Reflect)
- 黑马程序员--Java基础学习(集合框架)第十五天
- Java基础加强之框架的概念及反射技术的开发框架的原理
- 深入浅出学习hibernate框架(三):java的反射机制
- 黑马程序员_java基础学习笔记06_集合框架
- Java基础班学习笔记(17)反射
- 学习Spring必学的Java基础知识----反射
- 学习Spring必学的Java基础知识(1)----反射
- 学习Spring必学的Java基础知识(1)----反射
- 【Java基础学习】 详解Java的反射机制
- 学习Spring必学的Java基础知识(1)----反射
- Java集合类框架学习 1 —— 概述与基础
- java反射的基础学习代码
- spring学习的java基础--Java反射
- 反射-----学习Spring必学的Java基础知识之一
- Java基础学习总结(95)——Java反射主要用来干什么?
- 黑马程序员_java基础学习笔记11_反射