Class.forName()的作用是什么?
2017-05-03 23:06
218 查看
在Java语言中,任何类只有被装载到JVM上才能运行。Class.forName()方法的作用就是把类加载到JVM中,它会返回一个与带有给定字符串名的类或接口相关联的Class对象,并且JVM会加载这个类,同时JVM会执行该类的静态代码段。
在使用JDBC连接数据库之前,一般都会调用
方法来加载JDBC驱动,那么为什么一定要调用这个方法呢?其实,并不一定非要调用这种方法,例如:
和
前者使用类加载机制,后者是创建了一个新的类。使用第一种方法往往能提高软件的可扩展性,例如,一个软件项目开发后会被多家公司来使用,每家公司的处理流程大致相同,只有个别公司的业务逻辑不同,在开发过程中,完全可以把不通用的地方抽取出来定义成一个接口BusinessInterface,针对每个公司不同的业务流程定义不同的实现类sub1、sub2、sub3等,通过创建不同的子类来完成不同公司的业务需求。为了达到良好的可扩展性,可以把子类采用配置文件的方式放到XML文件或属性文件中。在程序部署时,只需要从配置文件中读取类名className,然后采用
JDBC规范中要求Driver类在使用前必须向DriverManager注册自己,所以,当执行
在调用Class.forName()方法时,这个Driver类被加载了,由于静态部分被执行,因此Driver也被注册到了DriverManager中。
在使用JDBC连接数据库之前,一般都会调用
Class.forName("com.mysql.jdbc.Driver")
方法来加载JDBC驱动,那么为什么一定要调用这个方法呢?其实,并不一定非要调用这种方法,例如:
Test t =(Test)Class.forName("Test").newInstance();
和
Test t = new Test();就具有相同的效果,所以,使用new也可以,但二者的区别也非常明显:创建对象的方式不同。
前者使用类加载机制,后者是创建了一个新的类。使用第一种方法往往能提高软件的可扩展性,例如,一个软件项目开发后会被多家公司来使用,每家公司的处理流程大致相同,只有个别公司的业务逻辑不同,在开发过程中,完全可以把不通用的地方抽取出来定义成一个接口BusinessInterface,针对每个公司不同的业务流程定义不同的实现类sub1、sub2、sub3等,通过创建不同的子类来完成不同公司的业务需求。为了达到良好的可扩展性,可以把子类采用配置文件的方式放到XML文件或属性文件中。在程序部署时,只需要从配置文件中读取类名className,然后采用
BusinessInterface b = (BusinessInterface)Class.forName("className").newInstance();创建实例即可提高开发人员的开发效率。当以后再有新的需求时,即使开发了新的子类,也不需要修改创建实例的代码,只需要修改配置文件即可,从而使得程序具有很好的可扩展性。
JDBC规范中要求Driver类在使用前必须向DriverManager注册自己,所以,当执行
Class.forName("com.mysql.jdbc.Driver")时,JVM会加载名为为“com.mysql.jdbc.Driver”对应的Driver类,而com.mysql.jdbc.Driver类的实现如下例所示:
public class Driver extends NonRegisteringDriver implements Java.sql.Driver{ static{ try{ java.sql.DriverManager.registerDriver(new Driver()); }catch(SQLException E){ throw new RuntimeException("Can't register driver!"); } } }
在调用Class.forName()方法时,这个Driver类被加载了,由于静态部分被执行,因此Driver也被注册到了DriverManager中。
相关文章推荐
- java下Class.forName的作用是什么,为什么要使用它
- ava下Class.forName的作用是什么,为什么要使用它
- java下Class.forName的作用是什么,为什么要使用它(和new对象的区别)
- Class.forName有什么作用
- java下Class.forName的作用是什么,为什么要使用它
- java下Class.forName的作用是什么,为什么要使用它
- Java学习--Class.forName的作用是什么
- java下Class.forName的作用是什么,为什么要使用它
- java下Class.forName的作用是什么,为什么要使用它
- 使用JDBC时Class.forName()的作用
- java下Class.forName的作用
- Java开发——Class.forName()的作用
- java下Class.forName的作用
- Class.forName("com.mysql.jdbc.Driver");的作用
- 使用JDBC时Class.forName()的作用
- Class.forName的作用以及为什么要用它
- 使用JDBC时Class.forName()的作用
- 使用JDBC时 Class.forName()的作用
- Class.forName的作用?为什么要用?
- 使用JDBC时Class.forName()的作用