﻿<?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-Sayyid-随笔分类-技术专区</title><link>http://www.blogjava.net/Sayyid/category/6737.html</link><description>&lt;font  color=Lime&gt;　　　　　时时刻刻坚守做人的尊严和原则，事事无愧于心……&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 10:27:42 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 10:27:42 GMT</pubDate><ttl>60</ttl><item><title>信息系统监理业务中进度控制的体会</title><link>http://www.blogjava.net/Sayyid/archive/2006/05/27/48522.html</link><dc:creator>Sayyid</dc:creator><author>Sayyid</author><pubDate>Sat, 27 May 2006 13:38:00 GMT</pubDate><guid>http://www.blogjava.net/Sayyid/archive/2006/05/27/48522.html</guid><wfw:comment>http://www.blogjava.net/Sayyid/comments/48522.html</wfw:comment><comments>http://www.blogjava.net/Sayyid/archive/2006/05/27/48522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sayyid/comments/commentRss/48522.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sayyid/services/trackbacks/48522.html</trackback:ping><description><![CDATA[   虽然已经参加过2次监理师考试，对监理的内容也比较熟悉，但这只是对书本中内容的理解，为了考试而记在心中的知识吧，因为没有实际的工作经验，真正的理解进度控制的作用还是有一点困难的，以前当我在书上看到要进度控制时，会觉得没有必要，今天算是知道过去的想法是错的。<br />  前些日子写一篇论文，本来计划用5天写完，结果用了7天完成。最近的毕业设计，本来计划25号前完成，结果照目前的进度看又得推迟两三天了。也不知道做开发的人员对自己工作的进度是怎么控制的，反正我想大多数人是有托懒的习惯的，所以说在软件开发过程中进行严格的进度把关是非常必要的。写一篇论文都会推迟几天，那么一个大型项目把不好关的话也许会延期以月甚至年为单位。<img src ="http://www.blogjava.net/Sayyid/aggbug/48522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sayyid/" target="_blank">Sayyid</a> 2006-05-27 21:38 <a href="http://www.blogjava.net/Sayyid/archive/2006/05/27/48522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入剖析JSP和Servlet对中文的处理</title><link>http://www.blogjava.net/Sayyid/archive/2006/05/22/47495.html</link><dc:creator>Sayyid</dc:creator><author>Sayyid</author><pubDate>Mon, 22 May 2006 09:01:00 GMT</pubDate><guid>http://www.blogjava.net/Sayyid/archive/2006/05/22/47495.html</guid><wfw:comment>http://www.blogjava.net/Sayyid/comments/47495.html</wfw:comment><comments>http://www.blogjava.net/Sayyid/archive/2006/05/22/47495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sayyid/comments/commentRss/47495.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sayyid/services/trackbacks/47495.html</trackback:ping><description><![CDATA[
		<p>　　 </p>
		<table style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellspacing="0" cellpadding="0" width="575" border="0">
				<tbody>
						<tr>
								<td style="FONT-SIZE: 12pt; COLOR: #ff6600" align="middle" height="32">深入剖析JSP和Servlet对中文的处理</td>
						</tr>
						<tr>
								<td align="middle" bgcolor="#f7f7f7" height="25">作者：未知  来源：转载<a href="http://www.sucai.com/article/show.asp?id=8142">http://www.sucai.com/article/show.asp?id=8142</a></td>
						</tr>
				</tbody>
		</table>
		<br />        世界上的各地区都有本地的语言。地区差异直接导致了语言环境的差异。在开发一个国际化程序的过程中，处理语言问题就显得很重要了。
