`
昔日舞曲
  • 浏览: 58136 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Class.forName的含义

阅读更多

Class.forName(xxx.xx.xx) 返回的是一个类, .newInstance() 后才创建一个对象 Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段

Class aClass = Class.forName(xxx.xx.xx);
Object anInstance = aClass.newInstance();


Class.forName("").newInstance()返回的是object
but there is some limit for this method to create instance
that is your class constructor should no contain parameters, and you should cast the instance manually.

Class Driver{
protected static Driver current;
public static Driver getDriver(){
return current;
}
}

Class MyDriver extends Driver{
static{
Driver.current=new MyDriver();
}
MyDriver(){}
}

用时:
Class.forName("MyDriver");
Driver d=Driver.getDriver();

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

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

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

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

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

we just want to load the driver to jvm only, but not need to user the instance of driver, so call Class.forName(xxx.xx.xx) is enough, if you call Class.forName(xxx.xx.xx).newInstance(), the result will same as calling Class.forName(xxx.xx.xx), because Class.forName(xxx.xx.xx).newInstance() will load driver first, and then create instance, but the instacne you will never use in usual, so you need not to create it.

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

分享到:
评论

相关推荐

    数据库连接字符串

    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高级&数据库编程》题库[归纳].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