`
zhw161541
  • 浏览: 5299 次
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

Class.forName()的含义

阅读更多

Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段。

有的jdbc连接数据库的写法里是Class.forName(xxx.xx.xx);而有一些:Class.forName(xxx.xx.xx).newInstance(),为什么会有这两种写法呢?

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

在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的Driver类的代码都必须类似如下:
public class MyJDBCDriver implements Driver {
static {
DriverManager.registerDriver(new MyJDBCDriver());
}
}

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


在JDBC驱动中,有一块静态代码,也叫静态初始化块,它执行的时间是当class调入到内存中就执行(你可以想像成,当类调用到内存后就执行一个方法)。所以很多人把jdbc driver调入到内存中,再实例化对象是没有意义的。

对于作为程序一部分的每个类,它们都有一个Class对象。换言之,每次写一个新类时,同时也会创建一个Class对象(更恰当地说,是保存在一个完全同名的.class文件中)。在运行期,一旦我们想生成那个类的一个对象,用于执行程序的Java虚拟机(JVM)首先就会检查那个类型的Class对象是否已经载入。若尚未载入,JVM就会查找同名的.class文件,并将其载入。

所以Java程序启动时并不是完全载入的,这一点与许多传统语言都不同。
一旦那个类型的Class对象进入内存,就用它创建那一类型的所有对象。


分享到:
评论

相关推荐

    数据库连接字符串

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

    学习笔记汇总-JAVA

    Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; Connection conn = DriverManager.getConnection(url, "test", "test"); ``` - **DB2数据库**: `...

    java连接数据库的问题.txt

    1. **加载JDBC驱动**:首先需要通过`Class.forName()`方法加载对应的JDBC驱动。 2. **建立连接**:利用`DriverManager.getConnection()`方法建立到数据库的连接。 3. **执行SQL语句**:通过`Statement`或`...

    服务器出现java.sql.SQLException No suitable driver found for 的.pdf

    这通常是通过调用`Class.forName()`方法完成的。例如: ```java Class.forName("com.mysql.cj.jdbc.Driver"); ``` - **注意事项**: - 确保类名是正确的。对于MySQL 8.0,驱动类名为`com.mysql.cj.jdbc.Driver`。 ...

    《JAVA高级&数据库编程》题库[归纳].pdf

    在 Java 中,创建 Class 对象有三种方式:(1)使用 Class.forName() 方法,(2)使用类的 class 属性,(3)使用对象的 getClass() 方法。 二、反射机制 反射机制是 Java 语言中的一个重要机制,它允许程序在运行...

    Java面试题-基础和集合.docx

    - 可以通过对象的`.getClass()`方法或`Class.forName()`方法来获取一个类的Class对象。 - 示例代码: ```java MyClass myObject = new MyClass(); Class<?> clazz1 = myObject.getClass(); System.out.println...

    framework_intermediates

    在Android中,可以使用`Class.forName()`方法加载隐藏类,然后通过`Class.getDeclaredMethods()`获取所有方法,包括私有和隐藏的。接着,使用`Method.invoke()`方法可以在运行时执行这些方法,从而实现对隐藏接口的...

    sql驱动程序

    - 使用`Class.forName()`方法加载驱动程序,例如:`Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")`。 - 创建数据库连接,使用`DriverManager.getConnection()`方法,提供数据库URL、用户名和密码...

    JSP com.mysql.jdbc.Driver‘. This is deprecated. The new d.pdf

    Class.forName("com.mysql.jdbc.Driver"); ``` 你需要将其更改为: ```java Class.forName("com.mysql.cj.jdbc.Driver"); ``` 同时,确保任何其他使用旧驱动的地方也进行相应的更新,包括数据源配置(DataSource...

    初中英语必背词组大全.doc

    初中英语学习过程中,掌握一些常用词组至关重要,它们不仅能帮助学生更好地理解句子含义,还能提升写作和口语表达的流畅度。以下是一些重要的初中英语词组及其应用: 1. wele to...:用于欢迎他人到达某个地方,如...

    JDBCDemo02(1).zip_jdbc_quarterj7w

    这通常通过`Class.forName()`方法来完成,例如对于MySQL,可能是`Class.forName("com.mysql.jdbc.Driver")`。 2. **建立连接**:使用`DriverManager.getConnection()`方法创建数据库连接。需要提供数据库URL、...

    java专题-反射

    Class<?> c = Class.forName(args[0]); Method[] methods = c.getDeclaredMethods(); for (Method m : methods) { System.out.println(m.toString()); } } catch (Throwable e) { System.err.println(e); } ...

    sqljdbc4.jar程序文件

    通过调用`Class.forName()`方法加载驱动,然后使用`DriverManager.getConnection()`方法建立与数据库的连接。例如: ```java Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection conn = ...

    Oracle JDBC连接字符串

    通过反射机制调用`Class.forName()`方法加载驱动类,再通过`newInstance()`创建一个实例。注意,这种方式在较新的版本中已被弃用,推荐使用`DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());`...

    sqlServer连接驱动

    2. 引入SQL Server驱动:在代码中,通过`Class.forName()`方法加载驱动,例如:`Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");` 3. 创建数据库连接:使用`java.sql.DriverManager.getConnection...

    oracle 驱动包

    Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection(url, username, password); System.out.println("Connected to the database!"); // 执行SQL操作... conn....

    Java软件开发实战 Java基础与案例开发详解 15-4 练习题 共5页.pdf

    - 动态创建对象:`Class<?> clazz = Class.forName("com.example.MyClass"); Object obj = clazz.newInstance();` - 调用方法:`Method method = clazz.getMethod("methodName", parameterTypes); method.invoke...

    oracle数据库的JDBC驱动

    使用这些驱动时,开发者需要在Java代码中加载对应的JDBC驱动,并通过`Class.forName()`方法注册驱动,然后创建`java.sql.Connection`对象以建立到Oracle数据库的连接。例如: ```java Class.forName("oracle.jdbc....

Global site tag (gtag.js) - Google Analytics