<p>　　这是一个世界范围内都存在的问题，所以，Java提供了世界性的解决方法。本文描述的方法是用于处理中文的，但是，推而广之，对于处理世界上其它国家和地区的语言同样适用。</p><p>　　汉字是双字节的。所谓双字节是指一个双字要占用两个BYTE的位置（即16位），分别称为高位和低位。中国规定的汉字编码为GB2312，这是强制性的，目前几乎所有的能处理中文的应用程序都支持GB2312。GB2312包括了一二级汉字和9区符号，高位从0xa1到0xfe，低位也是从0xa1到0xfe，其中，汉字的编码范围为0xb0a1到0xf7fe。</p><p>　　另外有一种编码，叫做GBK，但这是一份规范，不是强制的。GBK提供了20902个汉字，它兼容GB2312，编码范围为0x8140到0xfefe。GBK中的所有字符都可以一一映射到Unicode 2.0。</p><p>　　在不久的将来，中国会颁布另一种标准：GB18030-2000（GBK2K）。它收录了藏、蒙等少数民族的字型，从根本上解决了字位不足的问题。注意：它不再是定长的。其二字节部份与GBK兼容，四字节部分是扩充的字符、字形。它的首字节和第三字节从0x81到0xfe，二字节和第四字节从0x30到0x39。</p><p>　　本文不打算介绍Unicode，有兴趣的可以浏览“http://www.unicode.org/”查看更多的信息。Unicode有一个特性：它包括了世界上所有的字符字形。所以，各个地区的语言都可以建立与Unicode的映射关系，而Java正是利用了这一点以达到异种语言之间的转换。</p><p>　　在JDK中，与中文相关的编码有：</p><p>　　表1　JDK中与中文相关的编码列表<br /></p><table style="WIDTH: 675px; HEIGHT: 167px" cellspacing="0" cellpadding="0" width="675" align="center" border="1"><tbody><tr><td>编码名称</td><td>说明</td></tr><tr><td>ASCII</td><td>7位，与ascii7相同</td></tr><tr><td>ISO8859-1</td><td>8-位，与 8859_1,ISO-8859-1,ISO_8859-1,latin1...等相同</td></tr><tr><td>GB2312-80</td><td>16位，与gb2312,gb2312-1980,EUC_CN,euccn,1381,Cp1381, 1383, Cp1383, ISO2022CN,ISO2022CN_GB...等相同</td></tr><tr><td>GBK</td><td>与MS936相同，注意：区分大小写</td></tr><tr><td>UTF8</td><td>与UTF-8相同</td></tr><tr><td>GB18030</td><td>与cp1392、1392相同，目前支持的JDK很少</td></tr></tbody></table><p>　　在实际编程时，接触得比较多的是GB2312（GBK）和ISO8859-1。</p><p>　　为什么会有“?”号</p><p>　　上文说过，异种语言之间的转换是通过Unicode来完成的。假设有两种不同的语言A和B，转换的步骤为：先把A转化为Unicode，再把Unicode转化为B。</p><p>　　举例说明。有GB2312中有一个汉字“李”，其编码为“C0EE”，欲转化为ISO8859-1编码。步骤为：先把“李”字转化为Unicode，得到“674E”，再把“674E”转化为ISO8859-1字符。当然，这个映射不会成功，因为ISO8859-1中根本就没有与“674E”对应的字符。</p><p>　　当映射不成功时，问题就发生了！当从某语言向Unicode转化时，如果在某语言中没有该字符，得到的将是Unicode的代码“\uffffd”（“\u”表示是Unicode编码，）。而从Unicode向某语言转化时，如果某语言没有对应的字符，则得到的是“0x3f”（“?”）。这就是“?”的由来。</p><p>　　例如：把字符流buf =“0x80 0x40 0xb0 0xa1”进行new String(buf, "gb2312")操作，得到的结果是“\ufffd\u554a”，再println出来，得到的结果将是“?啊”，因为“0x80 0x40”是GBK中的字符，在GB2312中没有。</p><p>　　再如，把字符串String="\u00d6\u00ec\u00e9\u0046\u00bb\u00f9"进行new String (buf.getBytes("GBK"))操作，得到的结果是“3fa8aca8a6463fa8b4”，其中，“\u00d6”在“GBK”中没有对应的字符，得到“3f”，“\u00ec”对应着“a8ac”，“\u00e9”对应着“a8a6”，“0046”对应着“46”（因为这是ASCII字符），“\u00bb”没找到，得到“3f”，最后，“\u00f9”对应着“a8b4”。把这个字符串println一下，得到的结果是“?ìéF?ù”。看到没？这里并不全是问号，因为GBK与Unicode映射的内容中除了汉字外还有字符，本例就是最好的明证。</p><p>　　所以，在汉字转码时，如果发生错乱，得到的不一定都是问号噢！不过，错了终究是错了，50步和100步并没有质的差别。</p><p>　　或者会问：如果源字符集中有，而Unicode中没有，结果会如何？回答是不知道。因为我手头没有能做这个测试的源字符集。但有一点是肯定的，那就是源字符集不够规范。在Java中，如果发生这种情况，是会抛出异常的。<br /><br />　　什么是UTF</p><p>　　UTF，是Unicode Text Format的缩写，意为Unicode文本格式。对于UTF，是这样定义的：</p><p>　　（1）如果Unicode的16位字符的头9位是0，则用一个字节表示，这个字节的首位是“0”，剩下的7位与原字符中的后7位相同，如“\u0034”（0000 0000 0011 0100），用“34” (0011 0100)表示；（与源Unicode字符是相同的）；</p><p>　　（2）如果Unicode的16位字符的头5位是0，则用2个字节表示，首字节是“110”开头，后面的5位与源字符中除去头5个零后的最高5位相同；第二个字节以“10”开头，后面的6位与源字符中的低6位相同。如“\u025d”（0000 0010 0101 1101），转化后为“c99d”（1100 1001 1001 1101）；</p><p>　　（3）如果不符合上述两个规则，则用三个字节表示。第一个字节以“1110”开头，后四位为源字符的高四位；第二个字节以“10”开头，后六位为源字符中间的六位；第三个字节以“10”开头，后六位为源字符的低六位；如“\u9da7”（1001 1101 1010 0111），转化为“e9b6a7”（1110 1001 1011 0110 1010 0111）；</p><p>　　可以这么描述JAVA程序中Unicode与UTF的关系，虽然不绝对：字符串在内存中运行时，表现为Unicode代码，而当要保存到文件或其它介质中去时，用的是UTF。这个转化过程是由writeUTF和readUTF来完成的。</p><p>　　好了，基础性的论述差不多了，下面进入正题。</p><p>　　先把这个问题想成是一个黑匣子。先看黑匣子的一级表示：</p><p>input(charsetA)-&gt;process(Unicode)-&gt;output(charsetB)</p><p>　　简单，这就是一个IPO模型，即输入、处理和输出。同样的内容要经过“从charsetA到unicode再到charsetB”的转化。</p><p>　　再看二级表示：</p><p>SourceFile(jsp,java)-&gt;class-&gt;output</p><p>　　在这个图中，可以看出，输入的是jsp和java源文件，在处理过程中，以Class文件为载体，然后输出。再细化到三级表示：</p><p>jsp-&gt;temp file-&gt;class-&gt;browser,os console,db</p><p>app,servlet-&gt;class-&gt;browser,os console,db</p><p>　　这个图就更明白了。Jsp文件先生成中间的Java文件，再生成Class。而Servlet和普通App则直接编译生成Class。然后，从Class再输出到浏览器、控制台或数据库等。</p><p>　　JSP：从源文件到Class的过程</p><p>　　Jsp的源文件是以“.jsp”结尾的文本文件。在本节中，将阐述JSP文件的解释和编译过程，并跟踪其中的中文变化。</p><p>　　1、JSP/Servlet引擎提供的JSP转换工具（jspc）搜索JSP文件中用&lt;%@ page contentType ="text/html; charset=&lt;Jsp-charset&gt;"%&gt;中指定的charset。如果在JSP文件中未指定&lt;Jsp-charset&gt;，则取JVM中的默认设置file.encoding，一般情况下，这个值是ISO8859-1；</p><p>　　2、jspc用相当于“javac –encoding &lt;Jsp-charset&gt;”的命令解释JSP文件中出现的所有字符，包括中文字符和ASCII字符，然后把这些字符转换成Unicode字符，再转化成UTF格式，存为JAVA文件。ASCII码字符转化为Unicode字符时只是简单地在前面加“00”，如“A”，转化为“\u0041”（不需要理由，Unicode的码表就是这么编的）。然后，经过到UTF的转换，又变回“41”了！这也就是可以使用普通文本编辑器查看由JSP生成的JAVA文件的原因；</p><p>　　3、引擎用相当于“javac –encoding UNICODE”的命令，把JAVA文件编译成CLASS文件；</p><p>　　先看一下这些过程中中文字符的转换情况。有如下源代码：</p><p>&lt;%@ page contentType="text/html; charset=gb2312"%&gt;<br />&lt;html&gt;&lt;body&gt;<br />&lt;%<br />　String a="中文";<br />　out.println(a);<br />%&gt;<br />&lt;/body&gt;&lt;/html&gt; </p><p>　　这段代码是在UltraEdit for Windows上编写的。保存后，“中文”两个字的16进制编码为“D6 D0 CE C4”（GB2312编码）。经查表，“中文”两字的Unicode编码为“\u4E2D\u6587”，用 UTF表示就是“E4 B8 AD E6 96 87”。打开引擎生成的由JSP文件转变而成的JAVA文件，发现其中的“中文”两个字确实被“E4 B8 AD E6 96 87”替代了，再查看由JAVA文件编译生成的CLASS文件，发现结果与JAVA文件中的完全一样。</p><p>　　再看JSP中指定的CharSet为ISO-8859-1的情况。</p><p>&lt;%@ page contentType="text/html; charset=ISO-8859-1"%&gt;<br />&lt;html&gt;&lt;body&gt;<br />&lt;%<br />　String a="中文";<br />　out.println(a);<br />%&gt;<br />&lt;/body&gt;&lt;/html&gt; </p><p>　　同样，该文件是用UltraEdit编写的，“中文”这两个字也是存为GB2312编码“D6 D0 CE C4”。先模拟一下生成的JAVA文件和CLASS文件的过程：jspc用ISO-8859-1来解释“中文”，并把它映射到Unicode。由于ISO-8859-1是8位的，且是拉丁语系，其映射规则就是在每个字节前加“00”，所以，映射后的Unicode编码应为“\u00D6\u00D0\u00CE\u00C4”，转化成UTF后应该是“C3 96 C3 90 C3 8E C3 84”。好，打开文件看一下，JAVA文件和CLASS文件中，“中文”果然都表示为“C3 96 C3 90 C3 8E C3 84”。</p><p>　　如果上述代码中不指定&lt;Jsp-charset&gt;，即把第一行写成“&lt;%@ page contentType="text/html" %&gt;”，JSPC会使用file.encoding的设置来解释JSP文件。在RedHat 6.2上，其处理结果与指定为ISO-8859-1是完全相同的。</p><p>　　到现在为止，已经解释了从JSP文件到CLASS文件的转变过程中中文字符的映射过程。一句话：从“JspCharSet到Unicode再到UTF”。下表总结了这个过程：</p><p>　　表2　“中文”从JSP到CLASS的转化过程<br /></p><table style="WIDTH: 737px; HEIGHT: 142px" cellspacing="0" cellpadding="0" width="737" align="center" border="1"><tbody><tr><td>Jsp-CharSet</td><td>JSP文件中</td><td>JAVA文件中</td><td>CLASS文件中</td></tr><tr><td>GB2312</td><td>D6 D0 CE C4(GB2312)</td><td>从\u4E2D\u6587(Unicode)到E4 B8 AD E6 96 87 (UTF)</td><td>E4 B8 AD E6 96 87 (UTF)</td></tr><tr><td>ISO-8859-1</td><td>D6 D0 CE C4<br />(GB2312)</td><td>从\u00D6\u00D0\u00CE\u00C4 (Unicode)到C3 96 C3 90 C3 8E C3 84 (UTF)</td><td>C3 96 C3 90 C3 8E C3 84 (UTF)</td></tr><tr><td>无（默认＝file.encoding）</td><td>同ISO-8859-1</td><td>同ISO-8859-1</td><td>同ISO-8859-1</td></tr></tbody></table><br />　　下节先讨论Servlet从JAVA文件到CLASS文件的转化过程，然后再解释从CLASS文件如何输出到客户端。之所以这样安排，是因为JSP和Servlet在输出时处理方法是一样的。
<p>　　Servlet：从源文件到Class的过程</p><p>　　Servlet源文件是以“.java”结尾的文本文件。本节将讨论Servlet的编译过程并跟踪其中的中文变化。</p><p>　　用“javac”编译Servlet源文件。javac可以带“-encoding &lt;Compile-charset&gt;”参数，意思是“用&lt; Compile-charset &gt;中指定的编码来解释Serlvet源文件”。</p><p>　　源文件在编译时，用&lt;Compile-charset&gt;来解释所有字符，包括中文字符和ASCII字符。然后把字符常量转变成Unicode字符，最后，把Unicode转变成UTF。</p><p>　　在Servlet中，还有一个地方设置输出流的CharSet。通常在输出结果前，调用HttpServletResponse的setContentType方法来达到与在JSP中设置&lt;Jsp-charset&gt;一样的效果，称之为&lt;Servlet-charset&gt;。</p><p>　　注意，文中一共提到了三个变量：&lt;Jsp-charset&gt;、&lt;Compile-charset&gt;和&lt;Servlet-charset&gt;。其中，JSP文件只与&lt;Jsp-charset&gt;有关，而&lt;Compile-charset&gt;和&lt;Servlet-charset&gt;只与Servlet有关。</p><p>　　看下例：</p><p>import javax.servlet.*;</p><p>import javax.servlet.http.*;</p><p>class testServlet extends HttpServlet<br />{<br />　public void doGet(HttpServletRequest req,HttpServletResponse resp)<br />　throws ServletException,java.io.IOException<br />　{<br />　　resp.setContentType("text/html; charset=GB2312");<br />　　java.io.PrintWriter out=resp.getWriter();<br />　　out.println("&lt;html&gt;");<br />　　out.println("#中文#");<br />　　out.println("&lt;/html&gt;");<br />　}<br />} </p><p>　　该文件也是用UltraEdit for Windows编写的，其中的“中文”两个字保存为“D6 D0 CE C4”（GB2312编码）。</p><p>　　开始编译。下表是&lt;Compile-charset&gt;不同时，CLASS文件中“中文”两字的十六进制码。在编译过程中，&lt;Servlet-charset&gt;不起任何作用。&lt;Servlet-charset&gt;只对CLASS文件的输出产生影响，实际上是&lt;Servlet-charset&gt;和&lt;Compile-charset&gt;一起，达到与JSP文件中的&lt;Jsp-charset&gt;相同的效果，因为&lt;Jsp-charset&gt;对编译和CLASS文件的输出都会产生影响。</p><p>　　表3　“中文”从Servlet源文件到Class的转变过程<br /></p><table style="WIDTH: 721px; HEIGHT: 162px" cellspacing="0" cellpadding="0" width="721" align="center" border="1"><tbody><tr><td>Compile-charset</td><td>Servlet源文件中</td><td>Class文件中</td><td>等效的Unicode码</td></tr><tr><td>GB2312</td><td>D6 D0 CE C4 <br />(GB2312)</td><td>E4 B8 AD E6 96 87 (UTF)</td><td>\u4E2D\u6587 (在Unicode中＝“中文”)</td></tr><tr><td>ISO-8859-1</td><td>D6 D0 CE C4 <br />(GB2312)</td><td>C3 96 C3 90 C3 8E C3 84 (UTF)</td><td>\u00D6 \u00D0 \u00CE \u00C4 (在D6 D0 CE C4前面各加了一个00)</td></tr><tr><td>无（默认）</td><td>D6 D0 CE C4 (GB2312)</td><td>同ISO-8859-1</td><td>同ISO-8859-1</td></tr></tbody></table><br />　　普通Java程序的编译过程与Servlet完全一样。<br /><br />　　CLASS文件中的中文表示法是不是昭然若揭了？OK，接下来看看CLASS又是怎样输出中文的呢？<br /><br />　　Class：输出字符串<br /><br />　　上文说过，字符串在内存中表现为Unicode编码。至于这种Unicode编码表示了什么，那要看它是从哪种字符集映射过来的，也就是说要看它的祖先。这好比在托运行李时，外观都是纸箱子，里面装了什么就要看寄邮件的人实际邮了什么东西。<br /><br />　　看看上面的例子，如果给一串Unicode编码“00D6 00D0 00CE 00C4”，如果不作转换，直接用Unicode码表来对照它时，是四个字符（而且是特殊字符）；假如把它与“ISO8859-1”进行映射，则直接去掉前面的“00”即可得到“D6 D0 CE C4”，这是ASCII码表中的四个字符；而假如把它当作GB2312来进行映射，得到的结果很可能是一大堆乱码，因为在GB2312中有可能没有（也有可能有）字符与00D6等字符对应（如果对应不上，将得到0x3f，也就是问号，如果对应上了，由于00D6等字符太靠前，估计也是一些特殊符号，真正的汉字在Unicode中的编码从4E00开始）。<br /><br />　　各位看到了，同样的Unicode字符，可以解释成不同的样子。当然，这其中有一种是我们期望的结果。以上例而论，“D6 D0 CE C4”应该是我们所想要的，当把“D6 D0 CE C4”输出到IE中时，用“简体中文”方式查看，就能看到清楚的“中文”两个字了。（当然了，如果你一定要用“西欧字符”来看，那也没办法，你将得不到任何有何时何地的东西）为什么呢？因为“00D6 00D0 00CE 00C4”本来就是由ISO8859-1转化过去的。<br /><span class="f14"><font size="3">　　给出如下结论：<br /><br />　　在Class输出字符串前，会将Unicode的字符串按照某一种内码重新生成字节流，然后把字节流输入，相当于进行了一步“String.getBytes(???)”操作。???代表某一种字符集。<br /><br />　　如果是Servlet，那么，这种内码就是在HttpServletResponse.setContentType()方法中指定的内码，也就是上文定义的＜Servlet-charset＞。<br /><br />　　如果是JSP，那么，这种内码就是在＜%@ page contentType=""%＞中指定的内码，也就是上文定义的＜Jsp-charset＞。<br /><br />　　如果是Java程序，那么，这种内码就是file.encoding中指定的内码，默认为ISO8859-1。<br /><br />　　当输出对象是浏览器时<br /><br />　　以流行的浏览器IE为例。IE支持多种内码。假如IE接收到了一个字节流“D6 D0 CE C4”，你可以尝试用各种内码去查看。你会发现用“简体中文”时能得到正确的结果。因为“D6 D0 CE C4”本来就是简体中文中“中文”两个字的编码。<br /><br />　　OK，完整地看一遍。<br /><br />　　JSP：源文件为GB2312格式的文本文件，且JSP源文件中有“中文”这两个汉字<br /><br />　　如果指定了＜Jsp-charset＞为GB2312，转化过程如下表。<br /><br />　　表4　Jsp-charset = GB2312时的变化过程<br /><br /></font><table style="WIDTH: 725px; HEIGHT: 245px" cellspacing="0" cellpadding="0" width="725" align="center" border="1"><tbody><tr><td width="8%">序号</td><td width="65%">步骤说明</td><td width="27%">结果</td></tr><tr><td>1</td><td>编写JSP源文件，且存为GB2312格式</td><td>D6 D0 CE C4<br />（D6D0=中 CEC4=文）</td></tr><tr><td>2</td><td>jspc把JSP源文件转化为临时JAVA文件，并把字符串按照GB2312映射到Unicode，并用UTF格式写入JAVA文件中</td><td>E4 B8 AD E6 96 87</td></tr><tr><td>3</td><td>把临时JAVA文件编译成CLASS文件</td><td>E4 B8 AD E6 96 87</td></tr><tr><td>4</td><td>运行时，先从CLASS文件中用readUTF读出字符串，在内存中的是Unicode编码</td><td>4E 2D 65 87（在Unicode中4E2D=中 6587=文）</td></tr><tr><td>5</td><td>根据Jsp-charset=GB2312把Unicode转化为字节流</td><td>D6 D0 CE C4</td></tr><tr><td>6</td><td>把字节流输出到IE中，并设置IE的编码为GB2312（作者按：这个信息隐藏在HTTP头中）</td><td>D6 D0 CE C4</td></tr><tr><td>7</td><td>IE用“简体中文”查看结果</td><td>“中文”（正确显示）</td></tr></tbody></table><br />　　如果指定了＜Jsp-charset＞为ISO8859-1，转化过程如下表。<br /><br />　　表5　Jsp-charset = ISO8859-1时的变化过程<br /><br /><table style="WIDTH: 719px; HEIGHT: 303px" cellspacing="0" cellpadding="0" width="719" align="center" border="1"><tbody><tr><td width="7%">序号</td><td width="66%">步骤说明</td><td width="27%">结果</td></tr><tr><td>1</td><td>编写JSP源文件，且存为GB2312格式</td><td>D6 D0 CE C4<br />（D6D0=中 CEC4=文）</td></tr><tr><td>2</td><td>jspc把JSP源文件转化为临时JAVA文件，并把字符串按照ISO8859-1映射到Unicode，并用UTF格式写入JAVA文件中</td><td>C3 96 C3 90 C3 8E C3 84</td></tr><tr><td>3</td><td>把临时JAVA文件编译成CLASS文件</td><td>C3 96 C3 90 C3 8E C3 84</td></tr><tr><td>4</td><td>运行时，先从CLASS文件中用readUTF读出字符串，在内存中的是Unicode编码</td><td>00 D6 00 D0 00 CE 00 C4<br />（啥都不是！！！）</td></tr><tr><td>5</td><td>根据Jsp-charset=ISO8859-1把Unicode转化为字节流</td><td>D6 D0 CE C4</td></tr><tr><td>6</td><td>把字节流输出到IE中，并设置IE的编码为ISO8859-1（作者按：这个信息隐藏在HTTP头中）</td><td>D6 D0 CE C4</td></tr><tr><td>7</td><td>IE用“西欧字符”查看结果</td><td>乱码，其实是四个ASCII字符，但由于大于128，所以显示出来的怪模怪样</td></tr><tr><td>8</td><td>改变IE的页面编码为“简体中文”</td><td>“中文”（正确显示）</td></tr></tbody></table><br />　　奇怪了！为什么把＜Jsp-charset＞设成GB2312和ISO8859-1是一个样的，都能正确显示？因为表4表5中的第2步和第5步互逆，是相互“抵消”的。只不过当指定为ISO8859-1时，要增加第8步操作，殊为不便。<br /><br />　　再看看不指定＜Jsp-charset＞ 时的情况。<br /><br />　　表6　未指定Jsp-charset 时的变化过程<br /><br /><table style="WIDTH: 737px; HEIGHT: 261px" cellspacing="0" cellpadding="0" width="737" align="center" border="1"><tbody><tr><td width="6%">序号</td><td width="70%">步骤说明</td><td width="24%">结果</td></tr><tr><td>1</td><td>编写JSP源文件，且存为GB2312格式</td><td>D6 D0 CE C4<br />（D6D0=中 CEC4=文）</td></tr><tr><td>2</td><td>jspc把JSP源文件转化为临时JAVA文件，并把字符串按照ISO8859-1映射到Unicode，并用UTF格式写入JAVA文件中</td><td>C3 96 C3 90 C3 8E C3 84</td></tr><tr><td>3</td><td>把临时JAVA文件编译成CLASS文件</td><td>C3 96 C3 90 C3 8E C3 84</td></tr><tr><td>4</td><td>运行时，先从CLASS文件中用readUTF读出字符串，在内存中的是Unicode编码</td><td>00 D6 00 D0 00 CE 00 C4</td></tr><tr><td>5</td><td>根据Jsp-charset=ISO8859-1把Unicode转化为字节流</td><td>D6 D0 CE C4</td></tr><tr><td>6</td><td>把字节流输出到IE中</td><td>D6 D0 CE C4</td></tr><tr><td>7</td><td>IE用发出请求时的页面的编码查看结果</td><td>视情况而定。如果是简体中文，则能正确显示，否则，需执行表5中的第8步</td></tr></tbody></table><br />　　Servlet：源文件为JAVA文件，格式是GB2312，源文件中含有“中文”这两个汉字<br /><br />　　如果＜Compile-charset＞＝GB2312，＜Servlet-charset＞=GB2312<br /><br />　　表7　Compile-charset=Servlet-charset=GB2312 时的变化过程<br /><br /><table cellspacing="0" cellpadding="0" width="90%" align="center" border="1"><tbody><tr><td>序号</td><td>步骤说明</td><td>结果</td></tr><tr><td>1</td><td>编写Servlet源文件，且存为GB2312格式</td><td>D6 D0 CE C4<br />（D6D0=中 CEC4=文）</td></tr><tr><td>2</td><td>用javac –encoding GB2312把JAVA源文件编译成CLASS文件</td><td>E4 B8 AD E6 96 87　（UTF）</td></tr><tr><td>3</td><td>运行时，先从CLASS文件中用readUTF读出字符串，在内存中的是Unicode编码</td><td>4E 2D 65 87 (Unicode)</td></tr><tr><td>4</td><td>根据Servlet-charset=GB2312把Unicode转化为字节流</td><td>D6 D0 CE C4 (GB2312)</td></tr><tr><td>5</td><td>把字节流输出到IE中并设置IE的编码属性为Servlet-charset=GB2312</td><td>D6 D0 CE C4 (GB2312)</td></tr><tr><td>6</td><td>IE用“简体中文”查看结果</td><td>“中文”（正确显示）</td></tr></tbody></table><br />　　如果＜Compile-charset＞＝ISO8859-1，＜Servlet-charset＞=ISO8859-1<br /><br />　　表8　Compile-charset=Servlet-charset=ISO8859-1时的变化过程<br /><br /><table style="WIDTH: 689px; HEIGHT: 260px" cellspacing="0" width="689" align="center" border="1"><tbody><tr><td>序号</td><td>步骤说明</td><td>结果</td></tr><tr><td>1</td><td>编写Servlet源文件，且存为GB2312格式</td><td>D6 D0 CE C4<br />（D6D0=中 CEC4=文）</td></tr><tr><td>2</td><td>用javac –encoding ISO8859-1把JAVA源文件编译成CLASS文件</td><td>C3 96 C3 90 C3 8E C3 84　（UTF）</td></tr><tr><td>3</td><td>运行时，先从CLASS文件中用readUTF读出字符串，在内存中的是Unicode编码</td><td>00 D6 00 D0 00 CE 00 C4</td></tr><tr><td>4</td><td>根据Servlet-charset=ISO8859-1把Unicode转化为字节流</td><td>D6 D0 CE C4</td></tr><tr><td>5</td><td>把字节流输出到IE中并设置IE的编码属性为Servlet-charset=ISO8859-1</td><td>D6 D0 CE C4 (GB2312)</td></tr><tr><td>6</td><td>IE用“西欧字符”查看结果</td><td>乱码（原因同表5）</td></tr><tr><td>7</td><td>改变IE的页面编码为“简体中文”</td><td>“中文”（正确显示）</td></tr></tbody></table><br />　　如果不指定Compile-charset或Servlet-charset，其默认值均为ISO8859-1。<br /><br />　　当Compile-charset=Servlet-charset时，第2步和第4步能互逆，“抵消”，显示结果均能正确。读者可试着写一下Compile-charset＜＞Servlet-charset时的情况，肯定是不正确的。<br /><br />　　当输出对象是数据库时<br /><br />　　输出到数据库时，原理与输出到浏览器也是一样的。本节只是Servlet为例，JSP的情况请读者自行推导。<br /><br />　　假设有一个Servlet，它能接收来自客户端（IE，简体中文）的汉字字符串，然后把它写入到内码为ISO8859-1的数据库中，然后再从数据库中取出这个字符串，显示到客户端。<br /><br />　　表9　输出对象是数据库时的变化过程（1）<br /><br /><table cellspacing="0" cellpadding="0" width="90%" align="center" border="1"><tbody><tr><td width="6%">序号</td><td width="62%">步骤说明</td><td width="25%">结果</td><td width="7%">域</td></tr><tr><td>1</td><td>在IE中输入“中文”</td><td>D6 D0 CE C4</td><td rowspan="2">IE</td></tr><tr><td>2</td><td>IE把字符串转变成UTF，并送入传输流中</td><td>E4 B8 AD E6 96 87</td></tr><tr><td>3</td><td>Servlet接收到输入流，用readUTF读取</td><td>4E 2D 65 87(unicode)</td><td rowspan="4">Servlet</td></tr><tr><td>4</td><td>编程者在Servlet中必须把字符串根据GB2312还原为字节流</td><td>D6 D0 CE C4</td></tr><tr><td>5</td><td>编程者根据数据库内码ISO8859-1生成新的字符串</td><td>00 D6 00 D0 00 CE 00 C4</td></tr><tr><td>6</td><td>把新生成的字符串提交给JDBC</td><td>00 D6 00 D0 00 CE 00 C4</td></tr><tr><td>7</td><td>JDBC检测到数据库内码为ISO8859-1</td><td>00 D6 00 D0 00 CE 00 C4</td><td rowspan="4">JDBC</td></tr><tr><td>8</td><td>JDBC把接收到的字符串按照ISO8859-1生成字节流</td><td>D6 D0 CE C4</td></tr><tr><td>9</td><td>JDBC把字节流写入数据库中</td><td>D6 D0 CE C4</td></tr><tr><td>10</td><td>完成数据存储工作</td><td>D6 D0 CE C4 数据库</td></tr><tr><td colspan="4"><div align="center">以下是从数据库中取出数的过程</div></td></tr><tr><td>11</td><td>JDBC从数据库中取出字节流</td><td>D6 D0 CE C4</td><td>JDBC</td></tr><tr><td>12</td><td>JDBC按照数据库的字符集ISO8859-1生成字符串，并提交给Servlet</td><td>00 D6 00 D0 00 CE 00 C4 (Unicode)</td><td> </td></tr><tr><td>13</td><td>Servlet获得字符串</td><td>00 D6 00 D0 00 CE 00 C4 (Unicode)</td><td>Servlet</td></tr><tr><td>14</td><td>编程者必须根据数据库的内码ISO8859-1还原成原始字节流</td><td>D6 D0 CE C4</td><td> </td></tr><tr><td>15</td><td>编程者必须根据客户端字符集GB2312生成新的字符串</td><td>4E 2D 65 87<br />（Unicode）</td><td> </td></tr><tr><td colspan="4"><div align="center">Servlet准备把字符串输出到客户端</div></td></tr><tr><td>16</td><td>Servlet根据＜Servlet-charset＞生成字节流</td><td>D6D0 CE C4</td><td rowspan="2">Servlet</td></tr><tr><td>17</td><td>Servlet把字节流输出到IE中，如果已指定＜Servlet-charset＞，还会设置IE的编码为＜Servlet-charset＞</td><td>D6 D0 CE C4</td></tr><tr><td>18</td><td>IE根据指定的编码或默认编码查看结果</td><td>“中文”（正确显示）</td><td>IE</td></tr></tbody></table><br />　　解释一下，表中第4第5步和第15第16步是用红色标记的，表示要由编码者来作转换。第4、5两步其实就是一句话：“new String(source.getBytes("GB2312"), "ISO8859-1")”。第15、16两步也是一句话：“new String(source.getBytes("ISO8859-1"), "GB2312")”。亲爱的读者，你在这样编写代码时是否意识到了其中的每一个细节呢？<br /><br />　　至于客户端内码和数据库内码为其它值时的流程，和输出对象是系统控制台时的流程，请读者自己想吧。明白了上述流程的原理，相信你可以轻松地写出来。<br /><br />　　行文至此，已可告一段落了。终点又回到了起点，对于编程者而言，几乎是什么影响都没有。<br /><br />　　因为我们早就被告之要这么做了。<br /><br />　　以下给出一个结论，作为结尾。<br /><br />　　1、 在Jsp文件中，要指定contentType，其中，charset的值要与客户端浏览器所用的字符集一样；对于其中的字符串常量，不需做任何内码转换；对于字符串变量，要求能根据ContentType中指定的字符集还原成客户端能识别的字节流，简单地说，就是“字符串变量是基于＜Jsp-charset＞字符集的”；<br /><br />　　2、 在Servlet中，必须用HttpServletResponse.setContentType()设置charset，且设置成与客户端内码一致；对于其中的字符串常量，需要在Javac编译时指定encoding，这个encoding必须与编写源文件的平台的字符集一样，一般说来都是GB2312或GBK；对于字符串变量，与JSP一样，必须“是基于＜Servlet-charset＞字符集的”。</span><img src ="http://www.blogjava.net/Sayyid/aggbug/47495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sayyid/" target="_blank">Sayyid</a> 2006-05-22 17:01 <a href="http://www.blogjava.net/Sayyid/archive/2006/05/22/47495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对于初学者学习Java语言的建议(转载)</title><link>http://www.blogjava.net/Sayyid/archive/2006/05/04/44491.html</link><dc:creator>Sayyid</dc:creator><author>Sayyid</author><pubDate>Wed, 03 May 2006 17:15:00 GMT</pubDate><guid>http://www.blogjava.net/Sayyid/archive/2006/05/04/44491.html</guid><wfw:comment>http://www.blogjava.net/Sayyid/comments/44491.html</wfw:comment><comments>http://www.blogjava.net/Sayyid/archive/2006/05/04/44491.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sayyid/comments/commentRss/44491.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sayyid/services/trackbacks/44491.html</trackback:ping><description><![CDATA[
		<p>      都凌晨1点多了，朋友们还在玩，没有睡意，就闲着看看网页，忽然想起了前几天看的这篇文章，又找来贴出来~<br />原文出自:<a href="http://www.edayang.com/trackback.asp?tbID=10" target="_blank">http://www.eDaYang.Com/trackback.asp?tbID=10</a><br /><br />      初学者的任务是掌握Java的语言规则和养成良好的编程习惯，其次才谈到对类库使用的熟练程度，再其次是OO思想的掌握与应用，再其次就是Design Pattern的问题了。 <br />      在这里我只想介绍几个对成功完成第一个阶段很有用的资料。 <br />      以下按照循序渐进的顺序进行： <br />      1.The Java Tutorial和它的examples: <br />              <a href="ftp://ftp.javasoft.com/docs/tutorial.zip" target="_blank"><font color="#002c99">ftp://ftp.javasoft.com/docs/tutorial.zip</font></a><br />               <a href="ftp://ftp.javasoft.com/docs/tut-examples.zip" target="_blank"><font color="#002c99">ftp://ftp.javasoft.com/docs/tut-examples.zip</font></a><br />               以上资料学习完成后，请参看以下资料： <br />       2.Java2 Certification Tutorial: <br />              <a href="http://automation.seu.edu.cn/auto/content/tutorial.zip" target="_blank"><font color="#002c99">http://automation.seu.edu.cn/auto/content/tutorial.zip</font></a><br />       3.Complete Java 2 Certification Study Guide: <br /><a href="http://www.3344520.net/book/3344520...va013.zip" target="_blank"><font color="#002c99"><font color="#000000">              </font>http://www.3344520.net/book/3344520...va013.zip</font></a>&amp;id=65 <br />      以上两个资料都是备考SCJP用的，十分注重语言规范的学习与考察，可以先看2，因为2相对简练，而3讲解更加细致入微。在看以上资料的同时，你免不了写些程序，这就要用到API的手册，你用的是JDK的那个版本就去 java.sun.com 下载那个版本的doc来用就行了，全称叫：Java 2 SDK, Standard|Enterprise|Micro Edition, v1.4.0(还有其他) beta 3 Documentation. <br />     以上提供的资料都是英文资料，<font style="BACKGROUND-COLOR: #ffffff">但<font color="#000080"><font color="#ff0000"><font color="#000000">技术资料中没有复杂的语法，</font><font color="#000000">而且</font><strong>如果你想成为一个优秀的Java程序员也必须要过阅读英文资料这一关，总等着别人把新资料翻译成中文给你看，你的步伐就永远会比别人慢一步。所以，我希望处在初学阶段的朋友可以借这个机会锻炼这种读英文资料的能力</strong></font>。</font></font><br />      如果你学过C++，请在学习过程中比较两种语言的异同，会收到更好效果。当然，你也可以把C++和Java放在一起学习，有人说这样学习会出现混淆，但万事不可一概而论，有的人通过这种比较的学习方式，可能会掌握的更好。一样米养百样人，我告诉你，8爪型的都有...(抱歉，正在看鹿鼎记，串词儿了)... <br />最后希望初学者们学习顺利。 <br /></p>
