﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-kooyee ‘s blog-随笔分类-Java </title><link>http://www.blogjava.net/Javawind/category/24929.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 09 Feb 2008 12:29:10 GMT</lastBuildDate><pubDate>Sat, 09 Feb 2008 12:29:10 GMT</pubDate><ttl>60</ttl><item><title>[Data Structure] Vector 和 ArrayList的不同</title><link>http://www.blogjava.net/Javawind/archive/2008/02/09/179512.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Sat, 09 Feb 2008 11:23:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2008/02/09/179512.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/179512.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2008/02/09/179512.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/179512.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/179512.html</trackback:ping><description><![CDATA[<strong>Vector 和 ArrayList的不同</strong><br />
　　<br />
　　有的时候 Vector更好一些;有的时候ArrayList 更好一些;有的时候你一个也不想用。但愿，你不是在期望一个简单明了的答案，因为答案因你在用他们做什么而定。下面是要考虑的四个方面：<br />
　　<br />
　　<br />
　　<strong>API</strong><br />
　　<br />
　　同步-Synchronization<br />
　　<br />
　　数据增长-Data growth<br />
　　<br />
　　使用方法-Usage patterns<br />
　　<br />
　　让我一个一个来解释吧。<br />
　　<br />
　　<strong>API</strong><br />
　　<br />
　　在The Java Programming Language (Addison-Wesley, June 2000) 中Ken Arnold, James Gosling, 和 David Holmes 是这样描述Vector的，它是更ArrayList类似的一个东西，所以从API的观点来看，它们俩是很相似的。但是，它们之间还是有些微的差别的。<br />
　　<br />
　　<strong>Synchronization</strong><br />
　　<br />
　　Vectors是可同步化的，意思就是说，任何操作Vector的内容的方法都是线程安全的，相反的，另一方面，ArrayList是不可同步化的，所以也不是线程安全的。如果你知道了这些的话，你就会发现，Vector的同步会让它在性能发方面有一些小问题。所以，如果你不需要线程安全的话，那么就使用ArrayList吧。为什么要为没有必要的同步付出代价呢？<br />
　　<br />
　　<strong>Data growth</strong><br />
　　<br />
　　实际上，不管是ArrayList还是Vector，在它们内部都是使用一个Array来保存数据的。编程过程中，在使用它们任何一个的时候，你都需要记住这一点。你在往一个ArrayList或者Vector里插入一个元素的时候，如果内部数组空间不够了，这个对象(译者按：指的是你使用的ArrayList或者Vector)就要扩展它的大小。Vector在默认情况下是产生一个双倍大小，而ArrayList增加50%的大小。只要你合理的使用这些类，你就可以结束你在增加新的元素的时候所付出的性能代价。把对象(译者按：指的是你使用的ArrayList或者Vector)的初始化容量指定为你编程过程中所能用到的最大的容量总是最好的办法。仔细的指定容量，你可以避免以后改变内部Array容量，所要付出的代价。如果你并不知道到底有多少个数据，当是你知道数据的增长率，Vector确实有一点点优势，因为你可以指定增加值(译者按，如果没有猜错的话，作者说的方法应该是setSize(int newSize)　Sets the size of this vector.)。<br />
　　<br />
　　<strong>Usage patterns</strong><br />
　　<br />
　　ArrayList和Vector在从指定位置取得元素，从容器的末尾增加和删除元素都非常的有效，所有的这些操作都能在一个常数级的时间(O(1))内完成。但是从一个其他的位置增加和删除一个元素就显得颇为费时，差不多需要的时间为O(n-i)，这里的n代表元素个数，i代表要增加和删除的元素所在的位置。这些操作需花费更多的时间，因为你需要挨个移动i和更高位置的元素。那么，以上这些到底说明了什么呢？<br />
　　<br />
　　这意味着，如果你取得一个元素，或者从数组末尾增加或删除一个元素的话，随便你使用Vector和ArrayList。如果你想要对数组内容做其他操作的话，那么就为自己好另一个容器吧。比喻说，LinkedList可以在常数级时间(O(1))内为任意一个位置的元素增加和删除。但是，取得一个元素，会稍微慢一点，时间要用O(i) ，这个i是元素的位置。通过ArrayList也是很简单的，因为你可以简单使用一个索引，而不是构造一个iterator 。LinkedList也为每个插入的元素建立一个内部对象。所以，你也必须知道，同时产生了垃圾对象。<br />
　　<br />
　　最后，Practical Java (Addison-Wesley, Feb. 2000) Peter Haggar 里的&#8220;实践41&#8220;建议你使用一个普通的原始的数组来代替Vector和ArrayListe，特别是对效率优先的代码来说。通过使用数组(array)，你可以避免同步，额外的方法调用，非理想化的大小改变。你付出的只是额外的开发时间。
<img src ="http://www.blogjava.net/Javawind/aggbug/179512.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2008-02-09 19:23 <a href="http://www.blogjava.net/Javawind/archive/2008/02/09/179512.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[JAVA] 使用xsl来动态生成java代码</title><link>http://www.blogjava.net/Javawind/archive/2007/12/08/166324.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Sat, 08 Dec 2007 11:54:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/12/08/166324.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/166324.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/12/08/166324.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/166324.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/166324.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: xsl本身就是一个构型良好的xml，它能够把一个xml文档转换成另外一个xml文档，或者转换成文本文件、html文件等等。这里就是利用xsl来动态的生成我们想要的java文件（从某种角度看，java代码其实也就是一个文本文件），希望能够通过这篇文章，看到xml以及相关的技术所具有的强大能力！这里首先给一个xml例子，我们将通过一个xsl从该xml文件中抽取有用的信息来生成java代码（实际...&nbsp;&nbsp;<a href='http://www.blogjava.net/Javawind/archive/2007/12/08/166324.html'>阅读全文</a><img src ="http://www.blogjava.net/Javawind/aggbug/166324.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-12-08 19:54 <a href="http://www.blogjava.net/Javawind/archive/2007/12/08/166324.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Java]代码动态生成利器ASM 转</title><link>http://www.blogjava.net/Javawind/archive/2007/12/08/166313.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Sat, 08 Dec 2007 10:54:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/12/08/166313.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/166313.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/12/08/166313.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/166313.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/166313.html</trackback:ping><description><![CDATA[<h4>作者简介</h4>
<br />
<p>薛谷雨，NORDSAN(北京)信息科技开发有限公司高级JAVA研发工程师，正致力于企业级异构数据交换的服务器产品的研发，在J2EE和WEB SERVICE方面有较为丰富的开发经验，您可以通过<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#114;&#97;&#105;&#110;&#105;&#103;&#104;&#116;&#64;&#49;&#50;&#54;&#46;&#99;&#111;&#109;">rainight@126.com</a>与他联系。</p>
<h4>前言</h4>
<br />
<p>代码生成器（code generator，CG），顾名思义就是生成代码的工具。有了它，你就可以从一组简单的设定或者数据库设计中获得几百、几千行代码。如果不采用这项技术的话，开发者就不得不花上几个小时或者几天的时间来手工编写这些代码。另一方面，优秀的开发工具为了提供其独特的功能或者屏蔽一些容易出错的细节，也往往采用代码生成技术为使用者提供一个程序的模板框架，其目的也是为了提高编程的效率。以上观点仅是对代码生成器的一般理解，换句话说，这似乎是一个可有可无的东西，没有它，不过是多费一些人工而已。然而，本文要介绍的这套名为ASM的JAVA工具类的功能非同小可，它可以生成JAVA字节码,也就是class文件。你可以在应用程序中根据情况动态生成各式各样的class,然后就调用，达到一种近乎上帝造物般的神奇。心动不如行动，如果你也想在自己的开发中引入这一超前的编程技术，请看此文。</p>
<h4>小巧而神奇的ASM</h4>
<br />
<p>ASM是一套JAVA字节码生成架构。它可以动态生成二进制格式的stub类或其他代理类，或者在类被JAVA虚拟机装入内存之前，动态修改类。ASM 提供了与 BCEL（ <a href="http://jakarta.apache.org/bcel">http://jakarta.apache.org/bcel</a> ）和SERP( <a href="http://serp.sourceforge.net/">http://serp.sourceforge.net/</a> )相似的功能，只有22K的大小，比起350K的BCEL和150K的SERP来说，是相当小巧的，并且它有更高的执行效率，是BCEL的7倍，SERP的11倍以上。ASM一贯的设计思想就是将其应用于动态生成领域，因此小巧和快捷一直是这个产品的设计和实现的指导思想。</p>
<p>此产品由法国电信公司的研发工程师Eric Bruneton负责。从2002年7月ASM的第一个版本发布至今，此产品已经升级了五次，日臻完美。到目前为止，ASM最新的版本是1.3.5，你可以去 <a href="http://asm.objectweb.org/">http://asm.objectweb.org/</a> 下载。</p>
<p>ASM的最终目标是创建一个生成工具，可以被用来执行对任何类的处理操作（不像一些工具，比如Javassit,它只支持预先定义的类操作，然而在许多场合这一功能是有局限性的）。</p>
<h4>JAVA的CLASS文件格式</h4>
<br />
<p>要想驾驭ASM，先要了解一下JAVA的CLASS文件格式。JAVA的CLASS文件通常是树型结构。根节点包含以下元素：</p>
<ul>
    <li>ConstantPool：符号表；
    <li>FieldInfo：类中的成员变量信息；
    <li>MethodInfo：类中的方法描述；
    <li>Attribute：可选的附加节点。 </li>
