在学习spring框架时,重点了解了一些依赖注入,这里最核心的概念就是反射的机制。
1、new只有在知道类名之后才能new,而反射有时候不需要反射实例对象的方式。new出来的对象中,我们是无法反问她的私有属性,而反射可以(通过setAccessible()取访问)。
测试代码
public class Reflect1Demo { public static void main (String[] args) throws IllegalAccessException, InstantiationException { proxyObject(); newObject(); } //new 创建对象 public static void newObject(){ long startTime = System.currentTimeMillis (); int i; for (i = 0; i < 100000000; i++) { Reflect1Demo reflect1Demo = new Reflect1Demo(); } if (i == 100000000) { long endTime = System.currentTimeMillis (); System.out.println ("new耗时为:" + (endTime - startTime)); } } //反射 创建对象 public static void proxyObject() throws IllegalAccessException, InstantiationException { long startTime = System.currentTimeMillis (); Class<Reflect1Demo> reflectDemoClass = Reflect1Demo.class; int i; for (i = 0; i < 100000000; i++) { Reflect1Demo reflect1Demo = reflectDemoClass.newInstance (); } if (i == 100000000) { long endTime = System.currentTimeMillis (); System.out.println ("反射耗时为:" + (endTime - startTime)); } } }
测试结果
最终结果是new 100000000
个对象和反射创建 100000000 个对象,效率相差了很多