在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法。通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象。
这里有必要提一下就是Class下的newInstance()和new有什么区别?,首先,newInstance( )是一个方法,而new是一个关键字,其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用 new关键字生成对象没有这个限制。
好,到此为止,我们总结如下:
Class.forName("")返回的是类
Class.forName("").newInstance()返回的是object
有数据库开发经验朋友会发现,为什么在我们加载数据库驱动包的时候有的却没有调用newInstance( )方法呢?即有的jdbc连接数据库的写法里是Class.forName(xxx.xx.xx);而有一 些:Class.forName(xxx.xx.xx).newInstance(),为什么会有这两种写法呢?
刚才提到,Class.forName("");的作用是要求JVM查找并加载指定的类,如果在类中有静态初始化器的话,JVM必然会执行该类的静态代码 段。而在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的 Driver类的代码都必须类似如下:
这里有必要提一下就是Class下的newInstance()和new有什么区别?,首先,newInstance( )是一个方法,而new是一个关键字,其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用 new关键字生成对象没有这个限制。
好,到此为止,我们总结如下:
Class.forName("")返回的是类
Class.forName("").newInstance()返回的是object
有数据库开发经验朋友会发现,为什么在我们加载数据库驱动包的时候有的却没有调用newInstance( )方法呢?即有的jdbc连接数据库的写法里是Class.forName(xxx.xx.xx);而有一 些:Class.forName(xxx.xx.xx).newInstance(),为什么会有这两种写法呢?
刚才提到,Class.forName("");的作用是要求JVM查找并加载指定的类,如果在类中有静态初始化器的话,JVM必然会执行该类的静态代码 段。而在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的 Driver类的代码都必须类似如下:
1 public class MyJDBCDriver implements Driver { 2 static { 3 DriverManager.registerDriver(new MyJDBCDriver()); 4 } 5 }
既然在静态初始化器的中已经进行了注册,所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了。
贴出Proxool 连接池的静态初始化方法:
1: Class cl=A.class;
JVM将使用类A的类装载器, 将类A装入内存(前提是:类A还没有装入内存),不对类A做类的初始化工作.返回类A的Class的对象。
2:Class cl=对象引用o.getClass();
返回引用o运行时真正所指的对象(因为:子对象的引用可能会赋给父对象的引用变量中)所属的类的Class的对象 。
3:Class.forName("类名");
.装入类A,并做类的初始化
.getClass()是动态的,其余是静态的。
.class和class.forName()只能返回类内field的默认值,getClass可以返回当前对象中field的最新值
Class.forName() 返回的是一个类,.newInstance() 后才创建一个对象,Class.forName()的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的
相关推荐
下面小编就为大家带来一篇浅谈java中类名.class, class.forName(), getClass()的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
易语言模块动态类名.rar 易语言模块动态类名.rar 易语言模块动态类名.rar 易语言模块动态类名.rar 易语言模块动态类名.rar 易语言模块动态类名.rar
* 通过类名.class方法,获取对应的.class对象,通常用于方法的参数类型 * * Class 类对象.getClass(); * 通过类对象获取对应.class的class类对象,方法参数或者说数据类型判断 */ package
有很多情况下还是需要在未知的Jar中进行探索的。我的硬盘中至少有15~20G(应该有重复的可能)的Jar文件,有时候为了找一个适合的Jar还得凭记忆加搜索工具,所以想偷个懒,就以练练Swing开始而写的这个小工具。...
取窗口标题类名.e,易语言春PAI函数代码编写
2.通过类名.class方法,获取对应的Class类对象,通常用于方法的参数类型 Class 类名.class; 3.通过类对象获取对应.class的Class类对象,方法参数,或者说数据类型判断 Class 类对象.getClass(); 2.Constructor 1....
通过类名.class方法,获取对应的Class类对象,通常用于方法的参数类型。 Class 类对象.getClass(); 通过类对象获取对应.class的Class类对象,方法参数,或者说数据类型判断。 package com.reflect; /* Cl
3:类名.Class(); 通过Class 对象获得类的指定成员,构造方法 构造方法: Constructor 成员方法: Method 成员变量:Field Class对象.getConstructor(参数类型的Class对象 如 String.class); 获得指定参数的公共...
Constructor con=c.getDeclaredConstructor(String.class,int.class); // 反映此 Class 对象所表示的类或接口的指定构造方法。 /* 跟 Student类中的两个参数的构造方法对应 * public Student(String name, int ...
易语言源码易语言拦截消息修改窗口类名源码.rar 易语言源码易语言拦截消息修改窗口类名源码.rar 易语言源码易语言拦截消息修改窗口类名源码.rar 易语言源码易语言拦截消息修改窗口类名源码.rar 易语言源码易语言...
模块_窗口句柄_标题_类名.e
对比一下,如果我们用下面的Class.forName的方式,则相当于重新读取的是一个字符串。那么就会运行时异常。解决方案的思路:第一步:用反射来创建对象,避免使用new关键字DriverManager . deregisterDriver( new ...
可以获取安卓系统下,所有软件的包名与类名,用于安卓桥接开发很有帮助,是个很不错的安卓脚本开发工具.直接打开即可使用,真机与模拟器均可使用
取当前窗口句柄_取当前标题_取当前类名
不是Class.forName 把实体类定义在map里,通过KEY调用不同的Class
易语言编程源码,大家可以参考学习
类对象与类的对象的区别: 类的对象:基于某个类new出来的...Class c = 类名.class; 通过静态方法获取类对象 Class c = Class.forName(“包名.类名”);//工厂:创建类对象工厂public static Object createObject(S
类名.class3.对象.getClass()(二)获取成员变量1.Field[] getFields()2.Field getField(String name)3.Field[] getDeclaredFields()4.Field getDeclaredField(String name)5.Field:成员变量5.1.获取值5.2.设置值...
全限定类名.class 3. 对象名.getClass() Class类中方法newInstance():创建当前字节码对象(只能调用无参且是public修饰的构造方法) 2. 根据字节码文件获取构造方法、普通方法、...
flex的属性的整理,可以直接使用类名进行组合实现flex布局。项目的属性,order,flex-grow,flex-shrink,flex-basis,flex.需要在项目中添加对应的样式