﻿<?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-沐雨林的晨曦-随笔分类-Java读书笔记</title><link>http://www.blogjava.net/murainwood/category/9938.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 07 Jun 2007 01:51:49 GMT</lastBuildDate><pubDate>Thu, 07 Jun 2007 01:51:49 GMT</pubDate><ttl>60</ttl><item><title>Java的速度，实在不想老调重弹</title><link>http://www.blogjava.net/murainwood/archive/2007/06/06/122463.html</link><dc:creator>murainwood</dc:creator><author>murainwood</author><pubDate>Wed, 06 Jun 2007 14:39:00 GMT</pubDate><guid>http://www.blogjava.net/murainwood/archive/2007/06/06/122463.html</guid><wfw:comment>http://www.blogjava.net/murainwood/comments/122463.html</wfw:comment><comments>http://www.blogjava.net/murainwood/archive/2007/06/06/122463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/murainwood/comments/commentRss/122463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/murainwood/services/trackbacks/122463.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; CSDN向来是以娱乐精神出名的。有网友曾笑谈：&#8220;当我无聊，当我猥琐的时候，上CSDN，总是能找到组织。&#8221;这话基本没错。<br>&nbsp;&nbsp;&nbsp; 曾经数次导演编程语言PK的CSDN，今天又发表了篇很娱乐很有导火索的文章<br>
<h1><a style="color: #ff0000;" target="_self" title="实例演示：Java和C语言哪个更快？"  href="http://news.csdn.net/n/20070606/104976.html">实例演示：Java和C语言哪个更快？</a></h1>
&nbsp;&nbsp;&nbsp; 作者很娱乐地写了堆代码来验证Java不比C语言快，留言的高手们也很娱乐地来继续声讨。<br>&nbsp;&nbsp;&nbsp; 孰是孰非我也不关心，Java和C的快慢以前也层写过一些所谓的计算程序比较过，JVM的Hostspot机制，在这种小打小闹的&#8220;测试&#8221;下确实威力巨大。有时还真的会比完成相同计算任务的C程序快。但是不要忘了真刀真枪的环境，大型应用光一个GC就足可让Java落后C写的本地代码一大截！<br>&nbsp;&nbsp; 无聊无聊<br>&nbsp;&nbsp;&nbsp; <br><br><br><img src ="http://www.blogjava.net/murainwood/aggbug/122463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/murainwood/" target="_blank">murainwood</a> 2007-06-06 22:39 <a href="http://www.blogjava.net/murainwood/archive/2007/06/06/122463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一道算法题</title><link>http://www.blogjava.net/murainwood/archive/2006/10/12/74685.html</link><dc:creator>murainwood</dc:creator><author>murainwood</author><pubDate>Wed, 11 Oct 2006 16:43:00 GMT</pubDate><guid>http://www.blogjava.net/murainwood/archive/2006/10/12/74685.html</guid><wfw:comment>http://www.blogjava.net/murainwood/comments/74685.html</wfw:comment><comments>http://www.blogjava.net/murainwood/archive/2006/10/12/74685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/murainwood/comments/commentRss/74685.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/murainwood/services/trackbacks/74685.html</trackback:ping><description><![CDATA[
		<p>有6个英文字母,a,b,c ,d,e,f<br /> 从中任意取N个(N&lt;=6)来排列.<br />已知 a 只能与 b 相连, <br />         b不能和e,f相连<br />         c不能和a相连<br />         d不能和 a ,e相连<br />           f 不能和 a,b相连<br />请打印出字母f或b 在末尾的组合顺序,用Java实现<br /><br />我的解答:<br /><br />    import java.util.*;</p>
		<p>/**<br /> * <br /> * @author ShenXiaoliang<br /> *<br /> */<br />public class DemoGraph {<br /> <br /> final static int VERTICE=6;<br /> <br /> private ArrayList&lt;String&gt; patheSet=new ArrayList&lt;String&gt;();<br /> <br /> private String[] ver={"a","b","c","d","e","f"};<br /> <br /> private int[][] graph=new int[6][6];<br /> <br /> private String path="";<br /> <br /> private boolean[] isVisit=new boolean[VERTICE];<br /> <br /> <br /> public DemoGraph() {<br />  <br />  initiGraph();<br />  for(int index=0;index&lt;VERTICE;index++)<br />  depthSearch(index);<br />  show();<br />  <br /> }<br /> <br /> private void initiGraph(){<br />  graph[0][1]=1;<br />  graph[1][0]=1;<br />  graph[1][2]=1;<br />  graph[1][3]=1;<br />  graph[2][1]=1;<br />  graph[2][3]=1;<br />  graph[2][4]=1;<br />  graph[2][5]=1;<br />  graph[3][1]=1;<br />  graph[3][2]=1;<br />  graph[3][5]=1;<br />  graph[4][2]=1;<br />  graph[4][5]=1;<br />  graph[5][2]=1;<br />  graph[5][3]=1;<br />  graph[5][4]=1;<br /> }<br /> <br /> private void depthSearch(int start){<br />  <br />  isVisit[start]=true;<br />  path+=ver[start];<br />  if(path.charAt(path.length()-1)=='f'||path.charAt(path.length()-1)=='b') patheSet.add(path);<br />  for(int index=0;index&lt;VERTICE;index++)<br />   if(graph[start][index]==1&amp;&amp;isVisit[index]==false)<br />    depthSearch(index);<br />   else continue;<br />  path=path.substring(0,path.length()-1);<br />  isVisit[start]=false;<br /> }<br /> <br /> <br /> private void show(){<br />  for(String pa:patheSet)<br />   System.out.println(pa);<br /> }</p>
		<p> /**<br />  * @param args<br />  */<br /> public static void main(String[] args) {<br />  // TODO Auto-generated method stub<br />  new DemoGraph();<br /> }</p>
		<p>}<br /><br />         </p>
<img src ="http://www.blogjava.net/murainwood/aggbug/74685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/murainwood/" target="_blank">murainwood</a> 2006-10-12 00:43 <a href="http://www.blogjava.net/murainwood/archive/2006/10/12/74685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>继续巩固Java基础，一道综合题</title><link>http://www.blogjava.net/murainwood/archive/2006/08/14/63382.html</link><dc:creator>murainwood</dc:creator><author>murainwood</author><pubDate>Sun, 13 Aug 2006 19:18:00 GMT</pubDate><guid>http://www.blogjava.net/murainwood/archive/2006/08/14/63382.html</guid><wfw:comment>http://www.blogjava.net/murainwood/comments/63382.html</wfw:comment><comments>http://www.blogjava.net/murainwood/archive/2006/08/14/63382.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/murainwood/comments/commentRss/63382.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/murainwood/services/trackbacks/63382.html</trackback:ping><description><![CDATA[
		<p>自己想的一道题，算是30％原创吧 <br />String a=new String("Hello");<br />  a+="World";<br /><br /> 问：a的内容最后是什么？<br />         这两个语句，共生成了几个Java对象？<br /><br />简单不？看样子非常简单吧，呵呵。<br />第一问：a（确切地说a引用的内容）是HelloWorld<br /> <br />第二问： 两个语句，一共生成了几个对象？<br />    看第一个语句，说实话，用这种方式初始化String，实在是代码垃圾。这先不管啦。这个语句是老生长谈，一个或两个对象。<br />    为何？第一次执行时创建了二个, 一个为字面量"Hello"(它本身是一个String对象), 一个为new String("Hello")(它是通过new创建的, 功能上和字面量"foo"完全一样, 但却是另一个对象).<br /><br />第二次执行时, 只创建一个, 即new String("Hello"), 这是因为: "Hello"作为String字面量, 是存在于String Pool里面的, 第二次使用它时, 直接指向原有的String, 而不再创建新的String; 但new String("Hello")却每执行一次都创建一个新的,完全一样的String对象.<br /><br />   第二个语句呢？<br />     3个对象。<br />     首先是“World”，毋庸质疑。<br />     那么然后呢？注意了，String是final类，不可改变。平时我们写Java会有个错觉，stringA+stringB就以为是前者尾巴接上后者脑袋。的确，在C/C++里就是如此。一点儿错都没有。<br />    但是Java不是，Java设计者为了更多方面的考虑，他们把String设计成了final。<br />    看一下JVM汇编指令吧<br />   0: aload_0<br />   1: invokespecial #1; //Method java/lang/Object."&lt;init&gt;":()V<br />   4: return</p>
		<p>static void inti();<br />  Code:<br />   0: new #2; //class java/lang/String<br />   3: dup<br />   4: ldc #3; //String Hello<br />   6: invokespecial #4; //Method java/lang/String."&lt;init&gt;":(Ljava/lang/String;)V<br />   <font style="BACKGROUND-COLOR: #ffa500">9: astore_0<br /></font>   <font style="BACKGROUND-COLOR: #ff1493">10: new #5; //class java/lang/StringBuilder</font><br />   13: dup<br />   <font style="BACKGROUND-COLOR: #ff1493">14: invokespecial #6; //Method java/lang/StringBuilder."&lt;init&gt;":()V<br /></font>   <font style="BACKGROUND-COLOR: #ffa500">17: aload_0<br /></font>   <font style="BACKGROUND-COLOR: #ff1493">18: invokevirtual #7; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;<br /></font>   21: ldc #3; //String Hello<br />   <font style="BACKGROUND-COLOR: #ff1493">23: invokevirtual #7; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;<br /></font>  <font style="BACKGROUND-COLOR: #0000ff"> 26: invokevirtual #8; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;<br />   29: astore_0<br /></font>   30: return</p>
		<p>}<br /><br />仔细看一下我做的标记，JVM给我们生成了一个StringBuilder类。（我用的是JDK5，旧版本是StringBuffer类，单单这一点小改动就能让Java的速度提高很多）。让后用append方法载入Hello和World两个String的引用（明确地说转化成字符数组）。<br />当载入完成后，StringBuilder实例调用toString，生成一个新的String实例（暂时称为TempString)。<br /> 最后把引用a指向TempString<br /><br /><br />总结：两句语句总共生成了4个或5个Java类实例<br /><br />PS：Java中没有指针实在是太不方便了。特别是在操作原始数据类型的时候。个人认为Java应该在这点上学学C＃。指针不是洪水猛兽，对优秀程序员而言，指针是编程中的一种享受。<br />        希望“海豚”（Java7）能出现指针吧－－－很不现实，还是等开源后的Java版本吧<br /><br /><br /></p>
