当前位置: 首页 > news >正文

制作音乐appseo咨询顾问

制作音乐app,seo咨询顾问,手机app怎么制作流程图,seo 网站换程序使用jdbc方式连接数据库时会使用一句代码Class.forName(String className).这句话是什么意思呢?首先说一点Class.forName(String className)这种方法的作用是装载className这个字符串指定的类。 官方文档 返回与带有给定字符串名的类或接口相关联的 Class 对象。调用…


使用jdbc方式连接数据库时会使用一句代码Class.forName(String className).这句话是什么意思呢?首先说一点Class.forName(String className)这种方法的作用是装载className这个字符串指定的类。


官方文档


返回与带有给定字符串名的类或接口相关联的 Class 对象。调用此方法等效于:

  Class.forName(className, true, currentLoader)

 当中 currentLoader 表示此类的定义类载入器。

比如,下面代码片段返回 java.lang.Thread 类的执行时 Class 描写叙述符。


   Class t = Class.forName("java.lang.Thread")

 调用 forName("X") 将导致名为 的类被初始化。


參数:

className - 所需类的全然限定名。

返回:

具有指定名的类的 Class 对象。


通俗的说就是:获得字符串參数中指定的类,并初始化该类


类装载


类装载就是把一个类或是一个接口的字节码文件,通过解析该字节码来构建代表这个类或是这个接口的实例的过程。 这个字节码文件来源可能是压缩包、网络、执行时编译出的或者自己主动生成的class文件,jvm spec没有规定必须从什么地方载入。

类装载的两种方式:

1.Class c1 = Class.forName ("java.lang.String"); 

2.ClassLoader cl = new  ClassLoader(); 

Class cl.loadClass( String name, boolean resolve );


两种装载方法的差别:


不同的类装载器


  Class.forName是从指定的classloader中装载类,假设没有指定,也就是一个參数的时候,是从装载当前对象实例所在的classloader中装载类

  而ClassLoader的实例调用loadclass方法,是指从当前ClassLoader实例中调用类,而这个实例与装载当前所在类实例的Classloader或许不是同一个

      说白了就是他们实现装载的时候,使用的类装载器的指定是不同的。那为什么使用不同的ClassLoader来装载类呢?

      事实上使用多个classloader载入类的情况很常见,比方说我们的app server都是这种WebEJB他们的classLoader就是不同的,这样做的目的就是为了避免两者间类装载的相互干扰


是否实例化类


      Class的装载分了三个阶段,loading(装载),linking(连接)和initializing(实例化)分别定义在The Java Language Specification12.212.312.4

 Class.forName(className)实际上是调用Class.forName(className, true, this.getClass().getClassLoader())。注意第二个參数,是指Classloading后是不是必须被初始化。

    ClassLoader.loadClass(className)实际上调用的是ClassLoader.loadClass(name, false),第二个參数指出Class是否被link

    差别就出来了。Class.forName(className)装载的class已经被实例化,而ClassLoader.loadClass(className)装载的class还没有被link,所以就更谈不上实例化了。

  普通情况下,这两个方法效果一样,都能装载Class。但假设程序须要Class实例化,就必须用Class.forName(name)了。

比如,在JDBC中载入mysql的驱动类时(关于注冊jdbc驱动请參看另外一篇文章,jdbc注冊驱动的三种方式)Class.forName("com.mysql.jdbc.Driver"),假设换成getClass().getClassLoader().loadClass("com.mysql.jdbc.Driver"),就不行,由于它仅仅是向jvm装载了Driver并没有实例化,就不能运行响应的操作。

 打开com.mysql.jdbc.Driver的源码看看,

//

// Register ourselves with the DriverManager

//

static {

    try {

        java.sql.DriverManager.registerDriver(new Driver());

    } catch (SQLException E) {

        throw new RuntimeException("Can't register driver!");

    }

}

能够看到,Driverstatic块中会注冊自己到java.sql.DriverManager。而static块就是在Class的初始化中被运行。所以这个地方就仅仅能用Class.forName(className)


资源


1.http://www.iteye.com/topic/15039 

2.Class.forNameClassLoader.loadClass的比較

http://blog.csdn.net/lu7kang/article/details/5576043 

3.自己定义ClassLoader 

http://software.ccidnet.com/pub/disp/Article?columnID=294&articleID=25857&pageNO=1 

 4.ClassLoader分析 

http://blog.csdn.net/longdick/article/details/1873795 



转载于:https://www.cnblogs.com/mfrbuaa/p/3841591.html

http://www.lbrq.cn/news/2688661.html

相关文章:

  • 做网站市场价seo优化主要做什么
  • 淘客类网站如何做排名指数是什么
  • 企业网站对企业有什么好处沙坪坝区优化关键词软件
  • 自己做网站制作教程最近一周新闻热点回顾
  • 网站做记录访客故事式软文范例500字
  • 专业设计网站推荐螺蛳粉营销策划方案
  • 东莞厚街有什么好玩的地方seo实战培训费用
  • 广东品牌女装都有哪些品牌seo关键技术有哪些
  • jsp网站开发实例标题栏江西seo推广方案
  • 中建铁路建设有限公司网站短视频营销常用平台有
  • 网站测试软件广告软文范例
  • 正品海外购网站有哪些怎样和政府交换友链
  • 做网站首页的尺寸专业整站优化
  • 云职上海企业服务有限公司做网络优化的公司排名
  • 做网站图片分辨率优化是什么意思?
  • 一站式网站建设与运营风云榜小说排行榜
  • 电子产品网站建设 实训报告南京seo排名优化
  • 开封网站优化公司危机公关处理方案
  • 瑞丽住建局网站推文关键词生成器
  • 商丘做网站用什么程序网站维护
  • 网站上传用什么软件做视频格式广告优化师
  • 网站上传的图片怎么做的清晰度网站seo关键词排名
  • 做淘宝客优惠券网站必须是企业吗网站测速
  • 网站制作与维护费用seo关键词排名优化工具
  • 做企业平台的网站有哪些内容抖音seo优化软件
  • 莱芜公司做网站专业做网站建设的公司
  • 辽宁地矿建设集团有限公司网站合肥关键词排名提升
  • 浙江省住房和建设厅网站全国各城市感染高峰进度查询
  • 高端做网站价格查询网站域名
  • 推动全省政府网站建设百度北京分公司官网
  • 汽车高位制动灯难达 CIE 标准?OAS 光学软件高效优化破局
  • 从0开始的中后台管理系统-5(菜单的路径绑定以及角色页面的实现)
  • vscode新建esp32工程,没有sample_project怎么办?
  • 第十六届蓝桥杯大赛青少组 C++ 省赛真题解析(2025年8月10日)
  • ubuntu24.04设置登陆背景图片
  • openresty-lua-redis案例