`
darkjune
  • 浏览: 309839 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

new Class() 与 Class.newInstance()

    博客分类:
  • java
 
阅读更多

 

new Test()的过程基本等于:

 Class clazz = Class.forName("Test"); 

 clazz.newInstance();

第一步由类加载器查找类路径下的目标类,并加载类实例,对应到JVM就是加载到了方法区。

第二步类实例加载完成后生成对象实例,实例数据保存在JVM的Heap中。

 

new Clazz()可以直接由IDE检查类的存在, Class.forName只有到运行时才能知道类是否存在,所以经常用于需要反射

的基础设施代码。通过将类初始化过程拆成两步,可以像spring一样将需要加载的类名配到xml等配置文件中,再在初始化的

时候由框架代码将需要的类加载到类加载器中,这是new关键字无法做的。

分享到:
评论

相关推荐

    class literal & instance.getClass() & Class.forName(String className)

    在Java编程语言中,"class literal"、"instance.getClass()" 和 "Class.forName(String className)" 是三个与类加载和类型查询紧密相关的概念。了解这些概念对于深入理解Java运行时的类加载机制至关重要。 首先,让...

    new关键字和newInstance() 的区分

    而 newInstance() 方法则是 Class类的一个方法,用于创建一个新的对象。例如,`A a = (A) Class.forName("pacage.A").newInstance();` 就是使用 newInstance() 方法创建了一个 A 类的对象。newInstance() 方法的作用...

    Class.forName()_newInstance()_New_三者区别

    在Java编程中,`Class.forName()`, `newInstance()` 和 `new` 关键字都是与对象创建和类加载紧密相关的概念,但它们各自有着不同的用途和限制。 首先,`Class.forName("className")` 是一个静态方法,它用于在运行...

    java_innerclass_instance.rar_innerclass

    在“java_innerclass_instance.rar_innerclass”这个压缩包中,包含的资源可能是一个关于Java内部类实例应用的示例代码。 内部类主要有四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。这里我们主要...

    newInstance()方法和new关键字

    ### newInstance()方法与new关键字的区别 在Java编程语言中,创建对象是十分常见的操作,而`newInstance()`方法和`new`关键字则是实现这一目的的两种主要方式。它们之间的区别不仅在于一个是方法调用,另一个是语言...

    Android代码-TypeBuilder

    .newInstance(List.class) .addTypeParam(String.class) .build(); Example for List<? super String> Type type = TypeBuilder .newInstance(List.class) .addTypeParamSuper(String.class) .build(); ...

    java 反射简单用例

    java反射的用例代码 // //获取类对象的属性 // Field field = clazz.getDeclaredField("name");...// Object instance = constructor.newInstance(new Object[]{1, "李四", "中国"}); // System.out.println(instance);

    JAVA反射机制-Class类-Class对象的获取.pdf

    Object obj = clazz.newInstance(); System.out.println(obj.getClass().getName()); // 输出:org.whatisjava.reflect.Foo } catch (ClassNotFoundException | InstantiationException | IllegalAccessException...

    Classfor的用法

    `Class.forName` 经常与 `newInstance` 方法配合使用,以实现动态创建对象的目的。`newInstance` 方法用于创建 `Class` 对象所表示的类的实例。 **示例**: ```java try { Class<?> clazz = Class.forName(...

    jdbc驱动程序实例

    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; // orcl为数据库的SID String user = "test"; String password = "test"; Connection ...

    java中Class.forName的作用浅谈

    2. **灵活性与效率**:`newInstance()`提供了更大的灵活性,但其执行效率相对较低,因为它涉及到类的加载和反射操作。`new`关键字则更直接,效率较高。 三、数据库驱动加载示例 在数据库连接中,`Class.forName()`...

    Java Class.forName()用法和newInstance()方法原理解析

    Java Class.forName()用法和newInstance()方法原理解析 Class.forName()方法是Java语言中的一种Class加载机制,它可以根据类名将对应的类加载到JVM中,同时也可以实例化该类。Class.forName()方法的主要功能是要求...

    Java中new的用法[参考].pdf

    * 使用 newInstance() 方法创建对象:例如 `factory = (ExampleInterface)Class.forName("Example").newInstance();` 两种方式的主要区别在于创建对象的方式不一样。new 关键字是使用类加载机制,而 newInstance() ...

    java中的Class类和反射.docx

    - **`public T newInstance()`**:根据`Class`对象所对应的类类型新建一个类实例。此方法常用于反射中创建对象和调用对象的方法。例如: ```java Class doubleClass = Class.forName("java.lang.Double"); Object...

    Java中new的用法[文].pdf

    `newInstance()`是`java.lang.Class`类的一个方法,它使用反射机制来创建对象。这种方式不需要直接写类名,而是通过类名的字符串形式动态加载并创建对象。例如,`Class.forName("Example").newInstance()`。这种方式...

    java反射 反编译:.class-->.java

    - `Object o = c.newInstance();`: 调用无参构造器创建对象。如果类没有无参构造器,会抛出异常。 访问属性: - `Field[] fs = c.getDeclaredFields();`: 获取所有属性,包括私有属性和继承的属性。 - `Field ...

    jdbc笔记整理 sql

    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); //Sql Server7.0/2000 数据库 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); //DB2 数据库 Class.froName(...

    java.lang.Class类

    2. 使用Class类的静态forName()方法获得与字符串对应的Class对象。 3. 获取Class类型对象的第三个方法非常简单。如果T是一个Java类型,那么T.class就代表了匹配的类对象。 Class类的常用方法包括: 1. getName():...

    Class.forName

    一旦获取到`Class`对象,你可以进一步使用`newInstance()`方法创建该类的实例。`newInstance()`会调用类的无参数构造器来创建对象,类似于`new MyClass()`。但是,如果类没有无参构造器或者构造器是私有的,`new...

    JavaSE062Class类、Method类及Field类的使用方式深度探析.doc

    最后,我们使用Constructor对象的newInstance()方法生成了一个新的Customer对象。 六、总结 JavaSE062Class类、Method类及Field类是Java反射机制的核心组件。通过这三个类,我们可以在运行时检查和修改类、方法、...

Global site tag (gtag.js) - Google Analytics