JAVA中new创建对象和反射创建对象区别说明
我们都知道Java中创建对象,有常见的六种创建对象方式
那么常使用的new创建对象和反射创建对象之间有什么区别呢?下文笔者将一一道来,如下所示
new方式创建对象
TestClass testClass = new TestClass();
反射创建对象的三种方式
方式1: Class<TestClass> testClass = TestClass.class; 方式2: Class<?> testClass = Class.forName ("com.java265.TestClass"); 方式3: Class<? extends Class> testClass = TestClass.getClass();
区别1: new创建对象的速度比反射快例
public class TestClass { 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++) { TestClass TestClass = new TestClass (); } 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<TestClass> TestClassClass = TestClass.class; int i; for (i = 0; i < 100000000; i++) { TestClass TestClass = TestClassClass.newInstance (); } if (i == 100000000) { long endTime = System.currentTimeMillis (); System.out.println ("反射耗时为:" + (endTime - startTime)); } } }
区别2:可访问属性不同
new对象: 无法访问其中的私有属性 反射出来的对象: 可通过设置setAccessible()方法来省略访问权限符
区别3:创建方式不同
new 必须知道类名,然后创建一个对象 反射创建对象,无需知道类名即可创建一个对象
区别4:对象生成时期不同
new编译时生成 反射创建的对象: 运行时-动态生成对象
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。