仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 648|回复: 7
打印 上一主题 下一主题

[学习教程] 了解下JAVA的怎样在Java中利用ClassLoader载进类、文件和web资本等各类资本

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 10:59:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
没有那个大公司会傻了吧唧用.net开发大型项目,开发了,那等于自己一半的生命线被微软握着呢。而.net不行,限制在window系统,又是捆绑,鄙视微软之!
ClassLoader次要对类的哀求供应服务,当JVM必要某类时,它依据称号向ClassLoader请求这个类,然后由ClassLoader前往这个类的class对象。
ClassLoader卖力载进体系的一切资本(Class,文件,图片,来自收集的字撙节等),经由过程ClassLoader从而将资本载进JVM中。每一个class都有一个援用,指向本人的ClassLoader。
1.取得ClassLoader的几种办法
能够经由过程以下3种办法失掉ClassLoader:
  1. this.getClass.getClassLoader();//利用以后类的ClassLoader
  2. Thread.currentThread().getContextClassLoader();//利用以后线程的ClassLoader
  3. ClassLoader.getSystemClassLoader();//利用体系ClassLoader,即体系的出口点所利用的ClassLoader。
复制代码
注:systemClassLoader与根ClassLoader其实不一样。JVM下systemClassLoader一般为AppClassLoader。
2.用ClassLoader载进资本的几种办法
一切资本都经由过程ClassLoader载进到JVM里,那末在载进资本时固然可使用ClassLoader,只是关于分歧的资本还可使用一些其余体例载进,比方关于类能够间接new,关于文件能够间接做IO等。
2.1类的载进体例
假定有类A和类B,A在其办法里必要实例化B,载进类大概的办法有3种。关于载进类的情形,用户必要晓得B类的完全名字(包含包名,比方"com.alexia.B")
1.利用Class静态办法Class.forName
  1. Classcls=Class.forName("com.alexia.B");
  2. Bb=(B)cls.newInstance();
复制代码
2.利用ClassLoader
  1. /*Step1.GetClassLoader*/
  2. ClassLoadercl=this.getClass.getClassLoader();;//怎样取得ClassLoader参考1
  3. /*Step2.Loadtheclass*/
  4. Classcls=cl.loadClass("com.alexia.B");//利用第一步失掉的ClassLoader来载进B
  5. /*Step3.newinstance*/
  6. Bb=(B)cls.newInstance();//有B的类失掉一个B的实例
复制代码
3.间接new
Bb=newB();
注:有民气里大概会想,关于类的载进体例我们城市选择最复杂的第3种体例,前两种体例完整是过剩。
实则否则,间接new的体例也是有范围的,举个最复杂的例子:Java中有包名的类怎样援用默许包中的类?固然说这个是由于有包名的类不克不及间接用new援用默许包中的类,那末怎样办呢?谜底是利用反射机制,即便用第一种体例来加载类(详细请看这里)。并且,用new()和用newInstance()创立类的实例是分歧的,次要区分复杂形貌以下:
从JVM的角度看,我们利用关头字new创立一个类的时分,这个类能够没有被加载。可是利用newInstance()办法的时分,就必需包管:
(1)这个类已加载;
(2)这个类已链接了(即为静态域分派存储空间,而且假如必需的话将剖析这个类创立的对其他类的一切援用)。而完成下面两个步骤的恰是Class的静态办法forName()所完成的,这个静态办法挪用了启动类加载器,即加载javaAPI的谁人加载器。
能够看出,newInstance()实践上是把new这个体例分化为两步,即起首挪用Class加载办法加载某个类,然后实例化。如许分步的优点是不言而喻的。我们能够在挪用class的静态加载办法forName时取得更好的天真性,供应给了一种降耦的手腕。
检察本栏目更多出色内容:http://www.bianceng.cn/Programming/Java/
<p>
你希望java的IDE整合。这个是没有必要的,重要的是你理解java有多深以及怎么组织你的代码,即使没有IDE,代码照样能够编译运行的。
小女巫 该用户已被删除
沙发
发表于 2015-1-20 12:31:22 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
乐观 该用户已被删除
板凳
发表于 2015-1-29 07:08:37 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
莫相离 该用户已被删除
地板
发表于 2015-2-6 16:09:32 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
活着的死人 该用户已被删除
5#
发表于 2015-2-17 02:00:19 | 只看该作者
是一种突破用户端机器环境和CPU
蒙在股里 该用户已被删除
6#
发表于 2015-3-5 14:40:02 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
飘灵儿 该用户已被删除
7#
发表于 2015-3-12 08:05:50 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
精灵巫婆 该用户已被删除
8#
发表于 2015-3-19 19:02:20 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 00:20

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表