javase-5-反射

xiaoxiao2021-02-28  113

实体: 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(); } } }
转载请注明原文地址: https://www.6miu.com/read-49710.html

最新回复(0)