<img src ="http://www.blogjava.net/Sayyid/aggbug/44491.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sayyid/" target="_blank">Sayyid</a> 2006-05-04 01:15 <a href="http://www.blogjava.net/Sayyid/archive/2006/05/04/44491.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse快捷键大全</title><link>http://www.blogjava.net/Sayyid/archive/2006/04/27/43641.html</link><dc:creator>Sayyid</dc:creator><author>Sayyid</author><pubDate>Thu, 27 Apr 2006 10:33:00 GMT</pubDate><guid>http://www.blogjava.net/Sayyid/archive/2006/04/27/43641.html</guid><wfw:comment>http://www.blogjava.net/Sayyid/comments/43641.html</wfw:comment><comments>http://www.blogjava.net/Sayyid/archive/2006/04/27/43641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sayyid/comments/commentRss/43641.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sayyid/services/trackbacks/43641.html</trackback:ping><description><![CDATA[
		<p>Eclipse快捷键大全 以前觉得这些东西没什么用，主要是那时还没用eclipse，现在刚开始用eclipse，这些东西算是配上用场了。<br />(一下内容来源于网络)<br />Ctrl+1 快速修复<br />Ctrl+D: 删除当前行 <br />Ctrl+Alt+↓ 复制当前行到下一行(复制增加)<br />Ctrl+Alt+↑ 复制当前行到上一行(复制增加)</p>
		<p>Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)<br />Alt+↑ 当前行和上面一行交互位置(同上)<br />Alt+← 前一个编辑的页面<br />Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)</p>
		<p>Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性</p>
		<p>Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)<br />Shift+Ctrl+Enter 在当前行插入空行(原理同上条)</p>
		<p>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的下拉列表(如果当前页面没有显示的用黑体表示)</p>
		<p>Ctrl+/(小键盘) 折叠当前类中的所有代码</p>
		<p>Ctrl+×(小键盘) 展开当前类中的所有代码</p>
		<p>Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)</p>
		<p>Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)</p>
		<p>Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)</p>
		<p>Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)</p>
		<p>Ctrl+Shift+F4 关闭所有打开的Editer</p>
		<p>Ctrl+Shift+X 把当前选中的文本全部变味小写</p>
		<p>Ctrl+Shift+Y 把当前选中的文本全部变为小写</p>
		<p>Ctrl+Shift+F 格式化当前代码</p>
		<p>Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)</p>
		<p>下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了)</p>
		<p>Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)</p>
		<p>Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)</p>
		<p>Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)</p>
		<p>Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)</p>
		<p>Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)</p>
		<p>Alt+Shift+I 合并变量(可能这样说有点不妥Inline)<br />Alt+Shift+V 移动函数和变量(不怎么常用)<br />Alt+Shift+Z 重构的后悔药(Undo)</p>
