其实我觉得最主要是不懂,反射与new的区别吧,既然已经可以new了,为什么还要用到反射呢?反射来调用一个类的方法明显要比new对象调用方法复杂的多
说一下new和反射的区别希望对你有所帮助
基本上效果差不多,但是new对象,无法调用该类里面私有的东西,反射反之,不过反射需要以牺牲性能做代价
new属于静态编译,而反射属于动态编译,意思就说只有到运行时他才会去获得该对象的实例(这么说可能不太准确,你能理解就行)
比如:
spring框架是事先就写好的框架,他内部的处理并不知道用户要写哪些类,因为那是以后由用他的人来定的,这时候你还能在spring内部去new吗?所以用户在用的时候才去配置文件中配置类路径,这是一个典型反射的例子(这个视屏中也有相对应的代码就不写了)
new与反射的区别其实就是静态编译和动态编译的区别:
静态编译就是在编译的时候把你所有的模块都编译进exe里去,当你启动这个exe的时候所有模块都加载进来了。你写小程序没问题,但程序一大,加载的过程(就是当你运行程序时初始化的过程)就比较费力了......
动态编译就不一样了,你编译的时候那些模块都没有编译进去,一般情况下你可以把那些模块都编译成dll,这样你启动程序(初始化)的时候这些模块不会被加载,而是在运行的时候,用到那个模块就调用哪个模块。
简单的打个比方,我写个阅读器,支持txt,pdf,udm三种格式,暂时把读txt,读pdf,读udm定义为三个功能模块。 使用静态编译:我想看个txt,点击应用程序图标以后三个功能都加载进来了,判断格式,使用读txt模块。(在这里,另外两个模块的作用就是占用系统资源) 使用动态编译:我想看个txt,点击应用程序,判断格式,只加载读txt模块,使用读txt模块。
显然,动态编译1速度快,2节省了系统资源,3利于今后拓展。但是却降低了性能
希望对你有帮助
|