Java_反射技术_简述
来源:互联网 发布:淘宝买的假落红好用吗? 编辑:程序博客网 时间:2024/05/22 08:06
学习笔记:反射
提出一个问题
String classPath=”cn.itcast.Cat”
需求,请把该类的所有方法和属性得到.
反射原理图:
1. 使用反射技术得到构造函数,并实例化对象
所有的操作都是对Cat.java
packagecn.itcast.reflection; importjava.util.List; public class Cat { public Stringname=”麦当劳”; private int age; private String[]foods; public Cat(){ // TODO Auto-generated constructor stub } publicCat(String []foods){ this.foods=foods; } public void show(){ System.out.println("猫猫叫w"); } //添加一个带有参数的函数 public void show(String name){ System.out.println("猫猫叫"+name); } //有两个参数的普通函数 public void show(String name,int age){ System.out.println(name+" 年龄是"+age); } //猫猫数数 private void count(List list){ for(Object obj: list) { System.out.println(obj); } } publicCat(String name,int age){ this.name=name; this.age=age; } public StringgetName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } publicString[] getFoods() { return foods; } public void setFoods(String[] foods) { this.foods = foods; } }
案例1
//使用默认的构造函数来实例化对象 private static void test1() throws InstantiationException, IllegalAccessException { // TODO Auto-generated method stub Class clazz=Cat.class; //实例化Cat Cat cat=(Cat) clazz.newInstance(); //测试 cat.show(); }
案例2
//用 public Cat(String name,int age)来实例化对象 private static void test2() throws NoSuchMethodException, SecurityException,InstantiationException, IllegalAccessException, IllegalArgumentException,InvocationTargetException { Class clazz =Cat.class; //得到该构造方法,希望得到 Constructorc=clazz.getConstructor(String.class,int.class); //创建实例 Cat cat=(Cat) c.newInstance("小白",2); //相当于 Cat cat=new Cat("小白",2); System.out.println(cat.getName()); cat.show(); }
案例3
//得到 public Cat(String []foods) 构造函数 private static void test3() throws NoSuchMethodException, SecurityException,InstantiationException, IllegalAccessException, IllegalArgumentException,InvocationTargetException { //1.得到Class 对象 Class clazz = Cat.class; //2.通过clazz得打构造 Constructor c=clazz.getConstructor(String[].class); //3.通过c 来创建Cat 实例 //Cat cat=(Cat) c.newInstance((Object) new String[]{"鱼","老鼠"});//因为newInstance接受可变参数,"鱼","老鼠" // newInstance("鱼","老鼠") Cat cat=(Cat) c.newInstance(new Object[]{ new String[]{"鱼","老鼠"}});//因为newInstance接受可变参数,"鱼","老鼠" // newInstance("鱼","老鼠") cat.show(); }
案例1
//反射 public void show(),并调用. private static void test1() throws Exception { //1.得到Class对象 Class clazz = Class.forName("cn.itcast.reflection.Cat"); //2.得到show方法 Method m=clazz.getMethod("show",null); //3.调用 m.invoke(clazz.newInstance(),null); //同学会不好理解clazz.newInstance().invoke(m,""); }
案例2
////反射public void show(String name) private static void test2() throws Exception { //反射public void show(String name) Class clazz = Class.forName("cn.itcast.reflection.Cat"); //得到show(String name) Method m=clazz.getMethod("show",String.class); //调用 m.invoke(clazz.newInstance(), "宋江"); // show("宋江"); }
案例3
//反射 public void show(String name,intage) private static void test3() throws Exception { Class clazz = Class.forName("cn.itcast.reflection.Cat"); Method m=clazz.getMethod("show", String.class,int.class); m.invoke(clazz.newInstance(), "贾宝玉",12); }
案例4
//反射private void count(List list) private static void test4() throws Exception { Class clazz = Class.forName("cn.itcast.reflection.Cat"); //Method m=clazz.getMethod("count", List.class);//当一个函数是私有的,则不能使用 getMethod Method m=clazz.getDeclaredMethod("count", List.class); m.setAccessible(true);//暴力访问. List al=new ArrayList(); al.add(1);al.add(3); m.invoke(clazz.newInstance(), al); }
3. 使用反射得到字段
案例1:
//反射public String name="麦当劳"; private static void test1() throws Exception { //Cat cat=new Cat(); Class clazz=Cat.class; Field f=clazz.getField("name"); //取得f的值. String name=(String)f.get(clazz.newInstance()); //cat.get(f); //返回Object就是name的值 System.out.println(name); }
案例2:
//得到private int age;private static void test2() throws Exception {Class clazz = Cat.class;Field f=clazz.getDeclaredField("age");f.setAccessible(true);//这是创建猫的实例Cat cat=(Cat) clazz.newInstance();//给f字段赋值.cat表示给哪个实例赋值.f.set(cat, 13);//取出f.get(cat) 取出cat这个实例的f字符的值System.out.println(f.get(cat));}
0 0
- Java_反射技术_简述
- Java_反射_内省JavaBean
- java_反射_j技术总结
- java_基础_绘图技术
- Java_反射_修改final static问题
- Java_反射应用_通过Java反射调用方法
- java技术_反射
- 技术总结_反射
- Java_反射
- JAVA_反射
- java_反射
- java_反射
- JAVA_反射
- Java_反射
- Java_反射
- java_反射
- 黑马程序员 java_高新技术(二)_反射
- 黑马程序员_反射技术
- 斐波那契查找
- hdoj 1711 Number Sequence 【KMP】
- 在codeblocks中用命令行(cmd)编译运行C程序
- 使用nodejs、mongodb、express、linux搭建社区网站(1)之nodejs、mongodb的windows下安装
- GDB调试Segment Fault的线上http进程的方法
- Java_反射技术_简述
- 数据分析的评测标准
- POJ_2991_Crane_线段树
- VC/MFC中如何替换自带滚动条控件的图片
- mtd
- git不能上传空目录
- [转载] AOE网关键路径的计算
- poj1050 最大子矩阵和
- Linux驱动下的platform总线架构(转)