java反射

java反射


public class Demo2 {

 public static void main(String[] args) throws Exception {


   //取得Person类对应的字节码对象Class

   Class clazz = Class.forName("cn.itcast.java.reflect.Person");


   //取得该类的唯一构造方法

   //Constructor c  = clazz.getConstructor(null);

   //Constructor c = clazz.getConstructor(String.class,int.class);

   Constructor c = clazz.getDeclaredConstructor(null);


   //创建实例

   //Person p = (Person) c.newInstance(null);

   //Person p = (Person) c.newInstance("berry",10);


   //设置非public成员的访问性,默认false即不可访问性

   c.setAccessible(true);


   Person p = (Person) c.newInstance(null);


   //执行方法

   p.show();


 }

}



public class Demo3 {

 public static void main(String[] args) throws Exception {

   Person p = new Person();

   Class c = Class.forName("cn.itcast.java.reflect.Person");

   Field f = c.getDeclaredField("name");

   f.setAccessible(true);

   f.set(p,"杰克");//p.setName("杰克")

   System.out.println("用户名:" + p.getName());

 }

}



public class Demo4 {

 public static void main(String[] args) throws Exception {

   Class c = Class.forName("cn.itcast.java.reflect.Person");

   Constructor con = c.getConstructor(null);

   Person p = (Person) con.newInstance(null);

   Method m = c.getDeclaredMethod("goodbye",null);

   m.setAccessible(true);

   String returnValue = (String) m.invoke(p,null);

   System.out.println(returnValue);


   //Method m = c.getMethod("show",String[].class,double.class);

   //m.invoke(p,new String[]{"sing","dance"},5000);//new Person().show()

 }

}



public class Demo6 {

 public static void main(String[] args) throws Exception {


   //加载属性文件,取得类名的方法名

   Properties props = new Properties();

   InputStream is = new FileInputStream("src/cn/itcast/java/reflect/class.properties");

   props.load(is);

   String className = props.getProperty("className").trim();

   String methodName = props.getProperty("methodName").trim();


   //通过反射,执行该类的方法

   Class c = Class.forName(className);

   Constructor con = c.getConstructor(null);

   Method m = c.getDeclaredMethod(methodName,null);

   m.setAccessible(true);

   m.invoke(con.newInstance(null),null);


 }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值