对于大部分人来说,第一次见到class.forName(String className)这句代码应该是在使用jdbc方式连接数据库的时候。但这句代码本质上是什么含义,做了什么工作呢?本文将回答此问题。

理解Class.forName方法需要一些知识铺垫,也就是Class类的概念和类加载的概念,强烈建议参考下《类的生命周期》(http://www.yanwushu.com/post/54.html)。

Class类概念

Class类用来描述一个类的结构,比如描述一个类有哪些成员,有哪些方法等。有多种方法可以获取一个类对应的Class类实例,比如:

[java]  view plain copy
  1. //第一种方式获取描述Dog类结构的Class类实例
  2. Class<Dog> clazz = Dog.class;
  3. //第二种方式
  4. Dog d = new Dog();
  5. 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.net/lu7kang/article/details/5576043

转载自:http://blog.csdn.net/yanwushu/article/details/7574713

class.forName相关推荐

  1. java中Class.forName与new

    一.使用Class.forName 1.装载类 Class clazz = Class.forName("xx.xx.xx"); 2.初始化对象 clazz.newInstance ...

  2. Class.forName 和 ClassLoader 到底有啥区别?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | 纪莫 来源 | https://www.cnblogs. ...

  3. 面试题:Class.forName 和 ClassLoader 有什么区别?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://t.cn/AiQQ7dwi 在 java 中 ...

  4. Java class.forname 功能介绍

    Class.forName()主要功能:Class.forName(xxx.xx.xx)返回的是一个类,Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,也就是说J ...

  5. java中class.forname连接mysql数据库_Java加载数据库连接驱动,为什么要用Class.forName()方法?...

    展开全部 目的是为了实例化对象. Class.forName("")返回的是类e68a84323131333532363134313032313635333133336564363 ...

  6. Class.forName(xxx.xx.xx) 解耦

    Class.forName(xxx.xx.xx) 返回的是一个类 首先你要明白在java里面任何class都要装载在虚拟机上才能运行.这句话就是装载类用的(和new 不一样,要分清楚). 至于什么时候 ...

  7. Class.forName( )你搞懂了吗?——转

    Class.forName( )你搞懂了吗?--转 终于明白为什么加载数据库驱动只用Class.forName()了!!困扰了我2个小时!!希望我写的这个东西对各位有所帮助.       在Java开 ...

  8. 使用forName动态加载类文件

    动态加载(Dynamic Loading)是指在程序运行时加载需要的类库文件,对Java程序来说,一般情况下,一个类文件在启动时或首次初始化时会被加载到内存中,而反射则可以在运行时再决定是否需要加载一 ...

  9. 理解class.forName()

    原文地址:http://yanwushu.sinaapp.com/class_forname/ 使用jdbc方式链接数据库时会常常看到这句代码:Class.forName(String classNa ...

  10. Java 编程下使用 Class.forName() 加载类

    在一些应用中,无法事先知道使用者将加载什么类,而必须让使用者指定类名称以加载类,可以使用 Class 的静态 forName() 方法实现动态加载类.下面的范例让你可以指定类名称来获得类的相关信息. ...

最新文章

  1. Linux通过端口号杀死指定进程
  2. 【topoSort拓扑排序】1424. 奖金(简单题目看拓扑排序)
  3. 学计算机有哪些大学专业,计算机专业:最好的7所大学!也是全中国“最难考”的大学!...
  4. 数据结构与算法--再来聊聊数组
  5. mysql linux导入csv主键,MySQL导入csv文件内容到Table及数据库的自增主键设置
  6. 简述 JavaScript 作用域与词法分析
  7. 爬虫-12-发送带参数的请求
  8. Vite 创建 vue3.x 项目
  9. QTP工作原理的学习心得
  10. Android开发之注解式框架ButterKnife在ADT中的设置
  11. 华云网际:虚拟机+廉价服务器 一体机就这么简单
  12. PyTorch 1.0 中文文档正式接受校对 | ApacheCN
  13. python多进程编程实例_Python多进程并发(multiprocessing)用法实例详解
  14. arcgis 实验教程 第二章 ArcCatalog 简单操作--创建自己独特的工具箱
  15. 计算机主机的储存,电脑截屏保存在哪里 电脑截屏保存位置【图文】
  16. 数据分析专题报告范文6篇_数据分析系列篇(6):如何写好一个专题的分析报告...
  17. 案例剖析:关于优化外贸网店提高支付率
  18. 两种“猿” 两个生活
  19. ubuntu下,在QT中利用科大讯飞语音库实现语音合成TTS
  20. 互联网新机遇: 移动社交电商将成为下一个风口?

热门文章

  1. 基于C/C++的hex、s19文件相互转换
  2. 如何下载安装与火狐浏览器不兼容的火狐浏览器插件
  3. OSPF特殊区域(stub、stub no-summary、nssa)
  4. 用FPGA做一个生日礼物
  5. 如何在虚拟主机安装ssl证书,详细教程来了
  6. 修改源码刷步数、年会摇一摇数据
  7. 哈佛大学——差异表达分析(八)假设检验和多重检验校正
  8. Redis主从配置,简单滴很
  9. 【计算机基础】03-Word习题
  10. 【讲座回顾】不会被AI取代的人