手记

java反射机制实例(Merry Christmas!实例)

package cn.ycpower.reflaction;

import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;

/**

  • 圣诞节 反射的应用
  • @author 蜗牛
  • */
    public class Christmas {
    public String Santa;//圣诞老人
    public String sled;//雪橇
    public String deer;//麋鹿
    private String name;//男孩名称
    protected String[] gift;//男孩想要得到的礼物

    public void like(){
    System.out.println("一个名叫"+name+"的小孩,他希望圣诞老人带给他的礼物有:"+Arrays.toString(gift));
    }

    //定义方法
    public String desc(String Santa,String deer,String sled){
    System.out.println(Santa+"踩着"+sled+",骑着"+deer);
    return "圣诞老人很高兴的来到了我家";
    }

    public Christmas(){
    System.out.println("圣诞节的无参构造方法");
    }
    public Christmas(String CstGift,String CstTree, String CstWish){
    System.out.println("圣诞节的有参数的构造方法");
    System.out.println("圣诞礼物:"+CstGift);
    System.out.println("圣诞装饰:"+CstTree);
    System.out.println("圣诞祝福:"+CstWish);

    }
    public static void main(String[] args) throws Exception{
    //1得到元类
    Class clz=Christmas.class;

    System.out.println("-------得到圣诞节的构造方法---------");
    //2,得到构造的方法
    Constructor c=clz.getDeclaredConstructor();
    //3,调用
    c.newInstance();//得到无参数的构造方法
    Constructor c2=clz.getDeclaredConstructor(String.class,String.class,String.class);
    c2.newInstance("圣诞老人","圣诞树","merry Christmas!");//得到有参数的构造方法
    
    System.out.println("=========得到圣诞节的方法==========");
    //2,得到方法
    Method ms=clz.getDeclaredMethod("desc", String.class,String.class,String.class);
    //3,调用方法
    String str=(String)ms.invoke(clz.newInstance(), "圣诞老人","雪橇","麋鹿");
    System.out.println(str);
    
    System.out.println("-------得到圣诞节中的一些属性----------"); 
    //得到对象
    Christmas boy=(Christmas)clz.newInstance();
    //得到属性
     Field f_name=clz.getDeclaredField("name");
     f_name.setAccessible(true);//私有属性必须开启访问开关
     f_name.set(boy, "汤姆");
    
     Field f_gift=clz.getDeclaredField("gift");
     f_gift.set(boy, new String[]{"糖果","苹果","手套","圣诞帽子"});
    
     Method m=clz.getDeclaredMethod("like");
     //执行方法
     m.invoke(boy);

    }

}

2人推荐
随时随地看视频
慕课网APP