📄 java 编程的动态性,第 1 部分:类和类装入.htm
字号:
仍然有两个独立的实例,但它们都实现了同一个接口 <CODE>I</CODE>。</P>
<P><B>图 2. 类身份危机</B><BR><IMG height=278 alt=类身份危机
src="Java 编程的动态性,第 1 部分:类和类装入.files/identity-crisis.gif" width=497
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P><A name=4><SPAN class=atitle2>结束语</SPAN></A><BR>Java 类定义和 JVM
规范一起为运行时组装代码定义了功能极其强大的框架。通过使用类装入器,Java
应用程序能使用多个版本的类,否则这些类就会引起冲突。类装入器的灵活性甚至允许动态地重新装入已修改的代码,同时应用程序继续执行。</P>
<P>这里,Java 平台灵活性在某种程度上是以启动应用程序时较高的开销作为代价的。在 JVM
可以开始执行甚至最简单的应用程序代码之前,它都必须装入数百个独立的类。相对于频繁使用的小程序,这个启动成本通常使 Java
平台更适合于长时间运行的服务器类型的应用程序。服务器应用程序还最大程度地受益于代码在运行时进行组装这种灵活性,所以对于这种开发,Java
平台正日益受宠也就不足为奇了。</P>
<P>在本系列文章的第 2 部分中,我将介绍使用 Java 平台动态基础的另一个方面:反射 API(Reflection
API)。反射使执行代码能够访问内部类信息。这可能是构建灵活代码的极佳工具,可以不使用类之间任何源代码链接就能够在运行时将代码挂接在一起。但象使用大多数工具一样,您必须知道何时及如何使用它以获得最大利益。请阅读
<I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Java 编程的动态性</I>第
2 部分以了解有效反射的诀窍和利弊。</P><!--
<p>[Text of article starts here]</p>
<p><a name="1"><span class="atitle2">Major heading</span></a>
<br />[New paragraph starts here following break tag]</p>
<p>[Next paragraph goes here]</p>
<p><span class="atitle3">Minor heading</span><br />
[New paragraph starts here following break tag ... place the "code" tag around
<code>code</code> in text] </p>
<p><a name="2"><b>Sample code or listing heading</b></a>
<table bgcolor="#CCCCCC" border="1" cellpadding="5" cellspacing="0" width="100%">
<tr><td><pre>
<code>
code goes here
between pre tags and code tags
<span class="boldcode">bold code</span> uses the boldcode class
</code></pre></td></tr></table></p>
<p>[Next paragraph goes here]</p>
<p><a name="3"><span class="atitle2">Major heading</span></a>
<br />[New paragraph starts here following break tag]</p>
<p>[Next paragraph goes here]</p>
<p><b>Figure x. Figure example (Note: figure # separated from caption by two hard-coded blanks)</b>
<br /><img alt="" height="200" src="xxx.jpg" width="550" /></p>
<p>[Next paragraph goes here]</p>
--><!-- CONTENT AREA SIDEBAR--><!-- Adjust to wider width if text is long--><!-- END CONTENT AREA SIDEBAR--><!-- RESOURCES-->
<P><A name=resources><SPAN class=atitle2>参考资料</SPAN></A>
<UL><!-- Comment out list item below if there is no forum for this article-->
<LI>直接到 <A href="http://java.sun.com/docs/books/vmspec/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><I>The Java
Virtual Machine Specification</I></A> 的出处,以了解二进制类格式、类的装入以及实际的 Java
字节码等细节。<BR><BR>
<LI>阅读 Greg Travis 编写的教程“<A
href="http://www-900.ibm.com/developerWorks/cn/cnedu.nsf/java-onlinecourse-bytitle/AED03F980AC3C03C48256A7600222BB5?OpenDocument"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">了解 Java
ClassLoader</A>”(<I
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">developerWorks</I>,2001
年 4 月)了解构建您自己的特殊类装入器的所有细节。<BR><BR>
<LI>Martyn Honeyford 广受欢迎的“<A
href="http://www-900.ibm.com/developerWorks/cn/java/j-native/index.shtml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">衡量 Java
本机编译</A>”一文(<I
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">developerWorks</I>,2002
年 1 月)提供了有关 Java 语言本机代码编译问题及利弊的更多详细信息。<BR><BR>
<LI>二进制类格式包含大量重要的信息,通常这些信息甚至足够让您重新构造源代码(注释除外)。在 Greg Travis 的“<A
href="http://www-106.ibm.com/developerworks/java/library/j-obfus/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">How to lock down
your Java code (or open up someone else's)</A>”一文(<I
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">developerWorks</I>,2001
年 5 月)中,他向您显示了可以如何使用这些信息。<BR><BR>
<LI>获取有关 <A href="http://www-124.ibm.com/developerworks/oss/jikesrvm/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Jikes Research
Virtual Machine (RVM)</A> 的细节,它是用 Java 语言实现的,并是自我托管的(即,它的 Java
代码是依靠自身运行的,不需要另一个虚拟机)。<BR><BR>
<LI>通过 Java 规范请求 175(Java Specification Request 175,JSR 175)的 <A
href="http://www.jcp.org/en/jsr/detail?id=175"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">A Metadata
Facility for the Java Programming Language</A>,紧跟使属性可用于 Java
开发人员的发展。<BR><BR>
<LI>了解 Apache Software Foundation 的 <A
href="http://jakarta.apache.org/tomcat/index.html"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Apache Tomcat</A>
Java 语言 Web 服务器项目的细节,包括 <A
href="http://jakarta.apache.org/tomcat/tomcat-4.1-doc/class-loader-howto.html"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Tomcat
类装入器用法</A>的细节。<BR><BR>
<LI>在 <A href="http://www-900.ibm.com/developerWorks/cn/java/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><I>developerWorks</I>
Java 技术专区</A>可以找到数百篇 Java 技术参考资料。<BR><BR></LI></UL>
<P></P><!-- AUTHOR BIOS--><!-- Make author heading singular or plural as needed-->
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=author1><SPAN class=atitle2>关于作者</SPAN></A> <BR><IMG
height=80 alt="Dennis Sosnoski 的照片"
src="Java 编程的动态性,第 1 部分:类和类装入.files/p-sosnoski.jpg" width=64
align=left border=0
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> Dennis
Sosnoski 是西雅图地区 Java 咨询公司 <A href="http://www.sosnoski.com/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Sosnoski
Software Solutions, Inc.</A> 的创始人和首席顾问,他是 J2EE、XML 和 Web
服务支持方面的专家。他已经有 30 多年专业软件开发经验,最近几年他集中研究服务器端的 Java 技术。Dennis
经常在全国性的会议上就 XML 和 Java 技术发表演讲,他还是 <A
href="http://www.sosnoski.com/jxml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Seattle
Java-XML SIG</A> 的主席。可以通过 <A href="mailto:dms@sosnoski.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">dms@sosnoski.com</A>
与 Dennis 联系。 </TD></TR></TBODY></TABLE></TD>
<TD width=10><IMG height=1 alt=""
src="Java 编程的动态性,第 1 部分:类和类装入.files/c.gif" width=10
border=0></TD></TR></TBODY></TABLE><!-- END PAPER BODY--><BR clear=all><IMG
height=10 alt="" src="Java 编程的动态性,第 1 部分:类和类装入.files/c.gif" width=100
border=0><BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=right width="100%"><A
href="http://www-900.ibm.com/developerWorks/cn/java/j-dyn0429/#top">到页首</A></TD>
<TD width=5><IMG height=1 alt=""
src="Java 编程的动态性,第 1 部分:类和类装入.files/c.gif" width=5 border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#000000 colSpan=2><IMG height=1 alt=""
src="Java 编程的动态性,第 1 部分:类和类装入.files/c.gif" width=100 border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#ffffff colSpan=2><IMG height=8 alt=""
src="Java 编程的动态性,第 1 部分:类和类装入.files/c.gif" width=100
border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=10 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD>
<FORM name=getURL
action=/developerWorks/cn/cnratings.nsf/RateArticle?CreateDocument
method=post><INPUT type=hidden value="Java 编程的动态性,第 1 部分:类和类装入"
name=ArticleTitle> <INPUT type=hidden name=url>
<SCRIPT language=javascript>getURL();</SCRIPT>
<INPUT type=hidden value=Java name=Zone> <INPUT type=hidden
value=/developerWorks/cn/thankyou/feedback-java.html name=RedirectURL> <A
name=rating><B>您对这篇文章的看法如何?</B></A>
<TABLE cellSpacing=0 cellPadding=0 width=600 border=0>
<TBODY>
<TR>
<TD colSpan=5><IMG height=8 alt=""
src="Java 编程的动态性,第 1 部分:类和类装入.files/c.gif" width=100 border=0></TD></TR>
<TR vAlign=top>
<TD width="16%"><INPUT type=radio value=5 name=Rating>真棒!(5)</TD>
<TD width="20%"><INPUT type=radio value=4 name=Rating>好文章 (4)</TD>
<TD width="24%"><INPUT type=radio value=3 name=Rating>一般;尚可 (3)</TD>
<TD width="22%"><INPUT type=radio value=2 name=Rating>需提高 (2)</TD>
<TD width="18%"><INPUT type=radio value=1 name=Rating>太差!
(1)</TD></TR></TBODY></TABLE><BR><B>意见?</B><BR><TEXTAREA name=Comments rows=5 wrap=virtual cols=60></TEXTAREA><BR><BR><INPUT type=submit value=提交反馈意见></FORM></TD></TR>
<TR vAlign=top>
<TD bgColor=#ffffff><IMG height=8 alt=""
src="Java 编程的动态性,第 1 部分:类和类装入.files/c.gif" width=100
border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=right>(c) Copyright IBM Corp. 2001, (c) Copyright IBM China
2001, All Right Reserved</TD></TR>
<TR vAlign=top>
<TD class=bbg height=21> <A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/index.shtml&origin=dwhead">关于
IBM</A><SPAN class=divider> | </SPAN><A
class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/privacy/index.shtml&origin=dwhead">隐私条约</A><SPAN
class=divider> | </SPAN><A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/legal/index.shtml&origin=dwhead">使用条款</A><SPAN
class=divider> | </SPAN><A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/contact/index.shtml&origin=dwhead">联系
IBM</A></TD></TR></TBODY></TABLE>
<SCRIPT language=JavaScript1.2 src="Java 编程的动态性,第 1 部分:类和类装入.files/stats.js"
type=text/javascript></SCRIPT>
<NOSCRIPT><IMG height=1 alt=""
src="E:\参考资料\JAVA\J2SE\doc\Java 编程的动态性,第 1 部分:类和类装入.files\c(1).gif" width=1
border=0></NOSCRIPT> </A></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -