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);
}
}