﻿<?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-konhon-随笔分类-Java</title><link>http://www.blogjava.net/konhon/category/3016.html</link><description>忘掉過去，展望未來。找回自我，超越自我。
&lt;br&gt;
&lt;b&gt;逃避不一定躲的过, 面对不一定最难过, 孤单不一定不快乐, 得到不一定能长久, 失去不一定不再拥有, 可能因为某个理由而伤心难过, 但我却能找个理由让自己快乐.&lt;/b&gt;&lt;br&gt;&lt;p&gt;
&lt;!-- Search Google --&gt;
&lt;left&gt;
&lt;form method="get" action="http://www.google.com/custom" target="google_window"&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td nowrap="nowrap" valign="top" align="left" height="32"&gt;
&lt;a href="http://www.google.com/"&gt;
&lt;img src="http://www.google.com/logos/Logo_25wht.gif" border="0" alt="Google" align="middle"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;input type="text" name="q" size="31" maxlength="255" value=""&gt;&lt;/input&gt;
&lt;input type="submit" name="sa" value="搜索"&gt;&lt;/input&gt;
&lt;input type="hidden" name="client" value="pub-5408663347953425"&gt;&lt;/input&gt;
&lt;input type="hidden" name="forid" value="1"&gt;&lt;/input&gt;
&lt;input type="hidden" name="ie" value="UTF-8"&gt;&lt;/input&gt;
&lt;input type="hidden" name="oe" value="UTF-8"&gt;&lt;/input&gt;
&lt;input type="hidden" name="cof" value="GALT:#008000;GL:1;DIV:#336699;VLC:663399;AH:center;BGC:FFFFFF;LBGC:336699;ALC:0000FF;LC:0000FF;T:000000;GFNT:0000FF;GIMP:0000FF;FORID:1;"&gt;&lt;/input&gt;
&lt;input type="hidden" name="hl" value="zh-CN"&gt;&lt;/input&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/form&gt;
&lt;/left&gt;
&lt;!-- Search Google --&gt;
</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 11:07:10 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 11:07:10 GMT</pubDate><ttl>60</ttl><item><title>文件的所有操作 </title><link>http://www.blogjava.net/konhon/archive/2007/01/30/96782.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Tue, 30 Jan 2007 11:25:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2007/01/30/96782.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/96782.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2007/01/30/96782.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/96782.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/96782.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 2 /**   3  * //FileOperate.java  4  * 文件的各种操作  5  * 杨彩 http://blog.sina.com.cn/m/yangcai  6  * 文件操作 1.0  7  */   8    9 //package common;  10   11 import java.io.*;  12   13 public class FileOperate 1...&nbsp;&nbsp;<a href='http://www.blogjava.net/konhon/archive/2007/01/30/96782.html'>阅读全文</a><img src ="http://www.blogjava.net/konhon/aggbug/96782.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2007-01-30 19:25 <a href="http://www.blogjava.net/konhon/archive/2007/01/30/96782.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[轉]prototype.js开发笔记</title><link>http://www.blogjava.net/konhon/archive/2006/07/13/58045.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Thu, 13 Jul 2006 11:53:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2006/07/13/58045.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/58045.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2006/07/13/58045.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/58045.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/58045.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 覆盖版本 1.3.1																																																								1. Prototype是什么?																																		或许你还没有用过它， prototype.js 是一个由Sam Stephenson写的JavaScript包。...&nbsp;&nbsp;<a href='http://www.blogjava.net/konhon/archive/2006/07/13/58045.html'>阅读全文</a><img src ="http://www.blogjava.net/konhon/aggbug/58045.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2006-07-13 19:53 <a href="http://www.blogjava.net/konhon/archive/2006/07/13/58045.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java網站(轉)</title><link>http://www.blogjava.net/konhon/archive/2006/06/24/54915.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Sat, 24 Jun 2006 07:24:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2006/06/24/54915.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/54915.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2006/06/24/54915.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/54915.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/54915.html</trackback:ping><description><![CDATA[<div class="postcontent">
				<p>1.<a href="http://www.theserverside.com/"><font color="#366900">TheServerside.com</font></a>  依然是地位无可动摇的CCTV1。</p>
				<p>2.<a href="http://www.infoq.com/"><font color="#366900">InfoQ.com</font></a> Floyd Marinescu 在离开 TSS 后另起炉灶，2006年中最重要推荐。视野不再局限于Java 而是包括Java,.Net, Ruby ,SOA, Agile方法等热门话题。</p>
				<p>3.<a href="http://java.sys-con.com/"><font color="#366900">JDJ的电子杂志</font></a> 在JDJ首页的最底处订阅，文章质量不低于5-7的传统三强。</p>
				<p>4.<a href="http://www.swik.net/"><font color="#366900">SWik.net</font></a>  收集了大量OpenSource Project的资源聚合。其中如Spring，Hibernate的更新度非常高，出现什么和Spring有关的blog,article,project都会马上被聚合。</p>
				<p>5.<a href="http://www-128.ibm.com/developerworks/java/"><font color="#366900">IBM DeveloperWorks</font></a> 传统、稳定的Java文章来源地。</p>
				<p>6.<a href="http://www.javaworld.com/"><font color="#366900">JavaWorld</font></a> 传统、稳定的Java文章来源地。</p>
				<p>7.<a href="http://www.onjava.com/"><font color="#366900">OnJava</font></a>  传统、稳定的Java文章来源地。</p>
				<p>8.<a href="http://artima.com/"><font color="#366900">Artima.com</font></a> 类似于TSS而略逊，其中<a href="http://www.artima.com/spotlight/"><font color="#366900">Spotlight </font></a>文章值得关注，而<a href="http://www.artima.com/news/community.jsp?forum=136"><font color="#366900">Java News</font></a>是聚合了所有其他Java站点的大聚合。</p>
				<p>9.<a href="http://www.javalobby.org/"><font color="#366900">JavaLobby</font></a>  站内的<a href="http://www.javalobby.org/forumRSS/17.xml"><font color="#366900">Announcements</font></a> 是大大小小Java  Project的发布声明区，<a href="http://www.javalobby.org/forumRSS/18032.xml"><font color="#366900">Trips and Tricks</font></a> 有很多的Tips。</p>
				<p>10. <a href="http://www.nofluffjuststuff.com/blogs_summary.jsp"><font color="#366900">No Fluff Just Stuff 的Blogs 聚合</font></a> 一直缺一个所有优秀Java Blogger的rss总聚合，NFJS这里勉强算一个。</p>
		</div><img src ="http://www.blogjava.net/konhon/aggbug/54915.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2006-06-24 15:24 <a href="http://www.blogjava.net/konhon/archive/2006/06/24/54915.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编码讨论---乱码问题之终极解决</title><link>http://www.blogjava.net/konhon/archive/2006/06/14/52624.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Wed, 14 Jun 2006 00:25:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2006/06/14/52624.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/52624.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2006/06/14/52624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/52624.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/52624.html</trackback:ping><description><![CDATA[很多人 特别是新手 做j2ee 项目中<br />总能受困于 这样或那样的编码问题<br /><br />这里讨论下 新手学习，高手指教 一起研究下<br />(以 tomcat mysql 做例子 我推荐所有的编码采用utf-8)<br /><br />1 工程<br />工程内所有的 .java .jsp .xml .txt 都有默认的编码 默认的是系统环境的编码<br />我们中文系统通常是GBK 推荐都采用utf-8 <br />utf-8 的时候 你编译 生成doc 可能会遇到乱码（特别是采用ant 的时候,生成doc你几乎100%会遇到）<br /><br />解决方法 以ant 为例子<br />编译 注意 encoding 参数<br />&lt;target name="build" &gt;<br />       &lt;mkdir dir="${build.dir}" /&gt;<br />       &lt;javac encoding="utf-8" destdir="${build.dir}" target="1.3" debug="true" deprecation="false" optimize="false" failonerror="true"&gt;<br />           &lt;src path="${src.dir}" /&gt;<br />           &lt;classpath refid="master-classpath" /&gt;<br />       &lt;/javac&gt;<br />   &lt;/target&gt;<br /><br />生成doc 注意 encoding 和 charset<br />&lt;target name="doc"&gt;<br />&lt;mkdir dir="doc" /&gt;<br />&lt;javadoc charset="utf-8" encoding="utf-8" packagenames="${packages}" sourcepath="src" destdir="doc" author="true" version="true" use="true" splitindex="true" &gt;<br />&lt;classpath refid="master-classpath" /&gt;<br />&lt;/javadoc&gt;<br />&lt;/target&gt;<br /><br />这里 的encoding 就是指的你 java 文件的编码格式 javac 和javadoc 都有这个参数<br />charset 指的是 生成 doc 后的编码方式 javadoc 的参数<br /><br />2 数据库<br />mysql 的编码最复杂 从4以后 mysql 号称支持多编码 它更灵活了 我们也更麻烦了<br />mysql 有4个级别的编码 <br />系统级<br />库级<br />表级<br />sql语句级<br />请保持采用统一的编码 推荐utf-8<br />其它数据库要简单的多 一般都是一种编码<br /><br />3 web server <br />tomcat 为例<br />tomcat server.xml 中一个参数<br />&lt;Connectorport="8080" maxHttpHeaderSize="8192"<br />maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />enableLookups="false" redirectPort="8443" acceptCount="100"<br />connectionTimeout="20000" disableUploadTimeout="true" URIncoding="utf-8"/&gt;<br />经测试 这个URIncoding 参数主要是 get 方法中采用编码<br /><br />4 jsp 显示层<br />第1条中说明了 jsp 文件本身的格式<br />很多朋友采用eclipse +myeclipse 生成jsp<br />它自动生成一个头&lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt;<br />不要误解 这句话不能保证你在ie里看到的不是乱码<br />pageEncoding它的意思是 这个页面本身采用的是 utf-8 (似乎只在eclipse 里有效果 ，我不确定)<br />为了在ie 里不乱码  你还得加一句 &lt;%@ page contentType="text/html; charset=UTF-8"%&gt;<br />它不能在(myeclispe)自动生成  推荐修改 myeclipse的模板 在下边的目录里<br />MyEclipse\eclipse\plugins\com.genuitec.eclipse.wizards_4.0.1\Templates<br />里边的jsp模版 你加上&lt;%@ page contentType="text/html; charset=${encoding}"%&gt;<br /><br />5 filter<br />自从tomcat 4 以后 网上就流传了一个SetCharacterEncodingFilter 过滤器 搜一下有很多<br />很好用 web.xml 中加入<br />&lt;filter&gt;<br /> &lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;<br /> &lt;filter-class&gt;filters.SetCharacterEncodingFilter&lt;/filter-class&gt;<br /> &lt;init-param&gt;<br /> &lt;param-name&gt;encoding&lt;/param-name&gt;<br /> &lt;param-value&gt;utf-8&lt;/param-value&gt;<br /> &lt;/init-param&gt;<br />&lt;/filter&gt;<br /> &lt;filter-mapping&gt;<br /> &lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;<br /> &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br /> &lt;/filter-mapping&gt;<br /><br />6 资源文件<br />首先保证 文件本身是utf-8<br />然后部署的时候用 native2ascii 转换 <br />这里给出 ant 里的例子<br />&lt;native2ascii encoding="utf-8" dest="${web.dir}/WEB-INF/classes" src="${src.dir}" includes="**/*.properties" /&gt;<br /><br />总结 <br />到这里 你应该彻底解决了乱码了 嘿嘿 <br />写的有点乱 还请高手们多指点 <br /><img src ="http://www.blogjava.net/konhon/aggbug/52624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2006-06-14 08:25 <a href="http://www.blogjava.net/konhon/archive/2006/06/14/52624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>论坛问题集锦</title><link>http://www.blogjava.net/konhon/archive/2006/03/24/37228.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Fri, 24 Mar 2006 07:39:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2006/03/24/37228.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/37228.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2006/03/24/37228.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/37228.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/37228.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 以下问题是这一期间回答waterlily 关于java的一些整理，发现对大家都很有作用，现在将这些详细讲解的程序单独列出来供大家参考，学习，讨论------------------------------------------------------------1.使用jdbc连接数据库--通过jdbc连接数据库，将SQL语句运行结果打印到控制台package Connect...&nbsp;&nbsp;<a href='http://www.blogjava.net/konhon/archive/2006/03/24/37228.html'>阅读全文</a><img src ="http://www.blogjava.net/konhon/aggbug/37228.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2006-03-24 15:39 <a href="http://www.blogjava.net/konhon/archive/2006/03/24/37228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>全面解析JDBC(四)</title><link>http://www.blogjava.net/konhon/archive/2006/03/23/36985.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Thu, 23 Mar 2006 01:46:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2006/03/23/36985.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/36985.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2006/03/23/36985.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/36985.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/36985.html</trackback:ping><description><![CDATA[<table height="726" cellspacing="0" cellpadding="2" width="100%" bgcolor="#cccccc" border="0">
				<tbody>
						<tr>
								<td class="title" style="WORD-BREAK: break-all" valign="center" align="middle" bgcolor="#ffffff" height="36">
										<strong>全面解析JDBC(四)</strong>
								</td>
						</tr>
						<tr>
								<td style="WORD-BREAK: break-all" valign="center" align="right" bgcolor="#ffffff" height="40">作者：未知     文章来源：<a href="http://www.jspcn.net/" target="_blank"><font color="#002c99">www.jspcn.net</font></a><br />访问次数： <iframe name="ad" src="../count.jsp?news_id=2815" frameborder="0" width="30" scrolling="no" height="10"></iframe>次    加入时间：2005-01-19</td>
						</tr>
						<tr>
								<td valign="top" align="left" bgcolor="#cccccc" height="2">
								</td>
						</tr>
						<tr>
								<td style="WORD-BREAK: break-all" valign="top" align="left" bgcolor="#ffffff" height="649">
										<table height="92%" cellspacing="0" cellpadding="6" width="100%" border="0">
												<tbody>
														<tr>
																<td class="content" valign="top" align="left" height="623">如何利用JDBC发送SQL语句？<br /><br />　　Statement对象用于将SQL语句发送到数据库中。实际上有三种Statement对象，它们都作为在给定连接上执行SQL语句的包容器：Statement、PreparedStatement（它从Statement继承而来）和CallableStatement（它从PreparedStatement继承而来）。它们都专用于发送特定类型的SQL语句：Statement对象用于执行不带参数的简单SQL语句；PreparedStatement对象用于执行带或不带IN参数的预编译SQL语句；CallableStatement对象用于执行对数据库已存储过程的调用。<br /><br />　　Statement接口提供了执行语句和获取结果的基本方法；PreparedStatement接口添加了处理IN参数的方法；而CallableStatement添加了处理OUT参数的方法。<br /><br />　　1. 创建Statement对象<br /><br />　　建立了到特定数据库的连接之后，就可用该连接发送SQL语句。Statement对象用Connection的方法createStatement创建，如下列代码段中所示：<br /><br />Connection con = DriverManager.getConnection（url，"sunny"，""）；<br />Statement stmt = con.createStatement（）；<br /><br /><br />　　为了执行Statement对象，被发送到数据库的SQL语句将被作为参数提供给Statement的方法：<br /><br />　　ResultSet rs = stmt.executeQuery（"SELECT a，b，c FROM Table2"）；<br /><br />　　2. 使用Statement对象执行语句<br /><br />　　Statement接口提供了三种执行SQL语句的方法：executeQuery、executeUpdate和execute。使用哪一个方法由SQL语句所产生的内容决定。<br /><br />　　方法executeQuery用于产生单个结果集的语句，例如SELECT语句。方法executeUpdate用于执行INSERT、UPDATE或DELETE语句以及SQL DDL（数据定义语言）语句，例如CREATE TABLE和DROP TABLE。INSERT、UPDATE或DELETE语句的效果是修改表中零行或多行中的一列或多列。executeUpdate的返回值是一个整数，指示受影响的行数（即更新计数）。对于CREATE TABLE或DROP TABLE等不操作行的语句，executeUpdate的返回值总为零。<br /><br />　　执行语句的所有方法都将关闭所调用的Statement对象的当前打开结果集（如果存在）。这意味着在重新执行Statement对象之前，需要完成对当前ResultSet对象的处理。应注意，继承了Statement接口中所有方法的PreparedStatement接口都有自己的executeQuery、executeUpdate和execute方法。Statement对象本身不包含SQL语句，因而必须给Statement.execute方法提供SQL语句作为参数。PreparedStatement对象并不需要SQL语句作为参数提供给这些方法，因为它们已经包含预编译SQL语句。<br /><br />　　CallableStatement对象继承这些方法的PreparedStatement形式。对于这些方法的PreparedStatement或CallableStatement版本，使用查询参数将抛出SQLException。<br /><br />　　3. 语句完成<br /><br />　　当连接处于自动提交模式时，其中所执行的语句在完成时将自动提交或还原。语句在已执行且所有结果返回时，即认为已完成。对于返回一个结果集的executeQuery方法，在检索完ResultSet对象的所有行时该语句完成。对于方法executeUpdate，当它执行时语句即完成。但在少数调用方法execute的情况中，在检索所有结果集或它生成的更新计数之后语句才完成。<br /><br />　　有些DBMS将已存储过程中的每条语句视为独立的语句；而另外一些则将整个过程视为一个复合语句。在启用自动提交时，这种差别就变得非常重要，因为它影响什么时候调用commit方法。在前一种情况中，每条语句单独提交；在后一种情况中，所有语句同时提交。<br /><br />　　4. 关闭Statement对象<br /><br />　　Statement对象将由Java垃圾收集程序自动关闭。而作为一种好的编程风格，应在不需要Statement对象时显式地关闭它们。这将立即释放DBMS资源，有助于避免潜在的内存问题。<br /><br />　　5. 使用方法execute<br /><br />　　execute方法应该仅在语句能返回多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的组合时使用。当执行某个已存储过程或动态执行未知SQL字符串（即应用程序程序员在编译时未知）时，有可能出现多个结果的情况，尽管这种情况很少见。例如，用户可能执行一个已存储过程，并且该已存储过程可执行更新，然后执行选择，再进行更新，再进行选择，等等。通常使用已存储过程的人应知道它所返回的内容。<br /><br />　　因为方法execute处理非常规情况，所以获取其结果需要一些特殊处理并不足为怪。例如，假定已知某个过程返回两个结果集，则在使用方法execute执行该过程后，必须调用方法getResultSet获得第一个结果集，然后调用适当的getXXX方法获取其中的值。要获得第二个结果集，需要先调用getMoreResults方法，然后再调用getResultSet方法。如果已知某个过程返回两个更新计数，则首先调用方法getUpdateCount，然后调用getMoreResults，并再次调用getUpdateCount。<br /><br />　　对于不知道返回内容，则情况更为复杂。如果结果是ResultSet对象，则方法execute返回true；如果结果是Javaint，则返回false。如果返回int，则意味着结果是更新计数或执行的语句是DL命令。在调用方法execute之后要做的第一件事情是调用getResultSet或getUpdateCount。调用方法getResultSet可以获得两个或多个ResultSet对象中第一个对象；或调用方法getUpdateCount可以获得两个或多个更新计数中第一个更新计数的内容。<br /><br />　　当SQL语句的结果不是结果集时，则方法getResultSet将返回null。这可能意味着结果是一个更新计数或没有其它结果。在这种情况下，判断null真正含义的唯一方法是调用方法getUpdateCount，它将返回一个整数。这个整数为调用语句所影响的行数；如果为-1则表示结果是结果集或没有结果。如果方法getResultSet已返回null（表示结果不是ResultSet对象），则返回值-1表示没有其它结果。也就是说，当下列条件为真时表示没有结果（或没有其它结果）： <br /><br />　　（（stmt.getResultSet（）==null）&amp;&amp;（stmt.getUpdateCount（）==-1））<br /><br />　　如果已经调用方法getResultSet并处理了它返回的ResultSet对象，则有必要调用方法getMoreResults以确定是否有其它结果集或更新计数。如果getMoreResults返回true，则需要再次调用getResultSet来检索下一个结果集。如上所述，如果getResultSet返回null，则需要调用getUpdateCount来检查null是表示结果为更新计数还是表示没有其它结果。<br /><br />　　当getMoreResults返回false时，它表示该SQL语句返回一个更新计数或没有其它结果。因此需要调用方法getUpdateCount来检查它是哪一种情况。在这种情况下，当下列条件为真时表示没有其它结果：<br /><br />　　（（stmt.getMoreResults（）==false）&amp;&amp;（stmt.getUpdateCount（）==-1））<br /><br />　　下面的代码演示了一种方法用来确认已访问调用方法execute所产生的全部结果集和更新计数：<br /><br />stmt.execute（queryStringWithUnknownResults）；<br />while（true）{<br />introwCount=stmt.getUpdateCount（）；<br />if（rowCount＞0）{//它是更新计数<br />System.out.println（"Rows changed="+count）；<br />stmt.getMoreResults（）；<br />continue；<br />}<br />if（rowCount==0）{//DDL命令或0个更新<br />System.out.println（"No rows changed or statement was DDL command"）；<br />stmt.getMoreResults（）；<br />continue；<br />}<br />//执行到这里，证明有一个结果集<br />//或没有其它结果<br />ResultSet rs=stmt.getResultSet（）；<br />if（rs!=null）{<br />...//使用元数据获得关于结果集列的信息<br />while（rs.next（））{<br />...//处理结果<br />stmt.getMoreResults（）；<br />continue；<br />}<br />break；//没有其它结果 <br />　</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table><img src ="http://www.blogjava.net/konhon/aggbug/36985.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2006-03-23 09:46 <a href="http://www.blogjava.net/konhon/archive/2006/03/23/36985.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>全面解析JDBC(三)</title><link>http://www.blogjava.net/konhon/archive/2006/03/23/36984.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Thu, 23 Mar 2006 01:45:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2006/03/23/36984.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/36984.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2006/03/23/36984.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/36984.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/36984.html</trackback:ping><description><![CDATA[<table height="726" cellspacing="0" cellpadding="2" width="100%" bgcolor="#cccccc" border="0">
				<tbody>
						<tr>
								<td class="title" style="WORD-BREAK: break-all" valign="center" align="middle" bgcolor="#ffffff" height="36">
										<strong>全面解析JDBC(三)</strong>
								</td>
						</tr>
						<tr>
								<td style="WORD-BREAK: break-all" valign="center" align="right" bgcolor="#ffffff" height="40">作者：未知     文章来源：<a href="http://www.jspcn.net/" target="_blank"><font color="#002c99">www.jspcn.net</font></a><br />访问次数： <iframe name="ad" src="../count.jsp?news_id=2814" frameborder="0" width="30" scrolling="no" height="10"></iframe>次    加入时间：2005-01-19</td>
						</tr>
						<tr>
								<td valign="top" align="left" bgcolor="#cccccc" height="2">
								</td>
						</tr>
						<tr>
								<td style="WORD-BREAK: break-all" valign="top" align="left" bgcolor="#ffffff" height="649">
										<table height="92%" cellspacing="0" cellpadding="6" width="100%" border="0">
												<tbody>
														<tr>
																<td class="content" valign="top" align="left" height="623">JDBC驱动管理内幕是怎么样的？<br /><br />　　DriverManager 类是 JDBC 的管理层，作用于用户和驱动程序之间。它跟踪可用的驱动程序，并在数据库和相应驱动程序之间建立连接。另外，DriverManager类也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。 <br /><br />　　对于简单的应用程序，一般程序员需要在此类中直接使用的唯一方法是DriverManager.getConnection。正如名称所示，该方法将建立与数据库的连接。JDBC允许用户调用DriverManager的方法getDriver、getDrivers和registerDriver及Driver的方法connect。但多数情况下，让DriverManager类管理建立连接的细节为上策。<br /><br />　　1. 跟踪可用驱动程序<br /><br />　　DriverManager类包含一列Driver类，它们已通过调用方法DriverManager.registerDriver对自己进行了注册。所有Driver类都必须包含有一个静态部分。它创建该类的实例，然后在加载该实例时DriverManager类进行注册。这样，用户正常情况下将不会直接调用DriverManager.registerDriver；而是在加载驱动程序时由驱动程序自动调用。加载Driver类，然后自动在DriverManager中注册的方式有两种：<br /><br />　　（1）调用方法Class.forName<br /><br />　　这将显式地加载驱动程序类。由于这与外部设置无关，因此推荐使用这种加载驱动程序的方法。以下代码加载类acme.db.Driver：Class.forName（"acme.db.Driver"）。<br /><br />　　如果将acme.db.Driver编写为加载时创建实例，并调用以该实例为参数的DriverManager.registerDriver（本该如此），则它在DriverManager的驱动程序列表中，并可用于创建连接。<br /><br />　　（2）将驱动程序添加到Java.lang.System的属性jdbc.drivers中<br /><br />　　这是一个由DriverManager类加载的驱动程序类名的列表，由冒号分隔：初始化DriverManager类时，它搜索系统属性jdbc.drivers，如果用户已输入了一个或多个驱动程序，则DriverManager类将试图加载它们。以下代码说明程序员如何在~/.hotJava/properties中输入三个驱动程序类（启动时，HotJava将把它加载到系统属性列表中）：<br /><br />　　jdbc.drivers=foo.bah.Driver：wombat.sql.Driver：bad.test.ourDriver；<br /><br />　　对DriverManager方法的第一次调用将自动加载这些驱动程序类。注意：加载驱动程序的第二种方法需要持久的预设环境。如果对这一点不能保证，则调用方法Class.forName显式地加载每个驱动程序就显得更为安全。这也是引入特定驱动程序的方法，因为一旦DriverManager类被初始化，它将不再检查jdbc.drivers属性列表。<br /><br />　　在以上两种情况中，新加载的Driver类都要通过调用DriverManager.registerDriver类进行自我注册。如上所述，加载类时将自动执行这一过程。<br /><br />　　由于安全方面的原因，JDBC管理层将跟踪哪个类加载器提供哪个驱动程序。这样，当DriverManager类打开连接时，它仅使用本地文件系统或与发出连接请求的代码相同的类加载器提供的驱动程序。<br /><br />　　2. 建立连接<br /><br />　　加载Driver类并在DriverManager类中注册后，它们即可用来与数据库建立连接。当调用DriverManager.getConnection方法发出连接请求时，DriverManager将检查每个驱动程序，查看它是否可以建立连接。<br /><br />　　有时可能有多个JDBC驱动程序可以与给定的URL连接。例如，与给定远程数据库连接时，可以使用JDBC-ODBC桥驱动程序、JDBC到通用网络协议驱动程序或数据库厂商提供的驱动程序。在这种情况下测试驱动程序的顺序至关重要，因为DriverManager将使用它所找到的第一个可以成功连接到给定URL的驱动程序。<br /><br />　　首先DriverManager试图按注册的顺序使用每个驱动程序（jdbc.drivers中列出的驱动程序总是先注册）。它将跳过代码不可信任的驱动程序，除非加载它们的源与试图打开连接的代码的源相同。它通过轮流在每个驱动程序上调用方法Driver.connect，并向它们传递用户开始传递给方法DriverManager.getConnection的URL来对驱动程序进行测试，然后连接第一个认出该URL的驱动程序。这种方法初看起来效率不高，但由于不可能同时加载数十个驱动程序，因此每次连接实际只需几个过程调用和字符串比较。<br /><br />　　以下代码是通常情况下用驱动程序（例如JDBC-ODBC桥驱动程序）建立连接所需所有步骤的示例：<br /><br /><br /><br />Class.forName（"sun.jdbc.odbc.JdbcOdbcDriver"）；//加载驱动程序<br />String url = "jdbc：odbc：fred"；<br />DriverManager.getConnection（url，"userID"，"passwd"）； <br /></td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table><img src ="http://www.blogjava.net/konhon/aggbug/36984.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2006-03-23 09:45 <a href="http://www.blogjava.net/konhon/archive/2006/03/23/36984.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>全面解析JDBC(一)</title><link>http://www.blogjava.net/konhon/archive/2006/03/23/36982.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Thu, 23 Mar 2006 01:44:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2006/03/23/36982.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/36982.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2006/03/23/36982.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/36982.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/36982.html</trackback:ping><description><![CDATA[<table height="726" cellspacing="0" cellpadding="2" width="100%" bgcolor="#cccccc" border="0">
				<tbody>
						<tr>
								<td class="title" style="WORD-BREAK: break-all" valign="center" align="middle" bgcolor="#ffffff" height="36">
										<strong>全面解析JDBC(一)</strong>
								</td>
						</tr>
						<tr>
								<td style="WORD-BREAK: break-all" valign="center" align="right" bgcolor="#ffffff" height="40">作者：未知     文章来源：<a href="http://www.jspcn.net/" target="_blank">www.jspcn.net</a><br />访问次数： <iframe name="ad" src="../count.jsp?news_id=2812" frameborder="0" width="30" scrolling="no" height="10"></iframe>次    加入时间：2005-01-19</td>
						</tr>
						<tr>
								<td valign="top" align="left" bgcolor="#cccccc" height="2">
								</td>
						</tr>
						<tr>
								<td style="WORD-BREAK: break-all" valign="top" align="left" bgcolor="#ffffff" height="649">
										<table height="92%" cellspacing="0" cellpadding="6" width="100%" border="0">
												<tbody>
														<tr>
																<td class="content" valign="top" align="left" height="623">综述：Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API，对实现与数据库连接的服务提供商而言是接口模型。作为API，JDBC为程序开发提供标准的接口，并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准，如ODBC之间的桥接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。<br /><br />　　如何选择合适的JDBC产品？<br /><br />　　有关JDBC最新的信息，有兴趣的读者可以查阅JDBC的官方网站--即JavaSoft的主页，其URL为：http：//Java.sun.com/products/jdbc<br /><br />　　1. JavaSoft框架<br /><br />　　JavaSoft提供三种JDBC产品组件，它们是Java开发工具包（JDK）的组成部份：JDBC驱动程序管理器、JDBC驱动程序测试工具包和JDBC-ODBC桥。<br /><br />　　JDBC驱动程序管理器是JDBC体系结构的支柱。它实际上很小，也很简单；其主要作用是把Java应用程序连接到正确的JDBC驱动程序上，然后即退出。<br /><br />　　JDBC驱动程序测试工具包为使JDBC驱动程序运行您的程序提供一定的可信度。只有通过JDBC驱动程序测试的驱动程序才被认为是符合JDBC标准TM的。<br /><br />　　JDBC-ODBC桥使ODBC驱动程序可被用作JDBC驱动程序。它的实现为JDBC的快速发展提供了一条途径，其长远目标提供一种访问某些不常见的DBMS（如果对这些不常见的DBMS未实现JDBC）的方法。<br /><br />　　2. JDBC驱动程序的类型<br /><br />　　目前比较常见的JDBC驱动程序可分为以下四个种类：<br /><br />　　（1）JDBC-ODBC桥加ODBC驱动程序<br /><br />　　JavaSoft桥产品利用ODBC驱动程序提供JDBC访问。注意，必须将ODBC二进制代码（许多情况下还包括数据库客户机代码）加载到使用该驱动程序的每个客户机上。因此，这种类型的驱动程序最适合于企业网（这种网络上客户机的安装不是主要问题），或者是用Java编写的三层结构的应用程序服务器代码。<br /><br />　　（2）本地API<br /><br />　　这种类型的驱动程序把客户机API上的JDBC调用转换为Oracle、Sybase、Informix、DB2或其它DBMS的调用。注意，象桥驱动程序一样，这种类型的驱动程序要求将某些二进制代码加载到每台客户机上。<br /><br />　　（3）JDBC网络纯Java驱动程序<br /><br />　　这种驱动程序将JDBC转换为与DBMS无关的网络协议，之后这种协议又被某个服务器转换为一种DBMS协议。这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上。所用的具体协议取决于提供者。通常，这是最为灵活的JDBC驱动程序。有可能所有这种解决方案的提供者都提供适合于Intranet用的产品。为了使这些产品也支持Internet访问，它们必须处理Web所提出的安全性、通过防火墙的访问等方面的额外要求。几家提供者正将JDBC驱动程序加到他们现有的数据库中间件产品中。<br /><br />　　（4）本地协议纯Java驱动程序<br /><br />　　这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。这将允许从客户机机器上直接调用DBMS服务器，是Intranet访问的一个很实用的解决方法。由于许多这样的协议都是专用的，因此数据库提供者自己将是主要来源，有几家提供者已在着手做这件事了。<br /><br />　　据专家预计第（3）、（4）类驱动程序将成为从JDBC访问数据库的首方法。第（1）、（2）类驱动程序在直接的纯Java驱动程序还没有上市前会作为过渡方案来使用。对第（1）、（2）类驱动程序可能会有一些变种，这些变种要求有连接器，但通常这些是更加不可取的解决方案。第（3）、（4）类驱动程序提供了Java的所有优点，包括自动安装（例如，通过使用JDBC驱动程序的appletapplet来下载该驱动程序）。<br /><br />　　3. JDBC驱动程序的获取<br /><br /><br /><br />　　目前已有几十个（1）类的驱动程序，即可与Javasoft桥联合使用的ODBC驱动程序的驱动程序。有大约十多个属于种类（2）的驱动程序是以DBMS的本地API为基础编写的。只有几个属于种类（3）的驱动程序，其首批提供者是SCO、OpenHorizon、Visigenic和WebLogic。此外，JavaSoft和数据库连接的领先提供者Intersolv还合作研制了JDBC-ODBC桥和JDBC驱动程序测试工具包。<br /></td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table><img src ="http://www.blogjava.net/konhon/aggbug/36982.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2006-03-23 09:44 <a href="http://www.blogjava.net/konhon/archive/2006/03/23/36982.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>全面解析JDBC(二)</title><link>http://www.blogjava.net/konhon/archive/2006/03/23/36983.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Thu, 23 Mar 2006 01:44:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2006/03/23/36983.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/36983.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2006/03/23/36983.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/36983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/36983.html</trackback:ping><description><![CDATA[<table height="726" cellspacing="0" cellpadding="2" width="100%" bgcolor="#cccccc" border="0">
				<tbody>
						<tr>
								<td class="title" style="WORD-BREAK: break-all" valign="center" align="middle" bgcolor="#ffffff" height="36">
										<strong>全面解析JDBC(二)</strong>
								</td>
						</tr>
						<tr>
								<td style="WORD-BREAK: break-all" valign="center" align="right" bgcolor="#ffffff" height="40">作者：未知     文章来源：<a href="http://www.jspcn.net/" target="_blank"><font color="#002c99">www.jspcn.net</font></a><br />访问次数： <iframe name="ad" src="../count.jsp?news_id=2813" frameborder="0" width="30" scrolling="no" height="10"></iframe>次    加入时间：2005-01-19</td>
						</tr>
						<tr>
								<td valign="top" align="left" bgcolor="#cccccc" height="2">
								</td>
						</tr>
						<tr>
								<td style="WORD-BREAK: break-all" valign="top" align="left" bgcolor="#ffffff" height="649">
										<table height="92%" cellspacing="0" cellpadding="6" width="100%" border="0">
												<tbody>
														<tr>
																<td class="content" valign="top" align="left" height="623">如何建立JDBC连接？<br /><br />　　Connection 对象代表与数据库的连接。连接过程包括所执行的 SQL 语句和在该连接上所返回的结果。一个应用程序可与单个数据库有一个或多个连接，或者可与许多数据库有连接。<br /><br />　　1. 打开连接<br /><br />　　与数据库建立连接的标准方法是调用DriverManager.getConnection方法。该方法接受含有某个URL的字符串。DriverManager类（即所谓的JDBC管理层）将尝试找到可与那个URL所代表的数据库进行连接的驱动程序。DriverManager类存有已注册的Driver类的清单。当调用方法getConnection时，它将检查清单中的每个驱动程序，直到找到可与URL中指定的数据库进行连接的驱动程序为止。Driver的方法connect使用这个URL来建立实际的连接。<br /><br />　　用户可绕过JDBC管理层直接调用Driver方法。这在以下特殊情况下将很有用：当两个驱动器可同时连接到数据库中，而用户需要明确地选用其中特定的驱动器。但一般情况下，让DriverManager类处理打开连接这种事将更为简单。<br /><br />　　下述代码显示如何打开一个与位于URL"jdbc：odbc：wombat"的数据库的连接。所用的用户标识符为"freely"，口令为"ec"：<br /><br />　　String url = "jdbc：odbc：wombat"；<br />　　Connection con = DriverManager.getConnection（url， "freely"， "ec"）；<br /><br />　　2. 一般用法的URL<br /><br />　　由于URL常引起混淆，我们将先对一般URL作简单说明，然后再讨论JDBCURL。URL（统一资源定位符）提供在Internet上定位资源所需的信息。可将它想象为一个地址。URL的第一部份指定了访问信息所用的协议，后面总是跟着冒号。常用的协议有"ftp"（代表"文件传输协议"）和"http"（代表"超文本传输协议"）。如果协议是"file"，表示资源是在某个本地文件系统上而非在Internet上（下例用于表示我们所描述的部分；它并非URL的组成部分）。<br /><br />　　ftp：//Javasoft.com/docs/JDK-1_apidocs.zip<br />　　http：//Java.sun.com/products/jdk/CurrentRelease<br />　　file：/home/haroldw/docs/books/tutorial/summary.html<br /><br />　　URL的其余部份（冒号后面的）给出了数据资源所处位置的有关信息。如果协议是file，则URL的其余部份是文件的路径。对于ftp和http协议，URL的其余部份标识了主机并可选地给出某个更详尽的地址路径。例如，以下是JavaSoft主页的URL。该URL只标识了主机：http：//Java.sun.com。从该主页开始浏览，就可以进到许多其它的网页中，其中之一就是JDBC主页。JDBC主页的URL更为具体，它具体表示为：<br />http：//Java.sun.com/products/jdbc<br /><br />　　3. JDBC URL<br /><br />　　JDBC URL提供了一种标识数据库的方法，可以使相应的驱动程序能识别该数据库并与之建立连接。实际上，驱动程序编程员将决定用什么JDBC URL来标识特定的驱动程序。用户不必关心如何来形成JDBC URL；他们只须使用与所用的驱动程序一起提供的URL即可。JDBC的作用是提供某些约定，驱动程序编程员在构造他们的JDBC URL时应该遵循这些约定。<br /><br />　　由于JDBC URL要与各种不同的驱动程序一起使用，因此这些约定应非常灵活。首先，它们应允许不同的驱动程序使用不同的方案来命名数据库。例如，odbc子协议允许（但并不是要求）URL含有属性值。 <br /><br />　　其次，JDBC URL应允许驱动程序编程员将一切所需的信息编入其中。这样就可以让要与给定数据库对话的applet打开数据库连接，而无须要求用户去做任何系统管理工作。<br /><br />　　最后，JDBC URL应允许某种程度的间接性。也就是说，JDBC URL可指向逻辑主机或数据库名，而这种逻辑主机或数据库名将由网络命名系统动态地转换为实际的名称。这可以使系统管理员不必将特定主机声明为JDBC名称的一部份。网络命名服务（例如DNS、NIS和DCE）有多种，而对于使用哪种命名服务并无限制。<br />JDBC URL的标准语法如下所示。它由三部分组成，各部分间用冒号分隔：<br />jdbc：＜子协遥荆海甲用?称??br&gt; 　　JDBC URL的三个部分可分解如下：<br /><br />　　（1）jdbc协议：JDBC URL中的协议总是jdbc。<br /><br />　　（2）＜子协议＞：驱动程序名或数据库连接机制（这种机制可由一个或多个驱动程序支持）的名称。子协议名的典型示例是"odbc"，该名称是为用于指定ODBC风格的数据资源名称的URL专门保留的。例如，为了通过JDBC-ODBC桥来访问某个数据库，可以用如下所示的URL：jdbc：odbc：book。本例中，子协议为"odbc"，子名称"book"是本地ODBC数据资源。如果要用网络命名服务（这样JDBC URL中的数据库名称不必是实际名称），则命名服务可以作为子协议。例如，可用如下所示的URL：jdbc：dcenaming：accounts。本例中，该URL指定了本地DCE命名服务应该将数据库名称"accounts"解析为更为具体的可用于连接真实数据库的名称。<br /><br />　　（3）＜子名称＞：种标识数据库的方法。子名称可以依不同的子协议而变化。它还可以有子名称的子名称（含有驱动程序编程员所选的任何内部语法）。使用子名称的目的是为定位数据库提供足够的信息。前例中，因为ODBC将提供其余部份的信息，因此用"book"就已足够。然而，位于远程服务器上的数据库需要更多的信息。例如，如果数据库是通过Internet来访问的，则在JDBC URL中应将网络地址作为子名称的一部份包括进去，且必须遵循如下所示的标准URL命名约定：//主机名：端口/子协议。<br /><br />　　假设"dbnet"是个用于将某个主机连接到Internet上的协议，则JDBC URL应为：jdbc：dbnet：//wombat：356/fred。<br /><br />　　4. "odbc"子协议<br /><br />　　子协议odbc是一种特殊情况。它是为用于指定ODBC风格的数据资源名称的URL而保留的，并具有下列特性：允许在子名称（数据资源名称）后面指定任意多个属性值。odbc子协议的完整语法为：<br /><br />　　jdbc：odbc：＜数据资源名称＞[；＜属性名＞=＜属性值＞]，因此，以下都是合法的jdbc：odbc名称：<br />　　jdbc：odbc：qeor7<br />　　jdbc：odbc：wombat<br />　　jdbc：odbc：wombat；CacheSize=20；ExtensionCase=LOWER<br />　　jdbc：odbc：qeora；UID=kgh；PWD=fooey<br /><br />　　5. 注册子协议<br /><br />　　驱动程序编程员可保留某个名称以将之用作JDBC URL的子协议名。当DriverManager类将此名称加到已注册的驱动程序清单中时，为之保留该名称的驱动程序应能识别该名称并与它所标识的数据库建立连接。例如，odbc是为JDBC-ODBC桥而保留的。假设有个Miracle公司，它可能会将"miracle"注册为连接到其Miracle DBMS上的JDBC驱动程序的子协议，从而使其他人都无法使用这个名称。<br /><br />　　JavaSoft目前作为非正式代理负责注册JDBC子协议名称。要注册某个子协议名称，请发送电子邮件到下述地址：jdbc@wombat.eng.sun.com。<br /><br />　　6. 发送SQL语句<br /><br />　　连接一旦建立，就可用来向它所涉及的数据库传送SQL语句。JDBC对可被发送的SQL语句类型不加任何限制。这就提供了很大的灵活性，即允许使用特定的数据库语句或甚至于非SQL语句。然而，它要求用户自己负责确保所涉及的数据库可以处理所发送的SQL语句，否则将自食其果。例如，如果某个应用程序试图向不支持储存程序的DBMS发送储存程序调用，就会失败并将抛出异常。JDBC要求驱动程序应至少能提供ANSI SQL-2 Entry Level功能才可算是符合JDBC标准TM的。这意味着用户至少可信赖这一标准级别的功能。<br /><br />　　JDBC提供了三个类，用于向数据库发送SQL语句。Connection接口中的三个方法可用于创建这些类的实例。下面列出这些类及其创建方法：<br /><br />　　（1）Statement：由方法createStatement所创建。Statement对象用于发送简单的SQL语句。<br /><br />　　（2）PreparedStatement：由方法prepareStatement所创建。PreparedStatement对象用于发送带有一个或多个输入参数（IN参数）的SQL语句。PreparedStatement拥有一组方法，用于设置IN参数的值。执行语句时，这些IN参数将被送到数据库中。PreparedStatement的实例扩展了Statement，因此它们都包括了Statement的方法。PreparedStatement对象有可能比Statement对象的效率更高，因为它已被预编译过并存放在那以供将来使用。<br /><br />　　（3）CallableStatement：由方法prepareCall所创建。CallableStatement对象用于执行SQL储存程序─一组可通过名称来调用（就象函数的调用那样）的SQL语句。CallableStatement对象从PreparedStatement中继承了用于处理IN参数的方法，而且还增加了用于处理OUT参数和INOUT参数的方法。<br /><br />　　不过通常来说createStatement方法用于简单的SQL语句（不带参数）、prepareStatement方法用于带一个或多个IN参数的SQL语句或经常被执行的简单SQL语句，而prepareCall方法用于调用已储存过程。 <br /><br />　　7. 事务<br /><br />　　事务由一个或多个这样的语句组成：这些语句已被执行、完成并被提交或还原。当调用方法commit或rollback时，当前事务即告就结束，另一个事务随即开始。缺省情况下，新连接将处于自动提交模式。也就是说，当执行完语句后，将自动对那个语句调用commit方法。这种情况下，由于每个语句都是被单独提交的，因此一个事务只由一个语句组成。如果禁用自动提交模式，事务将要等到commit或rollback方法被显式调用时才结束，因此它将包括上一次调用commit或rollback方法以来所有执行过的语句。对于第二种情况，事务中的所有语句将作为组来提交或还原。<br /><br />　　方法commit使SQL语句对数据库所做的任何更改成为永久性的，它还将释放事务持有的全部锁。而方法rollback将弃去那些更改。有时用户在另一个更改生效前不想让此更改生效。这可通过禁用自动提交并将两个更新组合在一个事务中来达到。如果两个更新都是成功，则调用commit方法，从而使两个更新结果成为永久性的；如果其中之一或两个更新都失败了，则调用rollback方法，以将值恢复为进行更新之前的值。<br /><br />　　大多数JDBC驱动程序都支持事务。事实上，符合JDBC的驱动程序必须支持事务。DatabaseMetaData给出的信息描述DBMS所提供的事务支持水平。<br /><br />　　8. 事务隔离级别<br /><br />　　如果DBMS支持事务处理，它必须有某种途径来管理两个事务同时对一个数据库进行操作时可能发生的冲突。用户可指定事务隔离级别，以指明DBMS应该花多大精力来解决潜在冲突。例如，当事务更改了某个值而第二个事务却在该更改被提交或还原前读取该值时该怎么办。<br /><br />　　假设第一个事务被还原后，第二个事务所读取的更改值将是无效的，那么是否可允许这种冲突？JDBC用户可用以下代码来指示DBMS允许在值被提交前读取该值（"dirty读取"），其中con是当前连接：<br />con.setTransactionIsolation（TRANSACTION_READ_UNCOMMITTED）；<br /><br />　　事务隔离级别越高，为避免冲突所花的精力也就越多。Connection接口定义了五级，其中最低级别指定了根本就不支持事务，而最高级别则指定当事务在对某个数据库进行操作时，任何其它事务不得对那个事务正在读取的数据进行任何更改。通常，隔离级别越高，应用程序执行的速度也就越慢（由于用于锁定的资源耗费增加了，而用户间的并发操作减少了）。在决定采用什么隔离级别时，开发人员必须在性能需求和数据一致性需求之间进行权衡。当然，实际所能支持的级别取决于所涉及的DBMS的功能。<br /><br />　　当创建Connection对象时，其事务隔离级别取决于驱动程序，但通常是所涉及的数据库的缺省值。用户可通过调用setIsolationLevel方法来更改事务隔离级别。新的级别将在该连接过程的剩余时间内生效。要想只改变一个事务的事务隔离级别，必须在该事务开始前进行设置，并在该事务结束后进行复位。我们不提倡在事务的中途对事务隔离级别进行更改，因为这将立即触发commit方法的调用，使在此之前所作的任何更改变成永久性的。</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table><img src ="http://www.blogjava.net/konhon/aggbug/36983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2006-03-23 09:44 <a href="http://www.blogjava.net/konhon/archive/2006/03/23/36983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库乱码解决方案</title><link>http://www.blogjava.net/konhon/archive/2006/03/23/36961.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Thu, 23 Mar 2006 00:06:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2006/03/23/36961.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/36961.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2006/03/23/36961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/36961.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/36961.html</trackback:ping><description><![CDATA[<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" />
				<span style="COLOR: #000000">你插入数据的时候，用<br /><img id="Codehighlighter1_11_52_Open_Image" onclick="this.style.display='none'; Codehighlighter1_11_52_Open_Text.style.display='none'; Codehighlighter1_11_52_Closed_Image.style.display='inline'; Codehighlighter1_11_52_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_11_52_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_11_52_Closed_Text.style.display='none'; Codehighlighter1_11_52_Open_Image.style.display='inline'; Codehighlighter1_11_52_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_11_52_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_11_52_Open_Text">
						<span style="COLOR: #008000">/**</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />* 转变字符串的乱码函数<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />* </span>
						<span style="COLOR: #808080">@param</span>
						<span style="COLOR: #008000"> str<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />* </span>
						<span style="COLOR: #808080">@return</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />
						</span>
						<span style="COLOR: #008000">*/</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> String getStr(String str)<br /><img id="Codehighlighter1_87_248_Open_Image" onclick="this.style.display='none'; Codehighlighter1_87_248_Open_Text.style.display='none'; Codehighlighter1_87_248_Closed_Image.style.display='inline'; Codehighlighter1_87_248_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_87_248_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_87_248_Closed_Text.style.display='none'; Codehighlighter1_87_248_Open_Image.style.display='inline'; Codehighlighter1_87_248_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_87_248_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" />
				</span>
				<span id="Codehighlighter1_87_248_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_92_209_Open_Image" onclick="this.style.display='none'; Codehighlighter1_92_209_Open_Text.style.display='none'; Codehighlighter1_92_209_Closed_Image.style.display='inline'; Codehighlighter1_92_209_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_92_209_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_92_209_Closed_Text.style.display='none'; Codehighlighter1_92_209_Open_Image.style.display='inline'; Codehighlighter1_92_209_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">try</span>
						<span id="Codehighlighter1_92_209_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" />
						</span>
						<span id="Codehighlighter1_92_209_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />String temp_p </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> str;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span>
								<span style="COLOR: #0000ff">byte</span>
								<span style="COLOR: #000000"> [] temp_t </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> temp_p.getBytes(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">ISO8859-1</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />String temp </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> String(temp_t);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> temp;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_229_246_Open_Image" onclick="this.style.display='none'; Codehighlighter1_229_246_Open_Text.style.display='none'; Codehighlighter1_229_246_Closed_Image.style.display='inline'; Codehighlighter1_229_246_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_229_246_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_229_246_Closed_Text.style.display='none'; Codehighlighter1_229_246_Open_Image.style.display='inline'; Codehighlighter1_229_246_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">catch</span>
						<span style="COLOR: #000000">(Exception e)</span>
						<span id="Codehighlighter1_229_246_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" />
						</span>
						<span id="Codehighlighter1_229_246_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">null</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">向bean里面赋值</span>
				<span style="COLOR: #008000">
						<br />
						<img id="Codehighlighter1_300_332_Open_Image" onclick="this.style.display='none'; Codehighlighter1_300_332_Open_Text.style.display='none'; Codehighlighter1_300_332_Closed_Image.style.display='inline'; Codehighlighter1_300_332_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_300_332_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_300_332_Closed_Text.style.display='none'; Codehighlighter1_300_332_Open_Image.style.display='inline'; Codehighlighter1_300_332_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> setAction(String action) </span>
				<span id="Codehighlighter1_300_332_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" />
				</span>
				<span id="Codehighlighter1_300_332_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">this</span>
						<span style="COLOR: #000000">.action </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> getStr(action);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img id="Codehighlighter1_384_428_Open_Image" onclick="this.style.display='none'; Codehighlighter1_384_428_Open_Text.style.display='none'; Codehighlighter1_384_428_Closed_Image.style.display='inline'; Codehighlighter1_384_428_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_384_428_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_384_428_Closed_Text.style.display='none'; Codehighlighter1_384_428_Open_Image.style.display='inline'; Codehighlighter1_384_428_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> setAddmanagerid(String addmanagerid) </span>
				<span id="Codehighlighter1_384_428_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" />
				</span>
				<span id="Codehighlighter1_384_428_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">this</span>
						<span style="COLOR: #000000">.addmanagerid </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> getStr(addmanagerid);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />转换一下，看看可以吗，我的数据库是ORACLE没问题。</span>
		</div><img src ="http://www.blogjava.net/konhon/aggbug/36961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2006-03-23 08:06 <a href="http://www.blogjava.net/konhon/archive/2006/03/23/36961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java编程电子书籍下载 </title><link>http://www.blogjava.net/konhon/archive/2006/03/21/36685.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Tue, 21 Mar 2006 12:27:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2006/03/21/36685.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/36685.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2006/03/21/36685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/36685.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/36685.html</trackback:ping><description><![CDATA[<span class="content">Java编程电子书籍下载<br /><br /><br />环境安装配置：<br /><br />TOMCAT的配置<br /><a href="http://download.chinaitlab.com/soft/10791.htm" target="_blank">http://download.chinaitlab.com/soft/10791.htm</a><br /><br />JAVA配置文件编写说明文档<br /><a href="http://download.chinaitlab.com/soft/10010.htm" target="_blank">http://download.chinaitlab.com/soft/10010.htm</a><br /><br />一步一步学会配置Kjava开发环境<br /><a href="http://download.chinaitlab.com/soft/9483.htm" target="_blank">http://download.chinaitlab.com/soft/9483.htm</a><br /><br />Weblogic7开发EJB的配置<br /><a href="http://download.chinaitlab.com/soft/4938.htm" target="_blank">http://download.chinaitlab.com/soft/4938.htm</a><br /><br />图解JSP环境安装配置<br /><a href="http://download.chinaitlab.com/soft/2157.htm" target="_blank">http://download.chinaitlab.com/soft/2157.htm</a><br /><br />Tomcat配置方法<br /><a href="http://download.chinaitlab.com/soft/931.htm" target="_blank">http://download.chinaitlab.com/soft/931.htm</a><br /><br />全程指导Linux下JAVA环境配置<br /><a href="http://download.chinaitlab.com/soft/11272.htm" target="_blank">http://download.chinaitlab.com/soft/11272.htm</a><br /><br />学习方法：<br /><br />通过JB4学习JAVA<br /><a href="http://download.chinaitlab.com/soft/7589.htm" target="_blank">http://download.chinaitlab.com/soft/7589.htm</a><br /><br />10步学习 JavaScript<br /><a href="http://download.chinaitlab.com/soft/6492.htm" target="_blank">http://download.chinaitlab.com/soft/6492.htm</a><br /><br /><a title="Java" href="http://www.blogjava.net/konhon/category/3016.html" target="_blank">Java</a> Sctipt学习不求人<br /><a href="http://download.chinaitlab.com/soft/6361.htm" target="_blank">http://download.chinaitlab.com/soft/6361.htm</a><br /><br />JSP学习指南<br /><a href="http://download.chinaitlab.com/soft/6152.htm" target="_blank">http://download.chinaitlab.com/soft/6152.htm</a><br /><br />JAVA学习文档<br /><a href="http://download.chinaitlab.com/soft/6114.htm" target="_blank">http://download.chinaitlab.com/soft/6114.htm</a><br /><br />J2EE学习笔记<br /><a href="http://download.chinaitlab.com/soft/6048.htm" target="_blank">http://download.chinaitlab.com/soft/6048.htm</a><br /><br />JavaScript学习<br /><a href="http://download.chinaitlab.com/soft/3029.htm" target="_blank">http://download.chinaitlab.com/soft/3029.htm</a><br /><br />Java2 学习指南<br /><a href="http://download.chinaitlab.com/soft/2743.htm" target="_blank">http://download.chinaitlab.com/soft/2743.htm</a><br /><br />Juniper学习指南<br /><a href="http://download.chinaitlab.com/soft/2227.htm" target="_blank">http://download.chinaitlab.com/soft/2227.htm</a><br /><br />J2EE学习资料<br /><a href="http://download.chinaitlab.com/soft/1618.htm" target="_blank">http://download.chinaitlab.com/soft/1618.htm</a><br /><br />JSP由浅入深<br /><a href="http://download.chinaitlab.com/soft/1315.htm" target="_blank">http://download.chinaitlab.com/soft/1315.htm</a><br /><br />面向对象编程：<br /><br />Java面向对象编程指南<br /><a href="http://download.chinaitlab.com/soft/9792.htm" target="_blank">http://download.chinaitlab.com/soft/9792.htm</a><br /><br />JAVA的核心技术：面向对象编程<br /><a href="http://download.chinaitlab.com/soft/9093.htm" target="_blank">http://download.chinaitlab.com/soft/9093.htm</a><br /><br />Java 与 UML 面向对象程序设计<br /><a href="http://download.chinaitlab.com/soft/6053.htm" target="_blank">http://download.chinaitlab.com/soft/6053.htm</a><br /><br />Java 2 编程21天自学通<br /><a href="http://download.chinaitlab.com/soft/10507.htm" target="_blank">http://download.chinaitlab.com/soft/10507.htm</a><br /><br />J2EE编程起步<br /><a href="http://download.chinaitlab.com/soft/10506.htm" target="_blank">http://download.chinaitlab.com/soft/10506.htm</a><br /><br />Java面向对象编程指南<br /><a href="http://download.chinaitlab.com/soft/9792.htm" target="_blank">http://download.chinaitlab.com/soft/9792.htm</a><br /><br />Java专业编程指南<br /><a href="http://download.chinaitlab.com/soft/9791.htm" target="_blank">http://download.chinaitlab.com/soft/9791.htm</a><br /><br />Java服务器高级编程<br /><a href="http://download.chinaitlab.com/soft/9790.htm" target="_blank">http://download.chinaitlab.com/soft/9790.htm</a><br /><br />J2EE EAI编程指南<br /><a href="http://download.chinaitlab.com/soft/9784.htm" target="_blank">http://download.chinaitlab.com/soft/9784.htm</a><br /><br />J2MEMIDP无线设备编程指南<br /><a href="http://download.chinaitlab.com/soft/9765.htm" target="_blank">http://download.chinaitlab.com/soft/9765.htm</a><br /><br />JAVA编程思想 中文版<br /><a href="http://download.chinaitlab.com/soft/9481.htm" target="_blank">http://download.chinaitlab.com/soft/9481.htm</a><br /><br />Java XML编程指南<br /><a href="http://download.chinaitlab.com/soft/9097.htm" target="_blank">http://download.chinaitlab.com/soft/9097.htm</a><br /><br />Java 数据库编程宝典<br /><a href="http://download.chinaitlab.com/soft/9095.htm" target="_blank">http://download.chinaitlab.com/soft/9095.htm</a><br /><br />JAVA的核心技术：面向对象编程<br /><a href="http://download.chinaitlab.com/soft/9093.htm" target="_blank">http://download.chinaitlab.com/soft/9093.htm</a><br /><br />JDBC API数据库编程实作教材<br /><a href="http://download.chinaitlab.com/soft/9087.htm" target="_blank">http://download.chinaitlab.com/soft/9087.htm</a><br /><br />核心 JSF 编程<br /><a href="http://download.chinaitlab.com/soft/7946.htm" target="_blank">http://download.chinaitlab.com/soft/7946.htm</a><br /><br />JAVA 2应用编程150例<br /><a href="http://download.chinaitlab.com/soft/6815.htm" target="_blank">http://download.chinaitlab.com/soft/6815.htm</a><br /><br />JAVA数据库编程JDBC<br /><a href="http://download.chinaitlab.com/soft/6113.htm" target="_blank">http://download.chinaitlab.com/soft/6113.htm</a><br /><br />深入掌握J2EE编程技术<br /><a href="http://download.chinaitlab.com/soft/6030.htm" target="_blank">http://download.chinaitlab.com/soft/6030.htm</a><br /><br />实用J2EE设计模式编程指南<br /><a href="http://download.chinaitlab.com/soft/5033.htm" target="_blank">http://download.chinaitlab.com/soft/5033.htm</a><br /><br />Java for Internet编程技术<br /><a href="http://download.chinaitlab.com/soft/4198.htm" target="_blank">http://download.chinaitlab.com/soft/4198.htm</a><br /><br />Java安全性编程指南<br /><a href="http://download.chinaitlab.com/soft/3773.htm" target="_blank">http://download.chinaitlab.com/soft/3773.htm</a><br /><br />J2ME无线设备编程<br /><a href="http://download.chinaitlab.com/soft/3669.htm" target="_blank">http://download.chinaitlab.com/soft/3669.htm</a><br /><br />J2EE EJB编程实例<br /><a href="http://download.chinaitlab.com/soft/3141.htm" target="_blank">http://download.chinaitlab.com/soft/3141.htm</a><br /><br />Java编程思想 第三版<br /><a href="http://download.chinaitlab.com/soft/2982.htm" target="_blank">http://download.chinaitlab.com/soft/2982.htm</a><br /><br />Java 极限编程<br /><a href="http://download.chinaitlab.com/soft/1707.htm" target="_blank">http://download.chinaitlab.com/soft/1707.htm</a><br /><br />Java2编程详解<br /><a href="http://download.chinaitlab.com/soft/1705.htm" target="_blank">http://download.chinaitlab.com/soft/1705.htm</a><br /><br /><br />网络编程：<br /><br />J2EE网络编程标准教程<br /><a href="http://download.chinaitlab.com/soft/9100.htm" target="_blank">http://download.chinaitlab.com/soft/9100.htm</a><br /><br />Java网络编程实例<br /><a href="http://download.chinaitlab.com/soft/9090.htm" target="_blank">http://download.chinaitlab.com/soft/9090.htm</a><br /><br />Java P2P网络编程技术<br /><a href="http://download.chinaitlab.com/soft/6333.htm" target="_blank">http://download.chinaitlab.com/soft/6333.htm</a><br /><br />Java网络编程<br /><a href="http://download.chinaitlab.com/soft/3871.htm" target="_blank">http://download.chinaitlab.com/soft/3871.htm</a><br /><br />网络编程基础篇之 Java Script<br /><a href="http://download.chinaitlab.com/soft/3618.htm" target="_blank">http://download.chinaitlab.com/soft/3618.htm</a><br /><br />Solaris Shell 编程<br /><a href="http://download.chinaitlab.com/soft/6426.htm" target="_blank">http://download.chinaitlab.com/soft/6426.htm</a><br /><br />SUN Solaris管理手册<br /><a href="http://download.chinaitlab.com/soft/5732.htm" target="_blank">http://download.chinaitlab.com/soft/5732.htm</a><br /><br />Solaris性能管理<br /><a href="http://download.chinaitlab.com/soft/11247.htm" target="_blank">http://download.chinaitlab.com/soft/11247.htm</a><br /><br />Solaris9安装指南<br /><a href="http://download.chinaitlab.com/soft/5022.htm" target="_blank">http://download.chinaitlab.com/soft/5022.htm</a><br /><br />SOLARIS高级系统管理员指南<br /><a href="http://download.chinaitlab.com/soft/3726.htm" target="_blank">http://download.chinaitlab.com/soft/3726.htm</a><br /><br />Solaris操作环境安全<br /><a href="http://download.chinaitlab.com/soft/1500.htm" target="_blank">http://download.chinaitlab.com/soft/1500.htm</a><br /><br />Solaris GNOME2.0桌面用户指南<br /><a href="http://download.chinaitlab.com/soft/1488.htm" target="_blank">http://download.chinaitlab.com/soft/1488.htm</a><br /><br />Solaris 9 12/03 安装指南<br /><a href="http://download.chinaitlab.com/soft/1484.htm" target="_blank">http://download.chinaitlab.com/soft/1484.htm</a><br /><br />Solaris管理员指南<br /><a href="http://download.chinaitlab.com/soft/1475.htm" target="_blank">http://download.chinaitlab.com/soft/1475.htm</a><br /><br />中文Solaris9 系统管理员指南<br /><a href="http://download.chinaitlab.com/soft/1463.htm" target="_blank">http://download.chinaitlab.com/soft/1463.htm</a><br /><br />Solaris安全性专题指导<br /><a href="http://download.chinaitlab.com/soft/746.htm" target="_blank">http://download.chinaitlab.com/soft/746.htm</a><br /><br /><br />XML系列：<br /><br />Java XML编程指南<br /><a href="http://download.chinaitlab.com/soft/9097.htm" target="_blank">http://download.chinaitlab.com/soft/9097.htm</a><br /><br />Java程序设计EJB、XML与数据库<br /><a href="http://download.chinaitlab.com/soft/9094.htm" target="_blank">http://download.chinaitlab.com/soft/9094.htm</a><br /><br />XML 终极教程<br /><a href="http://download.chinaitlab.com/soft/9057.htm" target="_blank">http://download.chinaitlab.com/soft/9057.htm</a><br /><br />Java&amp;XML应用<br /><a href="http://download.chinaitlab.com/soft/6211.htm" target="_blank">http://download.chinaitlab.com/soft/6211.htm</a><br /><br />XML_JAVA指南<br /><a href="http://download.chinaitlab.com/soft/6163.htm" target="_blank">http://download.chinaitlab.com/soft/6163.htm</a><br /><br />JDBC：<br /><br />JDBC API数据库编程实作教材<br /><a href="http://download.chinaitlab.com/soft/9087.htm" target="_blank">http://download.chinaitlab.com/soft/9087.htm</a><br /><br />JAVA数据库编程JDBC<br /><a href="http://download.chinaitlab.com/soft/6113.htm" target="_blank">http://download.chinaitlab.com/soft/6113.htm</a><br /><br />JDBC API 参考教程第三版<br /><a href="http://download.chinaitlab.com/soft/6057.htm" target="_blank">http://download.chinaitlab.com/soft/6057.htm</a><br /><br />JDBC与Java数据库程序设计<br /><a href="http://download.chinaitlab.com/soft/6018.htm" target="_blank">http://download.chinaitlab.com/soft/6018.htm</a><br /><br />Java语言SQL接口 JDBCprogram<br /><a href="http://download.chinaitlab.com/soft/5938.htm" target="_blank">http://download.chinaitlab.com/soft/5938.htm</a><br /><br />JSP应用程序开发指南<br /><a href="http://download.chinaitlab.com/soft/1546.htm" target="_blank">http://download.chinaitlab.com/soft/1546.htm</a><br /><br />用 JDBC 管理数据库连接<br /><a href="http://download.chinaitlab.com/soft/935.htm" target="_blank">http://download.chinaitlab.com/soft/935.htm</a><br /><br />JDO：<br /><br />全面了解JDO数据库编程<br /><a href="http://download.chinaitlab.com/soft/7992.htm" target="_blank">http://download.chinaitlab.com/soft/7992.htm</a><br /><br />Struts：<br /><br />Struts中文手册<br /><a href="http://download.chinaitlab.com/soft/10516.htm" target="_blank">http://download.chinaitlab.com/soft/10516.htm</a><br /><br />Struts架构指导<br /><a href="http://download.chinaitlab.com/soft/7529.htm" target="_blank">http://download.chinaitlab.com/soft/7529.htm</a><br /><br />精通struts技术<br /><a href="http://download.chinaitlab.com/soft/6801.htm" target="_blank">http://download.chinaitlab.com/soft/6801.htm</a><br /><br />Struts 学习起歩问答<br /><a href="http://download.chinaitlab.com/soft/6156.htm" target="_blank">http://download.chinaitlab.com/soft/6156.htm</a><br /><br />Hibernate：<br /><br />Hibernate2.1.2参考手册中文版<br /><a href="http://download.chinaitlab.com/soft/8919.htm" target="_blank">http://download.chinaitlab.com/soft/8919.htm</a><br /><br /><br /><br />JAVA与模式\J2EE模式：<br /><br />J2EE 核心模式<br /><a href="http://download.chinaitlab.com/soft/9785.htm" target="_blank">http://download.chinaitlab.com/soft/9785.htm</a><br /><br />Java 企业设计模式<br /><a href="http://download.chinaitlab.com/soft/9096.htm" target="_blank">http://download.chinaitlab.com/soft/9096.htm</a><br /><br />Java简单工厂创立性模式介绍<br /><a href="http://download.chinaitlab.com/soft/7398.htm" target="_blank">http://download.chinaitlab.com/soft/7398.htm</a><br /><br />EJB设计模式<br /><a href="http://download.chinaitlab.com/soft/6135.htm" target="_blank">http://download.chinaitlab.com/soft/6135.htm</a><br /><br />JAVA设计模式<br /><a href="http://download.chinaitlab.com/soft/6112.htm" target="_blank">http://download.chinaitlab.com/soft/6112.htm</a><br /><br />实用J2EE设计模式编程指南<br /><a href="http://download.chinaitlab.com/soft/5033.htm" target="_blank">http://download.chinaitlab.com/soft/5033.htm</a><br /><br />Java与模式<br /><a href="http://download.chinaitlab.com/soft/3073.htm" target="_blank">http://download.chinaitlab.com/soft/3073.htm</a><br /><br />设计模式Java版<br /><a href="http://download.chinaitlab.com/soft/1723.htm" target="_blank">http://download.chinaitlab.com/soft/1723.htm</a><br /><br /><br />JBuilder开发Servlet及JSP：<br /><br />精通JBuilder<br /><a href="http://download.chinaitlab.com/soft/10565.htm" target="_blank">http://download.chinaitlab.com/soft/10565.htm</a><br /><br />JBuilder速成资料<br /><a href="http://download.chinaitlab.com/soft/9714.htm" target="_blank">http://download.chinaitlab.com/soft/9714.htm</a><br /><br />Jbuilder7和weblogic7整合开发手<br /><a href="http://download.chinaitlab.com/soft/9664.htm" target="_blank">http://download.chinaitlab.com/soft/9664.htm</a><br /><br />JBUILDER9 软件开发项目实践<br /><a href="http://download.chinaitlab.com/soft/9089.htm" target="_blank">http://download.chinaitlab.com/soft/9089.htm</a><br /><br />JbuilderX开发指南<br /><a href="http://download.chinaitlab.com/soft/9088.htm" target="_blank">http://download.chinaitlab.com/soft/9088.htm</a><br /><br />Jbuilder x 指南<br /><a href="http://download.chinaitlab.com/soft/7984.htm" target="_blank">http://download.chinaitlab.com/soft/7984.htm</a><br /><br />JBuilder4开发人员指南<br /><a href="http://download.chinaitlab.com/soft/5939.htm" target="_blank">http://download.chinaitlab.com/soft/5939.htm</a><br /><br />JBuilder7 Weblogic7整和开发培训手册<br /><a href="http://download.chinaitlab.com/soft/4727.htm" target="_blank">http://download.chinaitlab.com/soft/4727.htm</a><br /><br />JBuilder开发数据库应用程序<br /><a href="http://download.chinaitlab.com/soft/1701.htm" target="_blank">http://download.chinaitlab.com/soft/1701.htm</a><br /><br />Java开发指南--Servlets和JSP篇<br /><a href="http://download.chinaitlab.com/soft/9793.htm" target="_blank">http://download.chinaitlab.com/soft/9793.htm</a><br /><br />Java Servlets 编程指南<br /><a href="http://download.chinaitlab.com/soft/9098.htm" target="_blank">http://download.chinaitlab.com/soft/9098.htm</a><br /><br />Oreilly Java Servlet<br /><a href="http://download.chinaitlab.com/soft/6522.htm" target="_blank">http://download.chinaitlab.com/soft/6522.htm</a><br /><br />Java Servlet开发与实例<br /><a href="http://download.chinaitlab.com/soft/6029.htm" target="_blank">http://download.chinaitlab.com/soft/6029.htm</a><br /><br />深入Java Servlet 网络编程<br /><a href="http://download.chinaitlab.com/soft/9783.htm" target="_blank">http://download.chinaitlab.com/soft/9783.htm</a><br /><br />用JSP_Servlet构建三层式管理信息系统<br /><a href="http://download.chinaitlab.com/soft/6034.htm" target="_blank">http://download.chinaitlab.com/soft/6034.htm</a><br /><br />Java Servlet帮助文档<br /><a href="http://download.chinaitlab.com/soft/2981.htm" target="_blank">http://download.chinaitlab.com/soft/2981.htm</a><br /><br />JSP网站编程教程<br /><a href="http://download.chinaitlab.com/soft/11256.htm" target="_blank">http://download.chinaitlab.com/soft/11256.htm</a><br /><br />JSP语法分析<br /><a href="http://download.chinaitlab.com/soft/11257.htm" target="_blank">http://download.chinaitlab.com/soft/11257.htm</a><br /><br />JSP实用教程<br /><a href="http://download.chinaitlab.com/soft/10792.htm" target="_blank">http://download.chinaitlab.com/soft/10792.htm</a><br /><br />JSP语法（1）--HTML注释<br /><a href="http://download.chinaitlab.com/soft/10790.htm" target="_blank">http://download.chinaitlab.com/soft/10790.htm</a><br /><br />JSP应用开发详解<br /><a href="http://download.chinaitlab.com/soft/10025.htm" target="_blank">http://download.chinaitlab.com/soft/10025.htm</a><br /><br />JSP技术揭秘<br /><a href="http://download.chinaitlab.com/soft/9387.htm" target="_blank">http://download.chinaitlab.com/soft/9387.htm</a><br /><br />JSP技术大全<br /><a href="http://download.chinaitlab.com/soft/9388.htm" target="_blank">http://download.chinaitlab.com/soft/9388.htm</a><br /><br />JSP网上书店实例详解<br /><a href="http://download.chinaitlab.com/soft/9386.htm" target="_blank">http://download.chinaitlab.com/soft/9386.htm</a><br /><br />JSP动态网页新技术<br /><a href="http://download.chinaitlab.com/soft/8920.htm" target="_blank">http://download.chinaitlab.com/soft/8920.htm</a><br /><br />JSP 技术大全<br /><a href="http://download.chinaitlab.com/soft/7782.htm" target="_blank">http://download.chinaitlab.com/soft/7782.htm</a><br /><br />JSP高级开发与应用<br /><a href="http://download.chinaitlab.com/soft/7633.htm" target="_blank">http://download.chinaitlab.com/soft/7633.htm</a><br /><br />JSP 完全探索<br /><a href="http://download.chinaitlab.com/soft/7546.htm" target="_blank">http://download.chinaitlab.com/soft/7546.htm</a><br /><br />JSP 高级开发与应用<br /><a href="http://download.chinaitlab.com/soft/7116.htm" target="_blank">http://download.chinaitlab.com/soft/7116.htm</a><br /><br />JSP编程技巧<br /><a href="http://download.chinaitlab.com/soft/7114.htm" target="_blank">http://download.chinaitlab.com/soft/7114.htm</a><br /><br />JSP速成教程<br /><a href="http://download.chinaitlab.com/soft/6882.htm" target="_blank">http://download.chinaitlab.com/soft/6882.htm</a><br /><br />JSP网络编程技术<br /><a href="http://download.chinaitlab.com/soft/6880.htm" target="_blank">http://download.chinaitlab.com/soft/6880.htm</a><br /><br />JSP程序设计指南<br /><a href="http://download.chinaitlab.com/soft/6690.htm" target="_blank">http://download.chinaitlab.com/soft/6690.htm</a><br /><br />最新JSP入门与应用<br /><a href="http://download.chinaitlab.com/soft/6697.htm" target="_blank">http://download.chinaitlab.com/soft/6697.htm</a><br /><br />JSP快速入门<br /><a href="http://download.chinaitlab.com/soft/6636.htm" target="_blank">http://download.chinaitlab.com/soft/6636.htm</a><br /><br />JSP网页编程<br /><a href="http://download.chinaitlab.com/soft/6527.htm" target="_blank">http://download.chinaitlab.com/soft/6527.htm</a><br /><br />JSP 实用教程<br /><a href="http://download.chinaitlab.com/soft/6334.htm" target="_blank">http://download.chinaitlab.com/soft/6334.htm</a><br /><br />JSP入门与提高<br /><a href="http://download.chinaitlab.com/soft/6326.htm" target="_blank">http://download.chinaitlab.com/soft/6326.htm</a><br /><br />JSP语法<br /><a href="http://download.chinaitlab.com/soft/6116.htm" target="_blank">http://download.chinaitlab.com/soft/6116.htm</a><br /><br />掌握自定义JSP标签<br /><a href="http://download.chinaitlab.com/soft/6096.htm" target="_blank">http://download.chinaitlab.com/soft/6096.htm</a><br /><br />JSP 动态网站技术入门与提高<br /><a href="http://download.chinaitlab.com/soft/6019.htm" target="_blank">http://download.chinaitlab.com/soft/6019.htm</a><br /><br />JSP实例入门<br /><a href="http://download.chinaitlab.com/soft/4377.htm" target="_blank">http://download.chinaitlab.com/soft/4377.htm</a><br /><br />JSP教程之与数据库通信<br /><a href="http://download.chinaitlab.com/soft/3673.htm" target="_blank">http://download.chinaitlab.com/soft/3673.htm</a><br /><br />如何成为优秀的JSP 程序员<br /><a href="http://download.chinaitlab.com/soft/3002.htm" target="_blank">http://download.chinaitlab.com/soft/3002.htm</a><br /><br />JSP数据库编程指南<br /><a href="http://download.chinaitlab.com/soft/2946.htm" target="_blank">http://download.chinaitlab.com/soft/2946.htm</a><br /><br />JSP 高级编程<br /><a href="http://download.chinaitlab.com/soft/2635.htm" target="_blank">http://download.chinaitlab.com/soft/2635.htm</a><br /><br />JSP实用编程实例集锦<br /><a href="http://download.chinaitlab.com/soft/2154.htm" target="_blank">http://download.chinaitlab.com/soft/2154.htm</a><br /><br />JSP程序设计精彩实例<br /><a href="http://download.chinaitlab.com/soft/2151.htm" target="_blank">http://download.chinaitlab.com/soft/2151.htm</a><br /><br />JSP即时应用<br /><a href="http://download.chinaitlab.com/soft/1547.htm" target="_blank">http://download.chinaitlab.com/soft/1547.htm</a><br /><br />JSP程序设计精彩实例<br /><a href="http://download.chinaitlab.com/soft/1543.htm" target="_blank">http://download.chinaitlab.com/soft/1543.htm</a><br /><br />JSP实用编程实例集锦<br /><a href="http://download.chinaitlab.com/soft/1537.htm" target="_blank">http://download.chinaitlab.com/soft/1537.htm</a><br /><br />JSP基础<br /><a href="http://download.chinaitlab.com/soft/894.htm" target="_blank">http://download.chinaitlab.com/soft/894.htm</a><br /><br />Eclipse开发Servlet及JSP：<br /><br />Eclipse+Tomcat集成开发servle<br /><a href="http://download.chinaitlab.com/soft/6134.htm" target="_blank">http://download.chinaitlab.com/soft/6134.htm</a><br /><br />J2EE Jboss Ejb With Eclipse 2003<br /><a href="http://download.chinaitlab.com/soft/6045.htm" target="_blank">http://download.chinaitlab.com/soft/6045.htm</a></span><img src ="http://www.blogjava.net/konhon/aggbug/36685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2006-03-21 20:27 <a href="http://www.blogjava.net/konhon/archive/2006/03/21/36685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC编程学習</title><link>http://www.blogjava.net/konhon/archive/2006/03/21/36682.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Tue, 21 Mar 2006 12:18:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2006/03/21/36682.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/36682.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2006/03/21/36682.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/36682.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/36682.html</trackback:ping><description><![CDATA[<font size="4">连接oracle数据库的各种oracle jdbc驱动程序的细节。<br />这些细节包括：<br />1、导入jdbc包<br />2、注册oracle jdbc驱动程序<br />3、打开数据库连接<br />4、执行sql dml语句在数据库表中获取、添加、修改和删除行<br /></font>
		<p>
				<font size="4">一、jdbc驱动程序<br />共有有4种<br />1、thin驱动程序<br />thin驱动程序是所有驱动程序中资源消耗最小的，而且完全用java编写的。<br />该驱动程序只使用tcp/ip且要求oracle net。被称为第4类驱动程序。<br />它使用ttc协议与oracle数据库进行通信。能够在applet、application中使用。<br />2、oci驱动程序<br />oci驱动比thin需要资源要多，但性能通常好一点。oci驱动适合于部署在<br />中间层的软件，如web服务器。不能在applet中使用oci驱动。是第2类驱动程序。<br />不完全用java写的，还包含了c代码。该驱动有许多附加的性能增强特性，<br />包括高级的连接缓冲功能。<br /><font color="#ff0000">注意：</font>oci驱动要求在客户计算机上安装它。<br />3、服务器内部驱动程序<br />服务器内部驱动程序提供对数据库的直接访问，oracle jvm使用它与数据库进行通信。<br />oracle jvm是与数据库集成的java virtual machine，可以使用oracle jvm将<br />java类装载进数据库，然后公布和运行这个类中包含的方法。<br />4、服务器thin驱动程序<br />服务器端thin驱动程序也是由oracle jvm使用的，它提供对远程数据库的访问。<br />也是完全用java编写的。</font>
		</p>
		<br />
		<p>
				<font size="4">二、导入jdbc包<br />三、注册oracle jdbc驱动程序<br />必须先向java程序注册oracle jdbc驱动程序，然后才能打开数据库连接。<br />有两种注册oracle jdbc驱动程序的办法。<br />1、使用java.lang.class的forname()方法<br />例子：class.forname(oracle.jdbc.oracledriver);<br />2、使用jdbc drivermanager类的registerdriver()方法。<br />例子：drivermanager.registerdriver(new oracle.jdbc.oracledriver());<br />如果使用oracle8i jdbc驱动程序，那么需要导入oracle.jdbc.driver.oracledriver类，<br />然后注册这个类的实例。<br />例子：<br />import oracle.jdbc.driver.oracledriver;<br />drivermanager.registerdriver(new oracle.jdbc.oracledriver());<br /><font color="#ff0000">注意</font>：从jdbc2.0开始，只用jdbc驱动程序的更标准办法是通过数据源。<br />四、打开数据库连接<br />必须先打开数据库连接，然后才能在java程序中执行sql语句。打开数据库连接<br />的主要办法。<br />1、drivermanager类的getconnection()方法。<br />drivermanager.getconnection(url,<font color="#000000">username</font>,<font color="#000000">passwrod</font>);<br /><font color="#008000">url</font>:程序要连接的数据库，以及要使用的jdbc驱动程序<br />url的结构依赖于jdbc驱动程序的生产商。对于oracle jdbc驱动程序，数据库url的结构：<br /><br /><font color="#0000ff">driver_name</font>是程序使用的oracle jdbc驱动程序的名称。如：<br />jdbc:oracle:thin oracle jdbc thin驱动程序<br />jdbc:oracle:oci oracle jdbc oci驱动程序<br />jdbc:oracle:oci8 oracle jdbc oci驱动程序<br /><font color="#0000ff">driver_information</font>是连接数据库所需的驱动程序特有的信息。这依赖于使用的驱动程序。<br />对于oracle jdbc thin驱动程序，可以用<br />host_name:port:database_sid 或者 oracle net关键字-值对<br />(description=(address=(host=host_name)(protocol=tcp)(port=port()<br />(connect_data=(sid=database_sid)))<br />host_name: 运行数据库的机器的名称<br />port: net数据库监听器等待这个端口上的请求，默认是1521<br />database_sid: 要连接的数据库实例的oracle sid。<br /><font color="#006400">username</font>: 程序连接数据库时使用的数据库用户名<br /><font color="#006400">passwrod</font>: 用户名的口令<br />例子：<br />connection myconnection=drivermanager.getconnection(<br />jdbc:oracle:thin:@localhost:1521:orcl,<br />store_user,<br />store_password);<br />connection myconnection=drivermanager.getconnection(<br />jdbc:oracle:oci:@(description=(address=(host=localhost) <br />(protocol=tcp)(port=1521))(connect_data=(sid=orcl))),<br />store_user,<br />store_password);<br />2、使用oracle数据源对象，必须先创建这个对象，然后连接它。使用这种方法<br />采用了一种设置数据库连接信息的标准化方式，oracle数据源对象可以与<br />java naming and directory interface(java名字与目录接口，jndi)一起使用。</font>
		</p><img src ="http://www.blogjava.net/konhon/aggbug/36682.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2006-03-21 20:18 <a href="http://www.blogjava.net/konhon/archive/2006/03/21/36682.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE面试题集锦</title><link>http://www.blogjava.net/konhon/archive/2006/03/14/35163.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Tue, 14 Mar 2006 00:35:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2006/03/14/35163.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/35163.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2006/03/14/35163.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/35163.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/35163.html</trackback:ping><description><![CDATA[<P>/**<BR>&nbsp;* By metaphy 2005-11-12<BR>&nbsp;* Version: 0.01<BR>&nbsp;* 注:题目答案来源于metaphy过去的知识或网络,metaphy不能保证其正确或完整性,仅供参考<BR>**/</P>
<P><STRONG>一、基础问答</STRONG></P>
<P>　　<STRONG>1.下面哪些类可以被继承?</STRONG></P>
<P>　　　java.lang.Thread (T)<BR>　　　java.lang.Number (T)<BR>　　　java.lang.Double (F)<BR>　　　java.lang.Math&nbsp; (F)<BR>　　　java.lang.Void&nbsp; (F)<BR>　　　java.lang.Class&nbsp; (F)<BR>　　　java.lang.ClassLoader (T)</P>
<P>　　<STRONG>2.抽象类和接口的区别</STRONG></P>
<P>　　(1)接口可以被多重implements,抽象类只能被单一extends<BR>　　(2)接口只有定义,抽象类可以有定义和实现<BR>　　(3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见)</P>
<P>　　<STRONG>3.Hashtable的原理,并说出HashMap与Hashtable的区别</STRONG></P>
<P>　　HashTable的原理:通过节点的关键码确定节点的存储位置,即给定节点的关键码k,通过一定的函数关系H(散列函数),得到函数值H(k),将此值解释为该节点的存储地址.<BR>HashMap 与Hashtable很相似,但HashMap 是非同步(unsynchronizded)和可以以null为关键码的.</P>
<P>　　<STRONG>4.forward和redirect的区别</STRONG></P>
<P>　　forward: an internal transfer in servlet<BR>　　redirect: 重定向,有2次request,第2次request将丢失第一次的attributs/parameters等</P>
<P>　　<STRONG>5.什么是Web容器?</STRONG></P>
<P>　　实现J2EE规范中web协议的应用.该协议定义了web程序的运行时环境,包括:并发性,安全性,生命周期管理等等.</P>
<P>　　6.解释下面关于J2EE的名词</P>
<P>　　(1)JNDI:Java Naming &amp; Directory Interface,JAVA命名目录服务.主要提供的功能是：提供一个目录系统，让其它各地的应用程序在其上面留下自己的索引，从而满足快速查找和定位分布式应用程序的功能.<BR>　　(2)JMS：Java Message Service,JAVA消息服务.主要实现各个应用程序之间的通讯.包括点对点和广播.<BR>　　(3)JTA：Java Transaction API,JAVA事务服务.提供各种分布式事务服务.应用程序只需调用其提供的接口即可.<BR>　　(4)JAF: <A title=Java HREF="/konhon/category/3016.html" target=_blank><a title="Java" href="http://www.blogjava.net/konhon/category/3016.html" target="_blank">Java</a></A> Action FrameWork,JAVA安全认证框架.提供一些安全控制方面的框架.让开发者通过各种部署和自定义实现自己的个性安全控制策略.<BR>　　(5)RMI:Remote Method Interface,远程方法调用</P>
<P>　　<STRONG>7.EJB是基于哪些技术实现的？并说 出SessionBean和EntityBean的区别，StatefulBean和StatelessBean的区别.</STRONG></P>
<P>　　EJB包括Session Bean、Entity Bean、Message Driven Bean，基于JNDI、RMI、JAT等技术实现.</P>
<P>　　SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作，例如访问数据库、调用其他EJB组件.EntityBean被用来代表应用系统中用到的数据.对于客户机，SessionBean是一种非持久性对象，它实现某些在服务器上运行的业务逻辑;EntityBean是一种持久性对象，它代表一个存储在持久性存储器中的实体的对象视图，或是一个由现有企业应用程序实现的实体.</P>
<P>　　Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean .这两种的 Session Bean都可以将系统逻辑放在 method之中执行，不同的是 Stateful Session Bean 可以记录呼叫者的状态，因此通常来说，一个使用者会有一个相对应的 Stateful Session Bean 的实体.Stateless Session Bean 虽然也是逻辑组件，但是他却不负责记录使用者状态，也就是说当使用者呼叫 Stateless Session Bean 的时候，EJB Container 并不会找寻特定的 Stateless Session Bean 的实体来执行这个 method.换言之，很可能数个使用者在执行某个 Stateless Session Bean 的 methods 时，会是同一个 Bean 的 Instance 在执行.从内存方面来看， Stateful Session Bean 与 Stateless Session Bean 比较， Stateful Session Bean 会消耗 J2EE Server 较多的内存，然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态.</P>
<P>　　<STRONG>8.XML的解析方法</STRONG></P>
<P>　　Sax,DOM,JDOM</P>
<P>　　<STRONG>9.什么是Web Service?</STRONG></P>
<P>　　Web Service就是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。<BR>Web Service所使用的是Internet上统一、开放的标准，如HTTP、XML、SOAP（简单对象访问协议）、WSDL等，所以Web Service可以在任何支持这些标准的环境（Windows,Linux）中使用。</P>
<P>　　注：SOAP协议（Simple Object Access Protocal,简单对象访问协议）,它是一个用于分散和分布式环境下网络信息交换的基于XML的通讯协议。在此协议下，软件组件或应用程序能够通过标准的HTTP协议进行通讯。它的设计目标就是简单性和扩展性，这有助于大量异构程序和平台之间的互操作性，从而使存在的应用程序能够被广泛的用户访问。</P>
<P>　　优势：</P>
<P>　　(1).跨平台。<BR>　　(2).SOAP协议是基于XML和HTTP这些业界的标准的，得到了所有的重要公司的支持。<BR>　　(3).由于使用了SOAP，数据是以ASCII文本的方式而非二进制传输，调试很方便；并且由于这样，它的数据容易通过防火墙，不需要防火墙为了程序而单独开一个“漏洞”。<BR>　　(4).此外，WebService实现的技术难度要比CORBA和DCOM小得多。<BR>　　(5).要实现B2B集成，EDI比较完善与比较复杂；而用WebService则可以低成本的实现，小公司也可以用上。<BR>　　(6).在C/S的程序中，WebService可以实现网页无整体刷新的与服务器打交道并取数。</P>
<P>　　缺点：</P>
<P>　　(1).WebService使用了XML对数据封装，会造成大量的数据要在网络中传输。<BR>　　(2).WebService规范没有规定任何与实现相关的细节，包括对象模型、编程语言，这一点，它不如CORBA。</P>
<P>　　<STRONG>10.多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?</STRONG></P>
<P>　　答：多线程有两种实现方法，分别是继承Thread类与实现Runnable接口<BR>　　同步的实现方面有两种，分别是synchronized,wait与notify</P>
<P>　　<STRONG>11.JSP中动态INCLUDE与静态INCLUDE的区别？</STRONG> </P>
<P>　　动态INCLUDE用jsp:include动作实现</P>
<P>&lt;jsp:include page="included.jsp" flush="true"/&gt;</P>
<P>　　它总是会检查所含文件中的变化，适合用于包含动态页面，并且可以带参数</P>
<P>　　静态INCLUDE用include伪码实现,定不会检查所含文件的变化，适用于包含静态页面</P>
<P>　　&lt;%@ include file="included.htm" %&gt;</P><img src ="http://www.blogjava.net/konhon/aggbug/35163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2006-03-14 08:35 <a href="http://www.blogjava.net/konhon/archive/2006/03/14/35163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>上传图片的缩放处理 - 非常实用！（</title><link>http://www.blogjava.net/konhon/archive/2006/03/13/35030.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Mon, 13 Mar 2006 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2006/03/13/35030.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/35030.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2006/03/13/35030.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/35030.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/35030.html</trackback:ping><description><![CDATA[<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><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.io.File;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.awt.image.BufferedImage;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.awt.Image;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.awt.image.AffineTransformOp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;javax.imageio.ImageIO;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.awt.geom.AffineTransform;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_214_2550_Open_Image onclick="this.style.display='none'; Codehighlighter1_214_2550_Open_Text.style.display='none'; Codehighlighter1_214_2550_Closed_Image.style.display='inline'; Codehighlighter1_214_2550_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_214_2550_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_214_2550_Closed_Text.style.display='none'; Codehighlighter1_214_2550_Open_Image.style.display='inline'; Codehighlighter1_214_2550_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;UploadImg&nbsp;</SPAN><SPAN id=Codehighlighter1_214_2550_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"></SPAN><SPAN id=Codehighlighter1_214_2550_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;fromdir;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;fromdir&nbsp;图片的原始目录</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;todir;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;todir&nbsp;处理后的图片存放目录</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;imgfile;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;imgfile&nbsp;原始图片</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sysimgfile;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;sysimgfile&nbsp;处理后的图片文件名前缀</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_516_644_Open_Image onclick="this.style.display='none'; Codehighlighter1_516_644_Open_Text.style.display='none'; Codehighlighter1_516_644_Closed_Image.style.display='inline'; Codehighlighter1_516_644_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_516_644_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_516_644_Closed_Text.style.display='none'; Codehighlighter1_516_644_Open_Image.style.display='inline'; Codehighlighter1_516_644_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;UploadImg(&nbsp;String&nbsp;fromdirNow,&nbsp;String&nbsp;todirNow,&nbsp;String&nbsp;imgfileNow,&nbsp;String&nbsp;sysimgfileNow&nbsp;)</SPAN><SPAN id=Codehighlighter1_516_644_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"></SPAN><SPAN id=Codehighlighter1_516_644_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fromdir&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;fromdirNow;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;todir&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;todirNow;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imgfile&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;imgfileNow;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sysimgfile&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;sysimgfileNow;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">boolean</SPAN><SPAN style="COLOR: #000000">&nbsp;CreateThumbnail()&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throws</SPAN><SPAN style="COLOR: #000000">&nbsp;Exception<BR><IMG id=Codehighlighter1_709_2025_Open_Image onclick="this.style.display='none'; Codehighlighter1_709_2025_Open_Text.style.display='none'; Codehighlighter1_709_2025_Closed_Image.style.display='inline'; Codehighlighter1_709_2025_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_709_2025_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_709_2025_Closed_Text.style.display='none'; Codehighlighter1_709_2025_Open_Image.style.display='inline'; Codehighlighter1_709_2025_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_709_2025_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"></SPAN><SPAN id=Codehighlighter1_709_2025_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;fileExtNmae是图片的格式&nbsp;gif&nbsp;JPG&nbsp;或png<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;String&nbsp;fileExtNmae="";</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">double</SPAN><SPAN style="COLOR: #000000">&nbsp;Ratio&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0.0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;F&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;File(fromdir,imgfile);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(&nbsp;</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">F.isFile()&nbsp;)<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throw</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Exception(F</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;is&nbsp;not&nbsp;image&nbsp;file&nbsp;error&nbsp;in&nbsp;CreateThumbnail!</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">首先判断上传的图片是gif还是JPG&nbsp;ImageIO只能将gif转换为png<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;if&nbsp;(isJpg(imgfile)){<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;fileExtNmae="jpg";<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">else{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;fileExtNmae="png";&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;ThF&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;File(&nbsp;todir,&nbsp;sysimgfile&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">.jpg</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedImage&nbsp;Bi&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;ImageIO.read(F);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">假设图片宽&nbsp;高&nbsp;最大为120&nbsp;120</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Image&nbsp;Itemp&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;Bi.getScaledInstance&nbsp;(</SPAN><SPAN style="COLOR: #000000">120</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">120</SPAN><SPAN style="COLOR: #000000">,Bi.SCALE_SMOOTH);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG id=Codehighlighter1_1450_1618_Open_Image onclick="this.style.display='none'; Codehighlighter1_1450_1618_Open_Text.style.display='none'; Codehighlighter1_1450_1618_Closed_Image.style.display='inline'; Codehighlighter1_1450_1618_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1450_1618_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1450_1618_Closed_Text.style.display='none'; Codehighlighter1_1450_1618_Open_Image.style.display='inline'; Codehighlighter1_1450_1618_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;((Bi.getHeight()</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">120</SPAN><SPAN style="COLOR: #000000">)&nbsp;</SPAN><SPAN style="COLOR: #000000">||</SPAN><SPAN style="COLOR: #000000">&nbsp;(Bi.getWidth()</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">120</SPAN><SPAN style="COLOR: #000000">))</SPAN><SPAN id=Codehighlighter1_1450_1618_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"></SPAN><SPAN id=Codehighlighter1_1450_1618_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(Bi.getHeight()</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">Bi.getWidth())<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ratio&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">120.0</SPAN><SPAN style="COLOR: #000000">/</SPAN><SPAN style="COLOR: #000000">Bi.getHeight();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ratio&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">120.0</SPAN><SPAN style="COLOR: #000000">/</SPAN><SPAN style="COLOR: #000000">Bi.getWidth();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AffineTransformOp&nbsp;op&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;AffineTransformOp(AffineTransform.getScaleInstance(Ratio,&nbsp;Ratio),&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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Itemp&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;op.filter(Bi,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">);<BR><IMG id=Codehighlighter1_1786_1861_Open_Image onclick="this.style.display='none'; Codehighlighter1_1786_1861_Open_Text.style.display='none'; Codehighlighter1_1786_1861_Closed_Image.style.display='inline'; Codehighlighter1_1786_1861_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1786_1861_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1786_1861_Closed_Text.style.display='none'; Codehighlighter1_1786_1861_Open_Image.style.display='inline'; Codehighlighter1_1786_1861_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_1786_1861_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"></SPAN><SPAN id=Codehighlighter1_1786_1861_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageIO.write((BufferedImage)Itemp,&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">jpg</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;ThF);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_1892_1996_Open_Image onclick="this.style.display='none'; Codehighlighter1_1892_1996_Open_Text.style.display='none'; Codehighlighter1_1892_1996_Closed_Image.style.display='inline'; Codehighlighter1_1892_1996_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1892_1996_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1892_1996_Closed_Text.style.display='none'; Codehighlighter1_1892_1996_Open_Image.style.display='inline'; Codehighlighter1_1892_1996_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">&nbsp;(Exception&nbsp;ex)&nbsp;</SPAN><SPAN id=Codehighlighter1_1892_1996_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"></SPAN><SPAN id=Codehighlighter1_1892_1996_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throw</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Exception(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;ImageIo.write&nbsp;error&nbsp;in&nbsp;CreatThum.:&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">ex.getMessage());&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;(</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&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(String[]&nbsp;args)&nbsp;<BR><IMG id=Codehighlighter1_2076_2548_Open_Image onclick="this.style.display='none'; Codehighlighter1_2076_2548_Open_Text.style.display='none'; Codehighlighter1_2076_2548_Closed_Image.style.display='inline'; Codehighlighter1_2076_2548_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_2076_2548_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2076_2548_Closed_Text.style.display='none'; Codehighlighter1_2076_2548_Open_Image.style.display='inline'; Codehighlighter1_2076_2548_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_2076_2548_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"></SPAN><SPAN id=Codehighlighter1_2076_2548_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UploadImg&nbsp;UI;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">boolean</SPAN><SPAN style="COLOR: #000000">&nbsp;ss&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">false</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_2140_2460_Open_Image onclick="this.style.display='none'; Codehighlighter1_2140_2460_Open_Text.style.display='none'; Codehighlighter1_2140_2460_Closed_Image.style.display='inline'; Codehighlighter1_2140_2460_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_2140_2460_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2140_2460_Closed_Text.style.display='none'; Codehighlighter1_2140_2460_Open_Image.style.display='inline'; Codehighlighter1_2140_2460_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN id=Codehighlighter1_2140_2460_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"></SPAN><SPAN id=Codehighlighter1_2140_2460_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UI&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;UploadImg(&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">d:\\javalearn</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">d:\\javalearn</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">ps_high.jpg</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">ps_low</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;UI.CreateThumbnail();<BR><IMG id=Codehighlighter1_2300_2367_Open_Image onclick="this.style.display='none'; Codehighlighter1_2300_2367_Open_Text.style.display='none'; Codehighlighter1_2300_2367_Closed_Image.style.display='inline'; Codehighlighter1_2300_2367_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_2300_2367_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2300_2367_Closed_Text.style.display='none'; Codehighlighter1_2300_2367_Open_Image.style.display='inline'; Codehighlighter1_2300_2367_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(&nbsp;ss&nbsp;)&nbsp;</SPAN><SPAN id=Codehighlighter1_2300_2367_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"></SPAN><SPAN id=Codehighlighter1_2300_2367_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Success</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_2385_2450_Open_Image onclick="this.style.display='none'; Codehighlighter1_2385_2450_Open_Text.style.display='none'; Codehighlighter1_2385_2450_Closed_Image.style.display='inline'; Codehighlighter1_2385_2450_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_2385_2450_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2385_2450_Closed_Text.style.display='none'; Codehighlighter1_2385_2450_Open_Image.style.display='inline'; Codehighlighter1_2385_2450_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN id=Codehighlighter1_2385_2450_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"></SPAN><SPAN id=Codehighlighter1_2385_2450_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Error</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_2488_2542_Open_Image onclick="this.style.display='none'; Codehighlighter1_2488_2542_Open_Text.style.display='none'; Codehighlighter1_2488_2542_Closed_Image.style.display='inline'; Codehighlighter1_2488_2542_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_2488_2542_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2488_2542_Closed_Text.style.display='none'; Codehighlighter1_2488_2542_Open_Image.style.display='inline'; Codehighlighter1_2488_2542_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">(Exception&nbsp;e)</SPAN><SPAN id=Codehighlighter1_2488_2542_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"></SPAN><SPAN id=Codehighlighter1_2488_2542_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(e.toString());<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><img src ="http://www.blogjava.net/konhon/aggbug/35030.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2006-03-13 14:29 <a href="http://www.blogjava.net/konhon/archive/2006/03/13/35030.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>更有效的使用Jbuilder编辑器</title><link>http://www.blogjava.net/konhon/archive/2006/03/09/34471.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Thu, 09 Mar 2006 06:36:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2006/03/09/34471.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/34471.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2006/03/09/34471.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/34471.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/34471.html</trackback:ping><description><![CDATA[一个优秀的程序员必须熟悉自己使用的编辑器，以前UNIX程序员十分熟悉VI，后来的Linux促进了Emacs的发展，这两种编辑器都是不需要鼠标的支持，而鼠标的出现很大程度上影响了编辑的速度，很多在window下写程序的程序员更慢了，因为更多的依赖鼠标，来回的切换鼠标与键盘浪费了许多时间。<BR>以下是我使用JBuilder的一种模式，希望大家能够给我提出一些其他更好的模式和方便的快捷键。<BR><BR>首先我选择在Preferences里设置KeyMapping为Emacs，因为Emacs有更多方便的功能。我们一般使用CUA，最常用的就是CTRL+C功能了，但是我们有理由舍弃它。<BR><BR><BR>首先说编辑Java最常用的快捷键，这几个在几种Keymapping下是一样的。<BR>Ctrl+h : member-insight，就是我们输了一半代码时，敲这个，编辑器生成提示，也可以在“.”号之后用，然后选择回车。这时候如果选择了Emacs我们就可以用更方便的上下选择，而不用去找上下键。在Emacs里向下是Ctrl+n，向上时Ctrl+p，n代表Next，P代表Previos。在出现member-insight，这两个快捷键还好用，大大方便了输入。<BR>Ctrl+j ：expand-template，我们写程序经常要写System.out.println("");,在Jbuilder里我们只需要这样输入Ctrl+j out,然后回车，还有许多其他的，包括main就写Ctrl+j main，这两个个快捷键在两种模式下都可用，在选择的时候也可以用上面说的快捷键上下选择。在Preferences-&gt;template中我们还可以订制自己的模版，比如写一段常用版权声明,然后赋一个值.<BR>Ctrl+Shift+j:enter-sync-edit-mode,选中一段代码,然后按下这个键,就进入了sync-edit-mode,这时对这段代码的一个变量的更改,所有这段代码对应的部分都会改变,很有用,这样不会因为做的乱了,漏了改变某个变量名.<BR>Ctrl+Enter:find-definition,Ctrl+Shift+Enter:find-references,对于第一个,如果光标在变量上,这样按会跑到变量生命的地方,如果是方法且有源代码会跑到方法定义处,若是类且有源代码则跑到类定义处.第二个类似,他是找引用的地方。这两个的好处很明显，尤其面对一个不熟悉的系统时，只有这样去查看代码。<BR>Ctrl+Shift+space.光标移到方法的括号里,然后输入,这时会显示参数的提示。<BR>有一个功能通常很有用，就是注释掉一段代码，在CUA里才有，是Ctrl+/，由于Emacs里有别的用处，所以默认的没有设置，所以我通常在设置里改为Ctrl+Shife+/。<BR><BR><BR>以上是最常用的了，然后是emacs特有的内容。<BR>移动光标。上面已经提到了几个，还有以下很有用。<BR>Ctrl+b 后退光标<BR>Ctrl+f 前进光标<BR>Ctrl+v 下一屏<BR>Alt+v 上一屏<BR>Ctrl+e 一行的结尾<BR>Ctrl+a 一行的开头<BR>Alt+m 一行第一个非空格字符之前。<BR>Ctrl+x g 移到指定行。<BR>相信有了这些键之后，手就不很需要移到END，HOME和鼠标上了。<BR><BR>还有是拷贝粘贴，毕竟Ctrl+c,Ctrl+v,Ctrl+x用的太多了，不用总是觉得麻烦，所以我定义了这几个，只是加上了Shift。Emacs本身也有很多类似的功能。<BR>Ctrl+k：剪切一行，Ctrl+y：粘贴回来，而且如果你用了多次Ctrl+k，点Ctrl+y之后可以再选Alt+y，这样可以把以前剪切的内容粘贴回来。<BR>结合这两种模式的拷贝粘贴，可以实现更加灵活的编辑。<BR><BR>再就是查询，先按Ctrl+s，然后输入查询内容，你会发现这是增量查询，你可以马上看到结果。再按Ctrl+s，可以找下一个，Ctrl+r可以找前一个,如果不输入内容,输入两遍Ctrl+s,会查找上一词的内容.<BR><BR><BR>其他的还有的比较需要，像Ctrl+z没有了,要用Ctrl+shift+-。保存要Ctrl+x Ctrl+s,注意，是分别按，按Ctrl+x之后Jbulider左下角会显示，然后再按后一个。Ctrl+x 1，Ctrl+x 2，Ctrl+x 3，看看是干什么的。还有一个就是Ctrl+x Ctrl+u这样可以将选中的代码全部转化为大写。<BR><BR>常用就这些了,还有很多记不住了,看JBuilder设置就知道了。希望大家不要怕麻烦练习一下，以后就会发现提高效率很高，说不定以后用Emacs会更快上手。<BR><img src ="http://www.blogjava.net/konhon/aggbug/34471.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2006-03-09 14:36 <a href="http://www.blogjava.net/konhon/archive/2006/03/09/34471.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java修饰词总结</title><link>http://www.blogjava.net/konhon/archive/2005/12/20/24738.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Tue, 20 Dec 2005 03:41:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2005/12/20/24738.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/24738.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2005/12/20/24738.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/24738.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/24738.html</trackback:ping><description><![CDATA[Java修饰词的总结<BR><BR>作者：jackliu<BR>e-mail:suntoday@eyou.com<BR><BR>Java语言定义了public、protected、private、abstract、static和final这6常用修饰<BR>词外还定义了5个不太常用的修饰词，下面是对这11个Java修饰词的介绍：<BR><BR>1.public<BR><BR>使用对象：类、接口、成员<BR><BR>介绍：无论它所处在的包定义在哪，该类（接口、成员）都是可访问的<BR><BR>2.private<BR><BR>使用对象：成员<BR><BR>介绍：成员只可以在定义它的类中被访问<BR><BR>3.static<BR><BR>使用对象：类、方法、字段、初始化函数<BR><BR>介绍：成名为static的内部类是一个顶级类，它和包含类的成员是不相关的。静态方法<BR>是类方法，<BR><BR>是被指向到所属的类而不是类的实例。静态字段是类字段，无论该字段所在的类创建了<BR>多少实例，该字<BR><BR>段只存在一个实例被指向到所属的类而不是类的实例。初始化函数是在装载类时执行<BR>的，而不是在创建<BR><BR>实例时执行的。<BR><BR>4.final<BR><BR>使用对象：类、方法、字段、变量<BR><BR>介绍：被定义成final的类不允许出现子类，不能被覆盖（不应用于动态查询），字段值<BR>不允许被<BR><BR>修改。<BR><BR>5.abstract<BR><BR>使用对象：类、接口、方法<BR><BR>介绍：类中包括没有实现的方法，不能被实例化。如果是一个abstract方法，则方法体<BR>为空，该方<BR><BR>法的实现在子类中被定义，并且包含一个abstract方法的类必须是一个abstract类<BR><BR>6.protected<BR><BR>使用对象：成员<BR><BR>介绍：成员只能在定义它的包中被访问，如果在其他包中被访问，则实现这个方法的类<BR>必须是该成<BR><BR>员所属类的子类。<BR><BR>7.native<BR><BR>使用对象：成员<BR><BR>介绍：与操作平台相关，定义时并不定义其方法，方法的实现被一个外部的库实现。<BR><BR>8.strictfp<BR><BR>使用对象：类、方法<BR><BR>介绍：strictfp修饰的类中所有的方法都隐藏了strictfp修饰词，方法执行的所有浮点<BR>计算遵守<BR><BR>IEEE&nbsp;754标准，所有取值包括中间的结果都必须表示为float或double类型，而不能利用<BR>由本地平台浮<BR><BR>点格式或硬件提供的额外精度或表示范围。<BR><BR>9.synchronized<BR><BR>使用对象：方法<BR><BR>介绍：对于一个静态的方法，在执行之前jvm把它所在的类锁定；对于一个非静态类的方<BR>法，执行<BR><BR>前把某个特定对象实例锁定。<BR><BR>10.volatile<BR><BR>使用对象：字段<BR><BR>介绍：因为异步线程可以访问字段，所以有些优化操作是一定不能作用在字段上的。<BR>volatile有时<BR><BR>可以代替synchronized。<BR><BR>11.transient<BR><BR>使用对象：字段<BR><BR>介绍：字段不是对象持久状态的一部分，不应该把字段和对象一起串起。<BR><img src ="http://www.blogjava.net/konhon/aggbug/24738.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2005-12-20 11:41 <a href="http://www.blogjava.net/konhon/archive/2005/12/20/24738.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将Java应用程序本地编译为EXE的几种方法</title><link>http://www.blogjava.net/konhon/archive/2005/12/20/24731.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Tue, 20 Dec 2005 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2005/12/20/24731.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/24731.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2005/12/20/24731.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/24731.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/24731.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=4 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top align=middle colSpan=2><FONT class=bigfont face=Tahoma><B></B></FONT></TD></TR>
<TR>
<TD vAlign=top align=middle colSpan=2><SPAN class=normalfont><FONT face=Tahoma><FONT color=#666666></FONT></FONT></SPAN></TD></TR>
<TR>
<TD vAlign=top bgColor=#eeeeee colSpan=2 height=1><FONT face=Tahoma></FONT></TD></TR>
<TR>
<TD vAlign=top colSpan=2>
<TABLE cellSpacing=1 cellPadding=4 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top>
<DIV class=subhead><B>将Java应用程序本地编译为EXE的几种方法</B></DIV></TD></TR>
<TR>
<TD class=content vAlign=top>
<TABLE width=200 align=right border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE>将Java应用程序本地编译为EXE的几种方法(推荐使用JOVE和JET)<BR>1.&nbsp;从www.towerj.com获得一个TowerJ编译器，该编译器可以将你的CLASS文件编译成EXE文件。<BR>2.&nbsp;利用微软的SDK-Java&nbsp;4.0所提供的jexegen.exe创建EXE文件，这个软件可以从微软的网站免费下载，地址如下：<BR><A href="http://www.microsoft.com/java/download/dl_sdk40.htm"><FONT color=#0066cc>http://www.microsoft.com/java/download/dl_sdk40.htm</FONT></A><BR>jexegen的语法如下：<BR>jexegen&nbsp;/OUT:exe_file_name<BR>/MAIN:main_class_name&nbsp;main_class_file_name.class<BR>[and&nbsp;other&nbsp;classes]<BR>3.&nbsp;Visual&nbsp;Cafe提供了一个能够创建EXE文件的本地编译器。你需要安装该光盘上提供的EXE组件。<BR>4.&nbsp;使用InstallAnywhere创建安装盘。<BR>5.&nbsp;使用IBM&nbsp;AlphaWorks提供的一个高性能Java编译器，该编译器可以从下面的地址获得：<BR><A href="http://www.alphaworks.ibm.com/tech/hpc"><FONT color=#0066cc>http://www.alphaworks.ibm.com/tech/hpc</FONT></A><BR>6.&nbsp;JET是一个优秀的Java语言本地编译器。该编译器可以从这个网站获得一个测试版本：&nbsp;<A href="http://www.excelsior-usa.com/jet.html"><FONT color=#0066cc>http://www.excelsior-usa.com/jet.html</FONT></A><BR>7.&nbsp;Instantiations公司的JOVE<BR><A href="http://www.instantiations.com/jove/...ejovesystem.htm"><FONT color=#0066cc>http://www.instantiations.com/jove/...ejovesystem.htm</FONT></A><BR>JOVE公司合并了以前的SuperCede，一个优秀的本地编译器，现在SuperCede&nbsp;已经不复存在了。<BR>8.&nbsp;JToEXE<BR>Bravo&nbsp;Zulu&nbsp;Consulting,&nbsp;Inc开发的一款本地编译器，本来可以从该公司的网页上免费下载的，不过目前在该公司的主页上找不到了。<BR>主页：<A href="http://www.bravozulu.com/"><FONT color=#0066cc>http://www.bravozulu.com/</FONT></A><BR>根据精华区中的资料，下面这个FTP上曾经有过这个软件，不知道现在是不是还在：<BR>ftp://race.dlut.edu.cn/pub/java/tools/jet<BR>注：本文的主要内容来自如下网站，本人对其中的技术性内容进行了确认并补<BR>充了一小部分内容。&nbsp;（tack）<BR><A href="http://www.artima.com/legacy/answer...ssages/190.html"><FONT color=#0066cc>http://www.artima.com/legacy/answer...ssages/190.html</FONT></A><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/konhon/aggbug/24731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2005-12-20 11:19 <a href="http://www.blogjava.net/konhon/archive/2005/12/20/24731.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用java怎么能把汉字转成UNICODE码</title><link>http://www.blogjava.net/konhon/archive/2005/12/14/23866.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Wed, 14 Dec 2005 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2005/12/14/23866.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/23866.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2005/12/14/23866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/23866.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/23866.html</trackback:ping><description><![CDATA[<P>&nbsp;</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"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">方法一：<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;String&nbsp;Conversion(String&nbsp;s)<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">throws</SPAN><SPAN style="COLOR: #000000">&nbsp;IOException<BR><IMG id=Codehighlighter1_66_500_Open_Image onclick="this.style.display='none'; Codehighlighter1_66_500_Open_Text.style.display='none'; Codehighlighter1_66_500_Closed_Image.style.display='inline'; Codehighlighter1_66_500_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_66_500_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_66_500_Closed_Text.style.display='none'; Codehighlighter1_66_500_Open_Image.style.display='inline'; Codehighlighter1_66_500_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_66_500_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"></SPAN><SPAN id=Codehighlighter1_66_500_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>String&nbsp;s1&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;String();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>String&nbsp;s2&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;String();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">byte</SPAN><SPAN style="COLOR: #000000">&nbsp;abyte0[]&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;s.getBytes(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Unicode</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;j&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">;&nbsp;j&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;abyte0.length;&nbsp;j&nbsp;</SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">)<BR><IMG id=Codehighlighter1_201_486_Open_Image onclick="this.style.display='none'; Codehighlighter1_201_486_Open_Text.style.display='none'; Codehighlighter1_201_486_Closed_Image.style.display='inline'; Codehighlighter1_201_486_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_201_486_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_201_486_Closed_Text.style.display='none'; Codehighlighter1_201_486_Open_Image.style.display='inline'; Codehighlighter1_201_486_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_201_486_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"></SPAN><SPAN id=Codehighlighter1_201_486_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>String&nbsp;s3&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;Integer.toHexString(abyte0[j&nbsp;</SPAN><SPAN style="COLOR: #000000">+</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></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;i&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;s3.length();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(i&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</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>s1&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;s1&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&amp;#x</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">0</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;s3;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>s1&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;s1&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&amp;#x</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;s3.substring(i&nbsp;</SPAN><SPAN style="COLOR: #000000">-</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>s3&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;Integer.toHexString(abyte0[j]);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>i&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;s3.length();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(i&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</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>s1&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;s1&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;s3&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>s1&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;s1&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;s3.substring(i&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">2</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">;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;s1;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>方法二：<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;String&nbsp;enCode(String&nbsp;str)<BR><IMG id=Codehighlighter1_550_1210_Open_Image onclick="this.style.display='none'; Codehighlighter1_550_1210_Open_Text.style.display='none'; Codehighlighter1_550_1210_Closed_Image.style.display='inline'; Codehighlighter1_550_1210_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_550_1210_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_550_1210_Closed_Text.style.display='none'; Codehighlighter1_550_1210_Open_Image.style.display='inline'; Codehighlighter1_550_1210_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_550_1210_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"></SPAN><SPAN id=Codehighlighter1_550_1210_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(str</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">""</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;String&nbsp;hs</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">""</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_612_1121_Open_Image onclick="this.style.display='none'; Codehighlighter1_612_1121_Open_Text.style.display='none'; Codehighlighter1_612_1121_Closed_Image.style.display='inline'; Codehighlighter1_612_1121_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_612_1121_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_612_1121_Closed_Text.style.display='none'; Codehighlighter1_612_1121_Open_Image.style.display='inline'; Codehighlighter1_612_1121_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_612_1121_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"></SPAN><SPAN id=Codehighlighter1_612_1121_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">byte</SPAN><SPAN style="COLOR: #000000">&nbsp;b[]</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">str.getBytes(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">UTF-16</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">System.out.println(byte2hex(b));</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">&nbsp;(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;n</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;n</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">b.length;n</SPAN><SPAN style="COLOR: #000000">++</SPAN><SPAN style="COLOR: #000000">)<BR><IMG id=Codehighlighter1_723_875_Open_Image onclick="this.style.display='none'; Codehighlighter1_723_875_Open_Text.style.display='none'; Codehighlighter1_723_875_Closed_Image.style.display='inline'; Codehighlighter1_723_875_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_723_875_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_723_875_Closed_Text.style.display='none'; Codehighlighter1_723_875_Open_Image.style.display='inline'; Codehighlighter1_723_875_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_723_875_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"></SPAN><SPAN id=Codehighlighter1_723_875_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;str</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">(java.lang.Integer.toHexString(b[n]&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0XFF</SPAN><SPAN style="COLOR: #000000">));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(str.length()</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">)<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;hs</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">hs</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">str;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;hs</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">hs</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">str;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(n</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">b.length</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">)hs</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">hs</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">""</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&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></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;str</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;hs.toUpperCase().substring(</SPAN><SPAN style="COLOR: #000000">4</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">System.out.println(str);</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000">[]&nbsp;chs</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">str.toCharArray();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;str</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">""</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;i</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;i</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">chs.length;i</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">i</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">4</SPAN><SPAN style="COLOR: #000000">)<BR><IMG id=Codehighlighter1_1043_1101_Open_Image onclick="this.style.display='none'; Codehighlighter1_1043_1101_Open_Text.style.display='none'; Codehighlighter1_1043_1101_Closed_Image.style.display='inline'; Codehighlighter1_1043_1101_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1043_1101_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1043_1101_Closed_Text.style.display='none'; Codehighlighter1_1043_1101_Open_Image.style.display='inline'; Codehighlighter1_1043_1101_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1043_1101_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"></SPAN><SPAN id=Codehighlighter1_1043_1101_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;str</SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&amp;#x</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">chs[i]</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">chs[i</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">]</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">chs[i</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">]</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">chs[i</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">]</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;str;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">(Exception&nbsp;e)<BR><IMG id=Codehighlighter1_1148_1190_Open_Image onclick="this.style.display='none'; Codehighlighter1_1148_1190_Open_Text.style.display='none'; Codehighlighter1_1148_1190_Closed_Image.style.display='inline'; Codehighlighter1_1148_1190_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1148_1190_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1148_1190_Closed_Text.style.display='none'; Codehighlighter1_1148_1190_Open_Image.style.display='inline'; Codehighlighter1_1148_1190_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1148_1190_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"></SPAN><SPAN id=Codehighlighter1_1148_1190_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;System.out.print(e.getMessage());<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;str;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><img src ="http://www.blogjava.net/konhon/aggbug/23866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2005-12-14 14:29 <a href="http://www.blogjava.net/konhon/archive/2005/12/14/23866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>每个Java初学者都应该搞懂的问题</title><link>http://www.blogjava.net/konhon/archive/2005/12/13/23580.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Tue, 13 Dec 2005 00:07:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2005/12/13/23580.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/23580.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2005/12/13/23580.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/23580.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/23580.html</trackback:ping><description><![CDATA[<SPAN class=javascript id=text613056>对于这个系列里的问题，每个学Java的人都应该搞懂。当然，如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了，却不很懂这些问题，请将你自己重归初学者行列。内容均来自于CSDN的经典老贴。<BR><BR><B>问题一：</B><FONT color=red>我声明了什么！</FONT><BR><BR>String s = "Hello world!";<BR><BR>许多人都做过这样的事情，但是，我们到底声明了什么？回答通常是：一个String，内容是“Hello world!”。这样模糊的回答通常是概念不清的根源。如果要准确的回答，一半的人大概会回答错误。<BR>这个语句声明的是一个指向对象的引用，名为“s”，可以指向类型为String的任何对象，目前指向"Hello world!"这个String类型的对象。这就是真正发生的事情。我们并没有声明一个String对象，我们只是声明了一个只能指向String对象的引用变量。所以，如果在刚才那句语句后面，如果再运行一句：<BR><BR>String string = s;<BR><BR>我们是声明了另外一个只能指向String对象的引用，名为string，并没有第二个对象产生，string还是指向原来那个对象，也就是，和s指向同一个对象。<BR><BR><B>问题二：</B><FONT color=red>"=="和equals方法究竟有什么区别？</FONT><BR><BR>==操作符专门用来比较变量的值是否相等。比较好理解的一点是：<BR>int a=10;<BR>int b=10;<BR>则a==b将是true。<BR>但不好理解的地方是：<BR>String a=new String("foo");<BR>String b=new String("foo");<BR>则a==b将返回false。<BR><BR>根据前一帖说过，对象变量其实是一个引用，它们的值是指向对象所在的内存地址，而不是对象本身。a和b都使用了new操作符，意味着将在内存中产生两个内容为"foo"的字符串，既然是“两个”，它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的值，所以使用"=="操作符，结果会是false。诚然，a和b所指的对象，它们的内容都是"foo"，应该是“相等”，但是==操作符并不涉及到对象内容的比较。<BR>对象内容的比较，正是equals方法做的事。<BR><BR>看一下Object对象的equals方法是如何实现的：<BR>boolean equals(Object o){<BR><BR>return this==o;<BR><BR>}<BR>Object对象默认使用了==操作符。所以如果你自创的类没有覆盖equals方法，那你的类使用equals和使用==会得到同样的结果。同样也可以看出，Object的equals方法没有达到equals方法应该达到的目标：比较两个对象内容是否相等。因为答案应该由类的创建者决定，所以Object把这个任务留给了类的创建者。<BR><BR>看一下一个极端的类：<BR>Class Monster{<BR>private String content;<BR>...<BR>boolean equals(Object another){ return true;}<BR><BR>}<BR>我覆盖了equals方法。这个实现会导致无论Monster实例内容如何，它们之间的比较永远返回true。<BR><BR>所以当你是用equals方法判断对象的内容是否相等，请不要想当然。因为可能你认为相等，而这个类的作者不这样认为，而类的equals方法的实现是由他掌握的。如果你需要使用equals方法，或者使用任何基于散列码的集合（HashSet,HashMap,HashTable），请察看一下java doc以确认这个类的equals逻辑是如何实现的。<BR><BR><B>问题三：</B><FONT color=red>String到底变了没有？</FONT><BR><BR>没有。因为String被设计成不可变(immutable)类，所以它的所有对象都是不可变对象。请看下列代码：<BR><BR>String s = "Hello";<BR>s = s + " world!";<BR><BR>s所指向的对象是否改变了呢？从本系列第一篇的结论很容易导出这个结论。我们来看看发生了什么事情。在这段代码中，s原先指向一个String对象，内容是"Hello"，然后我们对s进行了+操作，那么s所指向的那个对象是否发生了改变呢？答案是没有。这时，s不指向原来那个对象了，而指向了另一个String对象，内容为"Hello world!"，原来那个对象还存在于内存之中，只是s这个引用变量不再指向它了。<BR>通过上面的说明，我们很容易导出另一个结论，如果经常对字符串进行各种各样的修改，或者说，不可预见的修改，那么使用String来代表字符串的话会引起很大的内存开销。因为String对象建立之后不能再改变，所以对于每一个不同的字符串，都需要一个String对象来表示。这时，应该考虑使用StringBuffer类，它允许修改，而不是每个不同的字符串都要生成一个新的对象。并且，这两种类的对象转换十分容易。<BR>同时，我们还可以知道，如果要使用内容相同的字符串，不必每次都new一个String。例如我们要在构造器中对一个名叫s的String引用变量进行初始化，把它设置为初始值，应当这样做：<BR>public class Demo {<BR>private String s;<BR>...<BR>public Demo {<BR>s = "Initial Value";<BR>}<BR>...<BR>}<BR>而非<BR>s = new String("Initial Value");<BR>后者每次都会调用构造器，生成新对象，性能低下且内存开销大，并且没有意义，因为String对象不可改变，所以对于内容相同的字符串，只要一个String对象来表示就可以了。也就说，多次调用上面的构造器创建多个对象，他们的String类型属性s都指向同一个对象。<BR>上面的结论还基于这样一个事实：对于字符串常量，如果内容相同，Java认为它们代表同一个String对象。而用关键字new调用构造器，总是会创建一个新的对象，无论内容是否相同。<BR>至于为什么要把String类设计成不可变类，是它的用途决定的。其实不只String，很多Java标准类库中的类都是不可变的。在开发一个系统的时候，我们有时候也需要设计不可变类，来传递一组相关的值，这也是面向对象思想的体现。不可变类有一些优点，比如因为它的对象是只读的，所以多线程并发访问也不会有任何问题。当然也有一些缺点，比如每个不同的状态都要一个对象来代表，可能会造成性能上的问题。所以Java标准类库还提供了一个可变版本，即StringBuffer。<BR><BR><B>问题四：</B><FONT color=red>final关键字到底修饰了什么？</FONT><BR><BR>final使得被修饰的变量"不变"，但是由于对象型变量的本质是“引用”，使得“不变”也有了两种含义：引用本身的不变，和引用指向的对象不变。<BR><BR>引用本身的不变：<BR>final StringBuffer a=new StringBuffer("immutable");<BR>final StringBuffer b=new StringBuffer("not immutable");<BR>a=b;//编译期错误<BR><BR>引用指向的对象不变：<BR>final StringBuffer a=new StringBuffer("immutable");<BR>a.append(" broken!"); //编译通过<BR><BR>可见，final只对引用的“值”(也即它所指向的那个对象的内存地址)有效，它迫使引用只能指向初始指向的那个对象，改变它的指向会导致编译期错误。至于它所指向的对象的变化，final是不负责的。这很类似==操作符：==操作符只负责引用的“值”相等，至于这个地址所指向的对象内容是否相等，==操作符是不管的。<BR><BR>理解final问题有很重要的含义。许多程序漏洞都基于此----final只能保证引用永远指向固定对象，不能保证那个对象的状态不变。在多线程的操作中,一个对象会被多个线程共享或修改，一个线程对对象无意识的修改可能会导致另一个使用此对象的线程崩溃。一个错误的解决方法就是在此对象新建的时候把它声明为final，意图使得它“永远不变”。其实那是徒劳的。<BR><BR><B>问题五：</B><FONT color=red>到底要怎么样初始化！</FONT><BR><BR>本问题讨论变量的初始化，所以先来看一下Java中有哪些种类的变量。<BR>1. 类的属性，或者叫值域<BR>2. 方法里的局部变量<BR>3. 方法的参数<BR><BR>对于第一种变量，Java虚拟机会自动进行初始化。如果给出了初始值，则初始化为该初始值。如果没有给出，则把它初始化为该类型变量的默认初始值。<BR><BR>int类型变量默认初始值为0<BR>float类型变量默认初始值为0.0f<BR>double类型变量默认初始值为0.0<BR>boolean类型变量默认初始值为false<BR>char类型变量默认初始值为0(ASCII码)<BR>long类型变量默认初始值为0<BR>所有对象引用类型变量默认初始值为null，即不指向任何对象。注意数组本身也是对象，所以没有初始化的数组引用在自动初始化后其值也是null。<BR><BR>对于两种不同的类属性，static属性与instance属性，初始化的时机是不同的。instance属性在创建实例的时候初始化，static属性在类加载，也就是第一次用到这个类的时候初始化，对于后来的实例的创建，不再次进行初始化。这个问题会在以后的系列中进行详细讨论。<BR><BR>对于第二种变量，必须明确地进行初始化。如果再没有初始化之前就试图使用它，编译器会抗议。如果初始化的语句在try块中或if块中，也必须要让它在第一次使用前一定能够得到赋值。也就是说，把初始化语句放在只有if块的条件判断语句中编译器也会抗议，因为执行的时候可能不符合if后面的判断条件，如此一来初始化语句就不会被执行了，这就违反了局部变量使用前必须初始化的规定。但如果在else块中也有初始化语句，就可以通过编译，因为无论如何，总有至少一条初始化语句会被执行，不会发生使用前未被初始化的事情。对于try-catch也是一样，如果只有在try块里才有初始化语句，编译部通过。如果在catch或finally里也有，则可以通过编译。总之，要保证局部变量在使用之前一定被初始化了。所以，一个好的做法是在声明他们的时候就初始化他们，如果不知道要出事化成什么值好，就用上面的默认值吧！<BR><BR>其实第三种变量和第二种本质上是一样的，都是方法中的局部变量。只不过作为参数，肯定是被初始化过的，传入的值就是初始值，所以不需要初始化。<BR><BR><B>问题六：</B><FONT color=red>instanceof是什么东东？</FONT><BR><BR>instanceof是Java的一个二元操作符，和==，&gt;，&lt;是同一类东东。由于它是由字母组成的，所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例，返回boolean类型的数据。举个例子：<BR><BR>String s = "I AM an Object!";<BR>boolean isObject = s instanceof Object;<BR><BR>我们声明了一个String对象引用，指向一个String对象，然后用instancof来测试它所指向的对象是否是Object类的一个实例，显然，这是真的，所以返回true，也就是isObject的值为True。<BR>instanceof有一些用处。比如我们写了一个处理账单的系统，其中有这样三个类：<BR><BR>public class Bill {//省略细节}<BR>public class PhoneBill extends Bill {//省略细节}<BR>public class GasBill extends Bill {//省略细节}<BR><BR>在处理程序里有一个方法，接受一个Bill类型的对象，计算金额。假设两种账单计算方法不同，而传入的Bill对象可能是两种中的任何一种，所以要用instanceof来判断：<BR><BR>public double calculate(Bill bill) {<BR>if (bill instanceof PhoneBill) {<BR>//计算电话账单<BR>}<BR>if (bill instanceof GasBill) {<BR>//计算燃气账单<BR>}<BR>...<BR>}<BR>这样就可以用一个方法处理两种子类。<BR><BR>然而，这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现，这是面向对象变成应有的做法，避免回到结构化编程模式。只要提供两个名字和返回值都相同，接受参数类型不同的方法就可以了：<BR><BR>public double calculate(PhoneBill bill) {<BR>//计算电话账单<BR>}<BR><BR>public double calculate(GasBill bill) {<BR>//计算燃气账单<BR>}<BR><BR>所以，使用instanceof在绝大多数情况下并不是推荐的做法，应当好好利用多态。 </SPAN><BR><img src ="http://www.blogjava.net/konhon/aggbug/23580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2005-12-13 08:07 <a href="http://www.blogjava.net/konhon/archive/2005/12/13/23580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javaAPI 例子,帮助,下载,连接 等</title><link>http://www.blogjava.net/konhon/archive/2005/12/13/23579.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Tue, 13 Dec 2005 00:04:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2005/12/13/23579.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/23579.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2005/12/13/23579.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/23579.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/23579.html</trackback:ping><description><![CDATA[<SPAN class=javascript id=text684975><A class=ilink href="http://javaalmanac.com/egs/" target=_blank><FONT color=#004080>http://javaalmanac.com/egs/</FONT></A><BR>almost all there with examples<BR><BR>Free, good, and official <a title="Java" href="http://www.blogjava.net/konhon/category/3016.html" target="_blank">Java</a> tutorial:<BR><A class=ilink href="http://java.sun.com/docs/books/tutorial/" target=_blank><FONT color=#004080>http://java.sun.com/docs/books/tutorial/</FONT></A><BR><BR>Thinking in Java 3rd Edition，中文版 + <a title="English" href="http://www.blogjava.net/konhon/category/4948.html" target="_blank">English</a> version<BR><A class=ilink href="http://java.galesoft.com/" target=_blank>http://java.galesoft.com/</A><BR><BR>Code Conventions for the JavaTM Programming Language<BR><A class=ilink href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html" target=_blank>http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html</A> <BR><BR>Java API doc<BR><A class=ilink href="http://java.sun.com/j2se/1.4.2/docs/api/index.html" target=_blank>http://java.sun.com/j2se/1.4.2/docs/api/index.html</A><BR><A class=ilink href="http://java.sun.com/j2se/1.5.0/docs/api/index.html" target=_blank>http://java.sun.com/j2se/1.5.0/docs/api/index.html</A><BR><BR>api 中文版 and many others<BR>See links in 『 Java新技术,新闻，应用与资源等 』 <BR><BR>Excellent article about Runtime from JavaWorld!<BR><A class=ilink href="http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html" target=_blank>http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html</A> </SPAN><BR><img src ="http://www.blogjava.net/konhon/aggbug/23579.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2005-12-13 08:04 <a href="http://www.blogjava.net/konhon/archive/2005/12/13/23579.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java开发者必去的技术网站 </title><link>http://www.blogjava.net/konhon/archive/2005/09/24/13897.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Sat, 24 Sep 2005 00:08:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2005/09/24/13897.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/13897.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2005/09/24/13897.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/13897.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/13897.html</trackback:ping><description><![CDATA[<DIV class=postTitle>&nbsp;</DIV>
<DIV class=postText>
<P>转载至<A href="http://blog.csdn.net/jollyant/archive/2005/09/22/487072.aspx">http://blog.csdn.net/jollyant/archive/2005/09/22/487072.aspx</A></P>
<P>【收藏】Java开发者必去的技术网站 <BR>英文网站 <BR><A href="http://www.javaalmanac.com/"><STRONG><FONT color=#006bad>http://www.javaalmanac.com</FONT></STRONG></A> - Java开发者年鉴一书的在线版本. 要想快速查到某种Java技巧的用法及示例代码, 这是一个不错的去处. <BR><A href="http://www.onjava.com/"><STRONG><FONT color=#006bad>http://www.onjava.com</FONT></STRONG></A> - O'Reilly的Java网站. 每周都有新文章. <BR><A href="http://java.sun.com/"><STRONG><FONT color=#006bad>http://java.sun.com</FONT></STRONG></A> - 官方的Java开发者网站 - 每周都有新文章发表. <BR><A href="http://www.developer.com/java"><STRONG><FONT color=#006bad>http://www.developer.com/java</FONT></STRONG></A> - 由Gamelan.com 维护的Java技术文章网站. <BR><A href="http://www.java.net/"><STRONG><FONT color=#006bad>http://www.java.net</FONT></STRONG></A> - Sun公司维护的一个Java社区网站. <BR><A href="http://www.builder.com/"><STRONG><FONT color=#006bad>http://www.builder.com</FONT></STRONG></A> - Cnet的Builder.com网站 - 所有的技术文章, 以Java为主. <BR><A href="http://www.ibm.com/developerworks/java"><STRONG><FONT color=#006bad>http://www.ibm.com/developerworks/java</FONT></STRONG></A> - IBM的Developerworks技术网站; 这是其中的Java技术主页. <BR><A href="http://www.javaworld.com/"><STRONG><FONT color=#006bad>http://www.javaworld.com</FONT></STRONG></A> - 最早的一个Java站点. 每周更新Java技术文章. <BR><A href="http://www.devx.com/java"><STRONG><FONT color=#006bad>http://www.devx.com/java</FONT></STRONG></A> - DevX维护的一个Java技术文章网站. <BR><A href="http://www.fawcette.com/javapro"><STRONG><FONT color=#006bad>http://www.fawcette.com/javapro</FONT></STRONG></A> - JavaPro在线杂志网站. <BR><A href="http://www.sys-con.com/java"><STRONG><FONT color=#006bad>http://www.sys-con.com/java</FONT></STRONG></A> - Java Developers Journal的在线杂志网站. <BR><A href="http://www.javadesktop.org/"><STRONG><FONT color=#006bad>http://www.javadesktop.org</FONT></STRONG></A> - 位于Java.net的一个Java桌面技术社区网站. <BR><A href="http://www.theserverside.com/"><STRONG><FONT color=#006bad>http://www.theserverside.com</FONT></STRONG></A> - 这是一个讨论所有Java服务器端技术的网站. <BR><A href="http://www.jars.com/"><STRONG><FONT color=#006bad>http://www.jars.com</FONT></STRONG></A> - 提供Java评论服务. 包括各种framework和应用程序. <BR><A href="http://www.jguru.com/"><STRONG><FONT color=#006bad>http://www.jguru.com</FONT></STRONG></A> - 一个非常棒的采用Q&amp;A形式的Java技术资源社区. <BR><A href="http://www.javaranch.com/"><STRONG><FONT color=#006bad>http://www.javaranch.com</FONT></STRONG></A> - 一个论坛，得到Java问题答案的地方，初学者的好去处。 <BR><A href="http://www.ibiblio.org/javafaq/javafaq.html"><STRONG><FONT color=#006bad>http://www.ibiblio.org/javafaq/javafaq.html</FONT></STRONG></A> - comp.lang.java的FAQ站点 - 收集了来自comp.lang.java新闻组的问题和答案的分类目录. <BR><A href="http://java.sun.com/docs/books/tutorial/"><STRONG><FONT color=#006bad>http://java.sun.com/docs/books/tutorial/</FONT></STRONG></A> - 来自SUN公司的官方Java指南 - 对于了解几乎所有的java技术特性非常有帮助. <BR><A href="http://www.javablogs.com/"><STRONG><FONT color=#006bad>http://www.javablogs.com</FONT></STRONG></A> - 互联网上最活跃的一个Java Blog网站. <BR><A href="http://java.about.com/"><STRONG><FONT color=#006bad>http://java.about.com/</FONT></STRONG></A> - 来自About.com的Java新闻和技术文章网站. <BR><A href="http://www.objectlearn.com/index.jsp"><STRONG><FONT color=#006bad>http://www.objectlearn.com/index.jsp</FONT></STRONG></A></P>
<P>中文网站<BR><A href="http://www-900.ibm.com/developerWorks/cn/java/index.shtml"><FONT color=#006bad><STRONG>http://www-900.ibm.com/developerWorks/cn/java/index.shtml</STRONG></FONT></A><BR><A href="http://diy.ccidnet.com/pub/article/c317_a71330_p1.html"><STRONG><FONT color=#006bad>http://diy.ccidnet.com/pub/article/c317_a71330_p1.html</FONT></STRONG></A>&nbsp; 赛迪网J2EE专题<BR><A href="http://www.javaresearch.org/"><STRONG><FONT color=#006bad>http://www.javaresearch.org/</FONT></STRONG></A>&nbsp;&nbsp;&nbsp; Java研究组织<BR><A href="http://www.jdon.com/"><STRONG><FONT color=#006bad>http://www.jdon.com/</FONT></STRONG></A>&nbsp;&nbsp; J道－Java和J2EE解决之道<BR><A href="http://community.csdn.net/expert/forum.asp"><STRONG><FONT color=#006bad>http://community.csdn.net/expert/forum.asp</FONT></STRONG></A>&nbsp;&nbsp; CSDN技术社区</P></DIV><img src ="http://www.blogjava.net/konhon/aggbug/13897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2005-09-24 08:08 <a href="http://www.blogjava.net/konhon/archive/2005/09/24/13897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA精华区分类汇总 </title><link>http://www.blogjava.net/konhon/archive/2005/09/23/13816.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Fri, 23 Sep 2005 02:47:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2005/09/23/13816.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/13816.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2005/09/23/13816.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/13816.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/13816.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=2 cellPadding=2 width="100%" align=center border=0>
<TBODY>
<TR>
<TD vAlign=bottom align=left colSpan=2><A class=maintitle href="http://bbs.chinaunix.net/forum/viewtopic.php?t=176605&amp;show_type=new&amp;start=0&amp;postdays=0&amp;postorder=asc&amp;highlight=&amp;sid=372540d24a5cde5939206782b178701a"><STRONG><FONT color=#002c99 size=5>JAVA精华区分类汇总</FONT></STRONG></A></TD></TR></TBODY></TABLE><A href="http://bbs.chinaunix.net/forum/viewtopic.php?t=176605&amp;show_type=new"><BR>http://bbs.chinaunix.net/forum/viewtopic.php?t=176605&amp;show_type=new</A><img src ="http://www.blogjava.net/konhon/aggbug/13816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2005-09-23 10:47 <a href="http://www.blogjava.net/konhon/archive/2005/09/23/13816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入浅出Java多线程程序设计（下）</title><link>http://www.blogjava.net/konhon/archive/2005/09/23/13815.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Fri, 23 Sep 2005 02:45:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2005/09/23/13815.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/13815.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2005/09/23/13815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/13815.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/13815.html</trackback:ping><description><![CDATA[<P>六：线程的阻塞 </P>
<P>&nbsp;&nbsp; 为了解决对共享存储区的访问冲突，Java 引入了同步机制，现在让我们来考察多个线程对共享资源的访问，显然同步机制已经不够了，因为在任意时刻所要求的资源不一定已经准备好了被访问，反过来，同一时刻准备好了的资源也可能不止一个。为了解决这种情况下的访问控制问题，Java 引入了对阻塞机制的支持。 <BR>&nbsp;&nbsp;&nbsp; 阻塞指的是暂停一个线程的执行以等待某个条件发生（如某资源就绪），学过操作系统的同学对它一定已经很熟悉了。Java 提供了大量方法来支持阻塞，下面让我们逐一分析。 </P>
<P>　　1. sleep() 方法：sleep() 允许 指定以毫秒为单位的一段时间作为参数，它使得线程在指定的时间内进入阻塞状态，不能得到CPU 时间，指定的时间一过，线程重新进入可执行状态。 <BR>　　典型地，sleep() 被用在等待某个资源就绪的情形：测试发现条件不满足后，让线程阻塞一段时间后重新测试，直到条件满足为止。<BR>　　2. suspend() 和 resume() 方法：两个方法配套使用，suspend()使得线程进入阻塞状态，并且不会自动恢复，必须其对应的resume() 被调用，才能使得线程重新进入可执行状态。典型地，suspend() 和 resume() 被用在等待另一个线程产生的结果的情形：测试发现结果还没有产生后，让线程阻塞，另一个线程产生了结果后，调用 resume() 使其恢复。 <BR>　　3. yield() 方法：yield() 使得线程放弃当前分得的 CPU 时间，但是不使线程阻塞，即线程仍处于可执行状态，随时可能再次分得 CPU 时间。调用 yield() 的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程。<BR>　　4. wait() 和 notify() 方法：两个方法配套使用，wait() 使得线程进入阻塞状态，它有两种形式，一种允许 指定以毫秒为单位的一段时间作为参数，另一种没有参数，前者当对应的 notify() 被调用或者超出指定时间时线程重新进入可执行状态，后者则必须对应的 notify()被调用。 <BR>&nbsp;&nbsp; 初看起来它们与 suspend() 和 resume() 方法对没有什么分别，但是事实上它们是截然不同的。区别的核心在于，前面叙述的所有方法，阻塞时都不会释放占用的锁（如果占用了的话），而这一对方法则相反。 　上述的核心区别导致了一系列的细节上的区别。 </P>
<P>&nbsp;&nbsp;&nbsp; 首先，前面叙述的所有方法都隶属于 Thread 类，但是这一对却直接隶属于 Object 类，也就是说，所有对象都拥有这一对方法。初看起来这十分不可思议，但是实际上却是很自然的，因为这一对方法阻塞时要释放占用的锁，而锁是任何对象都具有的，调用任意对象的 wait() 方法导致线程阻塞，并且该对象上的锁被释放。而调用 任意对象的notify()方法则导致因调用该对象的 wait() 方法而阻塞的线程中随机选择的一个解除阻塞（但要等到获得锁后才真正可执行）。 <BR>&nbsp;&nbsp;&nbsp; 其次，前面叙述的所有方法都可在任何位置调用，但是这一对方法却必须在 synchronized 方法或块中调用，理由也很简单，只有在synchronized 方法或块中当前线程才占有锁，才有锁可以释放。同样的道理，调用这一对方法的对象上的锁必须为当前线程所拥有，这样才有锁可以释放。因此，这一对方法调用必须放置在这样的 synchronized 方法或块中，该方法或块的上锁对象就是调用这一对方法的对象。若不满足这一条件，则程序虽然仍能编译，但在运行时会出现IllegalMonitorStateException 异常。<BR>&nbsp;&nbsp;&nbsp; wait() 和 notify() 方法的上述特性决定了它们经常和synchronized 方法或块一起使用，将它们和操作系统的进程间通信机制作一个比较就会发现它们的相似性：synchronized方法或块提供了类似于操作系统原语的功能，它们的执行不会受到多线程机制的干扰，而这一对方法则相当于 block 和wakeup 原语（这一对方法均声明为 synchronized）。它们的结合使得我们可以实现操作系统上一系列精妙的进程间通信的算法（如信号量算法），并用于解决各种复杂的线程间通信问题。 <BR>　　关于 wait() 和 notify() 方法最后再说明两点： </P>
<P>第一：调用 notify() 方法导致解除阻塞的线程是从因调用该对象的 wait() 方法而阻塞的线程中随机选取的，我们无法预料哪一个线程将会被选择，所以编程时要特别小心，避免因这种不确定性而产生问题。 </P>
<P>第二：除了 notify()，还有一个方法 notifyAll() 也可起到类似作用，唯一的区别在于，调用 notifyAll() 方法将把因调用该对象的wait() 方法而阻塞的所有线程一次性全部解除阻塞。当然，只有获得锁的那一个线程才能进入可执行状态。 <BR>&nbsp;&nbsp; 谈到阻塞，就不能不谈一谈死锁，略一分析就能发现，suspend() 方法和不指定超时期限的 wait() 方法的调用都可能产生死锁。遗憾的是，Java 并不在语言级别上支持死锁的避免，我们在编程中必须小心地避免死锁。 <BR>&nbsp;&nbsp; 以上我们对 Java 中实现线程阻塞的各种方法作了一番分析，我们重点分析了 wait() 和 notify() 方法，因为它们的功能最强大，使用也最灵活，但是这也导致了它们的效率较低，较容易出错。实际使用中我们应该灵活使用各种方法，以便更好地达到我们的目的。 </P>
<P>　　七：守护线程 </P>
<P>&nbsp;&nbsp;&nbsp; 守护线程是一类特殊的线程，它和普通线程的区别在于它并不是应用程序的核心部分，当一个应用程序的所有非守护线程终止运行时，即使仍然有守护线程在运行，应用程序也将终止，反之，只要有一个非守护线程在运行，应用程序就不会终止。守护线程一般被用于在后台为其它线程提供服务。 <BR>　　可以通过调用方法 isDaemon() 来判断一个线程是否是守护线程，也可以调用方法 setDaemon() 来将一个线程设为守护线程。 </P>
<P>　　八：线程组 </P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 线程组是一个 Java 特有的概念，在 Java 中，线程组是类ThreadGroup 的对象，每个线程都隶属于唯一一个线程组，这个线程组在线程创建时指定并在线程的整个生命期内都不能更改。你可以通过调用包含 ThreadGroup 类型参数的 Thread 类构造函数来指定线程属的线程组，若没有指定，则线程缺省地隶属于名为 system 的系统线程组。 <BR>&nbsp;&nbsp; 在 Java 中，除了预建的系统线程组外，所有线程组都必须显式创建。在 Java 中，除系统线程组外的每个线程组又隶属于另一个线程组，你可以在创建线程组时指定其所隶属的线程组，若没有指定，则缺省地隶属于系统线程组。这样，所有线程组组成了一棵以系统线程组为根的树。 <BR>&nbsp;&nbsp; Java 允许我们对一个线程组中的所有线程同时进行操作，比如我们可以通过调用线程组的相应方法来设置其中所有线程的优先级，也可以启动或阻塞其中的所有线程。 <BR>　　Java 的线程组机制的另一个重要作用是线程安全。线程组机制允许我们通过分组来区分有不同安全特性的线程，对不同组的线程进行不同的处理，还可以通过线程组的分层结构来支持不对等安全措施的采用。Java 的 ThreadGroup 类提供了大量的方法来方便我们对线程组树中的每一个线程组以及线程组中的每一个线程进行操作。 </P>
<P>　　九：总结 </P>
<P>&nbsp;&nbsp;&nbsp; 在本文中，我们讲述了 Java 多线程编程的方方面面，包括创建线程，以及对多个线程进行调度、管理。我们深刻认识到了多线程编程的复杂性，以及线程切换开销带来的多线程程序的低效性，这也促使我们认真地思考一个问题：我们是否需要多线程？何时需要多线程？ <BR>&nbsp;&nbsp; 多线程的核心在于多个代码块并发执行，本质特点在于各代码块之间的代码是乱序执行的。我们的程序是否需要多线程，就是要看这是否也是它的内在特点。 <BR>&nbsp;&nbsp;&nbsp; 假如我们的程序根本不要求多个代码块并发执行，那自然不需要使用多线程；假如我们的程序虽然要求多个代码块并发执行，但是却不要求乱序，则我们完全可以用一个循环来简单高效地实现，也不需要使用多线程；只有当它完全符合多线程的特点时，多线程机制对线程间通信和线程管理的强大支持才能有用武之地，这时使用多线程才是值得的</P><img src ="http://www.blogjava.net/konhon/aggbug/13815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2005-09-23 10:45 <a href="http://www.blogjava.net/konhon/archive/2005/09/23/13815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入浅出Java多线程程序设计(上)</title><link>http://www.blogjava.net/konhon/archive/2005/09/23/13814.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Fri, 23 Sep 2005 02:43:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2005/09/23/13814.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/13814.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2005/09/23/13814.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/13814.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/13814.html</trackback:ping><description><![CDATA[<P>一：理解多线程 </P>
<P>&nbsp;&nbsp; 多线程是这样一种机制，它允许在程序中并发执行多个指令流，每个指令流都称为一个线程，彼此间互相独立。 线程又称为轻量级进程，它和进程一样拥有独立的执行控制，由操作系统负责调度，区别在于线程没有独立的存储空间，而是和所属进程中的其它线程共享一个存储空间，这使得线程间的通信远较进程简单。 <BR>&nbsp; 多个线程的执行是并发的，也就是在逻辑上“同时”，而不管是否是物理上的“同时”。如果系统只有一个CPU，那么真正的“同时”是不可能的，但是由于CPU的速度非常快，用户感觉不到其中的区别，因此我们也不用关心它，只需要设想各个线程是同时执行即可。多线程和传统的单线程在程序设计上最大的区别在于，由于各个线程的控制流彼此独立，使得各个线程之间的代码是乱序执行的，由此带来的线程调度，同步等问题，将在以后探讨。 </P>
<P>二：在Java中实现多线程 <BR>&nbsp; 我们不妨设想，为了创建一个新的线程，我们需要做些什么？很显然，我们必须指明这个线程所要执行的代码，而这就是在Java中实现多线程我们所需要做的一切！<BR>&nbsp;&nbsp; 真是神奇！Java是如何做到这一点的？通过类！作为一个完全面向对象的语言，Java提供了类 java.lang.Thread 来方便多线程编程，这个类提供了大量的方法来方便我们控制自己的各个线程，我们以后的讨论都将围绕这个类进行。 <BR>&nbsp;&nbsp; 那么如何提供给 Java 我们要线程执行的代码呢？让我们来看一看 Thread 类。Thread 类最重要的方法是 run() ，它为Thread 类的方法start() 所调用，提供我们的线程所要执行的代码。为了指定我们自己的代码，只需要覆盖它！ </P>
<P>　　方法一：继承 Thread 类，覆盖方法 run()，我们在创建的 Thread 类的子类中重写 run() ,加入线程所要执行的代码即可。下面是一个</P>
<P>例子： <BR>public class MyThread extends Thread { <BR>　int count= 1, number; <BR>　public MyThread(int num) { <BR>　　number = num; <BR>　　System.out.println("创建线程 " + number); <BR>　} <BR>　public void run() { <BR>　　while(true) { <BR>　　　System.out.println("线程 " + number + ":计数 " + count); <BR>　　　if(++count== 6) return; <BR>　　} <BR>　} <BR>　public static void main(String args[]) { <BR>　　for(int i = 0; i &lt; 5; i++) new MyThread(i+1).start(); <BR>　} <BR>} </P>
<P>&nbsp;&nbsp; 这种方法简单明了，符合大家的习惯，但是，它也有一个很大的缺点，那就是如果我们的类已经从一个类继承（如小程序必须继承自Applet 类），则无法再继承 Thread 类，这时如果我们又不想建立一个新的类，应该怎么办呢？ <BR>&nbsp;&nbsp;&nbsp; 我们不妨来探索一种新的方法：我们不创建 Thread 类的子类，而是直接使用它，那么我们只能将我们的方法作为参数传递给 Thread 类的实例，有点类似回调函数。但是 Java 没有指针，我们只能传递一个包含这个方法的类的实例。那么如何限制这个类必须包含这一方法呢？当然是使用接口！（虽然抽象类也可满足，但是需要继承，而我们之所以要采用这种新方法，不就是为了避免继承带来的限制吗？） Java 提供了接口 java.lang.Runnable 来支持这种方法。 </P>
<P>　　方法二：实现 Runnable 接口 </P>
<P>&nbsp;&nbsp; Runnable 接口只有一个方法 run()，我们声明自己的类实现 Runnable 接口并提供这一方法，将我们的线程代码写入其中，就完成了这一部分的任务。但是 Runnable 接口并没有任何对线程的支持，我们还必须创建 Thread 类的实例，这一点通过 Thread 类的构造函数public </P>
<P>Thread(Runnable target);来实现。下面是一个例子： <BR>public class MyThread implements Runnable { <BR>　int count= 1, number; <BR>　public MyThread(int num) { <BR>　　number = num; <BR>　　System.out.println("创建线程 " + number); <BR>　} <BR>　public void run() { <BR>　　while(true) { <BR>　　　System.out.println("线程 " + number + ":计数 " + count); <BR>　　　if(++count== 6) return; <BR>　　} <BR>　} <BR>　public static void main(String args[]) { <BR>　　for(int i = 0; i &lt; 5; i++) new Thread(new MyThread(i+1)).start(); <BR>　} <BR>} </P>
<P>&nbsp;&nbsp; 严格地说，创建 Thread 子类的实例也是可行的，但是必须注意的是，该子类必须没有覆盖 Thread 类的 run 方法，否则该线程执行的将是子类的 run 方法，而不是我们用以实现Runnable 接口的类的 run 方法，对此大家不妨试验一下。<BR>　　使用 Runnable 接口来实现多线程使得我们能够在一个类中包容所有的代码，有利于封装，它的缺点在于，我们只能使用一套代码，若想创建多个线程并使各个线程执行不同的代码，则仍必须额外创建类，如果这样的话，在大多数情况下也许还不如直接用多个类分别继承 Thread </P>
<P>来得紧凑。 <BR>　　综上所述，两种方法各有千秋，大家可以灵活运用。 <BR>　　下面让我们一起来研究一下多线程使用中的一些问题。 </P>
<P>　三：线程的四种状态 </P>
<P>　　1. 新状态：线程已被创建但尚未执行（start() 尚未被调用）。 <BR>　　2. 可执行状态：线程可以执行，虽然不一定正在执行。CPU 时间随时可能被分配给该线程，从而使得它执行。 <BR>　　3. 死亡状态：正常情况下 run() 返回使得线程死亡。调用 stop()或 destroy() 亦有同样效果，但是不被推荐，前者会产生异常，后者是强制终止，不会释放锁。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4. 阻塞状态：线程不会被分配 CPU 时间，无法执行。 </P>
<P>　　四：线程的优先级 </P>
<P>&nbsp;&nbsp;&nbsp; 线程的优先级代表该线程的重要程度，当有多个线程同时处于可执行状态并等待获得 CPU 时间时，线程调度系统根据各个线程的优先级来决定给谁分配 CPU 时间，优先级高的线程有更大的机会获得 CPU 时间，优先级低的线程也不是没有机会，只是机会要小一些罢了。 <BR>&nbsp;&nbsp; 你可以调用 Thread 类的方法 getPriority() 和setPriority()来存取线程的优先级，线程的优先级界于1(MIN_PRIORITY)和10(MAX_PRIORITY)之间，缺省是5(NORM_PRIORITY)。 </P>
<P>　　五：线程的同步 </P>
<P>&nbsp;&nbsp;&nbsp; 由于同一进程的多个线程共享同一片存储空间，在带来方便的同时，也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突，有效避免了同一个数据对象被多个线程同时访问。 <BR>　　由于我们可以通过 private 关键字来保证数据对象只能被方法访问，所以我们只需针对方法提出一套机制，这套机制就是 synchronized关键字，它包括两种用法：synchronized 方法和 synchronized 块。 </P>
<P>　　1. synchronized 方法：通过在方法声明中加入 synchronized关键字来声明 synchronized 方法。如： </P>
<P>public synchronized void accessVal(int newVal); </P>
<P>　　synchronized 方法控制对类成员变量的访问：每个类实例对应一把锁，每个 synchronized 方法都必须获得调用该方法的类实例的锁方能执行，否则所属线程阻塞，方法一旦执行，就独占该锁，直到从该方法返回时才将锁释放，此后被阻塞的线程方能获得该锁，重新进入可执行状态。这种机制确保了同一时刻对于每一个类实例，其所有声明为 synchronized 的成员函数中至多只有一个处于可执行状态（因为至多只有一个能够获得该类实例对应的锁），从而有效避免了类成员变量的访问冲突（只要所有可能访问类成员变量的方法均被声明为 synchronized）。 <BR>　　在 Java 中，不光是类实例，每一个类也对应一把锁，这样我们也可将类的静态成员函数声明为 synchronized ，以控制其对类的静态成员变量的访问。 <BR>　　synchronized 方法的缺陷：若将一个大的方法声明为synchronized 将会大大影响效率，典型地，若将线程类的方法 run() 声明为synchronized ，由于在线程的整个生命期内它一直在运行，因此将导致它对本类任何 synchronized 方法的调用都永远不会成功。当然我们可以通过将访问类成员变量的代码放到专门的方法中，将其声明为 synchronized ，并在主方法中调用来解决这一问题，但是 Java 为我们提供了更好的解决办法，那就是 synchronized 块。 </P>
<P>　　2. synchronized 块：通过 synchronized关键字来声明synchronized 块。语法如下： </P>
<P>synchronized(syncObject) { <BR>//允许访问控制的代码 <BR>} </P>
<P>synchronized 块是这样一个代码块，其中的代码必须获得对象 syncObject （如前所述，可以是类实例或类）的锁方能执行，具体机制同前所述。由于可以针对任意代码块，且可任意指定上锁的对象，故灵活性较高。 </P><img src ="http://www.blogjava.net/konhon/aggbug/13814.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2005-09-23 10:43 <a href="http://www.blogjava.net/konhon/archive/2005/09/23/13814.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多线程设计要点</title><link>http://www.blogjava.net/konhon/archive/2005/09/23/13811.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Fri, 23 Sep 2005 02:26:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2005/09/23/13811.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/13811.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2005/09/23/13811.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/13811.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/13811.html</trackback:ping><description><![CDATA[<P><FONT size=4><B>1</B></FONT><B>.</B>多线程中有主内存和工作内存之分， 在JVM中，有一个主内存，专门负责所有线程共享数据；而每个线程都有他自己私有的工作内存， 主内存和工作内存分贝在JVM的stack区和heap区。</P>
<P><B><FONT size=4>2.</FONT></B>线程的状态有'Ready', 'Running', 'Sleeping', 'Blocked', 和 'Waiting'几个状态，<BR>'Ready' 表示线程正在等待CPU分配允许运行的时间。</P>
<P></P>
<P><FONT size=4><B>3.</B></FONT>线程运行次序并不是按照我们创建他们时的顺序来运行的，CPU处理线程的顺序是不确定的，如果需要确定，那么必须手工介入，使用setPriority()方法设置优先级。</P>
<P><B><FONT size=4>4.</FONT></B>我们无从知道一个线程什么时候运行，两个或多个线程在访问同一个资源时，需要synchronized</P>
<P><B><FONT size=4>5.</FONT></B> 每个线程会注册自己，实际某处存在着对它的引用，因此，垃圾回收机制对它就“束手无策”了。</P>
<P><B><FONT size=4>6.</FONT></B> Daemon线程区别一般线程之处是：主程序一旦结束，Daemon线程就会结束。</P>
<P><B><FONT size=4>7.</FONT></B> 一个对象中的所有synchronized方法都共享一把锁，这把锁能够防止多个方法对通用内存同时进行的写操作。synchronized static方法可在一个类范围内被相互间锁定起来。</P>
<P><B><FONT size=4>8.</FONT></B> 对于访问某个关键共享资源的所有方法，都必须把它们设为synchronized，否则就不能正常工作。</P>
<P><FONT size=4><B>9.</B></FONT> 假设已知一个方法不会造成冲突，最明智的方法是不要使用synchronized，能提高些性能。</P>
<P><B><FONT size=4>10</FONT></B>. 如果一个"同步"方法修改了一个变量，而我们的方法要用到这个变量(可能是只读),最好将自己的这个方法也设为 synchronized。</P>
<P><B><FONT size=4>11.</FONT></B> synchronized不能继承，　父类的方法是synchronized，那么其子类重载方法中就不会继承“同步”。</P>
<P><B><FONT size=4>12.</FONT></B> 线程堵塞Blocked有几个原因造成：</P>
<P>(1)线程在等候一些IO操作 <BR>(2)线程试图调用另外一个对象的“同步”方法，但那个对象处于锁定状态，暂时无法使用。</P>
<P><B><FONT size=4>13.</FONT></B>原子型操作(atomic), 对原始型变量(primitive)的操作是原子型的atomic. 意味着这些操作是线程安全的， 但是大部分情况下，我们并不能正确使用，来看看 i = i + 1 , i是int型，属于原始型变量：<BR><BR>(1)从主内存中读取i值到本地内存. <BR>(2)将值从本地内存装载到线程工作拷贝中. <BR>(3)装载变量1. <BR>(4)将i 加 1. <BR>(5)将结果给变量i. <BR>(6)将i保存到线程本地工作拷贝中. <BR>(7)写回主内存. </P>
<P>注意原子型操作只限于第1步到第2步的读取以及第6到第7步的写, i的值还是可能被同时执行i=i+1的多线程中断打扰(在第4步)。</P>
<P>double 和long 变量是非原子型的(non-atomic)。数组是object 非原子型。<BR></P>
<P></P>
<P><FONT size=4><B>14.</B></FONT> 由于13条的原因，我们解决办法是：</P>
<P>class xxx extends Thread{</P>
<P>//i会被经常修改<BR>private int i;<BR><BR>public synchronized int read(){ return i;}</P>
<P>public synchronized void update(){ i = i + 1;}</P>
<P>..........</P>
<P>}</P>
<P><B><FONT size=4>15.</FONT></B> Volatile变量， volatile变量表示保证它必须是与主内存保持一致，它实际是"变量的同步", 也就是说对于volatile变量的操作是原子型的，如用在long 或 double变量前。<BR></P>
<P><B><FONT size=4>16.</FONT></B> 使用yield()会自动放弃CPU，有时比sleep更能提升性能。</P>
<P><B><FONT size=4>17.</FONT></B> sleep()和wait()的区别是：wait()方法被调用时会解除锁定，但是我们能使用它的地方只是在一个同步的方法或代码块内。</P>
<P><B><FONT size=4>18.</FONT></B> 通过制造缩小同步范围，尽可能的实现代码块同步，wait(毫秒数)可在指定的毫秒数可退出wait；对于wait()需要被notisfy()或notifyAll()踢醒。</P>
<P><B><FONT size=4>19.</FONT></B> 构造两个线程之间实时通信的方法分几步：<BR>(1). 创建一个PipedWriter和一个PipedReader和它们之间的管道;<BR>PipedReader in = new PipedReader(new PipedWriter())<BR>(2). 在需要发送信息的线程开始之前，将外部的PipedWriter导向给其内部的Writer实例out<BR>(3). 在需要接受信息的线程开始之前，将外部的PipedReader导向给其内部的Reader实例in<BR>(4). 这样放入out的所有东西度可从in中提取出来。</P>
<P><B><FONT size=4>20.</FONT></B> synchronized带来的问题除性能有所下降外，最大的缺点是会带来死锁DeadLock，只有通过谨慎设计来防止死锁，其他毫无办法，这也是线程难以驯服的一个原因。不要再使用stop() suspend() resume()和destory()方法</P>
<P><B><FONT size=4>21.</FONT></B> 在大量线程被堵塞时，最高优先级的线程先运行。但是不表示低级别线程不会运行，运行概率小而已。</P>
<P><B><FONT size=4>22.</FONT></B> 线程组的主要优点是：使用单个命令可完成对整个线程组的操作。很少需要用到线程组。</P>
<P><B><FONT size=4>23.</FONT></B> 从以下几个方面提升多线程的性能：</P>
<P>检查所有可能Block的地方，尽可能的多的使用sleep或yield()以及wait();</P>
<P>尽可能延长sleep(毫秒数)的时间;</P>
<P>运行的线程不用超过100个，不能太多；</P>
<P>不同平台linux或windows以及不同JVM运行性能差别很大。</P>
<P><FONT size=4><STRONG>24</STRONG>.</FONT> 推荐几篇相关英文文章:</P>
<P><A href="http://www.fawcette.com/javapro/2003_03/magazine/features/odoerderlein/default_pf.asp" target=_blank>Use Threading Tricks to Improve Programs</A></P><img src ="http://www.blogjava.net/konhon/aggbug/13811.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2005-09-23 10:26 <a href="http://www.blogjava.net/konhon/archive/2005/09/23/13811.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java多线程编程经验谈</title><link>http://www.blogjava.net/konhon/archive/2005/09/23/13810.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Fri, 23 Sep 2005 02:25:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2005/09/23/13810.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/13810.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2005/09/23/13810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/13810.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/13810.html</trackback:ping><description><![CDATA[不管我是多么喜欢JAVA但是，从实际开发角度讲，Java的多线程确实没有C++好使。<BR>表现在：<BR>1.Java没有全局变量；<BR>2.Java&nbsp;的线程之间的通信比较差，C++提供了多种通信方式；<BR>3.Java的数据同步是通过synchronized来实现，但是基本上等于交给了虚拟机来完成，<BR>而C++有很多种：临界区、互斥体等。<BR>4.&nbsp;Java的多线程run方法没有返回值，因此如何能得到子线程的反馈信息，确实令人头疼。<BR>5.Java的多线程是协作式，这样等于操作系统放弃了对线程的控制；<BR><BR>这里谈谈我在java多线程中的编写经验：<BR>1.创建thread时，将主控类或者叫做调用类传入构造函数中，例如：<BR>&nbsp;Class&nbsp;A调用Class&nbsp;B，Class&nbsp;A作为Class&nbsp;B构造函数的参数。<BR>这样再创建一个子线程时，用同样的方式实现，这样主控类的实例变量就可以作为<BR>全局变量，当然要注意同步。<BR><BR>2.&nbsp;类同步中wait(),notify()一定要考虑好逻辑，不然有可能造成阻塞。<BR><BR>3.&nbsp;如果多个线程调用或者目前不是很清楚有多少个线程进行通信，最好的办法是<BR>自己实现一个listener，然后调用类调用Listener的一个实例方法进行通信。<BR>工作原理：<BR><BR>&nbsp;&nbsp;&nbsp;1)&nbsp;Listener接口提供同步方法&nbsp;&nbsp;例如SynData();<BR>&nbsp;&nbsp;&nbsp;2)&nbsp;同步线程提供添加和删除Listener的方法，同时在线程中对注册Listener<BR>的类进行轮流通知；<BR>&nbsp;&nbsp;&nbsp;3)&nbsp;使用给同步数据的线程类，继承Listener接口，实现其方法，将本线程即将结束的数据发送到同步线程中；<BR><BR>其实这个原理来自于Java&nbsp;Swing技术。<BR>由于时间关系，今天就谈到这里，希望能抛砖引玉！！请大家多多指教！<BR>下一次谈一谈我用上面的方式实现的一个网关实例，谢谢各位！
<P><STRONG></STRONG>&nbsp;</P><img src ="http://www.blogjava.net/konhon/aggbug/13810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2005-09-23 10:25 <a href="http://www.blogjava.net/konhon/archive/2005/09/23/13810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java examples (example source code) </title><link>http://www.blogjava.net/konhon/archive/2005/09/09/12500.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Fri, 09 Sep 2005 00:37:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2005/09/09/12500.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/12500.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2005/09/09/12500.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/12500.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/12500.html</trackback:ping><description><![CDATA[Java examples (example source code) <BR><A href="http://www.java2s.com/ExampleCode/J2ME/CatalogJ2ME.htm"><BR>http://www.java2s.com/ExampleCode/J2ME/CatalogJ2ME.htm</A><img src ="http://www.blogjava.net/konhon/aggbug/12500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2005-09-09 08:37 <a href="http://www.blogjava.net/konhon/archive/2005/09/09/12500.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>native2ascii详解</title><link>http://www.blogjava.net/konhon/archive/2005/09/01/11755.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Thu, 01 Sep 2005 07:10:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2005/09/01/11755.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/11755.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2005/09/01/11755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/11755.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/11755.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 align=right border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 align=left border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>转载自：www.csdn.net<BR><BR>java程序显示中文是大家都遇到过的问题，尤其是JAD文件的中文问题，一般都用native2ascii工具转换，这里收藏了native2ascii工具的详细说明：<BR><BR><BR>native2ascii&nbsp;-&nbsp;Native-to-ASCII&nbsp;Converter<BR>Converts&nbsp;a&nbsp;file&nbsp;with&nbsp;native-encoded&nbsp;characters&nbsp;(characters&nbsp;which&nbsp;are&nbsp;non-Latin&nbsp;1&nbsp;and&nbsp;non-Unicode)&nbsp;to&nbsp;one&nbsp;with&nbsp;Unicode-encoded&nbsp;characters.&nbsp;<BR>SYNOPSIS<BR>native2ascii&nbsp;[options]&nbsp;[inputfile&nbsp;[outputfile]]<BR><BR>DESCRIPTION<BR>The&nbsp;Java&nbsp;compiler&nbsp;and&nbsp;other&nbsp;Java&nbsp;tools&nbsp;can&nbsp;only&nbsp;process&nbsp;files&nbsp;which&nbsp;contain&nbsp;Latin-1&nbsp;and/or&nbsp;Unicode-encoded&nbsp;(\udddd&nbsp;notation)&nbsp;characters.&nbsp;native2ascii&nbsp;converts&nbsp;files&nbsp;which&nbsp;contain&nbsp;other<BR>&nbsp;character&nbsp;encodings&nbsp;into&nbsp;files&nbsp;containing&nbsp;Latin-1&nbsp;and/or&nbsp;Unicode-encoded&nbsp;charaters.&nbsp;<BR>If&nbsp;outputfile&nbsp;is&nbsp;omitted,&nbsp;standard&nbsp;output&nbsp;is&nbsp;used&nbsp;for&nbsp;output.&nbsp;If,&nbsp;in&nbsp;addition,&nbsp;inputfile&nbsp;is&nbsp;<BR>omitted,&nbsp;standard&nbsp;input&nbsp;is&nbsp;used&nbsp;for&nbsp;input.&nbsp;<BR><BR>OPTIONS<BR>-reverse&nbsp;<BR>Perform&nbsp;the&nbsp;reverse&nbsp;operation:&nbsp;convert&nbsp;a&nbsp;file&nbsp;with&nbsp;Latin-1&nbsp;and/or&nbsp;Unicode&nbsp;encoded&nbsp;characters&nbsp;to&nbsp;one&nbsp;with&nbsp;native-encoded&nbsp;characters.&nbsp;<BR><BR><BR>-encoding&nbsp;encoding_name&nbsp;<BR>Specify&nbsp;the&nbsp;encoding&nbsp;name&nbsp;which&nbsp;is&nbsp;used&nbsp;by&nbsp;the&nbsp;conversion&nbsp;procedure.&nbsp;<BR>The&nbsp;default&nbsp;encoding&nbsp;is&nbsp;taken&nbsp;from&nbsp;System&nbsp;property&nbsp;file.encoding.&nbsp;<BR>The&nbsp;encoding_name&nbsp;string&nbsp;must&nbsp;be&nbsp;a&nbsp;string&nbsp;taken&nbsp;from&nbsp;the&nbsp;first&nbsp;column&nbsp;of&nbsp;the&nbsp;table&nbsp;<BR>below.&nbsp;<BR><BR><BR>-------------------------------------------------------------<BR><BR>Converter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Description<BR>Class<BR>-------------------------------------------------------------<BR><BR>8859_1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISO&nbsp;8859-1<BR>8859_2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISO&nbsp;8859-2<BR>8859_3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISO&nbsp;8859-3<BR>8859_4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISO&nbsp;8859-4<BR>8859_5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISO&nbsp;8859-5<BR>8859_6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISO&nbsp;8859-6<BR>8859_7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISO&nbsp;8859-7<BR>8859_8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISO&nbsp;8859-8<BR>8859_9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISO&nbsp;8859-9<BR>Big5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Big5,&nbsp;Traditional&nbsp;Chinese<BR>CNS11643&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CNS&nbsp;11643,&nbsp;Traditional&nbsp;Chinese<BR>Cp037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USA,&nbsp;Canada(Bilingual,&nbsp;French),&nbsp;Netherlands,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Portugal,&nbsp;Brazil,&nbsp;Australia<BR>Cp1006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;AIX&nbsp;Pakistan&nbsp;(Urdu)<BR>Cp1025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Multilingual&nbsp;Cyrillic:&nbsp;Bulgaria,&nbsp;Bosnia,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Herzegovinia,&nbsp;Macedonia(FYR)<BR>Cp1026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Latin-5,&nbsp;Turkey<BR>Cp1046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Open&nbsp;Edition&nbsp;US&nbsp;EBCDIC<BR>Cp1097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Iran(Farsi)/Persian<BR>Cp1098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Iran(Farsi)/Persian&nbsp;(PC)<BR>Cp1112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Latvia,&nbsp;Lithuania<BR>Cp1122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Estonia<BR>Cp1123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Ukraine<BR>Cp1124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;AIX&nbsp;Ukraine<BR>Cp1125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Ukraine&nbsp;(PC)<BR>Cp1250&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows&nbsp;Eastern&nbsp;European<BR>Cp1251&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows&nbsp;Cyrillic<BR>Cp1252&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows&nbsp;Latin-1<BR>Cp1253&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows&nbsp;Greek<BR>Cp1254&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows&nbsp;Turkish<BR>Cp1255&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows&nbsp;Hebrew<BR>Cp1256&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows&nbsp;Arabic<BR>Cp1257&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows&nbsp;Baltic<BR>Cp1258&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows&nbsp;Vietnamese<BR>Cp1381&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;OS/2,&nbsp;DOS&nbsp;People's&nbsp;Republic&nbsp;of&nbsp;China&nbsp;(PRC)<BR>Cp1383&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;AIX&nbsp;People's&nbsp;Republic&nbsp;of&nbsp;China&nbsp;(PRC)<BR>Cp273&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Austria,&nbsp;Germany<BR>Cp277&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Denmark,&nbsp;Norway<BR>Cp278&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Finland,&nbsp;Sweden<BR>Cp280&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Italy<BR>Cp284&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Catalan/Spain,&nbsp;Spanish&nbsp;Latin&nbsp;America<BR>Cp285&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;United&nbsp;Kingdom,&nbsp;Ireland<BR>Cp297&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;France<BR>Cp33722&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM-eucJP&nbsp;-&nbsp;Japanese&nbsp;(superset&nbsp;of&nbsp;5050)<BR>Cp420&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Arabic<BR>Cp424&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Hebrew<BR>Cp437&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MS-DOS&nbsp;United&nbsp;States,&nbsp;Australia,&nbsp;New&nbsp;Zealand,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;South&nbsp;Africa<BR>Cp500&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EBCDIC&nbsp;500V1<BR>Cp737&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC&nbsp;Greek<BR>Cp775&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC&nbsp;Baltic<BR>Cp838&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Thailand&nbsp;extended&nbsp;SBCS<BR>Cp850&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MS-DOS&nbsp;Latin-1<BR>Cp852&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MS-DOS&nbsp;Latin-2<BR>Cp855&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Cyrillic<BR>Cp857&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Turkish<BR>Cp860&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MS-DOS&nbsp;Portuguese<BR>Cp861&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MS-DOS&nbsp;Icelandic<BR>Cp862&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC&nbsp;Hebrew<BR>Cp863&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MS-DOS&nbsp;Canadian&nbsp;French<BR>Cp864&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC&nbsp;Arabic<BR>Cp865&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MS-DOS&nbsp;Nordic<BR>Cp866&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MS-DOS&nbsp;Russian<BR>Cp868&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MS-DOS&nbsp;Pakistan<BR>Cp869&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Modern&nbsp;Greek<BR>Cp870&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Multilingual&nbsp;Latin-2<BR>Cp871&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Iceland<BR>Cp874&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Thai<BR>Cp875&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Greek<BR>Cp918&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Pakistan(Urdu)<BR>Cp921&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Latvia,&nbsp;Lithuania&nbsp;(AIX,&nbsp;DOS)<BR>Cp922&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IBM&nbsp;Estonia&nbsp;(AIX,&nbsp;DOS)<BR>Cp930&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Japanese&nbsp;Katakana-Kanji&nbsp;mixed&nbsp;with&nbsp;4370&nbsp;UDC,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;superset&nbsp;of&nbsp;5026<BR>Cp933&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Korean&nbsp;Mixed&nbsp;with&nbsp;1880&nbsp;UDC,&nbsp;superset&nbsp;of&nbsp;5029<BR>Cp935&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Simplified&nbsp;Chinese&nbsp;Host&nbsp;mixed&nbsp;with&nbsp;1880&nbsp;UDC,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;superset&nbsp;of&nbsp;5031<BR>Cp937&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Traditional&nbsp;Chinese&nbsp;Host&nbsp;miexed&nbsp;with&nbsp;6204&nbsp;UDC,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;superset&nbsp;of&nbsp;5033<BR>Cp939&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Japanese&nbsp;Latin&nbsp;Kanji&nbsp;mixed&nbsp;with&nbsp;4370&nbsp;UDC,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;superset&nbsp;of&nbsp;5035<BR>Cp942&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Japanese&nbsp;(OS/2)&nbsp;superset&nbsp;of&nbsp;932<BR>Cp948&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OS/2&nbsp;Chinese&nbsp;(Taiwan)&nbsp;superset&nbsp;of&nbsp;938<BR>Cp949&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC&nbsp;Korean<BR>Cp950&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC&nbsp;Chinese&nbsp;(Hong&nbsp;Kong,&nbsp;Taiwan)<BR>Cp964&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AIX&nbsp;Chinese&nbsp;(Taiwan)<BR>Cp970&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AIX&nbsp;Korean<BR>EUCJIS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JIS,&nbsp;EUC&nbsp;Encoding,&nbsp;Japanese<BR>GB2312&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GB2312,&nbsp;EUC&nbsp;encoding,&nbsp;Simplified&nbsp;Chinese<BR>GBK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GBK,&nbsp;Simplified&nbsp;Chinese<BR>ISO2022CN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISO&nbsp;2022&nbsp;CN,&nbsp;Chinese<BR>ISO2022CN_CNS&nbsp;&nbsp;&nbsp;&nbsp;CNS&nbsp;11643&nbsp;in&nbsp;ISO-2022-CN&nbsp;form,&nbsp;T.&nbsp;Chinese<BR>ISO2022CN_GB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GB&nbsp;2312&nbsp;in&nbsp;ISO-2022-CN&nbsp;form,&nbsp;S.&nbsp;Chinese<BR>ISO2022KR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISO&nbsp;2022&nbsp;KR,&nbsp;Korean<BR>JIS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JIS,&nbsp;Japanese<BR>JIS0208&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JIS&nbsp;0208,&nbsp;Japanese<BR>KOI8_R&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KOI8-R,&nbsp;Russian<BR>KSC5601&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KS&nbsp;C&nbsp;5601,&nbsp;Korean<BR>MS874&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows&nbsp;Thai<BR>MacArabic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macintosh&nbsp;Arabic<BR>MacCentralEurope&nbsp;Macintosh&nbsp;Latin-2<BR>MacCroatian&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macintosh&nbsp;Croatian<BR>MacCyrillic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macintosh&nbsp;Cyrillic<BR>MacDingbat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macintosh&nbsp;Dingbat<BR>MacGreek&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macintosh&nbsp;Greek<BR>MacHebrew&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macintosh&nbsp;Hebrew<BR>MacIceland&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macintosh&nbsp;Iceland<BR>MacRoman&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macintosh&nbsp;Roman<BR>MacRomania&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macintosh&nbsp;Romania<BR>MacSymbol&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macintosh&nbsp;Symbol<BR>MacThai&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macintosh&nbsp;Thai<BR>MacTurkish&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macintosh&nbsp;Turkish<BR>MacUkraine&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macintosh&nbsp;Ukraine<BR>SJIS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shift-JIS,&nbsp;Japanese<BR>UTF8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF-8<BR><BR><BR>不过WTK可以直接解决JAD的中文问题：<BR>&nbsp;&nbsp;&nbsp;&nbsp;settings&gt;MidLets&gt;MidLet-1属性改成你想要显示的中文后重新生成JAD和JAR文件即可。<BR><img src ="http://www.blogjava.net/konhon/aggbug/11755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2005-09-01 15:10 <a href="http://www.blogjava.net/konhon/archive/2005/09/01/11755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE初学者需要理解的问题</title><link>http://www.blogjava.net/konhon/archive/2005/08/27/11273.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Sat, 27 Aug 2005 01:48:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2005/08/27/11273.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/11273.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2005/08/27/11273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/11273.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/11273.html</trackback:ping><description><![CDATA[J2EE体系结构简单介绍<BR>一、J2EE提出的背景<BR>1、 企业级应用框架的需求<BR>在许多企业级应用中，例如数据库连接、邮件服务、事务处理等都是一些通用企业需求模块，这些模块如果每次再开发中都由开发人员来完成的话，将会造成开发周期长和代码可靠性差等问题。于是许多大公司开发了自己的通用模块服务。这些服务性的软件系列同陈为中间件。<BR>2、 为了通用必须要提出规范，不然无法达到通用<BR>在上面的需求基础之上，许多公司都开发了自己的中间件，但其与用户的沟通都各有不同，从而导致用户无法将各个公司不同的中间件组装在一块为自己服务。从而产生瓶颈。于是提出标准的概念。其实J2EE就是基于JAVA技术的一系列标准。<BR>注：中间件的解释 中间件处在操作系统和更高一级应用程序之间。他充当的功能是：将应用程序运行环境与操作系统隔离，从而实现应用程序开发者不必为更多系统问题忧虑，而直接关注该应用程序在解决问题上的能力 。我们后面说到的容器的概念就是中间件的一种。<BR>二、相关名词解释<BR>容器：充当中间件的角色<BR>WEB容器：给处于其中的应用程序组件（JSP，SERVLET）提供一个环境，使JSP,SERVLET直接更容器中的环境变量接口交互，不必关注其它系统问题。主要有WEB服务器来实现。例如：TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。<BR>EJB容器：Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器，马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。<BR>WEB容器和EJB容器在原理上是大体相同的，更多的区别是被隔离的外界环境。WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节，直接引用环境变量session,request,response就行、EJB不用关心数据库连接速度、各种事务控制，直接由容器来完成。<BR>RMI/IIOP:远程方法调用/internet对象请求中介协议，他们主要用于通过远程调用服务。例如，远程有一台计算机上运行一个程序，它提供股票分析服务，我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。<BR>JNDI:JAVA命名目录服务。主要提供的功能是：提供一个目录系统，让其它各地的应用程序在其上面留下自己的索引，从而满足快速查找和定位分布式应用程序的功能。<BR>JMS:JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。<BR>JAVAMAIL:JAVA邮件服务。提供邮件的存储、传输功能。他是JAVA编程中实现邮件功能的核心。相当MS中的EXCHANGE开发包。<BR>JTA：JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。<BR>JAF:JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。<BR>EAI:企业应用集成。是一种概念，从而牵涉到好多技术。J2EE技术是一种很好的集成实现。<BR>三、J2EE的优越性<BR>1、 基于JAVA 技术，平台无关性表现突出<BR>2、 开放的标准，许多大型公司已经实现了对该规范支持的应用服务器。如BEA ,IBM,ORACLE等。<BR>3、 提供相当专业的通用软件服务。<BR>4、 提供了一个优秀的企业级应用程序框架，对快速高质量开发打下基础<BR>四、体系结构图<BR>mailto:luopc@edu-edu.com.cn了解更详细的通俗体系内容，请给我来信。<BR>五、现状<BR>J2EE是由SUN 公司开发的一套企业级应用规范。现在最高版本是1.4。支持J2EE的应用服务器有IBM WEBSPHERE APPLICATION SERVER,BEA WEBLOGIC SERVER,JBOSS,ORACLE APPLICATION SERVER,SUN ONE APPLICATION SERVER 等。.<BR><img src ="http://www.blogjava.net/konhon/aggbug/11273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2005-08-27 09:48 <a href="http://www.blogjava.net/konhon/archive/2005/08/27/11273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>几个常用函数</title><link>http://www.blogjava.net/konhon/archive/2005/08/17/10305.html</link><dc:creator>konhon 优华</dc:creator><author>konhon 优华</author><pubDate>Wed, 17 Aug 2005 02:01:00 GMT</pubDate><guid>http://www.blogjava.net/konhon/archive/2005/08/17/10305.html</guid><wfw:comment>http://www.blogjava.net/konhon/comments/10305.html</wfw:comment><comments>http://www.blogjava.net/konhon/archive/2005/08/17/10305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/konhon/comments/commentRss/10305.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/konhon/services/trackbacks/10305.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;import&nbsp;java.text.*;import&nbsp;java.util.*;public&nbsp;class&nbsp;StringFormat&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;SimpleDateFormat&nbsp;dateFormat&nbsp;=&nbsp;new&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/konhon/archive/2005/08/17/10305.html'>阅读全文</a><img src ="http://www.blogjava.net/konhon/aggbug/10305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/konhon/" target="_blank">konhon 优华</a> 2005-08-17 10:01 <a href="http://www.blogjava.net/konhon/archive/2005/08/17/10305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>