<img src ="http://www.blogjava.net/Sayyid/aggbug/43641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sayyid/" target="_blank">Sayyid</a> 2006-04-27 18:33 <a href="http://www.blogjava.net/Sayyid/archive/2006/04/27/43641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于 Eclipse从入门到精通</title><link>http://www.blogjava.net/Sayyid/archive/2006/03/07/34127.html</link><dc:creator>Sayyid</dc:creator><author>Sayyid</author><pubDate>Tue, 07 Mar 2006 10:12:00 GMT</pubDate><guid>http://www.blogjava.net/Sayyid/archive/2006/03/07/34127.html</guid><wfw:comment>http://www.blogjava.net/Sayyid/comments/34127.html</wfw:comment><comments>http://www.blogjava.net/Sayyid/archive/2006/03/07/34127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sayyid/comments/commentRss/34127.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sayyid/services/trackbacks/34127.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 以前看网上说这书还不错,之后去书店买了这本书,放在书架上一直没好好看,前几天大概的看了看,觉得书中主要就是讲SWT,对于不用SWT的初学者来说,帮不上很大的忙.</P><img src ="http://www.blogjava.net/Sayyid/aggbug/34127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sayyid/" target="_blank">Sayyid</a> 2006-03-07 18:12 <a href="http://www.blogjava.net/Sayyid/archive/2006/03/07/34127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习thinking  in java的困惑（求助） </title><link>http://www.blogjava.net/Sayyid/archive/2006/01/26/29237.html</link><dc:creator>Sayyid</dc:creator><author>Sayyid</author><pubDate>Thu, 26 Jan 2006 03:54:00 GMT</pubDate><guid>http://www.blogjava.net/Sayyid/archive/2006/01/26/29237.html</guid><wfw:comment>http://www.blogjava.net/Sayyid/comments/29237.html</wfw:comment><comments>http://www.blogjava.net/Sayyid/archive/2006/01/26/29237.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/Sayyid/comments/commentRss/29237.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sayyid/services/trackbacks/29237.html</trackback:ping><description><![CDATA[&nbsp; &nbsp;在大家的推荐下我买了THINKING IN JAVA&nbsp; ,可是学习了一段时间了,觉得进展不是很满意.<BR>&nbsp;&nbsp; 对于JAVA语言,我也看过几本基础的书,然后才看的THINKING IN JAVA,可是看了好久觉得很难懂.有很多东西书上讲的很详细,这些内容是其他书上都没涉及到的,我努力去理解他上面讲的每一点东西,发现越来越困难了,所以现在开始怀疑我的学习方法是否存在问题了.今天来这里向大家求助^<BR>&nbsp;&nbsp; 我想问问大家,这本书你们是怎么学习,有什么好的方法请大家指教!<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ① 看的时候是有选择的看还是精读呢???<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ② 把这本书看完大概要多少时间???<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ③&nbsp;书上有很多代码,是不是都要去看懂呢???<BR>&nbsp;&nbsp;&nbsp; 好了就先写这么一点了,等再遇上问题在来求教,希望各位有经验的朋友帮帮忙,&nbsp;在此我表示忠心的感谢!<img src ="http://www.blogjava.net/Sayyid/aggbug/29237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sayyid/" target="_blank">Sayyid</a> 2006-01-26 11:54 <a href="http://www.blogjava.net/Sayyid/archive/2006/01/26/29237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文件名与类名一致性的问题(新手、基础)</title><link>http://www.blogjava.net/Sayyid/archive/2006/01/05/26804.html</link><dc:creator>Sayyid</dc:creator><author>Sayyid</author><pubDate>Thu, 05 Jan 2006 14:31:00 GMT</pubDate><guid>http://www.blogjava.net/Sayyid/archive/2006/01/05/26804.html</guid><wfw:comment>http://www.blogjava.net/Sayyid/comments/26804.html</wfw:comment><comments>http://www.blogjava.net/Sayyid/archive/2006/01/05/26804.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sayyid/comments/commentRss/26804.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sayyid/services/trackbacks/26804.html</trackback:ping><description><![CDATA[<P>文件名与类名一致性的问题<BR>如果文件只有一个类，文件名必须与类名一致<BR>如果文件中<FONT color=#0000ff>不止一个类</FONT>，文件名必须与含public类的类名保持一致<BR>如果文件中<FONT color=#0000ff>不止一个类</FONT>，且<FONT color=#006400><STRONG>没有</STRONG></FONT>public类，文件名可以与其他类名一致<BR>如果文件中有main函数，<FONT color=#ff1493><STRONG>也有</STRONG></FONT>public类，main函数必须位于public类中<BR>如果文件中有main函数，<FONT color=#ff1493><STRONG>没有</STRONG></FONT>public类，文件名与含有main函数的类名一致<BR><FONT color=#a52a2a>注：忘了在那本书上看的，可能记得不清楚，如有问题，请指教！</FONT></P><img src ="http://www.blogjava.net/Sayyid/aggbug/26804.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sayyid/" target="_blank">Sayyid</a> 2006-01-05 22:31 <a href="http://www.blogjava.net/Sayyid/archive/2006/01/05/26804.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>