黑马程序员-反射

来源:互联网 发布:淘宝企业店铺报名活动 编辑:程序博客网 时间:2024/06/05 09:16

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

//使用反射技术得到构造函数,并实例化对象

package cn.itcast.reflection;

import java.util.List;public class Cat {public String name=”麦当劳”;private int age;private String []foods;public Cat() {}public Cat(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);}}public Cat(String name,int age){this.name=name;this.age=age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String[] getFoods() {return foods;}public void setFoods(String[] foods) {this.foods = foods;}}//使用默认的构造函数来实例化对象private static void test1() throws InstantiationException,IllegalAccessException {// TODO Auto-generated method stubClass clazz=Cat.class;//实例化CatCat cat=(Cat) clazz.newInstance();//测试cat.show();}// 用 public Cat(String name,int age)来实例化对象private static void test2() throws NoSuchMethodException,SecurityException, InstantiationException, IllegalAccessException,IllegalArgumentException, InvocationTargetException {Class clazz =Cat.class;//得到该构造方法,希望得到Constructor c=clazz.getConstructor(String.class,int.class);//创建实例Cat cat=(Cat) c.newInstance("小白",2); //相当于 Cat cat=new Cat("小白",2);System.out.println(cat.getName());cat.show();}6.2.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,int age)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);//当一个函数是私有的,则不能使用 getMethodMethod m=clazz.getDeclaredMethod("count", List.class);m.setAccessible(true);//暴力访问.List al=new ArrayList();al.add(1);al.add(3);m.invoke(clazz.newInstance(), al);}//使用反射得到字段案例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));}

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------