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调入到内存中,再实例化对象是没有意义的。
至于什么时候用,你可以考虑一下这个问题,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?只有你提到的这个方法了,不过要再加一点"newInstance"。
A a = (A)Class.forName("pacage.A").newInstance();
这和你
A a = new A();
是一样的效果。
动态加载和创建Class 对象,比如想根据用户输入的字符串来创建对象
String str = 用户输入的字符串
Class t = Class.forName(str);
t.newInstance();
相关推荐
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"); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; Connection conn = DriverManager.getConnection(url, "test", "test"); ``` - **DB2数据库**: `...
1. **加载JDBC驱动**:首先需要通过`Class.forName()`方法加载对应的JDBC驱动。 2. **建立连接**:利用`DriverManager.getConnection()`方法建立到数据库的连接。 3. **执行SQL语句**:通过`Statement`或`...
在 Java 中,创建 Class 对象有三种方式:(1)使用 Class.forName() 方法,(2)使用类的 class 属性,(3)使用对象的 getClass() 方法。 二、反射机制 反射机制是 Java 语言中的一个重要机制,它允许程序在运行...
- 可以通过对象的`.getClass()`方法或`Class.forName()`方法来获取一个类的Class对象。 - 示例代码: ```java MyClass myObject = new MyClass(); Class<?> clazz1 = myObject.getClass(); System.out.println...
在Android中,可以使用`Class.forName()`方法加载隐藏类,然后通过`Class.getDeclaredMethods()`获取所有方法,包括私有和隐藏的。接着,使用`Method.invoke()`方法可以在运行时执行这些方法,从而实现对隐藏接口的...
- 使用`Class.forName()`方法加载驱动程序,例如:`Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")`。 - 创建数据库连接,使用`DriverManager.getConnection()`方法,提供数据库URL、用户名和密码...
Class.forName("com.mysql.jdbc.Driver"); ``` 你需要将其更改为: ```java Class.forName("com.mysql.cj.jdbc.Driver"); ``` 同时,确保任何其他使用旧驱动的地方也进行相应的更新,包括数据源配置(DataSource...
初中英语学习过程中,掌握一些常用词组至关重要,它们不仅能帮助学生更好地理解句子含义,还能提升写作和口语表达的流畅度。以下是一些重要的初中英语词组及其应用: 1. wele to...:用于欢迎他人到达某个地方,如...
这通常通过`Class.forName()`方法来完成,例如对于MySQL,可能是`Class.forName("com.mysql.jdbc.Driver")`。 2. **建立连接**:使用`DriverManager.getConnection()`方法创建数据库连接。需要提供数据库URL、...
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); } ...
通过调用`Class.forName()`方法加载驱动,然后使用`DriverManager.getConnection()`方法建立与数据库的连接。例如: ```java Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection conn = ...
通过反射机制调用`Class.forName()`方法加载驱动类,再通过`newInstance()`创建一个实例。注意,这种方式在较新的版本中已被弃用,推荐使用`DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());`...
2. 引入SQL Server驱动:在代码中,通过`Class.forName()`方法加载驱动,例如:`Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");` 3. 创建数据库连接:使用`java.sql.DriverManager.getConnection...
Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection(url, username, password); System.out.println("Connected to the database!"); // 执行SQL操作... conn....
- 动态创建对象:`Class<?> clazz = Class.forName("com.example.MyClass"); Object obj = clazz.newInstance();` - 调用方法:`Method method = clazz.getMethod("methodName", parameterTypes); method.invoke...
使用这些驱动时,开发者需要在Java代码中加载对应的JDBC驱动,并通过`Class.forName()`方法注册驱动,然后创建`java.sql.Connection`对象以建立到Oracle数据库的连接。例如: ```java Class.forName("oracle.jdbc....