问答详情
源自:1-1 Class类的使用

求教一个小问题

直接用foo1.print();就可以执行print方法了。

先创建实例对象c1,再用newInstance方法创建对象foo,再调用print方法。这样有什么好处或者说是在什么情况下会这样使用?

提问者:鲜衣 2015-07-28 11:45

个回答

  • 阳少兮_s
    2015-07-30 16:32:52
    已采纳

    以下所说的只是自己的理解。如果有不对的情况请大家指正我。

    一般情况下我们都会使用new Foo().print();这种情况下是我们肯定使用Foo的对象的时候我们会这么用。

    但是当我们需要在运行时才能确认哪个类的print方法时会用到反射。

    比如现在有个方法,根据我们传递的类名来调用方法

    public void print(String className) {

      Class<?> c = Class.forName(className);

     ......

    }

    这样,只要你传入正确的类名,不仅能调用Foo类的print方法,还可以使用Student类、User类的print方法

    应用场景之一就是JDBC加载驱动

    Class.forName("com.mysql.jdbc.Driver");

    Class.forName("com.oracle.jdbc.OracleDriver");

    根据类名找到不同的JDBC驱动,然后调用某方法。

    还有其他应用场景,我觉得应该是Spring等,配置文件根据bean id来加载具体的类

    可能web.xml等也是。。


  • Me_轩
    2015-08-11 10:17:22

    JAVA反射会让你更加了解许多 框架机制, 让你明白其实现原理。 他解剖了java类 可以自由发挥 ,运用得到可以减少很多代码的编写,方便了编程。可以写很多公用的功能点。 这里老师只是为了讲课才这么讲的 ,这是我们知道foo这个类里面有print,如果我们不知道呢 ,我们需要调用print方法怎么办呢。或许会遇到这样的需求,或者类似的,这都是要去解决的额!