`

java中class.forName()的含义和作用

    博客分类:
  • java
 
阅读更多

含义

 

         Class.forName( )静态方法的目的是为了要求JVM查找并动态加载类(运行时加载)。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。

 

          forName("C") 执行的时候,调用了C中的静态语句块,newInstance()执行的时候调用了构造函数

 

         Class.forName(xxx.xx.xx) 返回的是一个,.newInstance() 后才创建一个对象

 

场景举例

 

       jdbc连接数据库的写法里基本都是Class.forName(xxx.xx.xx);就完事了,而其他地方在使用改静态方法的时候是:Class.forName(xxx.xx.xx).newInstance(),为什么会有这两种写法呢?

 

        上面说过,Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,JVM会执行该类的静态代码段;其实jdbc利用的就是这个“执行静态代码”的功能;

 

        在JDBC规范中明确要求Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的Driver类的代码都必须类似如下:

public class MyJDBCDriver implements Driver {
    static { 
         DriverManager.registerDriver(new MyJDBCDriver());
    }
}

 

所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了

 

最后

 

Class的最大作用就是实现了动态加载类,为多态提供了很好的帮助。

 

分享到:
评论

相关推荐

    java中Class.forName方法的作用详解

    总的来说,`Class.forName()`在Java中起到了动态加载和初始化类的关键作用,尤其在JDBC和其他需要延迟加载或动态选择实现的场景中。了解这个方法的工作原理,对于理解Java程序的运行机制和优化代码是十分重要的。在...

    Java Class.forName()无法加载类

    NULL 博文链接:https://listen-raining.iteye.com/blog/1894456

    Class.forName

    `Class.forName()`是Java中一个非常重要的方法,它主要用于动态加载和实例化类。这个方法在编程中常常用于实现灵活性和解耦,特别是在框架和插件系统中。下面将详细解释`Class.forName()`的工作原理、用途及其与`new...

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

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

    java中Class.forName的作用浅谈

    在Java编程语言中,`Class.forName()`方法是一个非常重要的功能,它主要用于动态加载类到Java虚拟机(JVM)中。这个方法的主要作用是根据给定的全限定类名(包括包名和类名)来查找并加载对应的类。下面我们将深入...

    在Java的反射中,Class.forName和Class

    在Java的反射机制中,`Class.forName`和`ClassLoader`都是关键组件,它们在程序运行时动态加载类和实现类的实例化方面扮演着重要角色。理解这两个概念及其区别是深入掌握Java反射的重要一步。 首先,`Class.forName...

    class.forname的作用 详细解析抽象类和接口的区别

    "详细解析 Java 中抽象类和接口的区别" 从面向对象的角度来看,抽象类和接口是 Java 语言中支持抽象类定义的两种机制。它们之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换。然而,两者之间还是...

    java于各种数据库连接额语句

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

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

    Class.forName()方法和newInstance()方法是Java语言中两个重要的机制,它们可以实现类的加载和实例化。它们的使用可以提高代码的灵活性和可维护性,但是也需要注意它们的缺点和限制。 知识点: 1. Class.forName()...

    浅谈java中类名.class, class.forName(), getClass()的区别

    Java 中有三种方式可以获取 Class 对象,即类名.class、class.forName() 和 getClass()。这些方法都可以获取 Class 对象,但是在获取 Class 对象的过程中,有一些关键的区别。 第一种方式:类名.class 类名.class ...

    Java中通过Class类获取Class对象的方法详解

    通过Class类可以获取Class对象,获取Class对象有三种方式:通过Object类的getClass()方法、通过类名.class获取Class对象、通过Class类中的forName()方法。每种方式都有其特点和应用场景,掌握这些方式可以帮助开发者...

    jdbc中class.forname的作用

    在Java JDBC编程中,`Class.forName()` 方法起着至关重要的作用。它的主要任务是动态加载指定的类并执行其实例的静态初始化块。在上下文中,`Class.forName()` 被用来加载数据库驱动,比如MySQL的`...

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

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

    Classfor的用法

    通过以上介绍,我们可以看到 `Class.forName` 在 Java 开发中的重要性和灵活性。它不仅可以帮助我们动态地加载类,还可以根据不同的需求定制类加载的过程。对于需要高度灵活性的应用场景来说,这是一个非常有用的...

    注册驱动:Class.forName(xxx.Driver).xmind

    对SPI,理论联系实际的理解

    浅析使用JDBC操作MySQL需要添加Class.forName("com.mysql.jdbc.Driver")

    `Class.forName()`方法在Java官方文档中被描述为在运行时动态加载一个类并返回`Class`对象。在JDBC中,`Class.forName("com.mysql.jdbc.Driver")`的作用是加载MySQL的JDBC驱动类,即`com.mysql.jdbc.Driver`。虽然...

    liuwei1989#study-guide#17-Class.forName和classloader的区别1

    并且只有调用了newInstance()方法采用调用构造函数,创建类的对象看下Class.forName()源码//Class.forName(String c

    mysql-connector-java-5.1.40.tar.gz

    在这个例子中,`Class.forName("com.mysql.jdbc.Driver")` 加载了MySQL的JDBC驱动,然后`DriverManager.getConnection()` 创建了一个数据库连接。 MySQL Connector/J 5.1.40 版本支持JDBC 4.0规范,适用于Java SE 6...

    java连接多种数据库的驱动

    java连接各种数据库的驱动 jar包 orale: Class.forName("oracle.jdbc.driver.OracleDriver"); mysql:Class.forName("com.mysql.jdbc.Driver"); access:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); sqlsever:...

Global site tag (gtag.js) - Google Analytics