仓酷云

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

[学习教程] JAVA网页设计Java的ClassLoader与Package机制

[复制链接]
爱飞 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:44:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
恰恰证明了java的简单,要不怎么没有通过c/c++来搞个这种框架?为了深切懂得Java的ClassLoader机制,我们先来做以下实行:

packagejava.lang;
publicclassTest{
publicstaticvoidmain(String[]args){
char[]c="1234567890".toCharArray();
Strings=newString(0,10,c);
}
}

String类有一个Package权限的机关函数String(intoffset,intlength,char[]array),依照默许的会见权限,因为Test属于java.lang包,因而实际上应当能够会见String的这个机关函数。编译经由过程!实行时了局以下:

Exceptioninthread"main"java.lang.SecurityException:Prohibitedpackagename:
java.lang
atjava.lang.ClassLoader.defineClass(UnknownSource)
atjava.security.SecureClassLoader.defineClass(UnknownSource)
atjava.net.URLClassLoader.defineClass(UnknownSource)
atjava.net.URLClassLoader.access$100(UnknownSource)
atjava.net.URLClassLoader$1.run(UnknownSource)
atjava.security.AccessController.doPrivileged(NativeMethod)
atjava.net.URLClassLoader.findClass(UnknownSource)
atjava.lang.ClassLoader.loadClass(UnknownSource)
atsun.misc.Launcher$AppClassLoader.loadClass(UnknownSource)
atjava.lang.ClassLoader.loadClass(UnknownSource)
atjava.lang.ClassLoader.loadClassInternal(UnknownSource)

奇异吧?要弄清为何会有SecurityException,就必需弄分明ClassLoader的机制。

Java的ClassLoader就是用来静态装载class的,ClassLoader对一个class只会装载一次,JVM利用的ClassLoader一共有4种:

启动类装载器,尺度扩大类装载器,类路径装载器和收集类装载器。

这4种ClassLoader的优先级顺次从高到低,利用所谓的“双亲委派模子”。切实地说,假如一个收集类装载器被哀求装载一个java.lang.Integer,它会起首把哀求发送给上一级的类路径装载器,假如前往已装载,则收集类装载器将不会装载这个java.lang.Integer,假如上一级的类路径装载器前往未装载,它才会装载java.lang.Integer。

相似的,类路径装载器收到哀求后(不管是间接哀求装载仍是下一级的ClassLoader上传的哀求),它也会先把哀求发送到上一级的尺度扩大类装载器,如许一层一层上传,因而启动类装载器优先级最高,假如它依照本人的体例找到了java.lang.Integer,则上面的ClassLoader都不克不及再装载java.lang.Integer,只管你本人写了一个java.lang.Integer,试图代替中心库的java.lang.Integer是不成能的,由于本人写的这个类基本没法被上层的ClassLoader装载。

再说说Package权限。Java言语划定,在统一个包中的class,假如没有润色符,默许为Package权限,包内的class都能够会见。可是这还不敷正确。切实的说,只要由统一个ClassLoader装载的class才具有以上的Package权限。好比启动类装载器装载了java.lang.String,类路径装载器装载了我们本人写的java.lang.Test,它们不克不及相互会见对方具有Package权限的办法。如许就制止了歹意代码会见中心类的Package权限办法。



令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。
谁可相欹 该用户已被删除
沙发
发表于 2015-1-21 13:39:21 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
第二个灵魂 该用户已被删除
板凳
发表于 2015-1-25 20:00:03 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
简单生活 该用户已被删除
地板
发表于 2015-2-3 19:48:58 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
透明 该用户已被删除
5#
发表于 2015-2-7 19:02:01 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
活着的死人 该用户已被删除
6#
发表于 2015-2-11 08:31:26 | 只看该作者
是一种使用者不需花费很多时间学习的语言
老尸 该用户已被删除
7#
发表于 2015-2-28 10:48:14 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
小魔女 该用户已被删除
8#
发表于 2015-3-9 22:41:15 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
小女巫 该用户已被删除
9#
发表于 2015-3-16 17:35:21 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
变相怪杰 该用户已被删除
10#
发表于 2015-3-22 01:13:50 | 只看该作者
是一种为 Internet发展的计算机语言
因胸联盟 该用户已被删除
11#
发表于 2015-3-22 18:14:43 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
山那边是海 该用户已被删除
12#
发表于 2015-3-27 23:01:48 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
再见西城 该用户已被删除
13#
发表于 2015-4-6 13:04:24 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
灵魂腐蚀 该用户已被删除
14#
发表于 2015-4-9 22:28:23 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
兰色精灵 该用户已被删除
15#
发表于 2015-4-14 11:54:58 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
不帅 该用户已被删除
16#
发表于 2015-4-16 09:10:44 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
若天明 该用户已被删除
17#
发表于 2015-4-22 02:07:37 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
海妖 该用户已被删除
18#
发表于 2015-4-22 08:29:07 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
莫相离 该用户已被删除
19#
发表于 2015-4-26 22:27:37 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
柔情似水 该用户已被删除
20#
发表于 2015-5-1 07:10:10 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-22 17:38

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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