<img src ="http://www.blogjava.net/murainwood/aggbug/63382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/murainwood/" target="_blank">murainwood</a> 2006-08-14 03:18 <a href="http://www.blogjava.net/murainwood/archive/2006/08/14/63382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Stack and Heap</title><link>http://www.blogjava.net/murainwood/archive/2006/07/31/61037.html</link><dc:creator>murainwood</dc:creator><author>murainwood</author><pubDate>Mon, 31 Jul 2006 08:28:00 GMT</pubDate><guid>http://www.blogjava.net/murainwood/archive/2006/07/31/61037.html</guid><wfw:comment>http://www.blogjava.net/murainwood/comments/61037.html</wfw:comment><comments>http://www.blogjava.net/murainwood/archive/2006/07/31/61037.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/murainwood/comments/commentRss/61037.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/murainwood/services/trackbacks/61037.html</trackback:ping><description><![CDATA[
		<p>Stack 和Heap的差别，上次华为研究生笔试题就考过。C语言的我很清楚:<br /> <font size="2">Stack: automatic variables within functions<br />  Heap: global variables (storage class external), and static variables <br /><br />简而言之，最大的不同是：前者是函数变量的空间，后者是程序变量的空间<br /><br />另外，Stack上分配内存是安全的。而Heap上分配内存则没那么爽了。调用malloc分配内存，是在Heap上开辟空间。一定要注意释放。否则老是memory leak <br /> <br />昨天有人问我JVM中的Stack和Heap的差别，当时心不在焉地照搬C语言敷衍了事。<br />中午起床，没事闲着看帖子。无意中想起这个问题，在Google搜索了一番。发现昨天的回答出了问题：<br />“ It is useful to know that these two different kinds of memory exist in Java. Stack memory is the program's memory, and heap memory resides outside of the program.”<br /><br />Stack是程序内存，Heap内存存在于程序之外。这样子看起来和C语言中地Heap有些像诶（C语言中的Heap也是在mian()之外的）。再仔细看看<br /><br />Stack memory stores primitive types and the addresses of objects. The object values are stored in heap memory.<br /><br />类实例存在于Heap。类实例的的指针在Stack中存放。难怪JVM没有<font color="#008000">text segment ，</font><font color="#000000">在Stack就囊括了</font><font color="#008000">text segment</font><font color="#000000">。<br /><br />这样做的好处，就是为了实现Java的垃圾回收机制。任何的类对象实例都在Heap中，在Stack中有它们的引用。当所以的线程都不在需要某个引用时，JVM的那个资源回收线程就会把该实例从Heap当中清楚掉。<br /><br />文章告诉我，回收线程要做全局的检测来确定某个实例是否已经“无用”了。这样子，我们可以在代码上做些工作，来给回收线程加速。<br />Test t = new Test();<br /> t.someAction();<br /> // all done<br /> t = null;<br />实例t不再有用时，就把他置为null,告诉JVM：你不用在Stack和Heap之间自己校验啦，我已经做好了标记，放心回收吧。<br /><br />小结：Stack: Primitive data types(primitive types), the addresses of objects(=references).<br />                        Heap:  objects.<br />前者：基本类型和实例地址（引用），后者：类实例</font></font></p>
