A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

类加载器及委托机制,在web开发中担当什么角色?重要么?高手给通俗的解释

2 个回复

倒序浏览
黑马网友  发表于 2011-7-21 04:42:03
沙发
我知道 在web开发中一般牛叉的技术都交给了服务器,比如Tomat,Jboss,没没有研究过人家的源代码,但是我认为在服务器中,肯定封装了类加载器,和线程池等java中的比较难掌握的技术,一般的开发人员,我估计这些东西是用不到的,但是想成为高手,了解底层是必须的,而不是一天到晚的ssh

评分

参与人数 1技术分 +1 收起 理由
admin + 1 快5点了,还在。值得学习!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-23 13:25:06
藤椅
张老师的视频中,做一个测试web项目,正常是得到类加载器(子-->父)为

org.apache.catalina.loader.WebappClassLoader
org.apache.catalina.loader.StandardClassLoader
sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$ExtClassLoader

自己的类打成Jar输出到ext目录(JDK主目录jre\lib\ext),会出现找不到HttpServlet的错误,把servlet-api.jar放到ext目录则正常。重新启动Tomcat,得到sun.misc.Launcher$ExtClassLoader。这是因为Tomcat自定义了类加载器。

我们已经知道,[font=&quot][size=10.5pt]Java[/size][/font][font=宋体][size=10.5pt]中类的加载是父加载器委托机制,为啥要这样?

[/size][/font][font=宋体][size=10.5pt]我们知道[/size][/font][font=&quot][size=10.5pt]java[/size][/font][font=宋体][size=10.5pt]中有四种访问级别,其中[/size][/font][font=&quot][size=10.5pt]protected[/size][/font][font=宋体][size=10.5pt]是包内和子类可见,默认级别是包内可见。如果我们定义一个类[/size][/font][font=&quot][size=10.5pt]java.lang.MyClass,[/size][/font][font=宋体][size=10.5pt]那么在[/size][/font][font=&quot][size=10.5pt]MyClass[/size][/font][font=宋体][size=10.5pt]中能访问[/size][/font][font=&quot][size=10.5pt]java.lang.*[/size][/font][font=宋体][size=10.5pt]核心库的默认级别成员吗吗?如果可以,那么就会出问题,知道核心甚至修改细节。实际上不可能访问的,因为[/size][/font][font=&quot][size=10.5pt]java.lang.MyClass[/size][/font][font=宋体][size=10.5pt]与系统核心库的类加载器不同,所以是无法访问的,这样更安全。[/size][/font]

类似的一个问题是,为啥创建子类对象时要先调用父类的构造方法?因为需要先初始化直接或间接被子类继承的变量(想一想构造方法是做什么的)。

评分

参与人数 1技术分 +2 收起 理由
小龙 + 2 还行

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马