小白学java日记day23--反射

反射的定义
动态获取字节码文件,将成员进行抽象化处理.
Field---对属性的抽象形成的类
Method----对方法的抽象形成的类
Constructor----对构造方法抽象形成的类

反射可以不通过new建立新对象,在不改变测试代码的情况下建立一个新对象

实例案例:

/*
分析:
要求:首先实现最基本的功能
功能描述:人使用电脑,用鼠标,用键盘
需要创建NoteBook(电脑类),鼠标类,键盘类,接口USB,鼠标类,键盘类都实现USB接口
创建测试类test 实现基本功能

进阶功能:在不改变test代码的前提下,给电脑新增UPan的功能
        分析:再通过一个配置文件进行简单的配置即可.
 */
测试类:
public class teat {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        //测试
        /*
        Mouse mouse=new Mouse();
        Keyboard keyboard=new Keyboard();

        NoteBook noteBook=new NoteBook("华为");
        noteBook.useMouse(mouse);
        noteBook.useMouse(keyboard);
        noteBook.work();

         */

        //进阶功能:在不改变test代码的前提下,给电脑新增UPan的功能
        //读取配置文件的信息
        Properties properties=new Properties();
        properties.load(new FileReader("src\\Morning\\config.properties"));
        for (int i = 0; i < properties.size(); i++) {
            String key="usb"+i;
            String value= properties.getProperty(key);

            //利用反射
           Class cla= Class.forName(value);
           //创建实例对象
            USB usb=(USB) cla.newInstance();
            usb.open();
            usb.close();
        }
    }
}
//建立Keyboard类
public class Keyboard implements USB{
    //打开
    public  void open(){
        System.out.println("打开键盘");
    }
    //关闭
    public void close(){
        System.out.println("关闭键盘");
    }
}

//建立Mouse类
public class Mouse implements USB{
    //打开
    public  void open(){
        System.out.println("打开鼠标");
    }
    //关闭
    public void close(){
        System.out.println("关闭鼠标");
    }
}
//创建NoteBook类
public class NoteBook {
    String name;

    public NoteBook(String name) {
        this.name = name;
    }
    //工作
    public  void work(){
        System.out.println("打自己写的游戏");
    }
    //用鼠标
    //用键盘
    public void useMouse(USB usb){
        usb.open();
        usb.close();
    }
}
//创建UPan类
public class UPan implements USB{

    @Override
    public void open() {
        System.out.println("打开U盘");
    }

    @Override
    public void close() {
        System.out.println("关闭U盘");
    }
}
//创建YinXiang类
public class YinXiang implements USB{

    @Override
    public void open() {
        System.out.println("打开音响");
    }

    @Override
    public void close() {
        System.out.println("关闭音响");
    }
}
//创建接口
public interface USB {
     void open();
    void close();
}
//创建config.properties文件(Morning是当前工程下的一个包名)
usb0=Morning.Mouse
usb1=Morning.Keyboard
//在不改变test代码的前提下,给电脑新增UPan的功能
usb2=Morning.UPan
usb3=Morning.YinXiang


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值