<img src ="http://www.blogjava.net/murainwood/aggbug/61037.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/murainwood/" target="_blank">murainwood</a> 2006-07-31 16:28 <a href="http://www.blogjava.net/murainwood/archive/2006/07/31/61037.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>可爱的SWT，无奈的Swing，讨厌的MFC！</title><link>http://www.blogjava.net/murainwood/archive/2006/07/31/60925.html</link><dc:creator>murainwood</dc:creator><author>murainwood</author><pubDate>Sun, 30 Jul 2006 22:12:00 GMT</pubDate><guid>http://www.blogjava.net/murainwood/archive/2006/07/31/60925.html</guid><wfw:comment>http://www.blogjava.net/murainwood/comments/60925.html</wfw:comment><comments>http://www.blogjava.net/murainwood/archive/2006/07/31/60925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/murainwood/comments/commentRss/60925.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/murainwood/services/trackbacks/60925.html</trackback:ping><description><![CDATA[  发发牢骚，自从课设做了SWT /JFace的客户端应用软件，感觉超好。优美的代码，清晰的结构，典雅的布局，简洁的事件机制，SWT太迷人啦。不愧为IBM的杰作，Java桌面开发的新贵。可惜就是没人用。不就是多了和平台相关的dll文件和几个Jar资源包嘛，批处理写得熟溜得人才不嫌麻烦呢，咯咯。<br /><br />   Swing嘛，怎么说你好呢，你得结构是很清晰，论MVC的分离性，确实我觉得比SWT做得优秀些。可是你冗长的代码，麻烦的事件相应机制，有些让人不习惯的布局，特别是奇怪的界面....不是偶说你，偶不想理你啦。<br />  <br />   Java的GUI程序本来，我本来就不打算深究。精通一个SWT，了解一个Swing就够啦<br /><br />  扯上个无关的，MFC，我越了解你就越讨厌你，越明白你就越恶心你。还好，当初没有误入歧途，把你当成宝贝（反正我估计基本不做桌面软件，^_^）<img src ="http://www.blogjava.net/murainwood/aggbug/60925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/murainwood/" target="_blank">murainwood</a> 2006-07-31 06:12 <a href="http://www.blogjava.net/murainwood/archive/2006/07/31/60925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>课程设计笔记</title><link>http://www.blogjava.net/murainwood/archive/2006/07/24/59804.html</link><dc:creator>murainwood</dc:creator><author>murainwood</author><pubDate>Mon, 24 Jul 2006 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/murainwood/archive/2006/07/24/59804.html</guid><wfw:comment>http://www.blogjava.net/murainwood/comments/59804.html</wfw:comment><comments>http://www.blogjava.net/murainwood/archive/2006/07/24/59804.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/murainwood/comments/commentRss/59804.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/murainwood/services/trackbacks/59804.html</trackback:ping><description><![CDATA[
		<p>    项目第二阶段，管理客户端和管理服务器。架构C/S,技术RMI<br />    今天上午做了一个简单的测试系统，用来测试前两天所编写的构件：写了一远程服务器，一个命令行客户端。OK，编译时也没出错。<br />    然而运行起来，可怕的事情发生了：先前写的实体类无法传送给客户端。程序抛出了异常。仔细观察，发现是产生了对象无法序列化的IO异常。<br />    RMI底层通过TCP协议进行通讯，ObjectInputStream和ObjectOutputStream来负责对象的输入和输出。实在是不明白，以前做RMI系统实验的时候，根本没遇到这种序列化异常：传String就传String，传Vector就传Vector。<br />   猜想应该是我写的那些类无法序列化的缘故。参考了API文档，发现这个东西：MarshalledObject，可以对其构造方法的对象进行序列化（说穿了就是变成字节流）。<br />  迅速改造了测试程序，OK，能穿对象了。但是.....<strong>序列化以后无法反序列化！</strong>天，类对象实例全部变成了组毫无意义的字节数组。<br />  应该有其他的办法，SUN的Java文档实在不能和MSDN相比，太过于简单啦。<br />  经过3个小时的资料查阅和测试，终于找到了种正确而且异常简单的方法：对先前的代码进行简单的重构：让他们统统实现java.io.Serializable接口。只改一行代码，全部解决！<br />  ^_^</p>
