Java中的类加载和Class.forName()
2017-07-01 12:56
211 查看
转载:http://blog.csdn.net/yanwushu/article/details/7574713
http://blog.csdn.net/fengyuzhengfan/article/details/38086743
对于大部分人来说,第一次见到class.forName(String className)这句代码应该是在使用jdbc方式连接数据库的时候。但这句代码本质上是什么含义,做了什么工作呢?本文将回答此问题。
理解Class.forName方法需要一些知识铺垫,也就是Class类的概念和类加载的概念,强烈建议参考下《类的生命周期》(http://www.yanwushu.com/post/54.html)。
Class类用来描述一个类的结构,比如描述一个类有哪些成员,有哪些方法等。有多种方法可以获取一个类对应的Class类实例,比如:
[java] view
plain copy
//第一种方式获取描述Dog类结构的Class类实例
Class<Dog> clazz = Dog.class;
//第二种方式
Dog d = new Dog();
Class<Dog> clazz = d.getClass();
当使用一个类的时候(比如new一个类的实例),jvm会检查此类是否被加载到内存,如果没有,则会执行加载操作,加载操作的内容是,读取类对应的class文件数据,解析此数据,构造一个此类对应的Class类的实例,此Class类的实例描述了类的结构,并且提供了调用此类成员的接口。此时jvm就可以使用该类了,比如实例化此类,或者调用此类的静态方法。
Java也提供了手动加载类的接口,class.forName()方法就是其中之一。
初始化参数指定的类,并且返回此类对应的Class实例。
类被加载之后,jvm已经获得了一个描述类结构的Class实例。但是还需要进行类初始化操作之后才能正常使用此类,类初始化操作就是执行一遍类的静态语句,包括静态变量的声明还有静态代码块。
此方法含义是:加载参数指定的类,并且初始化它。
到这里,不用解释,读者也会明白,在使用jdbc方式连接数据库时,为什么要执行Class.forName('驱动类名')方法了:将驱动类的class文件装载到内存中,并且形成一个描述此驱动类结构的Class类实例,并且初始化此驱动类,这样jvm就可以使用它了,这就是Class.forName()方法的含义。
(参考《jdbc注册驱动的三种方式》http://blog.csdn.NET/yanwushu/article/details/7574708),
1. http://www.iteye.com/topic/15039
2. Class.forName和ClassLoader.loadClass的比较 http://blog.csdn href="http://lib.csdn.net/base/dotnet" target=_blank>.net/lu7kang/article/details/5576043
http://blog.csdn.net/fengyuzhengfan/article/details/38086743
对于大部分人来说,第一次见到class.forName(String className)这句代码应该是在使用jdbc方式连接数据库的时候。但这句代码本质上是什么含义,做了什么工作呢?本文将回答此问题。
理解Class.forName方法需要一些知识铺垫,也就是Class类的概念和类加载的概念,强烈建议参考下《类的生命周期》(http://www.yanwushu.com/post/54.html)。
Class类概念
Class类用来描述一个类的结构,比如描述一个类有哪些成员,有哪些方法等。有多种方法可以获取一个类对应的Class类实例,比如:[java] view
plain copy
//第一种方式获取描述Dog类结构的Class类实例
Class<Dog> clazz = Dog.class;
//第二种方式
Dog d = new Dog();
Class<Dog> clazz = d.getClass();
类加载概念
当使用一个类的时候(比如new一个类的实例),jvm会检查此类是否被加载到内存,如果没有,则会执行加载操作,加载操作的内容是,读取类对应的class文件数据,解析此数据,构造一个此类对应的Class类的实例,此Class类的实例描述了类的结构,并且提供了调用此类成员的接口。此时jvm就可以使用该类了,比如实例化此类,或者调用此类的静态方法。Java也提供了手动加载类的接口,class.forName()方法就是其中之一。
初始化参数指定的类,并且返回此类对应的Class实例。
类初始化概念
类被加载之后,jvm已经获得了一个描述类结构的Class实例。但是还需要进行类初始化操作之后才能正常使用此类,类初始化操作就是执行一遍类的静态语句,包括静态变量的声明还有静态代码块。
Class.forName方法
此方法含义是:加载参数指定的类,并且初始化它。
在jdbc连接数据库中的应用
到这里,不用解释,读者也会明白,在使用jdbc方式连接数据库时,为什么要执行Class.forName('驱动类名')方法了:将驱动类的class文件装载到内存中,并且形成一个描述此驱动类结构的Class类实例,并且初始化此驱动类,这样jvm就可以使用它了,这就是Class.forName()方法的含义。(参考《jdbc注册驱动的三种方式》http://blog.csdn.NET/yanwushu/article/details/7574708),
资源
1. http://www.iteye.com/topic/15039 2. Class.forName和ClassLoader.loadClass的比较 http://blog.csdn href="http://lib.csdn.net/base/dotnet" target=_blank>.net/lu7kang/article/details/5576043
相关文章推荐
- Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC
- Java中class是如何加载到JVM中的(Class.forName("name")和ClassLoader.loadClass("name")的区别)
- java 中能否使用 动态加载的类(Class.forName) 来做类型转换?
- python 动态加载类,类似java的class.forName
- Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC
- Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC
- Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC
- Java运行时动态加载类之Class.forName
- Java学习笔记_反射_Class.forName()加载并修改一个类的私有成员变量
- java连接数据库时加载驱动程序Class.forName(driveName)详解
- java中动态加载类 Class.forName
- Java 编程下使用 Class.forName() 加载类【转】
- Java 编程下使用 Class.forName() 加载类
- java加载类的方法1.classloader 2.class.forName()
- Java中class是如何加载到JVM中的(Class.forName(&quot;name&quot;)和ClassLoader.loadClass(&quot;name&quot;)的区别)
- java下Class.forName的作用是什么,为什么要使用它(和new对象的区别)
- java中Class.forName的含义
- java下Class.forName的作用
- JAVA中的Class.forName作用及JDBC应用探究
- java中Class.forName的含义