</ul>
<p>FieldInfo节点包含成员变量的名称，诸如public,private,static等的标志。ConstantValue属性用来存储静态的不变的成员变量的值。Deprecated和Synthetic被用来标记一个成员变量是不被推荐的或由编译器生成的。</p>
<p>MethodInfo节点包含方法的名称，参数的类型和和它的返回值，方法是公有的，私有的或静态的等标志。MethodInfo包含可选的附加属性，其中最重要的是Code属性，它包含非抽象的方法的代码。Exceptions属性包含方法将抛出的Exception的名称。Deprecated和Synthetic属性的信息同上面的FieldInfo的定义一样。</p>
<p>根节点的可选属性有SourceFile，InnerClasses和Deprecated。SourceFile用来存储被编译成字节码的源代码文件的原始名称;InnerClasses存储内部类的信息。由于这些属性的存在，java 的类格式是可以扩展的，也就是说可以在一个class中附加一些非标准的属性, java虚拟机会忽略这些不可识别的属性，正常的加载这个class。</p>
<p>ConstantPool是一个由数字或字符串常量的索引组成的队列，或由此类的树的其他节点引用的，由其他对象创建的被引用常量的索引组成的队列。这个表的目标是为了减少冗余。例如，FieldInfo节点不包含节点的名称，只包含它在这一表中的索引。同样的，GETFIELD和PUTFIELD不直接包含成员变量的名称，只包含名称的索引。</p>
<h4>精通ASM</h4>
<br />
<p>Asm架构整体都围绕着两个接口，即ClassVisitor 和 CodeVisitor，它们能访问每个类的方法，成员变量，包含在每个方法中的字节码指令。ClassReader用来读取class文件；ClassWriter类用来写生成的Class文件。</p>
<p>为了修改已经存在的class,你必须使用分析class文件的ClassReader，类的修正器和写class文件的ClassWriter。类的修正器就是一个ClassVisitor,它可以委派一部分工作到其他的ClassVisitor,但是为了实现预期的修改步骤，它将改变一些参数的值，或者调用一些其他方法。为了比较容易的实现这种类的修正器，ASM提供了一个ClassAdapter和CodeAdapter，这两个适配器类分别实现了ClassVistor和CodeVistor接口。</p>
<h4>HelloWorld，体验造类的神奇</h4>
<br />
<p>下面是一个应用ASM动态生成字节码的类，并调用其中方法的完整的HelloWorld 程序，程序的功能是动态生成一个Example.class类，并实例化一个Example对象,调用对象的main函数，在屏幕上打印出"Hello world!"</p>
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.objectweb.asm.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.reflect.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.FileOutputStream;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_155_1878_Open_Image" onclick="this.style.display='none'; Codehighlighter1_155_1878_Open_Text.style.display='none'; Codehighlighter1_155_1878_Closed_Image.style.display='inline'; Codehighlighter1_155_1878_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_155_1878_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_155_1878_Closed_Text.style.display='none'; Codehighlighter1_155_1878_Open_Image.style.display='inline'; Codehighlighter1_155_1878_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Helloworld&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;ClassLoader&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Constants&nbsp;</span><span id="Codehighlighter1_155_1878_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_155_1878_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_223_1876_Open_Image" onclick="this.style.display='none'; Codehighlighter1_223_1876_Open_Text.style.display='none'; Codehighlighter1_223_1876_Closed_Image.style.display='inline'; Codehighlighter1_223_1876_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_223_1876_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_223_1876_Closed_Text.style.display='none'; Codehighlighter1_223_1876_Open_Image.style.display='inline'; Codehighlighter1_223_1876_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main&nbsp;(</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;String&nbsp;args[])&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;</span><span id="Codehighlighter1_223_1876_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_223_1876_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_230_435_Open_Image" onclick="this.style.display='none'; Codehighlighter1_230_435_Open_Text.style.display='none'; Codehighlighter1_230_435_Closed_Image.style.display='inline'; Codehighlighter1_230_435_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_230_435_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_230_435_Closed_Text.style.display='none'; Codehighlighter1_230_435_Open_Image.style.display='inline'; Codehighlighter1_230_435_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_230_435_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_230_435_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;此程序将生成一个class,对应的java源代码是:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;public&nbsp;class&nbsp;Example&nbsp;{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main&nbsp;(String[]&nbsp;args)&nbsp;{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Hello&nbsp;world!");<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;}<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;}<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;创建一个ClassWriter</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;ClassWriter&nbsp;cw&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ClassWriter(</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;cw.visit(ACC_PUBLIC,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Example</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">java/lang/Object</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;创建一个&nbsp;MethodWriter</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CodeVisitor&nbsp;mw&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cw.visitMethod(ACC_PUBLIC,&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">()V</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;推入&nbsp;'this'&nbsp;变量</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mw.visitVarInsn(ALOAD,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;创建父类的构造函数</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mw.visitMethodInsn(INVOKESPECIAL,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">java/lang/Object</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">()V</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;mw.visitInsn(RETURN);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;这段代码使用最多一个栈元素和一个本地变量</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mw.visitMaxs(</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;为main方法创建一个MethodWriter</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mw&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cw.visitMethod(<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACC_PUBLIC&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;ACC_STATIC,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">main</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">([Ljava/lang/String;)V</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;使用System类的out成员类</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mw.visitFieldInsn(<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GETSTATIC,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">java/lang/System</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">out</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Ljava/io/PrintStream;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;pushes&nbsp;the&nbsp;"Hello&nbsp;World!"&nbsp;String&nbsp;constant</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mw.visitLdcInsn(</span><span style="color: #000000">"</span><span style="color: #000000">Hello&nbsp;world!</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;调用System.out的'println'&nbsp;函数</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mw.visitMethodInsn(<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INVOKEVIRTUAL,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">java/io/PrintStream</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">println</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">(Ljava/lang/String;)V</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;mw.visitInsn(RETURN);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;这段代码使用最多两个栈元素和两个本地变量</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mw.visitMaxs(</span><span style="color: #000000">2</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;生成字节码形式的类</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;code&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cw.toByteArray();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream&nbsp;fos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileOutputStream(</span><span style="color: #000000">"</span><span style="color: #000000">Example.class</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">写文件</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;fos.write(code);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">关闭输出流</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;fos.close();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">实例化刚刚生成的类</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Helloworld&nbsp;loader&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Helloworld();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;exampleClass&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;loader.defineClass(</span><span style="color: #000000">"</span><span style="color: #000000">Example</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;code,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;code.length);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;使用动态生成的类打印&nbsp;'Helloworld'</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;main&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;exampleClass.getMethods()[</span><span style="color: #000000">0</span><span style="color: #000000">];<br />
<img id="Codehighlighter1_1865_1870_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1865_1870_Open_Text.style.display='none'; Codehighlighter1_1865_1870_Closed_Image.style.display='inline'; Codehighlighter1_1865_1870_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1865_1870_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1865_1870_Closed_Text.style.display='none'; Codehighlighter1_1865_1870_Open_Image.style.display='inline'; Codehighlighter1_1865_1870_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;main.invoke(</span><span style="color: #0000ff">null</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Object[]&nbsp;</span><span id="Codehighlighter1_1865_1870_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1865_1870_Open_Text"><span style="color: #000000">{</span><span style="color: #0000ff">null</span><span style="color: #000000">}</span></span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/Javawind/aggbug/166313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-12-08 18:54 <a href="http://www.blogjava.net/Javawind/archive/2007/12/08/166313.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[WEB] MetaData Programme</title><link>http://www.blogjava.net/Javawind/archive/2007/12/01/164538.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Sat, 01 Dec 2007 12:36:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/12/01/164538.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/164538.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/12/01/164538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/164538.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/164538.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: MetaData Programme1.1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 什么是元数据编程什么是元数据，元数据就是描述数据的数据（data about data）。最明显的例子是XML Schema，xml schema就是描述xml的数据，所以它是元数据。另一个例子是数据库，比如我们可以查询数据库中有几个表，每个表都有什么字段，这些...&nbsp;&nbsp;<a href='http://www.blogjava.net/Javawind/archive/2007/12/01/164538.html'>阅读全文</a><img src ="http://www.blogjava.net/Javawind/aggbug/164538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-12-01 20:36 <a href="http://www.blogjava.net/Javawind/archive/2007/12/01/164538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Java】properties的使用</title><link>http://www.blogjava.net/Javawind/archive/2007/10/05/150622.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Fri, 05 Oct 2007 15:15:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/10/05/150622.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/150622.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/10/05/150622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/150622.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/150622.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 由于经常从文本读写属性设置到代码中，所以利用java的properties类带取代对文件的操作。首先建立properties文本文件并输入Host_name = database name...username = 用户名password = 密码读取properties文件的代码Properties&nbsp;props&nbsp;=&nbsp;&nbsp;new...&nbsp;&nbsp;<a href='http://www.blogjava.net/Javawind/archive/2007/10/05/150622.html'>阅读全文</a><img src ="http://www.blogjava.net/Javawind/aggbug/150622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-10-05 23:15 <a href="http://www.blogjava.net/Javawind/archive/2007/10/05/150622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Java mail] 如何在javamail中使用用户验证</title><link>http://www.blogjava.net/Javawind/archive/2007/10/05/150609.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Fri, 05 Oct 2007 13:28:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/10/05/150609.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/150609.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/10/05/150609.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/150609.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/150609.html</trackback:ping><description><![CDATA[<p>先建立一个继承了javax.mail.Authenticator这个抽象类的类<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee" twffan="done"><img id="Codehighlighter1_43_330_Open_Image" onclick="this.style.display='none'; Codehighlighter1_43_330_Open_Text.style.display='none'; Codehighlighter1_43_330_Closed_Image.style.display='inline'; Codehighlighter1_43_330_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" twffan="done" /><img id="Codehighlighter1_43_330_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_43_330_Closed_Text.style.display='none'; Codehighlighter1_43_330_Open_Image.style.display='inline'; Codehighlighter1_43_330_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" twffan="done" /><span style="color: #0000ff" twffan="done">public</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #0000ff" twffan="done">class</span><span style="color: #000000" twffan="done">&nbsp;Authent&nbsp;</span><span style="color: #0000ff" twffan="done">extends</span><span style="color: #000000" twffan="done">&nbsp;Authenticator&nbsp;</span><span id="Codehighlighter1_43_330_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff" twffan="done"><img alt="" src="http://www.blogjava.net/Images/dot.gif" twffan="done" /></span><span id="Codehighlighter1_43_330_Open_Text" twffan="done"><span style="color: #000000" twffan="done">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" twffan="done" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">private</span><span style="color: #000000" twffan="done">&nbsp;PasswordAuthentication&nbsp;autentic;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_114_227_Open_Image" onclick="this.style.display='none'; Codehighlighter1_114_227_Open_Text.style.display='none'; Codehighlighter1_114_227_Closed_Image.style.display='inline'; Codehighlighter1_114_227_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" twffan="done" /><img id="Codehighlighter1_114_227_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_114_227_Closed_Text.style.display='none'; Codehighlighter1_114_227_Open_Image.style.display='inline'; Codehighlighter1_114_227_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">public</span><span style="color: #000000" twffan="done">&nbsp;Authent()&nbsp;</span><span id="Codehighlighter1_114_227_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff" twffan="done"><img alt="" src="http://www.blogjava.net/Images/dot.gif" twffan="done" /></span><span id="Codehighlighter1_114_227_Open_Text" twffan="done"><span style="color: #000000" twffan="done">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000" twffan="done">//</span><span style="color: #008000" twffan="done">setup&nbsp;PasswordAuthentication</span><span style="color: #008000" twffan="done"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" twffan="done" /></span><span style="color: #000000" twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autentic&nbsp;</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #0000ff" twffan="done">new</span><span style="color: #000000" twffan="done">&nbsp;PasswordAuthentication(</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">username</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">,&nbsp;</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">password</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">)；<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000" twffan="done"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_296_327_Open_Image" onclick="this.style.display='none'; Codehighlighter1_296_327_Open_Text.style.display='none'; Codehighlighter1_296_327_Closed_Image.style.display='inline'; Codehighlighter1_296_327_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" twffan="done" /><img id="Codehighlighter1_296_327_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_296_327_Closed_Text.style.display='none'; Codehighlighter1_296_327_Open_Image.style.display='inline'; Codehighlighter1_296_327_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">public</span><span style="color: #000000" twffan="done">&nbsp;PasswordAuthentication&nbsp;getPasswordAuthentication()&nbsp;</span><span id="Codehighlighter1_296_327_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff" twffan="done"><img alt="" src="http://www.blogjava.net/Images/dot.gif" twffan="done" /></span><span id="Codehighlighter1_296_327_Open_Text" twffan="done"><span style="color: #000000" twffan="done">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">return</span><span style="color: #000000" twffan="done">&nbsp;autentic;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000" twffan="done"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" twffan="done" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" twffan="done" />}</span></span></div>
<br />
然后修改properties和session的代码<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee" twffan="done"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.put("mail.Transport.protocol", "smtp");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; props.put("mail.smtp.port","25");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000" twffan="done">props.put(</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">mail.smtp.auth</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">,</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">true</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" twffan="done" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">&nbsp;Session.getDefaultInstance(props,&nbsp;</span><span style="color: #0000ff" twffan="done">new</span><span style="color: #000000" twffan="done">&nbsp;Authent());</span></div>
<br />
如果需要call back机制，当需要验证时。如下修改session<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Session&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Session.getInstance(props,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Authent());</span></div>
<img src ="http://www.blogjava.net/Javawind/aggbug/150609.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-10-05 21:28 <a href="http://www.blogjava.net/Javawind/archive/2007/10/05/150609.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Java] Eclipse Software Updates</title><link>http://www.blogjava.net/Javawind/archive/2007/09/29/149667.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Sat, 29 Sep 2007 11:36:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/09/29/149667.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/149667.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/09/29/149667.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/149667.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/149667.html</trackback:ping><description><![CDATA[<p>Welcome to the <strong>Eclipse Update Site</strong>. This site contains feature and plug-in versions for Eclipse project releases, published in the form expected by the Eclipse Update Manager (R3.0). Use the Update Manager's Feature Updates view to open this site (http://update.eclipse.org/updates) to locate new and updated Eclipse project feature versions to download.<br />
<br />
</p>
<p>Welcome to the <strong>Eclipse Visual Editor Update Site</strong>. This site contains feature and plug-in versions for Eclipse Visual Editor project releases, published in the form expected by the Eclipse Update Manager (R3.0). Use Eclipse's Update Manager (Help-&gt;Find and Install...-&gt;Search for new features to install) view to open this site (http://update.eclipse.org/tools/ve/updates/1.0) to locate new and updated Eclipse Visual Editor project feature versions to download.</p>
<p>Also, you will need to have first installed GEF and EMF before VE can be installed. </p>
<br />
or in google search for the "pulg-in name update site". eg Visual Editor update site&nbsp;
<img src ="http://www.blogjava.net/Javawind/aggbug/149667.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-09-29 19:36 <a href="http://www.blogjava.net/Javawind/archive/2007/09/29/149667.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Java优化编程] 1.10  方法、变量与常量的命名规则</title><link>http://www.blogjava.net/Javawind/archive/2007/09/21/147220.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Fri, 21 Sep 2007 14:40:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/09/21/147220.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/147220.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/09/21/147220.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/147220.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/147220.html</trackback:ping><description><![CDATA[<h3>1.10&nbsp; 方法、变量与常量的命名规则</h3>
<p style="text-indent: 21.45pt">关于包、类及接口的命名规则，在上面的章节中已经讲解过，在此就不再赘述了，本节讲解在Java程序设计中，有关方法、变量与常量的命名规则相关的知识。</p>
<h3>1.10.1&nbsp; 方法的命名规则</h3>
<p style="margin-bottom: 7.8pt">方法一般来说都是动词，第一个字母应该小写，在多个单词混合的情况下，第一个单词后的所有单词的第一个字母大写，其余字母小写，例如下面的代码：</p>
<p style="text-indent: 42.8pt">&nbsp;&nbsp;&nbsp;&nbsp; run();&nbsp;&nbsp;&nbsp; </p>
<p style="text-indent: 42.8pt">runFast();</p>
<p style="text-indent: 42.8pt">getBackground();</p>
<p style="margin: 7.8pt 0cm">在方法的声明部分，通常要提供对方法功能的描述，以及方法中返回值与参数的说明，例如下面的代码：</p>
<p style="text-indent: 42.8pt">/**</p>
<p style="text-indent: 42.8pt">&nbsp;* 显示系统信息方法</p>
<p style="text-indent: 42.8pt">&nbsp;* @param message 系统信息参数</p>
<p style="text-indent: 42.8pt">&nbsp;* @return message 返回系统信息</p>
<p style="text-indent: 42.8pt">&nbsp;*/</p>
<p style="text-indent: 42.8pt">&nbsp;public String showMessage (String message) {</p>
<p style="text-indent: 42.8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&#8230;</p>
<p style="text-indent: 42.8pt"><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</em><em>// statements</em><em>;</em></p>
<p style="text-indent: 42.8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<em>&#8230;</em></p>
<p style="text-indent: 42.8pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<em>return message</em><em>;</em></p>
<p style="text-indent: 42.8pt">&nbsp;}</p>
<p style="margin-top: 7.8pt; text-indent: 21.45pt">如果该方法在软件产品的不断升级中已经不被建议使用了，可以通过在方法声明注释部分添加关键字@deprecated实现。</p>
<h3>1.10.2&nbsp; 变量的命名规则</h3>
<p style="margin-bottom: 7.8pt; text-indent: 21.45pt">变量的命名规则是，除了变量（variable），所有对象的实例（instance），类（class）与类的常量（constant）的第一个字母应该小写，在多个单词混合的情况下第一个单词后的所有单词的第一个字母大写，其余字母小写的规则之外。变量的第一个字母即使系统允许，也不要为_或者$。变量名字因该紧凑而有意义。变量的名字应该是易记忆、易于理解的，即使间隔较长的时间也可以依其名而知其意。另外单字符的变量名应该尽量避免，除非临时变量，例如，一些整数单字符临时变量：i,j,k,m,n等以及单字符变量：c,d,e等，如下所示的代码：</p>
<p style="text-indent: 42.8pt">int&nbsp; i;</p>
<p style="text-indent: 42.8pt">char&nbsp; c;</p>
<p style="text-indent: 42.8pt">float imageWidth;</p>
<h3>1.10.3&nbsp; 常量的命名规则</h3>
<p style="margin-bottom: 7.8pt; text-indent: 21.45pt">Java中的常量一般采用大写字母单词命名，单词与单词之间用下划线（_）加以分割，这符合ANSI的常量命名规则，如下所示的代码：</p>
<p style="text-indent: 42.8pt">static final int MIN_WIDTH = 14; </p>
<p style="text-indent: 42.8pt">static final int MAX_WIDTH = 1000; </p>
<p style="text-indent: 42.8pt">static final int GET_THE_MEMORY = 128; </p>
<div style="border-right: #d9d9d9 1pt solid; padding-right: 4pt; border-top: #d9d9d9 1pt solid; padding-left: 4pt; background: #d9d9d9; padding-bottom: 1pt; margin-left: 5.35pt; border-left: #d9d9d9 1pt solid; margin-right: 5.35pt; padding-top: 1pt; border-bottom: #d9d9d9 1pt solid" twffan="done">
<p style="padding-right: 0cm; padding-left: 0cm; background: #d9d9d9; padding-bottom: 0cm; margin: 7.8pt 0cm; border-top-style: none; padding-top: 0cm; border-right-style: none; border-left-style: none; border-bottom-style: none">&amp;注意 &nbsp;关于关键字static与final的用法，我们将在下面章节做详细的讨论。</p>
</div>
<p style="text-indent: 21.45pt">上面讨论了Java语言中的代码编写风格及相关格式与书写规则，下面做一个简单Java程序设计的实践，从中掌握所学过的知识。</p>
<img src ="http://www.blogjava.net/Javawind/aggbug/147220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-09-21 22:40 <a href="http://www.blogjava.net/Javawind/archive/2007/09/21/147220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CLASSPATH详解</title><link>http://www.blogjava.net/Javawind/archive/2007/08/30/141463.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Thu, 30 Aug 2007 09:42:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/08/30/141463.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/141463.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/08/30/141463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/141463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/141463.html</trackback:ping><description><![CDATA[设置类路径 <br><br>结构 <br><br>可通过对 JDK 工具使用 -classpath 选项（首选方法）或设置 CLASSPATH 环境变量来设置类路径。 <br><br>C:&gt; jdkTool -classpath path1;path2... C:&gt; set CLASSPATH=path1;path2... <br><br>每个 path 以文件名或目录结尾，该文件名或目录取决于将类路径设置成什么： <br><br>对于包含 .class 文件的 .zip 或 .jar 文件，路径以 .zip 或 .jar 文件名结尾。 <br><br>对于未命名包中的 .class 文件，路径以包含 .class 文件的目录结尾。 <br><br>对于已命名包中的 .class 文件，路径以包含&#8220;root&#8221;包（完整包名中的第一个包）的目录结尾。 <br><br>用分号来分隔多个项目。使用 set 命令时，需要省略等号两边的空格（=）。其中 jdkTool 可以为 java、javac、javadoc，等等。有关详细列表，参见 JDK 开发工具。 <br><br>说明 <br><br>类路径告诉 Java 应用程序去哪里查找第三方和自定义类 -- 即不是 Java 扩展或 Java 平台一部分的类。在 JDK 1.2 中，JVM 和其他 JDK 工具通过依次搜索平台库、库扩展和类路径来查找类（有关搜索策略的详细信息，参见如何查找类）。 <br><br>多数应用程序的类库都会充分利用扩展机制。因此，只有想要加载某个类库 (a) 未位于当前目录或其分枝包中 且 (b) 未位于扩展机制所指定的位置时，才需设置类路径。 <br><br>如果用户是从旧版本 JDK 升级而来，则启动设置可能包括不再需要的 CLASSPATH 设置。这时应该删除任何非应用程序特定的设置。有些使用 Java 虚拟机的第三方应用程序可能修改 CLASSPATH 环境变量以包括它们使用的类库。这种设置可以保留。 <br><br>可通过在调用 JVM 或其他 JDK 工具时使用 Java 工具的 -classpath 选项改变类路径（例如： java -classpath ...）。这是改变类路径的首选方法。还可通过使用 CLASSPATH 环境变量改变类路径。 <br><br>注意：JDK 1.2 缺省类路径是当前目录。设置 CLASSPATH 变量或使用 -classpath 命令行开关将覆盖缺省值，因而如果想要在搜索路径中包括当前目录，则必须在新设置中包括&#8220;.&#8221;。 <br><br>类可以存储在目录（文件夹）或归档文件（例如 classes.zip 或 classes.jar）中。有关归档文件的详细信息和类路径的工作原理，参见本文档最后的理解类路径和包名。 <br><br>重要说明：JDK 旧版本在缺省类路径中还包括 /classes 项。该目录仅供 JDK 使用，且不用于应用程序类。应用程序类应该放置在 JDK 外部的目录。这样，安装新 JDK 时不必需要重新安装应用程序库。为了与旧版本的兼容性，使用 /classes 目录作为类库的应用程序在当前版本中仍能运行，但不能保证在以后的版本中它们还能运行。 <br><br>使用 Java 工具的 -classpath 选项 <br><br>Java 工具 java、jdb、javac 和 javah 具有 -classpath 选项，在工具运行时它将取代缺省类路径或由 CLASSPATH 环境变量所指定的类路径。这是改变类路径设置的推荐方法，因为这样每个应用程序可具有它所需的类路径而又不会干扰其他应用程序。 <br><br>运行时工具 java 和 jdb 还具有 -cp 选项。该选项是 -classpath 的缩写。 <br><br>对于非常特殊的情况，java 和 javac 都具有开关，使得可改变它们使用的路径以查找它们自己的类库。但是，绝大多数用户从来都不会用到这些开关。 <br><br>使用 CLASSPATH 环境变量 <br><br>如前一节中所述，一般用户将想要使用 -classpath 命令行选项。本节将介绍如何设置 CLASSPATH 环境变量或清除以前安装遗留下的设置。 <br><br>设置 CLASSPATH <br><br>在 DOS 提示符下，可用 set 命令修改 CLASSPATH 环境变量。其格式为： <br><br>set CLASSPATH=path1;path2 ... <br><br>路径应该以指定驱动器的字母开头，例如 C:\...。这样，在偶然切换到不同驱动器时仍可找到类（例如，如果路径项以 \... 开头，并且当前位于驱动器 D: 上，则所需的类将在 D: 而不是 C: 驱动器上找）。 <br><br>清除 CLASSPATH <br><br>如果 CLASSPATH 环境变量被设置成不正确的值，或启动文件或脚本程序设置了不正确路径，则可通过使用下列命令清除 CLASSPATH： <br><br>C:&gt; set CLASSPATH= <br><br>该命令仅清除当前会话的 CLASSPATH。要确保在以后的会话中具有正确的 CLASSPATH 设置，则应该删除或修改启动设置。 <br><br>更改启动设置 <br><br>如果在系统启动时设置 CLASSPATH 变量，则查找它的位置取决于所使用的操作系统： <br><br>操作系统 方法 <br><br>Windows 98 和 Windows 95 检查 autoexec.bat 文件中的 set 命令。 <br><br>Windows NT 启动&#8220;控制面板&#8221;，选择&#8220;系统&#8221;，单击&#8220;环境&#8221;选项卡，并在&#8220;用户变量&#8221;部分中，检查 CLASSPATH 变量。 <br><br>理解类路径和包名 <br><br>Java 类被组织成包，而这些包被映射到文件系统中的目录。但是与文件系统不同的是，无论何时指定包名，都应指定完整包名 -- 永远不要仅指定它的一部分。例如，java.awt.Button 的包名总是应指定为 java.awt。 <br><br>例如，假定想要 Java 运行环境在包 utility.myapp 中查找名为 Cool.class 的类。如果该目录的路径为 C:\java\MyClasses\utility\myapp，则应该将类路径设置成包含 C:\java\MyClasses。 <br><br>要运行该应用程序，可使用下述 JVM 命令： <br><br>C:&gt; java -classpath C:\java\MyClasses utility.myapp.Cool <br><br>当该应用程序运行时，JVM 使用类路径设置查找在 utility.myapp 包中定义的任何其他类。 <br><br>注意：应在命令中指定完整包名。例如，设置类路径包含 C:\java\MyClasses\utility 并使用命令 java myapp.Cool 是不可能的，因为这找不到该类。 <br><br>（您可能想知道用什么定义类的包名。答案是：包名是类的一部分，并且不能修改，除非重新编译该类。） <br><br>注意：包规范机制一个有趣的结果是，属于相同包的多个文件实际上可存在于不同的目录中。对于每个类，包名都是相同的，但是每个文件的路径可从类路径中的不同目录开始。 <br><br>文件夹和归档文件 <br><br>当类存储在目录（文件夹）中时，例如 c:\java\MyClasses\utility\myapp，则类路径项指向包含包名第一个元素的目录（在这里为 C:\java\MyClasses，因为包名是 utility.myapp）。 <br><br>但是当类存储在归档文件（.zip 或 .jar 文件）中时，类路径项则是该 .zip 或 .jar 文件的路径。例如，要使用位于 .jar 文件中的类库，则命令应该类似下述形式： <br><br>java -classpath C:\java\MyClasses\myclasses.jar utility.myapp.Cool <br><br>多重指定 <br><br>要在目录 C:\java\MyClasses 和 C:\java\OtherClasses 中查找类文件，则可将类路径设置为： <br><br>java -classpath C:\java\MyClasses;C:\java\OtherClasses ... <br><br>注意两个路径之间用分号分隔。 <br><br>指定次序 <br><br>指定多个类路径项的次序是相当重要的。Java 解释器将按照目录在类路径变量中的次序在各个目录中查找类。在上例中，Java 解释器首先在目录 C:\java\MyClasses 中查找需要的类。只有当它在该目录中没有找到该类时，解释器才能到 C:\java\OtherClasses 目录中查找
<img src ="http://www.blogjava.net/Javawind/aggbug/141463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-08-30 17:42 <a href="http://www.blogjava.net/Javawind/archive/2007/08/30/141463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【J2EE开发日记】 MyEclipse快捷键与插件大全</title><link>http://www.blogjava.net/Javawind/archive/2007/08/28/140665.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Tue, 28 Aug 2007 13:22:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/08/28/140665.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/140665.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/08/28/140665.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/140665.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/140665.html</trackback:ping><description><![CDATA[（1）Ctrl+M －－切换窗口的大小<br>（2）Ctrl+Q&nbsp;－－跳到最后一次的编辑处<br>（3）F2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; －－当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时Tooltip还会显示即Show Tooltip Description。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; －－跳到声明或定义的地方。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; －－单步调试进入函数内部。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; －－单步调试不进入函数内部，如果装了金山词霸2006则要把&#8220;取词开关&#8221;的快捷键改成其他的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; －－由函数内部返回到调用处。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; －－一直执行到下一个断点。<br>（4）Ctrl+Pg~ －－对于XML文件是切换代码和图示窗口<br>（5）Ctrl+Alt+I －－看Java文件中变量的相关信息<br>（6）Ctrl+PgUp －－对于代码窗口是打开&#8220;Show List&#8221;下拉框，在此下拉框里显示有最近曾打开的文件<br>（7）Ctrl+/&nbsp;&nbsp; －－在代码窗口中是这种//~注释。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ctrl+Shift+/&nbsp; －－在代码窗口中是这种/*~*/注释，在JSP文件窗口中是〈!--~--〉。<br>（8）Alt+Shift+O(或点击工具栏中的Toggle Mark Occurrences按钮) 当点击某个标记时可使本页面中其他地方的此标记黄色凸显，并且窗口的右边框会出现白色的方块，点击此方块会跳到此标记处。<br>（9）右击窗口的左边框即加断点的地方选Show Line Numbers可以加行号。<br>（10）Ctrl+I格式化激活的元素Format Active Elements。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ctrl+Shift+F格式化文件Format Document。<br>（11）Ctrl+S保存当前文件。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ctrl+Shift+S保存所有未保存的文件。<br>（12）Ctrl+Shift+M(先把光标放在需导入包的类名上) 作用是加Import语句。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ctrl+Shift+O作用是缺少的Import语句被加入，多余的Import语句被删除。<br>（13）Ctrl+Space提示键入内容即Content Assist，此时要将输入法中Chinese(Simplified)IME-Ime/Nonlme Toggle的快捷键（用于切换英文和其他文字）改成其他的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ctrl+Shift+Space提示信息即Context Information。<br>（14）双击窗口的左边框可以加断点。<br>（15）Ctrl+D删除当前行。<br><br><br>－－－待续<br><br><br>[以下为转载]<br>Eclipse快捷键大全<br>Ctrl+1 快速修复(最经典的快捷键,就不用多说了)<br>Ctrl+D: 删除当前行 <br>Ctrl+Alt+&#8595; 复制当前行到下一行(复制增加)<br>Ctrl+Alt+&#8593; 复制当前行到上一行(复制增加)<br><br>Alt+&#8595; 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)<br>Alt+&#8593; 当前行和上面一行交互位置(同上)<br>Alt+&#8592; 前一个编辑的页面<br>Alt+&#8594; 下一个编辑的页面(当然是针对上面那条来说了)<br><br>Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性<br><br>Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)<br>Shift+Ctrl+Enter 在当前行插入空行(原理同上条)<br><br>Ctrl+Q 定位到最后编辑的地方<br>Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)<br>Ctrl+M 最大化当前的Edit或View (再按则反之)<br>Ctrl+/ 注释当前行,再按则取消注释<br>Ctrl+O 快速显示 OutLine<br>Ctrl+T 快速显示当前类的继承结构<br>Ctrl+W 关闭当前Editer<br>Ctrl+K 参照选中的Word快速定位到下一个<br>Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)<br><br>Ctrl+/(小键盘) 折叠当前类中的所有代码<br><br>Ctrl+&#215;(小键盘) 展开当前类中的所有代码<br><br>Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)<br><br>Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)<br><br>Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)<br><br>Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)<br><br>Ctrl+Shift+F4 关闭所有打开的Editer<br><br>Ctrl+Shift+X 把当前选中的文本全部变味小写<br><br>Ctrl+Shift+Y 把当前选中的文本全部变为小写<br><br>Ctrl+Shift+F 格式化当前代码<br><br>Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)<br><br>下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了)<br><br>Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)<br><br>Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)<br><br>Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)<br><br>Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)<br><br>Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)<br><br>Alt+Shift+I 合并变量(可能这样说有点不妥Inline)<br>Alt+Shift+V 移动函数和变量(不怎么常用)<br>Alt+Shift+Z 重构的后悔药(Undo)<br><br>Eclipse插件介绍与下载<br>1.Eclipse下载<br>EMF,GEF - Graphical Editor Framework,UML2,VE - Visual Editor都在这里下载<br>http://www.eclipse.org/downloads/index.php<br><br>1.lomboz J2EE插件,开发JSP,EJB<br>http://forge.objectweb.org/projects/lomboz<br><br>1.MyEclipse J2EE开发插件，支持SERVLET/JSP/EJB/数据库操纵等 <br>http://www.myeclipseide.com<br><br>2.Properties Editor 编辑java的属性文件，并可以自动存盘为Unicode格式 <br>http://propedit.sourceforge.jp/index_en.html <br><br>3.Colorer Take 为上百种类型的文件按语法着色 <br>http://colorer.sourceforge.net/ <br><br>4.XMLBuddy 编辑xml文件<br>http://www.xmlbuddy.com <br><br>5.Code Folding 加入多种代码折叠功能（比eclipse自带的更多） <br>http://www.coffee-bytes.com/servlet/PlatformSupport <br><br>5.jseclipse 支持JRE1.4<br>http://www.interaktonline.com/Products/Eclipse/JSEclipse/Try-Download/<br><br>6.Easy Explorer 从eclipse中访问选定文件、目录所在的文件夹 <br>http://easystruts.sourceforge.net/ <br><br>7.Fat Jar 打包插件，可以方便的完成各种打包任务，可以包含外部的包等 <br>http://fjep.sourceforge.net/ <br><br>8.RegEx Test 测试正则表达式 <br>http://brosinski.com/stephan/archives/000028.php <br><br>9.JasperAssistant 报表插件（强，要钱的） <br>http://www.jasperassistant.com/ <br><br>10.Jigloo GUI Builder ＪＡＶＡ的ＧＵＩ编辑插件 <br>http://cloudgarden.com/jigloo/ <br><br>11.Profiler 性能跟踪、测量工具，能跟踪、测量ＢＳ程序 <br>http://sourceforge.net/projects/eclipsecolorer/ <br><br>12.AdvanQas 提供对if/else等条件语句的提示和快捷帮助（自动更改结构等） <br>http://eclipsecolorer.sourceforge.net/advanqas/index.html <br><br>13.Log4E Log4j插件，提供各种和Log4j相关的任务，如为方法、类添加一个logger等 <br>http://log4e.jayefem.de/index.php/Main_Page <br><br>14.VSSPlugin VSS插件 <br>http://sourceforge.net/projects/vssplugin <br><br>15.Implementors 提供跳转到一个方法的实现类，而不是接中的功能（实用!） <br>http://eclipse-tools.sourceforge.net/implementors/ <br><br>16.Call Hierarchy 显示一个方法的调用层次（被哪些方法调，调了哪些方法） <br>http://eclipse-tools.sourceforge.net/call-hierarchy/index.html <br><br>17.EclipseTidy 检查和格式化HTML/XML文件 <br>http://eclipsetidy.sourceforge.net/ <br><br>18.Checkclipse 检查代码的风格、写法是否符合规范 <br>http://www.mvmsoft.de/content/plugins/checkclipse/checkclipse.htm <br><br>19.Hibernate Synchronizer Hibernate插件，自动映射等 <br>http://www.binamics.com/hibernatesync/ <br><br>20.VeloEclipse Velocity插件 <br>http://propsorter.sourceforge.net/ <br><br>21.EditorList 方便的列出所有打开的Editor <br>http://editorlist.sourceforge.net/ <br><br>22.MemoryManager 内存占用率的监视 <br>http://cloudgarden.com/memorymanager/ <br><br>23.swt-designer java的GUI插件<br>http://www.swt-designer.com/<br><br>24.TomcatPlugin 支持Tomcat插件 <br>http://www.sysdeo.com/eclipse/tomcatPlugin.html<br><br>25.XML Viewer <br>http://tabaquismo.freehosting.net/ignacio/eclipse/xmlview/index.html<br><br>26.quantum 数据库插件<br>http://quantum.sourceforge.net/<br><br>27.Dbedit 数据库插件<br>http://sourceforge.net/projects/dbedit<br><br>28.clay.core 可视化的数据库插件 <br>http://www.azzurri.jp/en/software/index.jsp <br>http://www.azzurri.jp/eclipse/plugins<br><br>29.hiberclipse hibernate插件 <br>http://hiberclipse.sourceforge.net<br>http://www.binamics.com/hibernatesync<br><br>30.struts-console Struts插件<br>http://www.jamesholmes.com/struts/console/<br><br>31.easystruts Struts插件<br>http://easystruts.sourceforge.net <br><br>32.veloedit Velocity插件<br>http://veloedit.sourceforge.net/<br><br>33.jalopy 代码整理插件<br>http://jalopy.sourceforge.net/<br><br>34.JDepend 包关系分析<br>http://andrei.gmxhome.de/jdepend4eclipse/links.html<br><br>35.Spring IDE Spring插件<br>http://springide-eclip.sourceforge.net/updatesite/<br><br>36.doclipse 可以产生xdoclet 的代码提示<br>http://beust.com/doclipse/ <br><br>Eclipse插件大全下载<br>这里有比较全的eclipse插件下载，E文不错的可以去看看，应该能找到你需要的东西。<br>http://www.eclipse-plugins.info/eclipse/plugins.jsp; jsessionid=474944821E463102785EFCB59F941256
<img src ="http://www.blogjava.net/Javawind/aggbug/140665.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-08-28 21:22 <a href="http://www.blogjava.net/Javawind/archive/2007/08/28/140665.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>