实体:
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();
}
}
}