有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (6) 个答案

  1. # 1 楼答案

    主要区别在于Class.forName('your class name').newInstance()是动态的,因为类型不需要硬编码到代码中

  2. # 2 楼答案

    上课。forName只能调用默认构造函数(不带参数)和 可以在运行时提供类名,例如从配置文件读取的db驱动程序名

  3. # 3 楼答案

    new操作符创建一个静态已知(在编译时)类型的新对象,并可以调用您试图创建的对象上的任何构造函数。这是创建对象的首选方式——速度很快,JVM对其进行了大量积极的优化

    Class.forName().newInstance()是一个动态构造,用于查找具有特定名称的类。它比使用new慢,因为对象的类型不能硬编码到字节码中,而且JVM可能必须进行权限检查,以确保您有权创建对象。它也是部分不安全的,因为它总是使用零参数构造函数,如果您试图创建的对象没有空构造函数,它会抛出异常

    简而言之,如果在编译时知道要创建的对象的类型,请使用new。如果你不知道要制作什么类型的对象,可以使用Class.forName().newInstance()

  4. # 4 楼答案

    Class.forName('myClass').newInstance()如果尚未加载,则加载该类。在这里,它调用初始构造函数,只执行构造函数的静态部分

    new操作符用于初始化新对象

    您可以通过new运算符和Class.forName()创建多个实例。不同之处在于,当您第二次创建newInstance()静态块时,静态块将不会被初始化

    JDBC驱动程序就是一个很好的例子

    Class.forName("com.mysql.JDBC.Driver").newInstance()
    
  5. # 5 楼答案

    Class.forName("your class name").newInstance()用于从类中获取实例,类似于new,但在jar文件或远程服务器中的类中获取实例,并且无法在编译时导入它时,它非常有用

    例如:Class.forName("YOUR JDBC DRIVER").newInstance(),不能在编译时导入JDBC类

  6. # 6 楼答案

    如果需要动态实例化类,那么Class.forName("your class name").newInstance()很有用,因为创建对象不需要硬编码类名

    想象一下这样一个场景:从远程源动态加载类。您将知道它们的名称,但无法在编译时导入它们。在这种情况下,不能使用new创建新实例。这就是Java提供newInstance()方法的原因之一