javase-5-反射

来源:互联网 发布:软件项目招标评分标准 编辑:程序博客网 时间:2024/06/03 21:15
实体:
public class Car {private String bank;protected String color;String name;public int speed;public void driver(){System.out.println("我在"+this.bank+"贷款买了一辆"+this.name+"颜色"+this.color+"速度"+this.speed);}public void driver2(String a){System.out.println(a+"-------------"+"我在"+this.bank+"贷款买了一辆"+this.name+"颜色"+this.color+"速度"+this.speed);}public String getBank() {return bank;}public void setBank(String bank) {this.bank = bank;}}


测试:
public class CarReflex {public static void main(String[] args) {try {//获取到Car类的模板Class clz = Class.forName("com.reflex.Car");//类路径//创建car类对象Car car = (Car) clz.newInstance();//给car的属性赋值Field namefield = clz.getDeclaredField("name");namefield.set(car, "宝马");//给car的私有属性赋值Field bankField = clz.getDeclaredField("bank");bankField.setAccessible(true);////给private属性赋值必须打开权限bankField.set(car, "中国花旗银行");Field colorField = clz.getDeclaredField("color");//protected的属性在同包中或子类中colorField.set(car, "红色");Field speedField = clz.getDeclaredField("speed");speedField.setInt(car, 1000);System.out.println(car.getBank()+"----"+car.color+"------"+car.name+"-----"+car.speed);//java属性权限复习//public和private的是极端最好记:public 随处都可以访问,private只能在本类里可以访问//protected只能在子类或同包下访问//默认缺省:只能在同包下访问//这是代表什么意思Method method = clz.getDeclaredMethod("driver",null);//因为没有该方法没有参数,所以为空  driver为Car类的方法名method.invoke(car, null);//因为没有该方法没有参数,所以为空//调用有参方法Method method2 = clz.getDeclaredMethod("driver2",String.class);//String.class代表driver2第一个参数的数据类型method2.invoke(car, "aaaaaaaa");} catch (Exception e) {e.printStackTrace();}}}




原创粉丝点击