含义
Class.forName( )静态方法的目的是为了要求JVM查找并动态加载类(运行时加载)。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。
forName("C") 执行的时候,调用了C中的静态语句块,newInstance()执行的时候调用了构造函数。
Class.forName(xxx.xx.xx) 返回的是一个类,.newInstance() 后才创建一个对象。
场景举例
jdbc连接数据库的写法里基本都是Class.forName(xxx.xx.xx);就完事了,而其他地方在使用改静态方法的时候是:Class.forName(xxx.xx.xx).newInstance(),为什么会有这两种写法呢?
上面说过,Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,JVM会执行该类的静态代码段;其实jdbc利用的就是这个“执行静态代码”的功能;
在JDBC规范中明确要求Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的Driver类的代码都必须类似如下:
public class MyJDBCDriver implements Driver { static { DriverManager.registerDriver(new MyJDBCDriver()); } }
所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了
最后
Class的最大作用就是实现了动态加载类,为多态提供了很好的帮助。
相关推荐
Class.forName(xxx.xx.xx) 返回的是一个类,但Class.forName方法的作用到底...下面这篇文章就来给大家详细介绍了关于java中Class.forName方法的作用,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
NULL 博文链接:https://listen-raining.iteye.com/blog/1894456
介绍了java中Class.forName的作用,有需要的朋友可以参考一下
在Java的反射中,Class.forName和ClassLoader的区别共4页.pdf.zip
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"; //mydb为数据库 String user="sa"; String password=...
Java中 Class.forName()_newInstance()_New_三者区别。
对SPI,理论联系实际的理解
下面小编就为大家带来一篇浅谈java中类名.class, class.forName(), getClass()的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
并且只有调用了newInstance()方法采用调用构造函数,创建类的对象看下Class.forName()源码//Class.forName(String c
主要介绍了Java Class.forName()用法和newInstance()方法原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java连接各种数据库的驱动 jar包 orale: Class.forName("oracle.jdbc.driver.OracleDriver"); mysql:Class.forName("com.mysql.jdbc.Driver"); access:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); sqlsever:...
at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at com.trs.gateway.commons.hive.HiveFeature.getConnection(HiveFeature.java:55) ... 8 more
java链接sqlserver数据库包如下错误时: java.lang.ClassNotFoundException: ... at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) 添加sqljdbc4-2.0包即可
使用class.forname利用反射创建类,然后再获取属性,方法,体现反射应用
开发完毕,部署的时候,将开发的class打成一个可执行jar包,会发现通过Class.forName(String classname) 或ClassLoader.getSystemClassLoader().loadClass(String classname)来动态载入存在于第三方jar包中的class会抛...
例如Class<?> classType = Class.forName(java.lang.String); 例子: a..使用?通配符可以引用其他各种参数化的类型,但不能调用与参数化有关的方法; Collection<?> c = new Vector(); c.add("abc");//报错 c.size...
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); //Sql Server7.0/2000数据库 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); //DB2数据库 Class....
at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at com.trs.gateway.commons.hive.HiveFeature.getConnection(HiveFeature.java:55) ... 8 more
mysql 数据库驱动包.jdk 本身没有提供访问数zd据库的能力,它只是提供了一些接口,具体功能由各个数据库的的...是能通 Class.forName, 这就是为什么在访问数据库之前都要写一句Class.forName("com.mysql.jdbc.Driver")