<img src ="http://www.blogjava.net/murainwood/aggbug/59804.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/murainwood/" target="_blank">murainwood</a> 2006-07-24 14:44 <a href="http://www.blogjava.net/murainwood/archive/2006/07/24/59804.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]classpath详解</title><link>http://www.blogjava.net/murainwood/archive/2006/07/20/59286.html</link><dc:creator>murainwood</dc:creator><author>murainwood</author><pubDate>Thu, 20 Jul 2006 12:29:00 GMT</pubDate><guid>http://www.blogjava.net/murainwood/archive/2006/07/20/59286.html</guid><wfw:comment>http://www.blogjava.net/murainwood/comments/59286.html</wfw:comment><comments>http://www.blogjava.net/murainwood/archive/2006/07/20/59286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/murainwood/comments/commentRss/59286.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/murainwood/services/trackbacks/59286.html</trackback:ping><description><![CDATA[
		<p>设置类路径<br />结构<br />可通过对 JDK 工具使用 -classpath 选项（首选方法）或设置 CLASSPATH 环境变量来设置类路径。 <br />    C:&gt; jdkTool -classpath path1;path2...<br />    C:&gt; set CLASSPATH=path1;path2...<br />每个 path 以文件名或目录结尾，该文件名或目录取决于将类路径设置成什么： <br />对于包含 .class 文件的 .zip 或 .jar 文件，路径以 .zip 或 .jar 文件名结尾。 <br />对于未命名包中的 .class 文件，路径以包含 .class 文件的目录结尾。 <br />对于已命名包中的 .class 文件，路径以包含“root”包（完整包名中的第一个包）的目录结尾。 <br />用分号来分隔多个项目。使用 set 命令时，需要省略等号两边的空格（=）。其中 jdkTool 可以为 java、javac、javadoc，等等。有关详细列表，参见 JDK 开发工具。<br />说明<br />类路径告诉 Java 应用程序去哪里查找第三方和自定义类 -- 即不是 Java 扩展或 Java 平台一部分的类。在 JDK 1.2 中，JVM 和其他 JDK 工具通过依次搜索平台库、库扩展和类路径来查找类（有关搜索策略的详细信息，参见如何查找类）。 <br />多数应用程序的类库都会充分利用扩展机制。因此，只有想要加载某个类库 (a) 未位于当前目录或其分枝包中 且 (b) 未位于扩展机制所指定的位置时，才需设置类路径。 </p>
		<p>如果用户是从旧版本 JDK 升级而来，则启动设置可能包括不再需要的 CLASSPATH 设置。这时应该删除任何非应用程序特定的设置。有些使用 Java 虚拟机的第三方应用程序可能修改 CLASSPATH 环境变量以包括它们使用的类库。这种设置可以保留。 </p>
		<p>可通过在调用 JVM 或其他 JDK 工具时使用 Java 工具的 -classpath 选项改变类路径（例如： java -classpath ...）。这是改变类路径的首选方法。还可通过使用 CLASSPATH 环境变量改变类路径。 </p>
		<p>注意：JDK 1.2 缺省类路径是当前目录。设置 CLASSPATH 变量或使用 -classpath 命令行开关将覆盖缺省值，因而如果想要在搜索路径中包括当前目录，则必须在新设置中包括“.”。<br />类可以存储在目录（文件夹）或归档文件（例如 classes.zip 或 classes.jar）中。有关归档文件的详细信息和类路径的工作原理，参见本文档最后的理解类路径和包名。 <br />  <br />重要说明：JDK 旧版本在缺省类路径中还包括 &lt;jdk-dir&gt;/classes 项。该目录仅供 JDK 使用，且不用于应用程序类。应用程序类应该放置在 JDK 外部的目录。这样，安装新 JDK 时不必需要重新安装应用程序库。为了与旧版本的兼容性，使用 &lt;jdk-dir&gt;/classes 目录作为类库的应用程序在当前版本中仍能运行，但不能保证在以后的版本中它们还能运行。 <br />使用 Java 工具的 -classpath 选项<br />Java 工具 java、jdb、javac 和 javah 具有 -classpath 选项，在工具运行时它将取代缺省类路径或由 CLASSPATH 环境变量所指定的类路径。这是改变类路径设置的推荐方法，因为这样每个应用程序可具有它所需的类路径而又不会干扰其他应用程序。 <br />运行时工具 java 和 jdb 还具有 -cp 选项。该选项是 -classpath 的缩写。 </p>
		<p>对于非常特殊的情况，java 和 javac 都具有开关，使得可改变它们使用的路径以查找它们自己的类库。但是，绝大多数用户从来都不会用到这些开关。</p>
		<p>使用 CLASSPATH 环境变量<br />如前一节中所述，一般用户将想要使用 -classpath 命令行选项。本节将介绍如何设置 CLASSPATH 环境变量或清除以前安装遗留下的设置。 <br />设置 CLASSPATH<br />在 DOS 提示符下，可用 set 命令修改 CLASSPATH 环境变量。其格式为： <br />   set CLASSPATH=path1;path2 ...<br />路径应该以指定驱动器的字母开头，例如 C:\...。这样，在偶然切换到不同驱动器时仍可找到类（例如，如果路径项以 \... 开头，并且当前位于驱动器 D: 上，则所需的类将在 D: 而不是 C: 驱动器上找）。 <br />清除 CLASSPATH<br />如果 CLASSPATH 环境变量被设置成不正确的值，或启动文件或脚本程序设置了不正确路径，则可通过使用下列命令清除 CLASSPATH： <br />  C:&gt; set CLASSPATH=<br />该命令仅清除当前会话的 CLASSPATH。要确保在以后的会话中具有正确的 CLASSPATH 设置，则应该删除或修改启动设置。 <br />更改启动设置<br />如果在系统启动时设置 CLASSPATH 变量，则查找它的位置取决于所使用的操作系统： <br />  操作系统 方法 <br />Windows 98 和 <br />Windows 95 检查 autoexec.bat 文件中的 set 命令。 <br />Windows NT 启动“控制面板”，选择“系统”，单击“环境”选项卡，并在“用户变量”部分中，检查 CLASSPATH 变量。 </p>
		<p>理解类路径和包名<br />Java 类被组织成包，而这些包被映射到文件系统中的目录。但是与文件系统不同的是，无论何时指定包名，都应指定完整包名 -- 永远不要仅指定它的一部分。例如，java.awt.Button 的包名总是应指定为 java.awt。 <br />例如，假定想要 Java 运行环境在包 utility.myapp 中查找名为 Cool.class 的类。如果该目录的路径为 C:\java\MyClasses\utility\myapp，则应该将类路径设置成包含 C:\java\MyClasses。 </p>
		<p>要运行该应用程序，可使用下述 JVM 命令： </p>
		<p>C:&gt;  java -classpath C:\java\MyClasses utility.myapp.Cool<br />当该应用程序运行时，JVM 使用类路径设置查找在 utility.myapp 包中定义的任何其他类。 <br />注意：应在命令中指定完整包名。例如，设置类路径包含 C:\java\MyClasses\utility 并使用命令 java myapp.Cool 是不可能的，因为这找不到该类。 </p>
		<p>（您可能想知道用什么定义类的包名。答案是：包名是类的一部分，并且不能修改，除非重新编译该类。） </p>
		<p>注意：包规范机制一个有趣的结果是，属于相同包的多个文件实际上可存在于不同的目录中。对于每个类，包名都是相同的，但是每个文件的路径可从类路径中的不同目录开始。<br />文件夹和归档文件<br />当类存储在目录（文件夹）中时，例如 c:\java\MyClasses\utility\myapp，则类路径项指向包含包名第一个元素的目录（在这里为 C:\java\MyClasses，因为包名是 utility.myapp）。 <br />但是当类存储在归档文件（.zip 或 .jar 文件）中时，类路径项则是该 .zip 或 .jar 文件的路径。例如，要使用位于 .jar 文件中的类库，则命令应该类似下述形式： </p>
		<p>   java -classpath C:\java\MyClasses\myclasses.jar utility.myapp.Cool<br />多重指定<br />要在目录 C:\java\MyClasses 和 C:\java\OtherClasses 中查找类文件，则可将类路径设置为： <br />   java -classpath C:\java\MyClasses;C:\java\OtherClasses ...<br />注意两个路径之间用分号分隔。 <br />指定次序<br />指定多个类路径项的次序是相当重要的。Java 解释器将按照目录在类路径变量中的次序在各个目录中查找类。在上例中，Java 解释器首先在目录 C:\java\MyClasses 中查找需要的类。只有当它在该目录中没有找到该类时，解释器才能到 C:\java\OtherClasses 目录中查找</p>
