JAVA中new创建对象和反射创建对象区别说明

乔欣 Java经验 发布时间:2023-03-23 21:45:36 阅读数:15553 1
我们都知道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编译时生成

反射创建的对象: 运行时-动态生成对象
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202303/16795791846138.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者