java反射Demo

题目:
人有梦想,但梦想是可以改变的,人在不同的时期可能有不同的梦想,梦想空想,梦想是要靠实际行动去完成的。
下面我们用多态的方式来阐述一下人在不同时期梦想的变化。人在整个人生进程中梦想改变的过程。注意梦想改变的时候人生进程不能停止。
创建一个接口Dream代表梦想接口,该接口中有一个无返回类型的 work()方法。表示梦想要做的事情。
编写两个实现类实现Dream接口。
编写一个Human人类,人有名字和梦想,人能够给其他人介绍他自己名字和说出他的梦想。
要求程序运行的时候,可以通过配置文件动态的改变的人类的梦想接口的实现类。(也可设置年龄为100岁,大于100梦想就结束!)
要求改变的时候程序不能停止

Human.java

package teacher.day08.dream;

public class Human {
    
    public String name;
    public Dream dream;

    public void info() {
        System.out.print("我的名字是:" + name);
        dream.work();
    }

    public Human() {
    }

    public Human(String name, Dream dream) {
        this.name = name;
        this.dream = dream;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Dream getDream() {
        return dream;
    }

    public void setDream(Dream dream) {
        this.dream = dream;
    }
}

SuperManDream接口实现类

package teacher.day08.dream;

public class SuperManDream implements Dream {
    @Override
    public void work() {
        System.out.println("我的梦想是-->当一个超人!");
    }
}

CodeDream接口实现类

package teacher.day08.dream;

public class CodeDream implements Dream {
    @Override
    public void work() {
        System.out.println("我的梦想是做一个-->程序猿");
    }
}

Dream接口

package teacher.day08.dream;

public interface Dream {
    void work();
}

配置文件dream.properties信息

#\u68A6\u60F3\u7684\u5168\u8DEF\u5F84
superDream =teacher.day08.dream.SuperManDream
codeDream = teacher.day08.dream.CodeDream
human = teacher.day08.dream.Human
humanName = 小猴猴

测试类:

package teacher.day08.dream;

import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;

public class Test01 {
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {

        //定义人的岁数,每隔5年换一次梦想(这里500毫秒代替)
        int age = 100;
        System.out.println("开始你的梦想之旅吧!");
        while (true) { //当人死后梦想终结
            String myDream = null;
            Properties properties = new Properties();
            properties.load(new FileReader("src\\teacher\\day08\\dream\\dream.properties"));
            if(age%10==0){
                myDream = properties.getProperty("codeDream");
                Thread.sleep(500);
            }else{
                Thread.sleep(500);
                myDream = properties.getProperty("superDream");
            }
           age -= 5;
            if(age<=0){
                System.out.println("人已死亡,梦想终结!");
                break;
            }

            String humanPath = properties.getProperty("human", "teacher.day08.dream.Human");
            String humanName = properties.getProperty("humanName", "小狗子");

            //获取Class
            Class<?> dreamClass = Class.forName(myDream);

            //创建对象
            Object dreamInstance = dreamClass.newInstance();

            //获取Class
            Class<?> humanClass = Class.forName(humanPath);
            Object humanInstance = humanClass.newInstance();

            //使用Class对象根据方法名与参数类型获取方法
            Method setDreamMethod = humanClass.getDeclaredMethod("setDream", Dream.class);
            Method setNameMethod = humanClass.getDeclaredMethod("setName", String.class);
            Method infoMethod = humanClass.getDeclaredMethod("info");

            //human.setDream(dream);
            Object invoke = setDreamMethod.invoke(humanInstance, dreamInstance);
            //human.setName("旺财");
            Object runSetName = setNameMethod.invoke(humanInstance, humanName);
            // human.info();
            Object runInfo = infoMethod.invoke(humanInstance);
        }
    }
}

运行结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值