<img src ="http://www.blogjava.net/murainwood/aggbug/59286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/murainwood/" target="_blank">murainwood</a> 2006-07-20 20:29 <a href="http://www.blogjava.net/murainwood/archive/2006/07/20/59286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有感于论坛上关于J＃的讨论</title><link>http://www.blogjava.net/murainwood/archive/2006/05/30/48868.html</link><dc:creator>murainwood</dc:creator><author>murainwood</author><pubDate>Mon, 29 May 2006 23:43:00 GMT</pubDate><guid>http://www.blogjava.net/murainwood/archive/2006/05/30/48868.html</guid><wfw:comment>http://www.blogjava.net/murainwood/comments/48868.html</wfw:comment><comments>http://www.blogjava.net/murainwood/archive/2006/05/30/48868.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/murainwood/comments/commentRss/48868.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/murainwood/services/trackbacks/48868.html</trackback:ping><description><![CDATA[   微软的J＃我从开始接触就觉得是个比较有趣的东西：一个长得特像Java的混血儿。<br />   前些天逛论坛，偶见一群人在讨论J＃的前途问题，很多人说那东西“根本不如C＃”，“甚至还不如VB。NET”。我的想法是：他们根本不了解.NET。<br />   J＃的目的是为了Java程序员能迁移到.NET平台而开发的。换而言之，J＃是Java程序员准备的，而不是初学者。诚然，我认为C＃拥有更优雅的语法，但是对于.NET这个平台本身而言，无论用什么语言（当然是在.NET上的程序语言），它们最终都是CLR。VB。NET，C＃，J＃，Delphi.NET.....各种语言的优劣在已经变得很不重要了－－你熟悉那种，那种就是最好的！因为它们本质上几乎没差别的，极端说法是,.NET 语言仅仅是”外观“不同罢了。<br />    就这点来说，.NET要比Java更有灵活性，虽然我是Java的忠实跟随者。<br />    不过我们也看到了关于Java的一些有趣的新闻：去年出现了一种JPython，用Java翻译的运行于JVM上的“Python”。呵呵，不妨大胆地猜测，未来会出现更多的"JC++","JPascal",:JBasic"，甚至是“JC＃”，那么那时，Java会更像一个平台，语言的灵活性将更高！<img src ="http://www.blogjava.net/murainwood/aggbug/48868.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/murainwood/" target="_blank">murainwood</a> 2006-05-30 07:43 <a href="http://www.blogjava.net/murainwood/archive/2006/05/30/48868.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>