Class.forName(driverName).newInstance();
Class.forName(driverName);
这二中方式有什么区别!
在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。
Java中工厂模式经常使用newInstance()方法来创建对象,因此从为什么要使用工厂模式上可以找到具体答案。 例如:
class c = Class.forName(“Example”);
factory = (ExampleInterface)c.newInstance();
其中ExampleInterface是Example的接口,可以写成如下形式:
String className = "Example";
class c = Class.forName(className);
factory = (ExampleInterface)c.newInstance();
进一步可以写成如下形式:
String className = readfromXMlConfig;//从xml 配置文件中获得字符串
class c = Class.forName(className);
factory = (ExampleInterface)c.newInstance();
上面代码已经不存在Example的类名称,它的优点是,无论Example类怎么变化,上述代码不变,甚至可以更换Example的兄弟类Example2 , Example3 , Example4……,只要他们继承ExampleInterface就可以。
从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个类已经加载;2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载java API的那个加载器。
现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。
最后用最简单的描述来区分new关键字和newInstance()方法的区别:
newInstance: 弱类型。低效率。只能调用无参构造。
new: 强类型。相对高效。能调用任何public构造。
分享到:
相关推荐
加载驱动可以使用反射机制,例如使用 `Class.forName(String driverName)` 方法加载驱动。不同的数据库有不同的驱动,例如 Oracle、SQL Server、DB2、Informix、Sybase、MySQL、PostgreSQL 等。 步骤 2:创建连接 ...
Class.forName(driverName); dbConn = DriverManager.getConnection(dbURL, userName, userPwd); ``` - **Sybase**: ```java Class.forName("com.sybase.jdbc.SybDriver"); String url = "jdbc:sybase:Tds:...
Class.forName(driverName); Connection conn = DriverManager.getConnection(dbURL); if (conn != null) { System.out.println("连接成功!"); } else { System.out.println("连接失败!"); } conn.close()...
Class.forName(driverName); // 注册驱动 Connection conn = DriverManager.getConnection(url, username, password); System.out.println("Connected to the database!"); // 执行SQL语句和其他操作... } ...
Class.forName(driverName); System.out.println("加载驱动成功"); dbConn = DriverManager.getConnection(dbURL,userName,userPwd); System.out.println("连接数据库成功"); stat = dbConn.createStatement(); ...
Class.forName(driverName); System.out.println("加载驱动成功"); dbConn = DriverManager.getConnection(dbURL,userName,userPwd); System.out.println("连接数据库成功"); stat = dbConn.createStatement();...
- 加载驱动:使用`Class.forName()`方法加载驱动类,例如`Class.forName("com.mysql.jdbc.Driver")`。这个方法会确保JVM能够找到并初始化指定的类,使得后续的数据库连接成为可能。 - 获取连接:使用`...
Class.forName("oracle.jdbc.driver.OracleDriver"); DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:a"); ``` #### 8. Access Microsoft Access虽然主要用于小型应用程序,但也可以通过JDBC进行...
Class.forName(driverName); Connection dbConn = DriverManager.getConnection(dbUrl, userName, userPwd); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e....
Class.forName(driverName); dbConn = DriverManager.getConnection(dbURL, userName, userPwd); System.out.println("Connection Successful!"); } catch (Exception e) { e.printStackTrace(); } } } ``` ...
Class.forName(driverName); Connection conn = DriverManager.getConnection(dbURL, userName, userPwd); System.out.println("Connection Successful!"); } catch (Exception e) { e.printStackTrace(); } ...
Class.forName(driverName); dbConn = DriverManager.getConnection(dbURL, userName, userPwd); System.out.println("Connection Successful!"); } catch (Exception e) { e.printStackTrace(); } } } ```...
- 或者使用`Class.forName().newInstance()`来实例化驱动类。 - 也可以直接使用`new DriverName()`,这种方式会在实例化时自动向`DriverManager`注册,因此无需再显式调用`DriverManager.registerDriver`方法。 2...
Class.forName(driverName); // 获取数据库连接 Connection conn = DriverManager.getConnection(url, user, pwd); // ...其他操作 } catch (Exception e) { e.printStackTrace(); } } } ``` 通过这种...
- 方法一:`Class.forName(DriverName)`,其中`DriverName`是驱动的全限定类名。 - 方法二:`Class.forName(DriverName).newInstance()`,除了加载驱动,还创建了驱动的实例。 - 方法三:直接创建驱动的实例,如`...
Class.forName(driverName); ``` 2. **获取连接** - 加载完驱动之后,下一步是获取与数据库的实际连接。这通常通过 `DriverManager.getConnection()` 方法完成。 - 获取连接时需要指定数据库 URL、用户名和密码...
- 使用 `DriverManager.registerDriver(Driver driver)` 或 `Class.forName("DriverName")` 来加载和注册数据库驱动。 - 示例:`Class.forName("com.hxtt.sql.access.AccessDriver");` 2. **通过 DriverManager ...
Class.forName(driverName); ``` 3. **连接数据库** 加载了驱动之后,可以使用`DriverManager.getConnection()`方法建立与数据库的连接。需要提供数据库的URL、用户名和密码。 ```java String dbURL = "jdbc...
- `Class.forName(driverName);`用于加载MySQL JDBC驱动。 - `getConnection()`方法用于建立数据库连接。 - 成功连接后会在控制台输出“Connection Successful!”。 #### 三、常见问题及解决方法 1. **连接失败...
Class.forName(driverName); Connection conn = DriverManager.getConnection(dbURL, userName, userPwd); System.out.println("连接成功"); // 输出提示信息表示连接成功 } catch (Exception e) { System.out....