Class.forName(xxx.xx.xx) 返回的是一个类, .newInstance() 后才创建一个对象
Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段
Class a anInstance = aClass.newInstance();
-------------------------------
Class.forName("").newInstance()返回的是object
but there is some limit for this method to createinstance
that is your class constructor should no contain parameters, andyou 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 classMyJDBCDriver implements Driver {
static {
DriverManager.registerDriver(new MyJDBCDriver());
}
}
所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了
we just want toload the driver to jvm only, but not need to user the instance ofdriver, so call Class.forName(xxx.xx.xx) is enough, if you call
Class.forName(xxx.xx.xx).newInstance(), the result will same ascalling Class.forName(xxx.xx.xx), becauseClass.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调入到内存中,再实例化对象是没有意义的。
分享到:
相关推荐
Java中的`Class.forName()`方法是一个非常关键的工具,主要用于动态加载类。它的作用在于根据给定的类全名(包括包名)返回对应的`Class`对象。`Class`对象是Java反射机制的基础,它代表着运行时的类信息,可以通过...
### Class.forName 的用法详解 #### 一、概述 `Class.forName` 是 Java 反射 API 中的一个重要方法,主要用于动态加载类。该方法的主要作用是根据提供的全限定类名来加载并返回对应的 `Class` 对象。在 Java 开发...
通过Class类可以获取Class对象,获取Class对象有三种方式:通过Object类的getClass()方法、通过类名.class获取Class对象、通过Class类中的forName()方法。每种方式都有其特点和应用场景,掌握这些方式可以帮助开发者...
- **Class.forName()**:用于加载特定的JDBC驱动类。 - **DriverManager.getConnection()**:用于建立到数据库的连接。 - **URL**:指定数据库的位置以及连接参数。 - **Connection**:表示与数据库之间的连接。 ##...
2. **通过`Class.forName()`方法动态加载**:可以在运行时动态地加载类。 3. **通过`ClassLoader.loadClass()`方法动态加载**:提供了更多的灵活性,可以根据不同的需求加载不同的类。 这三种方式各有特点,具体...
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; // orcl 为数据库SID String user = "test"; String password = "test"; ...
Class<?> clazz = Class.forName("fully.qualified.className"); ``` - **示例**: ```java Class<?> testTypeForName = Class.forName("TestClassType"); ``` - **注意事项**: - 使用此方法时需要捕获`...
在上面的代码中,首先通过 `Class.forName(className)` 获取该类的 Class,然后配置参数的 Class 数组,接着通过 `ownerClass.getMethod(methodName, argsClass)` 获取该类的静态方法,最后通过 `method.invoke(null...
- **加载驱动**:使用`Class.forName()`方法加载Oracle JDBC驱动。 - **设置URL**:URL格式为`jdbc:oracle:thin:@主机名:端口号:服务名`,其中服务名即SID(Service Identifier)。 - **建立连接**:通过`...
Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String user = "test"; String password = "test"; Connection conn = DriverManager.get...
1. **获取类的`Class`对象**:使用`Class.forName()`。 2. **获取静态方法**:使用`Class.getMethod()`方法,传入方法名和参数类型数组。 3. **调用静态方法**:使用`Method.invoke()`方法,传入`null`作为对象引用...
Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; // orcl为数据库SID String user = "test"; String password = "test"; Connection conn = ...
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; // orcl为数据库的SID String user = "test"; String password = "test"; Connection ...
Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; ``` ##### 5. 使用jTDS连接SQL Server 2000 如果使用jTDS驱动连接SQL Server 2000,则需要jtds-1.2....
在所有上述例子中,`Class.forName()`方法用于加载相应的JDBC驱动类,`DriverManager.getConnection()`则用于建立实际的数据库连接。确保在运行代码前,已经将对应的JDBC驱动库(JAR文件)添加到项目的类路径中。 ...
- **Class.forName()**:用来加载指定的JDBC驱动类。 - **DriverManager.getConnection()**:用于建立与数据库的连接。 - **URL**:包含数据库类型、主机名、端口号以及数据库名称等信息。 - **用户名(User)**:...
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 ...
Class.forName("oracle.jdbc.driver.OracleDriver"); // 建立连接 Connection cn = DriverManager.getConnection( "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd); ``` #### SQL Server ...
- 使用`Class.forName("类的全限定名")`,例如`Class.forName("java.lang.String")`。 #### 二、Class类的特性 `Class`类自身并没有公共的构造方法,它是由JVM自动创建的。这意味着我们无法直接实例化`Class`对象...
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@localhost:1521:orcl"; String user="test"; String password="test"; Connection conn= DriverManager.get...