﻿<?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-北国狼人的部落格-随笔分类-达内学习总结</title><link>http://www.blogjava.net/lhulcn618/category/4854.html</link><description>Java各方面技术、Web各方面技术、人生与爱情感悟、双子座精英的感受、双子与水瓶座</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 08:08:59 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 08:08:59 GMT</pubDate><ttl>60</ttl><item><title>抵制Ruby</title><link>http://www.blogjava.net/lhulcn618/archive/2006/09/28/72461.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Thu, 28 Sep 2006 01:37:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/09/28/72461.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/72461.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/09/28/72461.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/72461.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/72461.html</trackback:ping><description><![CDATA[
		<p>Ruby是一个日本人开发的东西，不用它。让他没有活路。<br /><br />谁要是用，谁就不是java阵营的，谁就是中国的敌人，世界的敌人！</p>
<img src ="http://www.blogjava.net/lhulcn618/aggbug/72461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-09-28 09:37 <a href="http://www.blogjava.net/lhulcn618/archive/2006/09/28/72461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>反日行动从现在开始，从每个中国人，每个程序员做起！不用日本东西，不给日本人打工！！！</title><link>http://www.blogjava.net/lhulcn618/archive/2006/09/22/71395.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Fri, 22 Sep 2006 14:43:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/09/22/71395.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/71395.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/09/22/71395.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/71395.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/71395.html</trackback:ping><description><![CDATA[
		<p>从最近SK-II和相关的食品用品中查出有毒，会迫害中国人基因的行为看来。我们是时候站起来，真正的反日了，让日本的东西卖不出去，日本的企业赚不着钱，让日本拿不走咱们的资源！！！！SHIT JAP!!<br /><br />希望每一个中国人，有点民族血性，有点民族气质！！！</p>
<img src ="http://www.blogjava.net/lhulcn618/aggbug/71395.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-09-22 22:43 <a href="http://www.blogjava.net/lhulcn618/archive/2006/09/22/71395.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最后的指点</title><link>http://www.blogjava.net/lhulcn618/archive/2006/04/22/42474.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Sat, 22 Apr 2006 04:34:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/04/22/42474.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/42474.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/04/22/42474.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/42474.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/42474.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 面试经常问一些模棱两可的问题，也就是一些在一些条件成立时，才能给出确定答案的问题。比如问Java是否支持多继承。那么回答要缜密，接口支持，类不支持。多继承导致网状继承结构。  F            Fsoft          bed    softbedF这层的成员变量会在softbed会出现两份。所以在C++中采用虚继承来解决，达到了一种菱形结构。         Fsoft       ...&nbsp;&nbsp;<a href='http://www.blogjava.net/lhulcn618/archive/2006/04/22/42474.html'>阅读全文</a><img src ="http://www.blogjava.net/lhulcn618/aggbug/42474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-04-22 12:34 <a href="http://www.blogjava.net/lhulcn618/archive/2006/04/22/42474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts中没有例子的两个标签 &lt;html:radio  &lt;html:select</title><link>http://www.blogjava.net/lhulcn618/archive/2006/04/20/42176.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Thu, 20 Apr 2006 07:43:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/04/20/42176.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/42176.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/04/20/42176.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/42176.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/42176.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &lt;%																								@ page contentType						=						"						text/html;charset=gbk						"						 pageEncoding						=						"						gbk						"						 								%&gt;...&nbsp;&nbsp;<a href='http://www.blogjava.net/lhulcn618/archive/2006/04/20/42176.html'>阅读全文</a><img src ="http://www.blogjava.net/lhulcn618/aggbug/42176.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-04-20 15:43 <a href="http://www.blogjava.net/lhulcn618/archive/2006/04/20/42176.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Cannot retrieve mapping for action 之 问题解决</title><link>http://www.blogjava.net/lhulcn618/archive/2006/04/19/41981.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Wed, 19 Apr 2006 10:27:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/04/19/41981.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/41981.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/04/19/41981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/41981.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/41981.html</trackback:ping><description><![CDATA[转:<br /><br />今天试着把大虾写的系统登录模块加到我们现有的模块里来，他写的时候因为有些试验的成分，所以没有按照我们项目的配置来写，也没有按照我们的模块来划分配置，加过来以后重新配置了模块信息，结果居然无法正常运行。显示错误：“cannot retrieve action mapping  。废了九牛二虎之力，都无法解决。web.xml、struts-config、模块配置，一切看起来都无比的正常，但就是运行不了。真搞不清楚是哪里出了问题。还以为搞不定，晚上要加班了，谁知道，踏破铁鞋无觅处，柳暗花明又一村，在google上搜索关键字"action mapping 找不到"，第一个链接居然就是问题的答案！（还从来没有只点一次就可以找到问题答案的经验，所以兴奋无比^O^）
<p>        总的来说，问题的原因就在于，<strong>struts是在第一次收到对action的请求（注意：不包括jsp的请求）时，提取这个请求的url的路径信息，把相应模块的mapping信息设置到请求中去</strong>。如果在进入一个模块时，第一次访问的是一个jsp页面，而在这个jsp页面中提交到该模块的一个action，就会出现找不到action mapping的情况。这就是因为，在进到这个模块时，访问的是jsp，这个模块的任何一个action都没有被访问到，所以struts的ActionServlet还没有来得及把这个模块的mapping设置到请求中，自然找不到该模块的action。</p><p>        因此，这就引出一个约定，<strong>就是系统中尽量避免对Jsp的直接访问，如果要访问也要通过action来forward</strong>。虽然看起来麻烦一点，但是安全性、健壮性都会有所提高。</p><p>        关于以上提到的模块mapping的设置原理，具体的文章在这里（不长），值得收藏：</p><p>        原文链接：<a href="http://202.100.72.44/news/itschool/pro/pro44134.htm"><font color="#993366">http://202.100.72.44/news/itschool/pro/pro44134.htm</font></a></p><img src ="http://www.blogjava.net/lhulcn618/aggbug/41981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-04-19 18:27 <a href="http://www.blogjava.net/lhulcn618/archive/2006/04/19/41981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>fontmanager.dll exception 问题解决 安装IBM RSA Rational Software Architect 文鼎字体 要删除</title><link>http://www.blogjava.net/lhulcn618/archive/2006/04/14/41166.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Fri, 14 Apr 2006 13:05:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/04/14/41166.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/41166.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/04/14/41166.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/41166.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/41166.html</trackback:ping><description><![CDATA[这类问题真是不容易，因为一般搞软件开发的，不会在自己上装一些不常见的字体。可是本人就是既精通Photoshop，又精通软件开发（Java）。<br /><br />呵呵，让我郁闷了很多天，装不上 RSA。<br /><br />看到有人因为装BEA WORKSHOP也出现莫名问题。给我了启示。<br /><br />workshop fontmanager.dll 问题解决贴<br /><br /><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=103&amp;threadID=23679&amp;messageID=173082">http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=103&amp;threadID=23679&amp;messageID=173082</a><br /><br />解决办法:<br /><br />到控制面板，找到字体，找到文鼎字体，删之！<br /><br />最后出现:<br /><br /><img height="395" alt="rsa.jpg" src="http://www.blogjava.net/images/blogjava_net/lhulcn618/rsa.jpg" width="634" border="0" /><br /><br /><img src ="http://www.blogjava.net/lhulcn618/aggbug/41166.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-04-14 21:05 <a href="http://www.blogjava.net/lhulcn618/archive/2006/04/14/41166.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>复习一下 SQL  排名问题</title><link>http://www.blogjava.net/lhulcn618/archive/2006/03/30/38377.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Thu, 30 Mar 2006 15:46:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/03/30/38377.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/38377.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/03/30/38377.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/38377.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/38377.html</trackback:ping><description><![CDATA[
		<p>db2<br /><br /> select * from recruit fetch first 5 rows only<br /><br />经典oracle sql</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: #0000ff">select</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> (</span>
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> newtable.</span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000">,rownum rownum_ </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> (</span>
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> s_emp) newtable </span>
				<span style="COLOR: #0000ff">where</span>
				<span style="COLOR: #000000"> rownum </span>
				<span style="COLOR: #808080">&lt;=</span>
				<span style="COLOR: #000000"> </span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">20</span>
				<span style="COLOR: #000000">) </span>
				<span style="COLOR: #0000ff">where</span>
				<span style="COLOR: #000000"> rownum_ </span>
				<span style="COLOR: #808080">&gt;</span>
				<span style="COLOR: #000000"> </span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">5</span>
		</div>
		<p>rownum在用于大于号时，不可以，必须先造一个table把rownum这个伪列当作这个新造出的表中的一个字段，才能进行特定行之间的查询。<br /><br /><br /><br />DML Data manipulation language<br />   insert update delete<br /><br />DDL Data definition language<br />   create alter drop rename trancate<br /><br />Transaction control<br />   commit rollback savepoint<br /><br />DCL<br />   GRANT REVOKE<br /><br />==========================<br /><br /> Name                                      Null?    Type<br /> ----------------------------------------- -------- ----------------------------<br /> ID                                        NOT NULL NUMBER(7)<br /> LAST_NAME                                 NOT NULL VARCHAR2(15)<br /> FIRST_NAME                                         VARCHAR2(15)<br /> USERID                                             VARCHAR2(8)<br /> START_DATE                                         DATE<br /> COMMENTS                                           VARCHAR2(15)<br /> MANAGER_ID                                         NUMBER(7)<br /> TITLE                                              VARCHAR2(20)<br /> DEPT_ID                                            NUMBER(7)<br /> SALARY                                             NUMBER(11,2)<br /> COMMISSION_PCT                                     NUMBER(4,2)<br /><br />select last_name,salary, 12*salary + 100 from s_emp;<br /><br />支持操作符<br /><br />支持别名<br /><br />select last_name ln from s_emp;<br /><br />支持Concatenation，级联操作符<br /><br />select first_name||last_name from s_emp<br /><br /><br />对于NULL值<br /><br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> last_name,title,salary</span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000">commission_pct</span>
				<span style="COLOR: #808080">/</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">100</span>
				<span style="COLOR: #000000"> COMM </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> s_emp;</span>
		</div>
		<p>这样查询会有很多NULL值<br /><br />有一个NVL函数，以便在NULL出现时，给予一个默认值。<br /><br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> last_name,title, salary</span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000">NVL(commission_pct,</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">0</span>
				<span style="COLOR: #000000">)</span>
				<span style="COLOR: #808080">/</span>
				<span style="FONT-WEIGHT: bold; COLOR: #800000">100</span>
				<span style="COLOR: #000000"> COMM </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> s_emp;</span>
		</div>
		<p>commission_pct，出现NULL，就会被0替换。<br /><br /></p>
		<p>Eliminate duplicate rows by using distinct in select clause;</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: #0000ff">select</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">distinct</span>
				<span style="COLOR: #000000"> name </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> s_dept;</span>
		</div>
		<p>
				<br />=============================================================<br /><br />SQL&gt; select name,salary,deptno from ( select concat(last_name,first_name) name,salary,department_id deptno,rank() over (partition by department_id order by salary desc) rnk from employees) where rnk = 2 or rnk = 3;</p>
		<p>NAME                                              SALARY     DEPTNO<br />--------------------------------------------- ---------- ----------<br />FayPat                                              6000         20<br />KhooAlexander                                       3100         30<br />BaidaShelli                                         2900         30<br />WeissMatthew                                        8000         50<br />KauflingPayam                                       7900         50<br />ErnstBruce                                          6000         60<br />AustinDavid                                         4800         60<br />PataballaValli                                      4800         60<br />PartnersKaren                                      13500         80<br />ErrazurizAlberto                                   12000         80<br />KochharNeena                                       17000         90</p>
		<p>NAME                                              SALARY     DEPTNO<br />--------------------------------------------- ---------- ----------<br />De HaanLex                                         17000         90<br />FavietDaniel                                        9000        100<br />ChenJohn                                            8200        100<br />GietzWilliam                                        8300        110</p>
		<p>15 rows selected.</p>
		<p>SQL&gt; <br /><br />SQL&gt; desc employees;<br /> Name                                      Null?    Type<br /> ----------------------------------------- -------- ----------------------------<br /> EMPLOYEE_ID                               NOT NULL NUMBER(6)<br /> FIRST_NAME                                         VARCHAR2(20)<br /> LAST_NAME                                 NOT NULL VARCHAR2(25)<br /> EMAIL                                     NOT NULL VARCHAR2(25)<br /> PHONE_NUMBER                                       VARCHAR2(20)<br /> HIRE_DATE                                 NOT NULL DATE<br /> JOB_ID                                    NOT NULL VARCHAR2(10)<br /> SALARY                                             NUMBER(8,2)<br /> COMMISSION_PCT                                     NUMBER(2,2)<br /> MANAGER_ID                                         NUMBER(6)<br /> DEPARTMENT_ID                                      NUMBER(4)<br /><br />SQL 排名问题<br /><br /><font color="#333333">找出部门工资排名第二，三的员工<br /><br />=====================<br /><br />复习一下外连接Outer Join<br /><br />SQL&gt; desc s_emp;<br /> Name                                      Null?    Type<br /> ----------------------------------------- -------- ----------------------------<br /> ID                                        NOT NULL NUMBER(7)<br /> LAST_NAME                                 NOT NULL VARCHAR2(15)<br /> FIRST_NAME                                         VARCHAR2(15)<br /> USERID                                             VARCHAR2(8)<br /> START_DATE                                         DATE<br /> COMMENTS                                           VARCHAR2(15)<br /> MANAGER_ID                                         NUMBER(7)<br /> TITLE                                              VARCHAR2(20)<br /> DEPT_ID                                            NUMBER(7)<br /> SALARY                                             NUMBER(11,2)<br /> COMMISSION_PCT                                     NUMBER(4,2)<br /><br />SQL&gt; desc s_customer<br /> Name                                      Null?    Type<br /> ----------------------------------------- -------- ----------------------------<br /> NAME                                      NOT NULL VARCHAR2(25)<br /> ZIP_CODE                                           VARCHAR2(20)<br /> CREDIT_RA                                          VARCHAR2(25)<br /> SAL                                                NUMBER<br /> ID                                                 NUMBER(5)<br /><br />客户表里的SAL字段是s_emp的外键。表示该客户的销售代表。<br /><br />那么要想查出所有客户（包括没有销售代表的）所对应的销售代表记录。<br /><br />  1  select e.last_name,e.id,c.name<br />  2  from s_emp e,s_customer c<br />  3  where e.id(+) = c.sal<br />  4* order by e.id<br /><br />LAST_NAME               ID NAME<br />--------------- ---------- -------------------------<br />_dumas                  12 athletes attic<br />_dumas                  12 great athletes<br />_dumas                  12 bj athletics<br />_dumas                  12 athletic for all<br />_dumas                  12 sports,inc<br />                           athletics two<br />                           athletics one<br />                           shhes for sports<br />                           athletic attire<br />                           toms sporting goods<br /><br />可以看到相应的部分客户并不存在销售代表也出现在结果集中，而用等值链接是不能查出的。<br /><br /></font></p>
		<p>
				<font color="#333333">  1  select e.last_name,e.id,c.name<br />  2  from s_emp e,s_customer c<br />  3  where e.id = c.sal(+)<br />  4* order by e.id<br /><br />查出所有销售代表所对应的客户。<br /><br />LAST_NAME               ID NAME<br />--------------- ---------- -------------------------<br />_dumas                   8<br />hui                      8<br />aaa                     10<br />%ss                     11<br />_dumas                  11<br />_dumas                  12 sports,inc<br />_dumas                  12 athletic for all<br />_dumas                  12 bj athletics<br />_dumas                  12 great athletes<br />_dumas                  12 athletes attic<br />_dumas                  13</font>
		</p>
		<p>
				<font color="#333333">LAST_NAME               ID NAME<br />--------------- ---------- -------------------------<br />_dumas                  15<br />_dumas                  16<br />_dumas                  17<br />_dumas                  18<br />_dumas                  19<br />_dumas                  21<br />payn                    23<br />_dumas                  25<br />_dumas                  47<br />_dumas                  70<br />_dumas                  76</font>
		</p>
		<p>
				<font color="#333333">LAST_NAME               ID NAME<br />--------------- ---------- -------------------------<br />_dumas                  95<br />liganfeng              112<br />lgf                    122<br />lgf                    134<br />Biri                   333<br />qu                     555<br />_dumas                2271<br />tarena               25999<br />tarena               26999<br /><br />空的旧更多了。<br /><br />也就是哪边缺，哪边方加号。<br /><br />这就是外连接。</font>
		</p>
<img src ="http://www.blogjava.net/lhulcn618/aggbug/38377.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-03-30 23:46 <a href="http://www.blogjava.net/lhulcn618/archive/2006/03/30/38377.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>事务</title><link>http://www.blogjava.net/lhulcn618/archive/2006/03/28/37935.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Tue, 28 Mar 2006 15:30:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/03/28/37935.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/37935.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/03/28/37935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/37935.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/37935.html</trackback:ping><description><![CDATA[Atomic Consistent  Isolated  Durable<br /><br />An atomic <a href="http://foldoc.org/?database+transaction">database transaction</a> is one which is guaranteed to complete successfully or not at all. If an error prevents a partially-performed transaction from proceeding to completion, it must be "backed out" to prevent the database being left in an inconsistent state. <br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">ACID is an acronym used to describe the properties that a transaction should have in an enterprise environment. A transaction should be Atomic, and its results should be Consistent, Isolated, and Durable. A transaction is Atomic </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> it either completes itself or is completely undone. The results of a transaction should consistently change the system from one state to another, be isolated or independent of one another, and, once completed, be durable or permanent.</span></div><br /><font face="宋体"><strong>什么是事务<br /><br /></strong><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">   事务是应用程序中一系列严密的操作，所有操作必须成功完成，否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性，一个事务中的一系列的操作要么全部成功，要么一个都不做。</span><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><span style="mso-spacerun: yes"><strong>   <br /></strong></span></span><span>   事务的结束有两种，当事务中的所以步骤全部成功执行时，事务提交。如果其中一个步骤失败，将发生回滚操作，撤消撤消之前到事务开始时的所以操作。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></p></font><br /><br /><font face="宋体"><strong>事务的</strong></font><span lang="EN-US"><strong>ACID<br /><br /></strong><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15.75pt; mso-char-indent-count: 1.5"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">事务具有四个特征：原子性（</span><span lang="EN-US">Atomicity</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）、一致性（</span><span lang="EN-US">Consistency</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）、隔离性（</span><span lang="EN-US">Isolation</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）和持续性（</span><span lang="EN-US">Durability</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。这四个特性简称为</span><span lang="EN-US">ACID</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">特性。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><o:p></o:p></p></span><br />     <span style="FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15.75pt; mso-char-indent-count: 1.5"><span lang="EN-US" style="mso-bidi-font-weight: bold">1</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、原子性</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15.75pt; mso-char-indent-count: 1.5"><span lang="EN-US" style="mso-bidi-font-weight: bold">    </span><span style="FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">事务是数据库的逻辑工作单位，事务中包含的各操作要么都做，要么都不做</span><span lang="EN-US" style="mso-bidi-font-weight: bold"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15.75pt; mso-char-indent-count: 1.5"><span lang="EN-US" style="mso-bidi-font-weight: bold">2</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、一致性</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15.75pt; mso-char-indent-count: 1.5"><span lang="EN-US" style="mso-bidi-font-weight: bold">     </span><span style="FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时，就说数据库处于一致性状态。如果数据库系统运行中发生故障，有些事务尚未完成就被迫中断，这些未完成事务对数据库所做的修改有一部分已写入物理数据库，这时数据库就处于一种不正确的状态，或者说是不一致的状态。</span><span lang="EN-US">  <br /><br /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15.75pt; mso-char-indent-count: 1.5"><span lang="EN-US" style="mso-bidi-font-weight: bold">3</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、隔离性</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15.75pt; mso-char-indent-count: 1.5"><span lang="EN-US">    </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是<span style="mso-bidi-font-weight: bold">隔离的，并发执行的各个事务之间不能互相干扰。<br /><br /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15.75pt; mso-char-indent-count: 1.5"><span lang="EN-US" style="mso-bidi-font-weight: bold">4</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、持续性</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15.75pt; mso-char-indent-count: 1.5"><span lang="EN-US" style="mso-bidi-font-weight: bold">   </span><span style="FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也称永久性，指一个事务一旦提交，它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。<br /><br /><strong>事务的属性<br /><br />   </strong></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个事务的属性控制了事务的使用范围。</span><span lang="EN-US">EJB</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang="EN-US">Sprin</span><span lang="EN-US" style="FONT-FAMILY: 宋体">g</span><span style="FONT-FAMILY: 宋体">以及<span lang="EN-US">.net</span>下的事务属性都很类似的，</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">事务属性有如下几种：<br /></span></p></span><span lang="EN-US" style="mso-bidi-font-weight: bold"><o:p><br />   <span lang="EN-US">Required:<br /></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">      如果在一个事务中调用，就把该方法加到此事务中来，</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果还没有启动事务，就启动一个新事务。</span><span lang="EN-US"><br /><br />   RequiredNew:<br /><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不管当前有没有事务，都会启动一个新事务，如果当前有事务，会被挂起直到方法结束。</span><span lang="EN-US"><br /><br />NotSupported:<br /></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不能在事务中执行此方法。如果有事务，将会被挂起直到方法结束。</span><span lang="EN-US"><br /><br />Supports:<br /></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果当前有事务，此方法会加到当前事务，如果没有，容器也不会启动新事务。</span><span lang="EN-US"><br /><br />Mandatory:<br /></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">必须在事务中调用此方法，否则抛出异常。<br /></span><span lang="EN-US"><br />Never:<br /></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">必须不在事务中调用此方法，否则抛出异常。</span><br /><br /><br /><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">三．事务的回滚</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US"><o:p></o:p></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15.75pt; mso-char-indent-count: 1.5"><span lang="EN-US">CMT</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在以下两中情况下，事务将回滚。第一，如果产生一个系统异常，容器将自动回滚该事务。第二，通过调用</span><span lang="EN-US">EJBContext</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接口</span><span lang="EN-US">SetRollbackOnly</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法，</span><span lang="EN-US">Bean</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法通知容器回滚该事务。如果</span><span lang="EN-US">Bean</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">抛出一个应用异常，事务将不会自动回滚，但可以调用</span><span lang="EN-US">SetRollbackOnly</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">回滚。<br /><br /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">五．隔离级别</span><span lang="EN-US"><o:p></o:p></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">事务不仅保证事务界限内的数据库操作全部完成（或回滚）同时还隔离数据库更新语句。隔离级别描述被修改的数据对其他事物的可见度。隔离级别的控制会跟具体的</span><span lang="EN-US">DBMS</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">厂商不同而不同。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">  <span style="mso-spacerun: yes">  </span><span style="mso-spacerun: yes"> </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">隔离级别与并发性是互为矛盾的：隔离程度越高，数据库的并发性越差；隔离程度越低，数据库的并发性越好。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过一些现象，可以反映出隔离级别的效果。这些现象有：</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo2; tab-stops: list 21.0pt"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">更新丢失（</span><span lang="EN-US">lost update</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）：当系统允许两个事务同时更新同一数据是，发生更新丢失。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo2; tab-stops: list 21.0pt"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">脏读（</span><span lang="EN-US">dirty read</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）：当一个事务读取另一个事务尚未提交的修改时，产生脏读。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo2; tab-stops: list 21.0pt"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">非重复读（</span><span lang="EN-US">nonrepeatable read</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）：同一查询在同一事务中多次进行，由于其他提交事务所做的修改或删除，每次返回不同的结果集，此时发生非重复读。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo2; tab-stops: list 21.0pt"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">幻像读（</span><span lang="EN-US">phantom read</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）：同一查询在同一事务中多次进行，由于其他提交事务所做的插入操作，每次返回不同的结果集，此时发生幻像读。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt; tab-stops: list 36.0pt"><span lang="EN-US">SQL-99 </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标准定义了下列隔离级别：</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 21.0pt"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">未提交读（</span><span lang="EN-US">read uncommitted</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）（隔离事务的最低级别，只能保证不读取物理上损坏的数据）</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 21.0pt"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已提交读（</span><span lang="EN-US">read committed</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）（数据库引擎</span><span lang="EN-US"> </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的默认级别）当一个事务运行在这个隔离级别时，</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个</span><span lang="EN-US"> SELECT </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">查询只能看到查询开始之前提交的数据，而永远</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">无法看到未提交的数据，或者是在查询执行时其他并行的事务提交做的改变。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 21.0pt"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可重复读（</span><span lang="EN-US">repeatable read</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），不会脏读和非重复读，可能发生幻像读</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 21.0pt"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'">         </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可序列化（</span><span lang="EN-US">serializable</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）（隔离事务的最高级别，事务之间完全隔离）<br /><br /></span></p></span></o:p></span><img src ="http://www.blogjava.net/lhulcn618/aggbug/37935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-03-28 23:30 <a href="http://www.blogjava.net/lhulcn618/archive/2006/03/28/37935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMS 使用</title><link>http://www.blogjava.net/lhulcn618/archive/2006/03/25/37405.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Sat, 25 Mar 2006 13:34:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/03/25/37405.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/37405.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/03/25/37405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/37405.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/37405.html</trackback:ping><description><![CDATA[启动Weblogic服务器，由于JMS，需要一个消息中间件，Tuxedo。本文使用的是WebLogic 9.1，与8.1的有所不同。<br /><br />登录<br /><br /><img style="WIDTH: 608px; HEIGHT: 290px" height="566" alt="logon.jpg" src="http://www.blogjava.net/images/blogjava_net/lhulcn618/logon.jpg" width="1024" border="0" /><br /><br />创建JMS servers<br /><br /><img height="527" alt="server.jpg" src="http://www.blogjava.net/images/blogjava_net/lhulcn618/server.jpg" width="866" border="0" /><br /><br /><br />设置完JMS服务器以后，要设置JMS的Modules，以便JMS客户端和接受端能查找相应的JMSFactory和JMSdestination。<br /><br /><img height="464" alt="module.jpg" src="http://www.blogjava.net/images/blogjava_net/lhulcn618/module.jpg" width="698" border="0" /><br /><br /><br />C:\bea\user_projects\domains\base_domain\config\<strong>jms</strong><br /><br />会出现配置相关的配置文件<br /><br />建立两个资源<br /><br />一个是ConnectionFactory，配置一个JNDI。<br /><br />另外一个是Queue-0，配置一个JNDI。<br /><br /><img height="500" alt="resource.jpg" src="http://www.blogjava.net/images/blogjava_net/lhulcn618/resource.jpg" width="918" border="0" /><br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.jms.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.util.Hashtable;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.naming.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.io.</span><span style="COLOR: #000000">*</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"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> QueueSend<br /><img id="Codehighlighter1_113_1743_Open_Image" onclick="this.style.display='none'; Codehighlighter1_113_1743_Open_Text.style.display='none'; Codehighlighter1_113_1743_Closed_Image.style.display='inline'; Codehighlighter1_113_1743_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_113_1743_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_113_1743_Closed_Text.style.display='none'; Codehighlighter1_113_1743_Open_Image.style.display='inline'; Codehighlighter1_113_1743_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_113_1743_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_113_1743_Open_Text"><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">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Exception<br /><img id="Codehighlighter1_184_1739_Open_Image" onclick="this.style.display='none'; Codehighlighter1_184_1739_Open_Text.style.display='none'; Codehighlighter1_184_1739_Closed_Image.style.display='inline'; Codehighlighter1_184_1739_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_184_1739_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_184_1739_Closed_Text.style.display='none'; Codehighlighter1_184_1739_Open_Image.style.display='inline'; Codehighlighter1_184_1739_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_184_1739_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_184_1739_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Hashtable hash </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Hashtable();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        hash.put(Context.INITIAL_CONTEXT_FACTORY,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">weblogic.jndi.WLInitialContextFactory</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        hash.put(Context.PROVIDER_URL,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">t3://localhost:7001</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" />        InitialContext ic </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> InitialContext(hash);<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: #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">        QueueConnectionFactory factory </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (QueueConnectionFactory)ic.lookup(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">jms/factory</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" />        System.out.println(factory.getClass());<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" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </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">        Queue queue </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Queue)ic.lookup(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">queue</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" />        System.out.println(queue.getClass());<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" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">查API,接口有什么方法阿        </span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        QueueConnection conn </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (QueueConnection)factory.createQueueConnection();<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" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </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">        QueueSession session </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> conn.createQueueSession(</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,Session.AUTO_ACKNOWLEDGE);<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: #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">        QueueSender sender </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> session.createSender(queue);<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" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Message的创建要使用Session</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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        BufferedReader buffer </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> BufferedReader(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> InputStreamReader(System.in));<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">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">)<br /><img id="Codehighlighter1_1312_1700_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1312_1700_Open_Text.style.display='none'; Codehighlighter1_1312_1700_Closed_Image.style.display='inline'; Codehighlighter1_1312_1700_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1312_1700_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1312_1700_Closed_Text.style.display='none'; Codehighlighter1_1312_1700_Open_Image.style.display='inline'; Codehighlighter1_1312_1700_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_1312_1700_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_1312_1700_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            String line </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> buffer.readLine();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(line.equals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">quit</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))<br /><img id="Codehighlighter1_1407_1580_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1407_1580_Open_Text.style.display='none'; Codehighlighter1_1407_1580_Closed_Image.style.display='inline'; Codehighlighter1_1407_1580_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1407_1580_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1407_1580_Closed_Text.style.display='none'; Codehighlighter1_1407_1580_Open_Image.style.display='inline'; Codehighlighter1_1407_1580_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span id="Codehighlighter1_1407_1580_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_1407_1580_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                TextMessage message </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> session.createTextMessage(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">over</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                sender.send(message);         <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">break</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" />            TextMessage message </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> session.createTextMessage(line);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            sender.send(message);         <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" />              <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <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" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br /><br />察看一下Queue资源，就能看到自己发送的TextMessage。<br /><br />下回分解MDB。<img src ="http://www.blogjava.net/lhulcn618/aggbug/37405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-03-25 21:34 <a href="http://www.blogjava.net/lhulcn618/archive/2006/03/25/37405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB工作原理 之 北国狼人 清晰讲述</title><link>http://www.blogjava.net/lhulcn618/archive/2006/03/19/36152.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Sun, 19 Mar 2006 15:45:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/03/19/36152.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/36152.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/03/19/36152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/36152.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/36152.html</trackback:ping><description><![CDATA[为了解决RMI无法解决的分布式事务控制，安全，并发等问题。<br /><br />EJB解决访问就是一种可以高校的开发分布式应用的解决方案。<br /><br />编写EJB，其实只需要编写2个接口和一个Bean类，和一个部属描述就可以了。<br /><br />服务接口:<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.ejb.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.rmi.</span><span style="COLOR: #000000">*</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">business   remote</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_101_165_Open_Image" onclick="this.style.display='none'; Codehighlighter1_101_165_Open_Text.style.display='none'; Codehighlighter1_101_165_Closed_Image.style.display='inline'; Codehighlighter1_101_165_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_101_165_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_101_165_Closed_Text.style.display='none'; Codehighlighter1_101_165_Open_Image.style.display='inline'; Codehighlighter1_101_165_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">interface</span><span style="COLOR: #000000"> Compute </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> EJBObject</span><span id="Codehighlighter1_101_165_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_101_165_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> add(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> a,</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> b) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> RemoteException;<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></div><br />Home接口:<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.ejb.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.rmi.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_84_151_Open_Image" onclick="this.style.display='none'; Codehighlighter1_84_151_Open_Text.style.display='none'; Codehighlighter1_84_151_Closed_Image.style.display='inline'; Codehighlighter1_84_151_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_84_151_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_84_151_Closed_Text.style.display='none'; Codehighlighter1_84_151_Open_Image.style.display='inline'; Codehighlighter1_84_151_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">interface</span><span style="COLOR: #000000"> ComputeHome </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> EJBHome</span><span id="Codehighlighter1_84_151_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_84_151_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Compute create() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> RemoteException,CreateException;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />Bean，业务逻辑实现的地方<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.ejb.</span><span style="COLOR: #000000">*</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"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ComputeBean </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> SessionBean<br /><img id="Codehighlighter1_69_684_Open_Image" onclick="this.style.display='none'; Codehighlighter1_69_684_Open_Text.style.display='none'; Codehighlighter1_69_684_Closed_Image.style.display='inline'; Codehighlighter1_69_684_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_69_684_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_69_684_Closed_Text.style.display='none'; Codehighlighter1_69_684_Open_Image.style.display='inline'; Codehighlighter1_69_684_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_69_684_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_69_684_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.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"> setSessionContext(SessionContext ctx)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                       </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> EJBException,<br /><img id="Codehighlighter1_220_223_Open_Image" onclick="this.style.display='none'; Codehighlighter1_220_223_Open_Text.style.display='none'; Codehighlighter1_220_223_Closed_Image.style.display='inline'; Codehighlighter1_220_223_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_220_223_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_220_223_Closed_Text.style.display='none'; Codehighlighter1_220_223_Open_Image.style.display='inline'; Codehighlighter1_220_223_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                              java.rmi.RemoteException</span><span id="Codehighlighter1_220_223_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_220_223_Open_Text"><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" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> ejbRemove()<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />               </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> EJBException,<br /><img id="Codehighlighter1_332_335_Open_Image" onclick="this.style.display='none'; Codehighlighter1_332_335_Open_Text.style.display='none'; Codehighlighter1_332_335_Closed_Image.style.display='inline'; Codehighlighter1_332_335_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_332_335_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_332_335_Closed_Text.style.display='none'; Codehighlighter1_332_335_Open_Image.style.display='inline'; Codehighlighter1_332_335_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                      java.rmi.RemoteException</span><span id="Codehighlighter1_332_335_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_332_335_Open_Text"><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" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> ejbActivate()<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                 </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> EJBException,<br /><img id="Codehighlighter1_450_453_Open_Image" onclick="this.style.display='none'; Codehighlighter1_450_453_Open_Text.style.display='none'; Codehighlighter1_450_453_Closed_Image.style.display='inline'; Codehighlighter1_450_453_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_450_453_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_450_453_Closed_Text.style.display='none'; Codehighlighter1_450_453_Open_Image.style.display='inline'; Codehighlighter1_450_453_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                        java.rmi.RemoteException</span><span id="Codehighlighter1_450_453_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_450_453_Open_Text"><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" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> ejbPassivate()<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                  </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> EJBException,<br /><img id="Codehighlighter1_571_574_Open_Image" onclick="this.style.display='none'; Codehighlighter1_571_574_Open_Text.style.display='none'; Codehighlighter1_571_574_Closed_Image.style.display='inline'; Codehighlighter1_571_574_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_571_574_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_571_574_Closed_Text.style.display='none'; Codehighlighter1_571_574_Open_Image.style.display='inline'; Codehighlighter1_571_574_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                         java.rmi.RemoteException</span><span id="Codehighlighter1_571_574_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_571_574_Open_Text"><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 id="Codehighlighter1_623_626_Open_Image" onclick="this.style.display='none'; Codehighlighter1_623_626_Open_Text.style.display='none'; Codehighlighter1_623_626_Closed_Image.style.display='inline'; Codehighlighter1_623_626_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_623_626_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_623_626_Closed_Text.style.display='none'; Codehighlighter1_623_626_Open_Image.style.display='inline'; Codehighlighter1_623_626_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.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"> ejbCreate() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> CreateException</span><span id="Codehighlighter1_623_626_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_623_626_Open_Text"><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 id="Codehighlighter1_665_682_Open_Image" onclick="this.style.display='none'; Codehighlighter1_665_682_Open_Text.style.display='none'; Codehighlighter1_665_682_Closed_Image.style.display='inline'; Codehighlighter1_665_682_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_665_682_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_665_682_Closed_Text.style.display='none'; Codehighlighter1_665_682_Open_Image.style.display='inline'; Codehighlighter1_665_682_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> add(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> a,</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> b)</span><span id="Codehighlighter1_665_682_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_665_682_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"> a</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">b;<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></div><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0" encoding="UTF-8"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;!</span><span style="COLOR: #ff00ff">DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ejb-jar</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">enterprise-beans</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">session</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">display-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Compute</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">display-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ejb-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">abc</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">ejb-name</span><span style="COLOR: #0000ff">&gt;</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">&lt;</span><span style="COLOR: #800000">home</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">ComputeHome</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">home</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">remote</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Compute</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">remote</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ejb-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">ComputeBean</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">ejb-class</span><span style="COLOR: #0000ff">&gt;</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">&lt;</span><span style="COLOR: #800000">session-type</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Stateless</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">session-type</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">transaction-type</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Container</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">transaction-type</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">     <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">session</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">enterprise-beans</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">assembly-descriptor</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">container-transaction</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">method</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ejb-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">abc</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">ejb-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">method-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">method-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">method</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">trans-attribute</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Required</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">trans-attribute</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">container-transaction</span><span style="COLOR: #0000ff">&gt;</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">&lt;/</span><span style="COLOR: #800000">assembly-descriptor</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">ejb-jar</span><span style="COLOR: #0000ff">&gt;</span></div><br />JNDI的实现各个服务器的实现不同，所以需要依赖于服务器的一个xml。<br /><br />JNDI也是一种面向接口编程，工厂模式的典范。<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0" encoding="UTF-8"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;!</span><span style="COLOR: #ff00ff">DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN' 'http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd'</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">weblogic-ejb-jar</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">weblogic-enterprise-bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ejb-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">abc</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">ejb-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">jndi-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">efg</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">jndi-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">weblogic-enterprise-bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">weblogic-ejb-jar</span><span style="COLOR: #0000ff">&gt;</span></div><p><br />想编译EJB，需要j2ee jar，那就用\bea\weblogic81\server\lib\weblogic.jar<br /><br />做一个META-INF放置两个xml文件<br /><br />jar -cvf Compute.jar *.class META-INF/*.xml<br /><br />c创建,v看到它创建的过程,f文件名<br /><br /><br /><br />部属EJB，看看Weblogic帮助吧。<br /><br />=============================<br /><br />那么会发现jar文件中并没有出现_stub或者_skeleton文件阿，那是因为由容器在运行EJB时动态创建在容器内部了。<br /><br />那么怎么才能看到呢？我们要分析阿。<br /><br />java weblogic.appc ejb.jar<br /><br />如果抱错，在classpath中添加\jdk142_04\lib\tools.jar<br /><br />如果想看原文件的话，就是-keepgenerated <br /><br /><img height="510" alt="rmi2.jpg" src="http://www.blogjava.net/images/blogjava_net/lhulcn618/rmi2.jpg" width="389" border="0" /><br /><br />===============================</p><p>开始分析EJB工作原理<br /><br />看下面一张图，就清楚了，实际就是两次RMI 调用。<br /><br /><img height="649" alt="27229257.ejb2.jpg" src="http://www.blogjava.net/images/blogjava_net/lhulcn618/27229257.ejb2.jpg" width="677" border="0" /><br /><br />要细致来说。<br /><br />基本是这样的。<br /><br />定义Home接口，主要是为让客户端有可能在创建EJB Bean对象时，给予初始化。<br /><br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.ejb.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.rmi.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_84_151_Open_Image" onclick="this.style.display='none'; Codehighlighter1_84_151_Open_Text.style.display='none'; Codehighlighter1_84_151_Closed_Image.style.display='inline'; Codehighlighter1_84_151_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_84_151_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_84_151_Closed_Text.style.display='none'; Codehighlighter1_84_151_Open_Image.style.display='inline'; Codehighlighter1_84_151_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">interface</span><span style="COLOR: #000000"> ComputeHome </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> EJBHome</span><span id="Codehighlighter1_84_151_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_84_151_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Compute create() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> RemoteException,CreateException;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><p><br />这只是一个接口，weblogic.appc会生成一个HomeImpl，并生成Stub和Skeleton对象。在客户端JNDI查找时，返回就是这个HomeImpl的Stub对象，注意类文件也会动态下载的。<br /><br />create()与ejbcreate()方法是对应的。<br /><br />可有参数。<br /><br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Bean</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_68_133_Open_Image" onclick="this.style.display='none'; Codehighlighter1_68_133_Open_Text.style.display='none'; Codehighlighter1_68_133_Closed_Image.style.display='inline'; Codehighlighter1_68_133_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_68_133_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_68_133_Closed_Text.style.display='none'; Codehighlighter1_68_133_Open_Image.style.display='inline'; Codehighlighter1_68_133_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"> ejbCreate(String param) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> CreateException </span><span id="Codehighlighter1_68_133_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_68_133_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated method stub</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.userName </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> param;<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" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Home</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></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"> com.infogo.interfaces.Shopping create(java.lang.String param)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> javax.ejb.CreateException,java.rmi.RemoteException;</span></div><p>===========<br /><br />那么客户端实际调用的是HomeImpl的Stub对象的方法，通过网络传送到服务器上的Skeleton，Skeleton再调用真正的HomeImpl对象的方法，创建一个创建Bean对象放入实例池，Impl调用Bean的ejbcreate方法，初始化参数。<br /><br />并且HomeImpl，还要创建一个业务业务接口的实现类，并把业务接口实现类(EOImpl)对象的Stub返回给客户端。<br /><br />客户端拿到Stub，调用响应服务方法(别忘了，真正的服务方法实现可是在Bean类里)，所以调用Stub方法，通过网络传递EOImpl的Skeleton对象，然后调用EOImpl的响应方法。<br /><br />这是注意，EOImpl被称为请求拦截器，因为它会在这时察看ejb-jar.xml，看一看方法声明的事务类型，并调用容器提供的API（安全、事务等）。所以这种服务器或者容器叫做隐式容器，它有工具生成的类来调用容器相关API。而不是用户直接调用。<br /><br />在EOImpl调用完容器API之后，就会调用Bean的业务方法。<br /><br />最后将接口-Skeleton-Stub-客户端。<br /><br />所以是两次RMI调用。<br /><br />这就是EJB工作原理。<br /><br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.naming.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.util.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.rmi.</span><span style="COLOR: #000000">*</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" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Client<br /><img id="Codehighlighter1_85_1328_Open_Image" onclick="this.style.display='none'; Codehighlighter1_85_1328_Open_Text.style.display='none'; Codehighlighter1_85_1328_Closed_Image.style.display='inline'; Codehighlighter1_85_1328_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_85_1328_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_85_1328_Closed_Text.style.display='none'; Codehighlighter1_85_1328_Open_Image.style.display='inline'; Codehighlighter1_85_1328_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_85_1328_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_85_1328_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Exception<br /><img id="Codehighlighter1_151_1323_Open_Image" onclick="this.style.display='none'; Codehighlighter1_151_1323_Open_Text.style.display='none'; Codehighlighter1_151_1323_Closed_Image.style.display='inline'; Codehighlighter1_151_1323_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_151_1323_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_151_1323_Closed_Text.style.display='none'; Codehighlighter1_151_1323_Open_Image.style.display='inline'; Codehighlighter1_151_1323_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_151_1323_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_151_1323_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Hashtable hash </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Hashtable();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        hash.put(Context.INITIAL_CONTEXT_FACTORY,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">weblogic.jndi.WLInitialContextFactory</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        hash.put(Context.PROVIDER_URL,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">t3://localhost:7001</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        InitialContext ic </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> InitialContext(hash);<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" />        ComputeHome home </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (ComputeHome)ic.lookup(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">efg</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" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">(ComputeHome)ProtableRemoteObject.narrow(ic.lookup("efg"),ComputeHome.class);</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_573_1204_Open_Image" onclick="this.style.display='none'; Codehighlighter1_573_1204_Open_Text.style.display='none'; Codehighlighter1_573_1204_Closed_Image.style.display='inline'; Codehighlighter1_573_1204_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_573_1204_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_573_1204_Closed_Text.style.display='none'; Codehighlighter1_573_1204_Open_Image.style.display='inline'; Codehighlighter1_573_1204_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #000000">       </span><span id="Codehighlighter1_573_1204_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_573_1204_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        * 客户端从服务器获得HomeImpl_stub .class文件,并获得HomeImpl_stub的对象<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" />        * home.create()--&gt;HomeImpl_stub.create()--&gt;网络发送--&gt;HomeImpl_skel.create()--&gt;HomeImpl创建ComputeBean对象--&gt;ComputeBean.ejbcreate()&amp;&amp;HomeImpl还要创建EOImpl_stub对象,返回HomeImpl_skel---&gt;[网络往回传输]---&gt;HomeImpl_stub---&gt;客户端拿到EOImpl_stub对象。<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" />        * 这时完成了第一次rmi<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" />        * c获得了EOImpl_Stub对象,<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" />        * c.add(32,32)----&gt; EOImpl_Stub.add()---&gt;网络发送---&gt;EOImpl_Skel.add()---&gt;EOImpl---&gt;[根据xml描述的事务,进行事务描述]---&gt;判断add方法是否开始事务---&gt;调用创建好Bean对象的add方法----&gt;方法结果给EOImpl_Skel----&gt;网络往回传输----&gt;EOImpl_Stub----客户端拿到结果。<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" />        * 第二次rmi完成。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        </span><span style="COLOR: #008000">*/</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" />        <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" />        Compute c </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> home.create();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(c.add(</span><span style="COLOR: #000000">32</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">32</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/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></div><img src ="http://www.blogjava.net/lhulcn618/aggbug/36152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-03-19 23:45 <a href="http://www.blogjava.net/lhulcn618/archive/2006/03/19/36152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RMI工作原理 之 北国狼人的理解</title><link>http://www.blogjava.net/lhulcn618/archive/2006/03/19/36109.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Sun, 19 Mar 2006 14:42:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/03/19/36109.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/36109.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/03/19/36109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/36109.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/36109.html</trackback:ping><description><![CDATA[简单来说，要实现A机器上JVM上运行的Java程序，远程调用B机器上JVM上的Java程序，计算完毕，返回给A机器。<br /><br />在没有RMI的情况下，我们使用普通的网络传输技术能完成么？当然，两种选择，Socket直接通讯，将参数传给B，B在通过Socket返还给调用者。或者通过Servlet也可以远程调用阿。<br /><br />那么这样解决问题时没有问题，但对于A和B来说，代码量、程序复用程序、维护性都不会太理想。<br /><br />如果能让调用者不知道网络操作，实现对于用户透明，也就是像调用本地一样，对象名.方法名。<br /><br />那么就是RMI规范涉及到一些接口。<br /><br />面向接口的编程方式，就可以达到代码的实现与声明分离。<br /><br />这样用户就只关心接口了。很多细节让遵守规范（也就是一些编写好的工具）的实现类去完成吧。[就是Stub和Skeleton]<br /><br />那么就先定一个用户A要知道怎么用，B要知道方法签名完成实现，的同一接口吧。<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.rmi.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_59_136_Open_Image" onclick="this.style.display='none'; Codehighlighter1_59_136_Open_Text.style.display='none'; Codehighlighter1_59_136_Closed_Image.style.display='inline'; Codehighlighter1_59_136_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_59_136_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_59_136_Closed_Text.style.display='none'; Codehighlighter1_59_136_Open_Image.style.display='inline'; Codehighlighter1_59_136_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">interface</span><span style="COLOR: #000000"> Compute </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> Remote</span><span id="Codehighlighter1_59_136_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_59_136_Open_Text"><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">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> add(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> a,</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> b) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> RemoteException;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />两点要求<br /><br />1，继承标记接口Remote。<br /><br />identify interfaces whose methods may be invoked from a non-local virtual machine.<br /><br />标识该接口可以被非本地VM调用呗。<br /><br />2，里面每个方法都要抛出RemoteException<br /><br /><br />业务接口的实现类，也就是做实事的类<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.rmi.server.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.rmi.</span><span style="COLOR: #000000">*</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"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ComputeImpl </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> UnicastRemoteObject </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Compute<br /><img id="Codehighlighter1_118_260_Open_Image" onclick="this.style.display='none'; Codehighlighter1_118_260_Open_Text.style.display='none'; Codehighlighter1_118_260_Closed_Image.style.display='inline'; Codehighlighter1_118_260_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_118_260_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_118_260_Closed_Text.style.display='none'; Codehighlighter1_118_260_Open_Image.style.display='inline'; Codehighlighter1_118_260_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_118_260_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_118_260_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">要在构造方法抛出异常</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_184_185_Open_Image" onclick="this.style.display='none'; Codehighlighter1_184_185_Open_Text.style.display='none'; Codehighlighter1_184_185_Closed_Image.style.display='inline'; Codehighlighter1_184_185_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_184_185_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_184_185_Closed_Text.style.display='none'; Codehighlighter1_184_185_Open_Image.style.display='inline'; Codehighlighter1_184_185_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> ComputeImpl() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> RemoteException</span><span id="Codehighlighter1_184_185_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_184_185_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img id="Codehighlighter1_232_258_Open_Image" onclick="this.style.display='none'; Codehighlighter1_232_258_Open_Text.style.display='none'; Codehighlighter1_232_258_Closed_Image.style.display='inline'; Codehighlighter1_232_258_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_232_258_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_232_258_Closed_Text.style.display='none'; Codehighlighter1_232_258_Open_Image.style.display='inline'; Codehighlighter1_232_258_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> add(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> a,</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> b)</span><span id="Codehighlighter1_232_258_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_232_258_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"> a</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">b;<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></div><br /><br />=====================<br />javac *.class<br /><br />rmic -keep ComputeImpl<br />带参数，可以保留Stub和Skeleton源码。<br /><br />通过ComputeImpl的实现类来生成负责通讯的Stub（存根）和Skeleton（框架）<br /><br />======================<br /><br />那么就是要把这个对象绑定到一个端口上。<br /><br />以便别人来使用<br /><br />编写一个Server<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.rmi.</span><span style="COLOR: #000000">*</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"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Server<br /><img id="Codehighlighter1_40_225_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_225_Open_Text.style.display='none'; Codehighlighter1_40_225_Closed_Image.style.display='inline'; Codehighlighter1_40_225_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_40_225_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_40_225_Closed_Text.style.display='none'; Codehighlighter1_40_225_Open_Image.style.display='inline'; Codehighlighter1_40_225_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_40_225_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_40_225_Open_Text"><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">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Exception<br /><img id="Codehighlighter1_107_222_Open_Image" onclick="this.style.display='none'; Codehighlighter1_107_222_Open_Text.style.display='none'; Codehighlighter1_107_222_Closed_Image.style.display='inline'; Codehighlighter1_107_222_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_107_222_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_107_222_Closed_Text.style.display='none'; Codehighlighter1_107_222_Open_Image.style.display='inline'; Codehighlighter1_107_222_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_107_222_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_107_222_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        ComputeImpl c </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ComputeImpl();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Naming.bind(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">rmi://localhost:8888/compute</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,c);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">compute别名</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">    }</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/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />客户端<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.rmi.</span><span style="COLOR: #000000">*</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"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Client<br /><img id="Codehighlighter1_40_317_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_317_Open_Text.style.display='none'; Codehighlighter1_40_317_Closed_Image.style.display='inline'; Codehighlighter1_40_317_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_40_317_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_40_317_Closed_Text.style.display='none'; Codehighlighter1_40_317_Open_Image.style.display='inline'; Codehighlighter1_40_317_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_40_317_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_40_317_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Exception<br /><img id="Codehighlighter1_106_312_Open_Image" onclick="this.style.display='none'; Codehighlighter1_106_312_Open_Text.style.display='none'; Codehighlighter1_106_312_Closed_Image.style.display='inline'; Codehighlighter1_106_312_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_106_312_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_106_312_Closed_Text.style.display='none'; Codehighlighter1_106_312_Open_Image.style.display='inline'; Codehighlighter1_106_312_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_106_312_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_106_312_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Compute c </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Compute)Naming.lookup(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">rmi://localhost:8888/compute</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">rmiregistry首先响应<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">实际c是Stub对象</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        System.out.println(c.getClass());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(c.add(</span><span style="COLOR: #000000">12.3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">34</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></div><br /><br /> 看到没有，客户端通过rmi协议到服务器上寻找/compute资源对象。那个Naming是RMI专用，不是JNDI。<br /><br />那么Server类并没有负责监听阿。<br /><br />哦，最后有一个强大的工具在JAVA_HOME/bin/下，叫做rmiregistry，专门负责监听固定端口上，rmi协议的请求。<br /><br />=================<br />rmiregistry 8888<br /><br />=================<br /><br />启动Server，绑定远程对象阿<br /><br />java Server<br /><br />=================<br /><br />启动一个Client，调用一下<br /><br />java Client<br /><br />=================<br /><br /><img height="647" alt="rmi.jpg" src="http://www.blogjava.net/images/blogjava_net/lhulcn618/rmi.jpg" width="977" border="0" /><br /><br />===============<br /><br />另外一些小问题<br /><br />由于rmiregistry 工具的不断强大，jdk1.4已经可以不再使用skeleton，到1.5，根本就不生成skeleton了。<br /><br />rmiregistry可以充当skeleton角色完成功能。<br /><br />记住EJB中，还不行，因为没有rmiregistry工具了。呵呵，明白了？<br /><br />=========================<br /><br />所以什么呢，RMI就是一种代理模式的应用Stub，就是实际实现类的客户代理。<br /><br />但需要统一的接口，才能对于用户、调用者透明啊！<br /><br />------------------------<br /><br /><br />我说的比较通俗。还有很多深刻的东西。<img src ="http://www.blogjava.net/lhulcn618/aggbug/36109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-03-19 22:42 <a href="http://www.blogjava.net/lhulcn618/archive/2006/03/19/36109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet 2.4 和JSP 2.-的深入学习和Struts的轻松掌握</title><link>http://www.blogjava.net/lhulcn618/archive/2006/03/12/34924.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Sun, 12 Mar 2006 10:14:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/03/12/34924.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/34924.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/03/12/34924.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/34924.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/34924.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: public				 				class				 ValidatorPlugIn    				implements				 PlugIn																								{.    						public						 String getPathnames()    																									...&nbsp;&nbsp;<a href='http://www.blogjava.net/lhulcn618/archive/2006/03/12/34924.html'>阅读全文</a><img src ="http://www.blogjava.net/lhulcn618/aggbug/34924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-03-12 18:14 <a href="http://www.blogjava.net/lhulcn618/archive/2006/03/12/34924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OOAD 面向对象设计与分析</title><link>http://www.blogjava.net/lhulcn618/archive/2006/02/28/32940.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Tue, 28 Feb 2006 15:57:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/02/28/32940.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/32940.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/02/28/32940.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/32940.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/32940.html</trackback:ping><description><![CDATA[准备使用IBM收购Rational以后的最新产品RSA 6.0，作为开发建模工具。<BR><BR>人写程序与类在打交道，而在程序运行时，是对象在运行。<BR><BR>人写的是类型，而动态的是对象，使机器在运行代码。<BR><BR>OO是一种系统建模的技术，是一个过程！<BR><BR>对对象进行描述。<BR><BR>在这个过程中，要使用UML语言进行类型的描述。<BR><BR>========================================<BR><BR>比如模拟达内，可以说有很多老师对象和学生对象，但在达内，关注学生这个个体什么呢？只关心姓名，性别，背景，而绝对不关心它的婚姻情况。<BR><BR>可以对这些对象进行共性的提取，变为老师类型和学生类型。而运行时就是一个个有特性的实例。<BR><BR>========================================<BR><BR>什么是对象，就是一个属性确定的实体。比如找对象，这个对象在你心中早就有特定的要求，那么这样的一个对象肯定是有确定属性的对象。是单个的，唯一的，识别的实体。<BR><BR>那么由于成员变量的值不同，方法调用的结果不同。<BR><BR>所以对象是构建系统的基石。<BR>它包括:&lt;1&gt;标识也就是引用名<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;2&gt;数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;3&gt;方法<BR><BR>什么是Class，它是对对象的定义。对于在某一个环境下的对于对象关心属性的提取和抽象。<BR><BR>====================================<BR><BR>面向对象编程的特点<BR><BR>1抽象，就是一个提炼过程<BR>2封装，隐藏细节（属性和私有方法）<BR>3继承，上下层次<BR>4多态<BR>--------------------------------------------<BR>5，关联，对象的依赖程度<BR>6，聚合<BR>7，组合<BR>8，内聚&amp;耦合<BR><BR>1，抽象的目的，主要是隐藏细节，可以简化信息，看到显著特征。<BR>2，封装的目的，隐藏数据和行为，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意，类有两个视图，对外视图（别人使用此类，不关心实现）<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;&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;内视图（自己拿着代码，要知道实现）<BR><BR>3，关联<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个类型使用其他类型对象的服务。<BR>4，聚合<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一种强关联，一个是另外一个的组成部分，而不是必要部分。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个汽车和一个音响。<BR>5，组合<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个对象包含另外一个对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个是另外一个组成部分<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;大的东西决定着组成部分的生命周期<BR><BR>6，继承，是一种实现代码复用的手段，语言的特性。另外一种代码复用的方式就是组合。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;减少代码量，维护方便。<BR><BR><BR>组件的开发<BR><BR>在开发过程中，要遵循高内聚，低耦合的规律。<BR><BR>组件内部要相互的调用，来统一对外实现一个功能，而外界为实现这个功能，基本不需要再做什么，那么这个组件的重用性，就愈高。依赖于别人的越少，那么组件的复用价值也就愈高。<BR><BR><BR>多态<BR><BR>有统一的接口，而行为有它的子类型的行为确定。<BR><BR>运行时多态，就是子类型重写了父类型virtual方法。<BR><BR>能使用编译时多态就是用编译时多态。<BR><BR>================<BR><BR>所以可以将上面的几个特点按类别分类，比如，单个类型、类型之间、层次结构、编程规则。<BR><BR><BR><BR><BR><BR><img src ="http://www.blogjava.net/lhulcn618/aggbug/32940.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-02-28 23:57 <a href="http://www.blogjava.net/lhulcn618/archive/2006/02/28/32940.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Servlet 第二天</title><link>http://www.blogjava.net/lhulcn618/archive/2006/02/11/30253.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Sat, 11 Feb 2006 04:10:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/02/11/30253.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/30253.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/02/11/30253.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/30253.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/30253.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 容器就是负责运行和销毁servlet的一组类的程序，一组代码的运行环境。为了开发方便，可以从javax.servlet.GenericServlet 继承实现主要业务方法。注意几点，1.有一个无参数的init()方法，是GenericServlet实现的，它不是Servlet接口中的方法，所以不会由容器调用，而是因为GenericServlet本身已经覆盖了带参数的init方法，并且在方法的最后调...&nbsp;&nbsp;<a href='http://www.blogjava.net/lhulcn618/archive/2006/02/11/30253.html'>阅读全文</a><img src ="http://www.blogjava.net/lhulcn618/aggbug/30253.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-02-11 12:10 <a href="http://www.blogjava.net/lhulcn618/archive/2006/02/11/30253.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>达内高级 JAVA Servlet原理 第一天</title><link>http://www.blogjava.net/lhulcn618/archive/2006/02/09/29985.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Wed, 08 Feb 2006 16:01:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/02/09/29985.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/29985.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/02/09/29985.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/29985.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/29985.html</trackback:ping><description><![CDATA[<P><FONT size=2>javax.servlet</FONT> <BR>Interface Servlet<BR><BR>是规范的接口，为了深入了解Servlet原理，要实际开发一个实现该接口的类，来作为第一个Servlet。<BR><BR>public void <B>init</B>(<A href="file:///D:/API/servlet-2_3-fcs-docs/javax/servlet/ServletConfig.html">ServletConfig</A>&nbsp;config)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws <A href="file:///D:/API/servlet-2_3-fcs-docs/javax/servlet/ServletException.html">ServletException</A><BR><BR>这个方法，是由容器在实例化一个Servlet实例后，确切会调用该方法一次。通过判断是否抛出异常来确认Servlet是否被正确初始化。<BR><BR>public void <B>service</B>(<A href="file:///D:/API/servlet-2_3-fcs-docs/javax/servlet/ServletRequest.html">ServletRequest</A>&nbsp;req,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <A href="file:///D:/API/servlet-2_3-fcs-docs/javax/servlet/ServletResponse.html">ServletResponse</A>&nbsp;res)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws <A href="file:///D:/API/servlet-2_3-fcs-docs/javax/servlet/ServletException.html">ServletException</A>,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.io.IOException<BR><BR>这个方法，是我们实现业务逻辑的方法，req和res就是由Web服务器对于请求和相应的有效封装。<BR><BR>没有什么神秘的，java网络编程中，ServerSocket的accept方法返回之后，会获得相应的一个Socket对象，通过该对象可以进而获得对应客户端的输入流和输出流。在对其进行封装就进而到Request和Response对象。<BR><BR>传入service方法，req可以获得请求的头部信息，res.getWriter，获得一个输出，进行输出信息，作为真正响应。<BR><BR>public void <B>destroy</B>()<BR><BR>&nbsp;This method is only called once all threads within the servlet's <CODE>service</CODE> method have exited or after a timeout period has passed.<BR><BR>只有在service方法运行完，或者一个timeout后，会被调用。<BR><BR>After the servlet container calls this method, it will not call the <CODE>service</CODE> method again on this servlet.<BR><BR>一旦调用它，就不会再提供服务。<BR><BR>public <A href="file:///D:/API/servlet-2_3-fcs-docs/javax/servlet/ServletConfig.html">ServletConfig</A> <B>getServletConfig</B>()<BR><BR>返回传入init方法的那个ServletConfig，也就是服务器的ServletConfig。这个方法主要为了其他实例来使用ServletConfig实例。<BR><BR>public java.lang.String <B>getServletInfo</B>()<BR><BR>好比普通的toString()方法，返回注册信息。<BR><BR><BR>编译注意事项：<BR><BR>要在环境变量的classpath中将servlet-api.jar的路径加上，这样编译才能通过。<BR><BR>所以最好先准备好tomcat服务器，以便利用它内置的jar文件。<BR><BR>D:\jakarta-tomcat-5.0.19\common\lib\servlet-api.jar<BR><BR>======================================<BR><BR>编译好后，是一个带包结构的.class文件目录层次。<BR><BR>如何部署呢？<BR><BR>很简单，在D:\jakarta-tomcat-5.0.19\webapps中建立一个自己的应用文件夹，例如:imshark<BR><BR>这时就可以将静态网页放入该文件夹了，然后要按照java web 应用的规范，建立一个WEB-INF的文件夹，然后里面放置一个标准的web.xml文件，就可以访问了。<BR><BR>web.xml</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: #0000ff">&lt;?</SPAN><SPAN style="COLOR: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="ISO-8859-1"</SPAN><SPAN style="COLOR: #0000ff">?&gt;</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">&lt;</SPAN><SPAN style="COLOR: #800000">web-app&nbsp;</SPAN><SPAN style="COLOR: #ff0000">xmlns</SPAN><SPAN style="COLOR: #0000ff">="http://java.sun.com/xml/ns/j2ee"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</SPAN><SPAN style="COLOR: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</SPAN><SPAN style="COLOR: #0000ff">="http://java.sun.com/xml/ns/j2ee&nbsp;http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;version</SPAN><SPAN style="COLOR: #0000ff">="2.4"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<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">&lt;/</SPAN><SPAN style="COLOR: #800000">web-app</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></DIV>
<P><BR>然后部署servlet，在WEB-INF文件夹中，建立一个classes的目录，然后，将带目录结构的.class文件放入该文件夹，然后修改web.xml<BR><BR></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">&lt;?</SPAN><SPAN style="COLOR: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="ISO-8859-1"</SPAN><SPAN style="COLOR: #0000ff">?&gt;</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">&lt;</SPAN><SPAN style="COLOR: #800000">web-app&nbsp;</SPAN><SPAN style="COLOR: #ff0000">xmlns</SPAN><SPAN style="COLOR: #0000ff">="http://java.sun.com/xml/ns/j2ee"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</SPAN><SPAN style="COLOR: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</SPAN><SPAN style="COLOR: #0000ff">="http://java.sun.com/xml/ns/j2ee&nbsp;http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;version</SPAN><SPAN style="COLOR: #0000ff">="2.4"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">servlet</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">servlet-name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">TimeServlet</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">servlet-name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">servlet-class</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">imshark.servlet.basic.TimeServlet</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">servlet-class</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">servlet</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">servlet-mapping</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">servlet-name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">TimeServlet</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">servlet-name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">url-pattern</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">/getTime.jsp</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">url-pattern</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">servlet-mapping</SPAN><SPAN style="COLOR: #0000ff">&gt;</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">&lt;/</SPAN><SPAN style="COLOR: #800000">web-app</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></DIV>
<P><IMG height=294 alt=1.gif src="http://www.blogjava.net/images/blogjava_net/lhulcn618/1.gif" width=458 border=0><BR><BR><A href="http://localhost:8080/imshark/getTime.jsp">http://localhost:8080/imshark/getTime.jsp</A><BR><BR>所以可看出getTime.jsp是一个虚拟的路径地址，并不实际存在，完全有web.xml构造的。<BR><BR>以上就是最基本的Servlet的知识点。<BR></P><img src ="http://www.blogjava.net/lhulcn618/aggbug/29985.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-02-09 00:01 <a href="http://www.blogjava.net/lhulcn618/archive/2006/02/09/29985.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unix 系统高级程序设计 Unix C++</title><link>http://www.blogjava.net/lhulcn618/archive/2006/02/05/29638.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Sun, 05 Feb 2006 13:41:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/02/05/29638.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/29638.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/02/05/29638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/29638.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/29638.html</trackback:ping><description><![CDATA[<P>环境变量，在程序中获取。<BR><BR>shell命令，env 命令 （whereis ps which ps）<BR><BR>env|grep JAVA<BR><BR>程序中获取环境变量</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">iostream</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">namespace</SPAN><SPAN style="COLOR: #000000">&nbsp;std;<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">int</SPAN><SPAN style="COLOR: #000000">&nbsp;main(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;argc,</SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000">**</SPAN><SPAN style="COLOR: #000000">&nbsp;argv,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000">**</SPAN><SPAN style="COLOR: #000000">&nbsp;env)<BR><IMG id=Codehighlighter1_85_202_Open_Image onclick="this.style.display='none'; Codehighlighter1_85_202_Open_Text.style.display='none'; Codehighlighter1_85_202_Closed_Image.style.display='inline'; Codehighlighter1_85_202_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_85_202_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_85_202_Closed_Text.style.display='none'; Codehighlighter1_85_202_Open_Image.style.display='inline'; Codehighlighter1_85_202_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_85_202_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_85_202_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_111_182_Open_Image onclick="this.style.display='none'; Codehighlighter1_111_182_Open_Text.style.display='none'; Codehighlighter1_111_182_Closed_Image.style.display='inline'; Codehighlighter1_111_182_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_111_182_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_111_182_Closed_Text.style.display='none'; Codehighlighter1_111_182_Open_Image.style.display='inline'; Codehighlighter1_111_182_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">while</SPAN><SPAN style="COLOR: #000000">(env</SPAN><SPAN style="COLOR: #000000">&amp;&amp;*</SPAN><SPAN style="COLOR: #000000">env)</SPAN><SPAN id=Codehighlighter1_111_182_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_111_182_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;cout&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">env&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;endl;<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;</SPAN><SPAN style="COLOR: #000000">++</SPAN><SPAN style="COLOR: #000000">env;<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/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: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV>
<P><BR>c++，一个字符串数组，以char**的指针代表的。<BR><BR><IMG height=239 alt=Untitled-1.gif src="http://www.blogjava.net/images/blogjava_net/lhulcn618/Untitled-1.gif" width=200 border=0><BR>所以遍历时，既要判断env指向的指针数组是否为空，也要判断*env是不是到末端。<BR><BR>=======================================<BR><BR>Unix 系统调用函数，getenv。<BR><BR>man getenv （或者man -k getenv&nbsp;&nbsp;&nbsp; man -a&nbsp;getenv）<BR><BR>SYNOPSIS<BR>&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;stdlib.h&gt;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; char *getenv(const char *name);<BR><BR>得到函数原型和需要包含的头文件。<BR><BR>RETURN VALUES<BR>&nbsp;&nbsp;&nbsp;&nbsp; If successful, getenv() returns a pointer to&nbsp; the&nbsp; value&nbsp; in<BR>&nbsp;&nbsp;&nbsp;&nbsp; the&nbsp; current&nbsp; environment;&nbsp; otherwise,&nbsp; it&nbsp; returns&nbsp; a&nbsp; null<BR>&nbsp;&nbsp;&nbsp;&nbsp; pointer.<BR><BR></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">stdlib.h</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">iostream</SPAN><SPAN style="COLOR: #000000">&gt;</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">using</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">namespace</SPAN><SPAN style="COLOR: #000000">&nbsp;std;<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">int</SPAN><SPAN style="COLOR: #000000">&nbsp;main()<BR><IMG id=Codehighlighter1_74_202_Open_Image onclick="this.style.display='none'; Codehighlighter1_74_202_Open_Text.style.display='none'; Codehighlighter1_74_202_Closed_Image.style.display='inline'; Codehighlighter1_74_202_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_74_202_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_74_202_Closed_Text.style.display='none'; Codehighlighter1_74_202_Open_Image.style.display='inline'; Codehighlighter1_74_202_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_74_202_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_74_202_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: #0000ff">char</SPAN><SPAN style="COLOR: #000000">&nbsp;javahome[</SPAN><SPAN style="COLOR: #000000">200</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;strcpy(javahome,getenv(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">JAVA_HOME</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;cout&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;javahome&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;endl;<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: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV><BR>int putenv(const char* str); 成功返回0;<BR><BR>在程序中添加和修改的环境变量只对本进程起作用。<BR><BR><IMG height=450 alt=Untitled2.gif src="http://www.blogjava.net/images/blogjava_net/lhulcn618/Untitled2.gif" width=150 border=0><BR>代码栈，存储着函数调用的入口地址，通过pstack命令可以查看相应函数调用关系，也就是代码栈。<BR><BR>openlab.tarena.ca% pstack 3212<BR>3212:&nbsp;&nbsp; ljlserver<BR>&nbsp;ff198958 accept&nbsp;&nbsp; (0, ffbefad8, ffbefad4, 1)<BR>&nbsp;00010e74 main&nbsp;&nbsp;&nbsp;&nbsp; (1, ffbefb84, ffbefb8c, 216c4, 0, 0) + 348<BR>&nbsp;000109f4 _start&nbsp;&nbsp; (0, 0, 0, 0, 0, 0) + 5c<BR><BR>Unix每个进程的启动都回调用_start，然后向main传入参数，在main调用前，env环境变量就已经拷贝到进程空间中了。_start负责提供前提条件。<BR><BR><img src ="http://www.blogjava.net/lhulcn618/aggbug/29638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-02-05 21:41 <a href="http://www.blogjava.net/lhulcn618/archive/2006/02/05/29638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2ME 网络连接(HTTP) 模拟器 WTK</title><link>http://www.blogjava.net/lhulcn618/archive/2006/02/05/29589.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Sun, 05 Feb 2006 05:28:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/02/05/29589.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/29589.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/02/05/29589.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/29589.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/29589.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我这天，开发网络连接程序，遇到n多问题，都得以解决。总结一下。首先是环境。我用的开发SDK和模拟器都是Sun的，J2ME Wireless Toolkit 2.2现在UltraEdit下面写一个网络程序。注意一定要在网络连接动作时，另外启动一下线程，否则模拟器运行会有错误。很不好的代码：不要使用！！！！！！！！！！import&nbsp;java.io.InputStream;import&n...&nbsp;&nbsp;<a href='http://www.blogjava.net/lhulcn618/archive/2006/02/05/29589.html'>阅读全文</a><img src ="http://www.blogjava.net/lhulcn618/aggbug/29589.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-02-05 13:28 <a href="http://www.blogjava.net/lhulcn618/archive/2006/02/05/29589.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Core C++ 变量的作用域</title><link>http://www.blogjava.net/lhulcn618/archive/2006/02/04/29561.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Sat, 04 Feb 2006 15:35:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/02/04/29561.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/29561.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/02/04/29561.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/29561.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/29561.html</trackback:ping><description><![CDATA[<P>局部变量，块内的变量（函数为最大的块）<BR><BR>全局变量在所有函数之外（函数都可用）<BR><BR>内存：<BR><BR>&nbsp;&nbsp;&nbsp;代码区&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据区<BR><BR>&nbsp;&nbsp; 栈为局部变量<BR>&nbsp;&nbsp; 堆区为动态分配<BR>&nbsp;&nbsp; 全局数据区，静态数据区<BR>&nbsp;&nbsp; 常量区，主要是字面量，内存为只读的。<BR><BR>函数的形参，可以给默认值<BR><BR>可以为形参指定默认值（从右向左），调用时可以不用传递参数。<BR><BR>fact(int n,int m = 1);<BR><BR><FONT style="BACKGROUND-COLOR: #0000ff">但是不能跳跃传递参数，二义性！<BR></FONT><BR>enum Sex{<BR>&nbsp; MALE,FEMALE<BR>}<BR><BR>void disp(char* name, Sex gender = MALE);<BR><BR><FONT style="BACKGROUND-COLOR: #9acd32">函数声明中指定了默认值，不能在定义时，再指定默认值，但可以追加默认值。</FONT><BR><BR>fact(int , int&nbsp; =1);&nbsp; 这样声明没问题。<BR><BR>内联函数，提高程序运行效率，调用函数时，不是调用，而是搬一份到调用处，不用进行真正函数调用，所以无开辟栈的开销。<BR><BR>会增加代码的长度<BR><BR>如果函数很复杂，不能成为内联函数。不支持控制结果。<BR><BR>规定1，必须先定义，不支持函数原形。<BR>因为搬函数代码时，是在编译过程中进行的。<BR><BR>比较&nbsp; 调用开销 VS 执行开销，来判断是否使用内联函数，对于很简单的函数值得内联。<BR><BR>2.是否能成为内联函数完全有编译程序决定<BR><BR>3.不支持控制结构。</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">#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">iostream</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">namespace</SPAN><SPAN style="COLOR: #000000">&nbsp;std;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>inline&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;isnumber(</SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000">&nbsp;ch)<BR><IMG id=Codehighlighter1_70_125_Open_Image onclick="this.style.display='none'; Codehighlighter1_70_125_Open_Text.style.display='none'; Codehighlighter1_70_125_Closed_Image.style.display='inline'; Codehighlighter1_70_125_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_70_125_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_70_125_Closed_Text.style.display='none'; Codehighlighter1_70_125_Open_Image.style.display='inline'; Codehighlighter1_70_125_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_70_125_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_70_125_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;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;((ch&nbsp;</SPAN><SPAN style="COLOR: #000000">&gt;=</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">&amp;&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;ch&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;=</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">9</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN style="COLOR: #000000">?</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">:</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;main()<BR><IMG id=Codehighlighter1_140_677_Open_Image onclick="this.style.display='none'; Codehighlighter1_140_677_Open_Text.style.display='none'; Codehighlighter1_140_677_Closed_Image.style.display='inline'; Codehighlighter1_140_677_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_140_677_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_140_677_Closed_Text.style.display='none'; Codehighlighter1_140_677_Open_Image.style.display='inline'; Codehighlighter1_140_677_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_140_677_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_140_677_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">in</SPAN><SPAN style="COLOR: #000000">;&nbsp;<BR><IMG id=Codehighlighter1_171_568_Open_Image onclick="this.style.display='none'; Codehighlighter1_171_568_Open_Text.style.display='none'; Codehighlighter1_171_568_Closed_Image.style.display='inline'; Codehighlighter1_171_568_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_171_568_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_171_568_Closed_Text.style.display='none'; Codehighlighter1_171_568_Open_Image.style.display='inline'; Codehighlighter1_171_568_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">while</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN id=Codehighlighter1_171_568_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_171_568_Open_Text><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;cout&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">please&nbsp;input&nbsp;a&nbsp;char:(input&nbsp;q&nbsp;to&nbsp;exit)&nbsp;&gt;</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;</SPAN><SPAN style="COLOR: #0000ff">in</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;cin.</SPAN><SPAN style="COLOR: #0000ff">get</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">if</SPAN><SPAN style="COLOR: #000000">(isnumber(</SPAN><SPAN style="COLOR: #0000ff">in</SPAN><SPAN style="COLOR: #000000">))<BR><IMG id=Codehighlighter1_290_380_Open_Image onclick="this.style.display='none'; Codehighlighter1_290_380_Open_Text.style.display='none'; Codehighlighter1_290_380_Closed_Image.style.display='inline'; Codehighlighter1_290_380_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_290_380_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_290_380_Closed_Text.style.display='none'; Codehighlighter1_290_380_Open_Image.style.display='inline'; Codehighlighter1_290_380_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_290_380_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_290_380_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;cout&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">you&nbsp;input&nbsp;is&nbsp;num&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">in</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">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;endl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_403_529_Open_Image onclick="this.style.display='none'; Codehighlighter1_403_529_Open_Text.style.display='none'; Codehighlighter1_403_529_Closed_Image.style.display='inline'; Codehighlighter1_403_529_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_403_529_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_403_529_Closed_Text.style.display='none'; Codehighlighter1_403_529_Open_Image.style.display='inline'; Codehighlighter1_403_529_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_403_529_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_403_529_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;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #0000ff">in</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">q</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">break</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;&nbsp;&nbsp;cout&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">you&nbsp;input&nbsp;is&nbsp;not&nbsp;num&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;endl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin.ignore(</SPAN><SPAN style="COLOR: #000000">100</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">\n</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;}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">please&nbsp;input&nbsp;any&nbsp;key&nbsp;to&nbsp;exit<IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;endl;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cin.</SPAN><SPAN style="COLOR: #0000ff">get</SPAN><SPAN style="COLOR: #000000">();&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cin.</SPAN><SPAN style="COLOR: #0000ff">get</SPAN><SPAN style="COLOR: #000000">();&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;<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>&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR>递归函数<BR><BR>一个函数自己调用自己，不管问题多复杂，只要把问题简化为最简单的形式。<BR><BR>递归函数不可能是内联函数<BR><BR>效率，递归 &lt; 循环 &lt; 公式<BR><BR>任何递归都可以改为非递归，需要用到栈，代码就很看懂了。改后，不一定提高效率。因为递归本身就是去开辟栈完成的。为何不保留代码可读性呢。<BR><BR>唯一条件，递归必须存在一个必须满足的条件，以结束推出。<BR><BR>菲波那契数列，求对应位置的值<BR><BR>头文件<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">#ifndef&nbsp;FIB_H<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">#define</SPAN><SPAN style="COLOR: #000000">&nbsp;FIB_H&nbsp;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">double</SPAN><SPAN style="COLOR: #000000">&nbsp;fib(&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">double</SPAN><SPAN style="COLOR: #000000">&nbsp;fi(&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">#endif</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR>函数定义文件，递归<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">double</SPAN><SPAN style="COLOR: #000000">&nbsp;fib(&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;n&nbsp;)<BR><IMG id=Codehighlighter1_20_122_Open_Image onclick="this.style.display='none'; Codehighlighter1_20_122_Open_Text.style.display='none'; Codehighlighter1_20_122_Closed_Image.style.display='inline'; Codehighlighter1_20_122_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_20_122_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_20_122_Closed_Text.style.display='none'; Codehighlighter1_20_122_Open_Image.style.display='inline'; Codehighlighter1_20_122_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_20_122_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_20_122_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&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">1</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;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&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">3</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;</SPAN><SPAN style="COLOR: #0000ff">return</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>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;fib(&nbsp;n</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">&nbsp;)&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;fib(&nbsp;n</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">&nbsp;);<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">double</SPAN><SPAN style="COLOR: #000000">&nbsp;fi(&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;n&nbsp;)<BR><IMG id=Codehighlighter1_144_345_Open_Image onclick="this.style.display='none'; Codehighlighter1_144_345_Open_Text.style.display='none'; Codehighlighter1_144_345_Closed_Image.style.display='inline'; Codehighlighter1_144_345_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_144_345_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_144_345_Closed_Text.style.display='none'; Codehighlighter1_144_345_Open_Image.style.display='inline'; Codehighlighter1_144_345_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_144_345_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_144_345_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&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">1</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;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&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">3</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;</SPAN><SPAN style="COLOR: #0000ff">return</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>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">double</SPAN><SPAN style="COLOR: #000000">&nbsp;d,d1,d2;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;d1</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;&nbsp;d2</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">;<BR><IMG id=Codehighlighter1_277_329_Open_Image onclick="this.style.display='none'; Codehighlighter1_277_329_Open_Text.style.display='none'; Codehighlighter1_277_329_Closed_Image.style.display='inline'; Codehighlighter1_277_329_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_277_329_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_277_329_Closed_Text.style.display='none'; Codehighlighter1_277_329_Open_Image.style.display='inline'; Codehighlighter1_277_329_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&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;i</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">;i</SPAN><SPAN style="COLOR: #000000">&lt;=</SPAN><SPAN style="COLOR: #000000">n;i</SPAN><SPAN style="COLOR: #000000">++</SPAN><SPAN style="COLOR: #000000">&nbsp;)</SPAN><SPAN id=Codehighlighter1_277_329_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_277_329_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;d</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">d1</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">d2;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d1</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">d2;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d2</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">d;<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>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;d;<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></DIV>
<P>主函数文件</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">#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">iostream</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">namespace</SPAN><SPAN style="COLOR: #000000">&nbsp;std;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>#include&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">fib.h</SPAN><SPAN style="COLOR: #000000">"</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">int</SPAN><SPAN style="COLOR: #000000">&nbsp;main()<BR><IMG id=Codehighlighter1_70_188_Open_Image onclick="this.style.display='none'; Codehighlighter1_70_188_Open_Text.style.display='none'; Codehighlighter1_70_188_Closed_Image.style.display='inline'; Codehighlighter1_70_188_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_70_188_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_70_188_Closed_Text.style.display='none'; Codehighlighter1_70_188_Open_Image.style.display='inline'; Codehighlighter1_70_188_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_70_188_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_70_188_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">please&nbsp;input&nbsp;item&nbsp;no.:</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;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;n;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cin</SPAN><SPAN style="COLOR: #000000">&gt;&gt;</SPAN><SPAN style="COLOR: #000000">n;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">item&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">n</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;is&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">fi(n)</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">endl;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</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><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR><img src ="http://www.blogjava.net/lhulcn618/aggbug/29561.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-02-04 23:35 <a href="http://www.blogjava.net/lhulcn618/archive/2006/02/04/29561.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Core C++ 第二天内容</title><link>http://www.blogjava.net/lhulcn618/archive/2006/01/15/28107.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Sun, 15 Jan 2006 09:13:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/01/15/28107.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/28107.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/01/15/28107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/28107.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/28107.html</trackback:ping><description><![CDATA[char -128~127&nbsp;&nbsp;&nbsp;&nbsp; 无符号:0~255<BR>int<BR>short -32768~32767&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 无符号:0~65535<BR>long -2G~2G&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;无符号:0~4G-1<BR><BR>有其他修饰符时，int可以省略,short = short int&nbsp; long = long int,signed = signed int,unsigned&nbsp;= unsigned int。<BR><BR>float&nbsp;&nbsp;&nbsp;&nbsp; +/- 3.4*10E38<BR>double&nbsp;&nbsp;&nbsp;&nbsp; +/-&nbsp;1.7*10E308<BR>long double&nbsp;&nbsp;&nbsp;&nbsp;+/-1.1*10E4932<BR><BR>常量定义，必须初始化。<BR><BR>整数型，数据超出后，会发生回绕，char&nbsp;&nbsp;&nbsp;&nbsp; 127+1 =&gt; -128了。<BR><BR>==============================<BR><BR>正数与负数转换，别忘了是取反加1，<BR><BR>有符号正数:00000111<BR>负数，全部取反+1<BR>&lt;1&gt;11111000<BR>&lt;2&gt;11111001<BR><BR>正数0:00000000(正0)<BR>&lt;1&gt;取反:11111111<BR>&lt;2&gt;加一，进位，还要保留符号位，所以是10000000，即为-128<BR><BR>==============================<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">iostream</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">namespace</SPAN><SPAN style="COLOR: #000000">&nbsp;std;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;main()<BR><IMG id=Codehighlighter1_52_274_Open_Image onclick="this.style.display='none'; Codehighlighter1_52_274_Open_Text.style.display='none'; Codehighlighter1_52_274_Closed_Image.style.display='inline'; Codehighlighter1_52_274_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_52_274_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_52_274_Closed_Text.style.display='none'; Codehighlighter1_52_274_Open_Image.style.display='inline'; Codehighlighter1_52_274_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_52_274_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_52_274_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">please&nbsp;input&nbsp;a&nbsp;number:</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;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;i,num;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cin</SPAN><SPAN style="COLOR: #000000">&gt;&gt;</SPAN><SPAN style="COLOR: #000000">num;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;mask</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">0x80000000</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">binary&nbsp;is&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;<BR><IMG id=Codehighlighter1_175_248_Open_Image onclick="this.style.display='none'; Codehighlighter1_175_248_Open_Text.style.display='none'; Codehighlighter1_175_248_Closed_Image.style.display='inline'; Codehighlighter1_175_248_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_175_248_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_175_248_Closed_Text.style.display='none'; Codehighlighter1_175_248_Open_Image.style.display='inline'; Codehighlighter1_175_248_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">(&nbsp;i</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;&nbsp;i</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">32</SPAN><SPAN style="COLOR: #000000">;&nbsp;i</SPAN><SPAN style="COLOR: #000000">++</SPAN><SPAN style="COLOR: #000000">&nbsp;)</SPAN><SPAN id=Codehighlighter1_175_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_175_248_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: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(&nbsp;(i</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">0</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;cout</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">'</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">(mask</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">num</SPAN><SPAN style="COLOR: #000000">?</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">'</SPAN><SPAN style="COLOR: #000000">0</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;num</SPAN><SPAN style="COLOR: #000000">&lt;&lt;=</SPAN><SPAN style="COLOR: #000000">1</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>&nbsp;&nbsp;&nbsp;&nbsp;cout</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">endl;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</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><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR>整型包括:char,unsigned/signed [int/short int/long int],enum，枚举项。<BR><BR>C++运算符，优先级顺序<BR><BR>() []<BR>. -&gt; .* -&gt;* ::<BR>! ~ ++ -- + -<BR>&amp; sizeof<BR>* / %<BR>+ -<BR>&lt;&lt; &gt;&gt;<BR>&lt; &gt; &lt;= &gt;=<BR>== !=<BR>&amp;<BR>^<BR>|<BR>&amp;&amp;<BR>||<BR>?:<BR>=&nbsp;&nbsp;&nbsp; +=&nbsp;&nbsp;&nbsp; -=&nbsp;&nbsp;&nbsp; *=&nbsp;&nbsp; /=&nbsp;&nbsp; %=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; =&nbsp;&nbsp;&nbsp; &gt;&gt;=&nbsp;&nbsp;&nbsp;&nbsp; &amp;=&nbsp;&nbsp;&nbsp; |=&nbsp;&nbsp;&nbsp; ^=<BR>,<BR><BR>由上到下，级别越低。<BR><BR>单目，赋值，条件&nbsp; ，从右向左结合，其他从左向右<BR><BR>==============================================<BR><BR>函数与多文件结构<BR><BR>函数是把若干语句组合在一起完成某一个功能。<BR><BR>组成：参数（条件） （结果）返回值<BR><BR>形参和实参<BR><BR>void disp(char str[])形参<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; str &lt;&lt; endl;<BR>}<BR>disp(name);实参<BR><BR><BR>函数声明可以和函数定义分开，函数声明在使用的地方，可以有多处，定义只有一处。<BR><BR>float average(int ,int)<BR><BR>编译只做语法检查，链接才真正去找函数的定义，主要从标准库、当前文件中。<BR><BR>当一个项目包含多个文件时，需要一起编译。<BR><BR>头文件包含一些简短声明，不要有代码，以避免重复。<BR><BR>#ifndef __STU_H_<BR>#define __STU_H_<BR>函数声明<BR>类定义<BR>结构定义<BR>宏定义<BR>#endif<BR><BR>函数的工作原理与栈。<BR><BR>1，参数从后向前将实参压入栈<BR>2，依次传递给形参<BR><BR>返回不确定，可以通过寄存器，也可以通过栈。<BR><BR>函数的局部变量一定在栈中分配空间。并且一定要初始化再使用。因为C++是不会清理空间的值的（Java的方法中的变量一定是先赋值，再使用，同理）<BR><BR><img src ="http://www.blogjava.net/lhulcn618/aggbug/28107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-01-15 17:13 <a href="http://www.blogjava.net/lhulcn618/archive/2006/01/15/28107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UNIX系统高级程序设计</title><link>http://www.blogjava.net/lhulcn618/archive/2006/01/15/28091.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Sun, 15 Jan 2006 07:12:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/01/15/28091.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/28091.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/01/15/28091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/28091.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/28091.html</trackback:ping><description><![CDATA[如何实现程序查看系统环境变量<br>
<br>
[ljl@dhcp-8116-1 uc]$ env<br>
<br>
C++程序:<br>
<br>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">#include&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">iostream</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 0, 255);">using</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">namespace</span><span style="color: rgb(0, 0, 0);">&nbsp;std;<br><br></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;main(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;args,</span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);">**</span><span style="color: rgb(0, 0, 0);">&nbsp;argv,</span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);">**</span><span style="color: rgb(0, 0, 0);">&nbsp;env)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">(env</span><span style="color: rgb(0, 0, 0);">&amp;&amp;*</span><span style="color: rgb(0, 0, 0);">env)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">env&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;&lt;</span><span style="color: rgb(0, 0, 0);">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">env;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br>}<br><br></span></div><br>
使用main函数的重载.<br>
<br>
char** env 是一个二维数组指针,可以遍利二维数组得到环境变量.<br>
<br>
=================================================<br>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">#include&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">iostream</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 0, 255);">using</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">namespace</span><span style="color: rgb(0, 0, 0);">&nbsp;std;<br></span><span style="color: rgb(0, 0, 255);">const</span><span style="color: rgb(0, 0, 0);">&nbsp;unsigned&nbsp;size&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">;<br></span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;printInfo(</span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);">**</span><span style="color: rgb(0, 0, 0);">&nbsp;env)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">(env&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;&amp;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">env)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">env&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;env</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br></span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;init(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">**</span><span style="color: rgb(0, 0, 0);">&nbsp;data)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">(data&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;&amp;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">data)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">;&nbsp;i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)<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;(</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">data)[i]&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br></span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;printInfo(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">**</span><span style="color: rgb(0, 0, 0);">&nbsp;point)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">(point&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;&amp;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">point)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">;&nbsp;i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<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;cout&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">point)[i]&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">\t</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);">&nbsp;p[</span><span style="color: rgb(0, 0, 0);">4</span><span style="color: rgb(0, 0, 0);">][</span><span style="color: rgb(0, 0, 0);">15</span><span style="color: rgb(0, 0, 0);">]&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;{{</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">hello</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">},{</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">world</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">},{</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">my</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">},{</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">girl</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">}};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">&nbsp;point[</span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">sizeof</span><span style="color: rgb(0, 0, 0);">(p)</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 255);">sizeof</span><span style="color: rgb(0, 0, 0);">(p[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">]);&nbsp;i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point[i]&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;p[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point[</span><span style="color: rgb(0, 0, 0);">4</span><span style="color: rgb(0, 0, 0);">]&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printInfo(point);<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">&nbsp;piArr[size];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;size</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">;&nbsp;i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">&nbsp;pi&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">[</span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;piArr[i]&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;pi;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;piArr[size</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">]&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init(piArr);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printInfo(piArr);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br>}<br><br></span></div><br>
=================================================<br>
<br>
<br>
<img src ="http://www.blogjava.net/lhulcn618/aggbug/28091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-01-15 15:12 <a href="http://www.blogjava.net/lhulcn618/archive/2006/01/15/28091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>达内Core C++ 第一天</title><link>http://www.blogjava.net/lhulcn618/archive/2006/01/11/27642.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Wed, 11 Jan 2006 13:51:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/01/11/27642.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/27642.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/01/11/27642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/27642.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/27642.html</trackback:ping><description><![CDATA[g++ -c 编译成为目标文件<BR><BR>g++ -o 编译指定输出文件名<BR><BR>&nbsp;&nbsp;&nbsp;g++ Info_test_list.cc Info.cc -o Info_test<BR><BR>如果是在windows上，使用Dev-C++，它支持ANSI-C比较好。<BR><BR>#include &lt;&gt; 包含头文件<BR>#include "" 自己的头文件<BR><BR>&nbsp;&nbsp;&nbsp;#include &lt;iostream&gt;<BR>&nbsp;&nbsp;&nbsp;using namespace std;<BR><BR>头文件：<BR><BR>/usr/local/include/c++/3.2/<BR><BR>g++自动能找到标准头文件。<BR><BR>可以自己定义命名空间：<BR><BR>namespace std{<BR><BR>}<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">iostream</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">namespace</SPAN><SPAN style="COLOR: #000000">&nbsp;std;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_55_75_Open_Image onclick="this.style.display='none'; Codehighlighter1_55_75_Open_Text.style.display='none'; Codehighlighter1_55_75_Closed_Image.style.display='inline'; Codehighlighter1_55_75_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_55_75_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_55_75_Closed_Text.style.display='none'; Codehighlighter1_55_75_Open_Image.style.display='inline'; Codehighlighter1_55_75_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">namespace</SPAN><SPAN style="COLOR: #000000">&nbsp;czq</SPAN><SPAN id=Codehighlighter1_55_75_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_55_75_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">int</SPAN><SPAN style="COLOR: #000000">&nbsp;var&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">100</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><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;main()<BR><IMG id=Codehighlighter1_89_135_Open_Image onclick="this.style.display='none'; Codehighlighter1_89_135_Open_Text.style.display='none'; Codehighlighter1_89_135_Closed_Image.style.display='inline'; Codehighlighter1_89_135_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_89_135_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_89_135_Closed_Text.style.display='none'; Codehighlighter1_89_135_Open_Image.style.display='inline'; Codehighlighter1_89_135_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_89_135_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_89_135_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;czq::var&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;endl;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</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></DIV><BR>最后一行应该有一个空行。<BR><BR>在C++中表示字符串，有三种方法，string类，char* char name[]。<BR><BR>char name[]&nbsp;= "John"，这是一个字符串末位有一个'\0'，也就是第五个字符。<BR><BR>'J''o''h''n''\0'<BR><BR>那么char str[5] 只能放四个字符。<BR><BR>int main(int argc,char argv[])<BR>{<BR><BR>}<BR><BR>argc至少为1，因为参数个数包含可执行文件本身。<BR><BR>argv[0]，可以用于检查执行文件名是否被修改，用于版权保护哦。<BR><BR>=============================<BR><BR>在C++中，只要不是0，就是真，那么0包括0、'\0'、NULL、false<BR><BR>例子：猜数：<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">iostream</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">namespace</SPAN><SPAN style="COLOR: #000000">&nbsp;std;<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">int</SPAN><SPAN style="COLOR: #000000">&nbsp;main()<BR><IMG id=Codehighlighter1_53_585_Open_Image onclick="this.style.display='none'; Codehighlighter1_53_585_Open_Text.style.display='none'; Codehighlighter1_53_585_Closed_Image.style.display='inline'; Codehighlighter1_53_585_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_53_585_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_53_585_Closed_Text.style.display='none'; Codehighlighter1_53_585_Open_Image.style.display='inline'; Codehighlighter1_53_585_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_53_585_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_53_585_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;t&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;time(&nbsp;NULL&nbsp;);//随即数产生<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;num&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;t&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">37</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">%</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">100</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;data;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;i;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">input&nbsp;a&nbsp;number&nbsp;between&nbsp;0~99:</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;<BR><IMG id=Codehighlighter1_210_514_Open_Image onclick="this.style.display='none'; Codehighlighter1_210_514_Open_Text.style.display='none'; Codehighlighter1_210_514_Closed_Image.style.display='inline'; Codehighlighter1_210_514_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_210_514_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_210_514_Closed_Text.style.display='none'; Codehighlighter1_210_514_Open_Image.style.display='inline'; Codehighlighter1_210_514_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">(&nbsp;i</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;&nbsp;i</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">10</SPAN><SPAN style="COLOR: #000000">;&nbsp;i</SPAN><SPAN style="COLOR: #000000">++</SPAN><SPAN style="COLOR: #000000">&nbsp;)</SPAN><SPAN id=Codehighlighter1_210_514_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_210_514_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;cin&nbsp;</SPAN><SPAN style="COLOR: #000000">&gt;&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;data;<BR><IMG id=Codehighlighter1_239_332_Open_Image onclick="this.style.display='none'; Codehighlighter1_239_332_Open_Text.style.display='none'; Codehighlighter1_239_332_Closed_Image.style.display='inline'; Codehighlighter1_239_332_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_239_332_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_239_332_Closed_Text.style.display='none'; Codehighlighter1_239_332_Open_Image.style.display='inline'; Codehighlighter1_239_332_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;</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">cin&nbsp;)</SPAN><SPAN id=Codehighlighter1_239_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_239_332_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;cout</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Invalid&nbsp;number!\n</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;&nbsp;&nbsp;&nbsp;&nbsp;cin.clear();<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;cin.ignore(&nbsp;</SPAN><SPAN style="COLOR: #000000">100</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">\n</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">&nbsp;);//忽略字符，最多100个，遇到\n就结束忽略<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">continue</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_353_397_Open_Image onclick="this.style.display='none'; Codehighlighter1_353_397_Open_Text.style.display='none'; Codehighlighter1_353_397_Closed_Image.style.display='inline'; Codehighlighter1_353_397_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_353_397_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_353_397_Closed_Text.style.display='none'; Codehighlighter1_353_397_Open_Image.style.display='inline'; Codehighlighter1_353_397_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;data&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;num&nbsp;)</SPAN><SPAN id=Codehighlighter1_353_397_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_353_397_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;cout</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">you&nbsp;got&nbsp;it!</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">endl;<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">break</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_422_455_Open_Image onclick="this.style.display='none'; Codehighlighter1_422_455_Open_Text.style.display='none'; Codehighlighter1_422_455_Closed_Image.style.display='inline'; Codehighlighter1_422_455_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_422_455_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_422_455_Closed_Text.style.display='none'; Codehighlighter1_422_455_Open_Image.style.display='inline'; Codehighlighter1_422_455_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">else</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(&nbsp;data&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;num&nbsp;)</SPAN><SPAN id=Codehighlighter1_422_455_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_422_455_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;cout</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">too&nbsp;small!</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">endl;<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/InBlock.gif" align=top>&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;cout</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">too&nbsp;big!</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">endl;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">try&nbsp;again:</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;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(&nbsp;i&nbsp;</SPAN><SPAN style="COLOR: #000000">&gt;=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">10</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;cout&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">the&nbsp;answer&nbsp;is&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;num&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;endl;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</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><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR>atoi函数可以转换字符串变为整数。不成功为0<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">iostream</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">namespace</SPAN><SPAN style="COLOR: #000000">&nbsp;std;<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">int</SPAN><SPAN style="COLOR: #000000">&nbsp;main(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;argc,</SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">&nbsp;argv[])<BR><IMG id=Codehighlighter1_74_222_Open_Image onclick="this.style.display='none'; Codehighlighter1_74_222_Open_Text.style.display='none'; Codehighlighter1_74_222_Closed_Image.style.display='inline'; Codehighlighter1_74_222_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_74_222_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_74_222_Closed_Text.style.display='none'; Codehighlighter1_74_222_Open_Image.style.display='inline'; Codehighlighter1_74_222_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_74_222_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_74_222_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;score;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">&nbsp;p&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">10000</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;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;score&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;atoi(p);<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;cout&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;score&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;endl;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cin.</SPAN><SPAN style="COLOR: #0000ff">get</SPAN><SPAN style="COLOR: #000000">();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cin.</SPAN><SPAN style="COLOR: #0000ff">get</SPAN><SPAN style="COLOR: #000000">();&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;<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>&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR>C++，只要定义变量，就会分配空间。只有纯声明性的东西才不会分配空间。<BR><BR>int a;//这时就已经分配了4个字节<BR><BR>对于对象来说，创建对象有两种途径：1、直接定义 &nbsp;2、new 在堆空间<BR><BR>int a = 0;这是初始化，C++大部分情况不会自己初始化，可能保存着不确定的值，需要程序员完成初始化。<BR><BR>a = 9; 这是赋值，赋值与初始化是完全不同的概念，赋值操作实质是进行内存数据的复制。初始化，定义时分配空间后给一个值而已。<BR><BR><FONT style="BACKGROUND-COLOR: #9acd32">赋值与初始化的区别体现的更明显 对象的初始化和赋值是完全不同的概念</FONT>。<BR><BR><img src ="http://www.blogjava.net/lhulcn618/aggbug/27642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-01-11 21:51 <a href="http://www.blogjava.net/lhulcn618/archive/2006/01/11/27642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过实现Cloneable接口和覆盖clone()方法实现深度克隆，以及如何通过ByteArrayIOStream实现克隆</title><link>http://www.blogjava.net/lhulcn618/archive/2006/01/08/27157.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Sun, 08 Jan 2006 09:15:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2006/01/08/27157.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/27157.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2006/01/08/27157.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/27157.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/27157.html</trackback:ping><description><![CDATA[<P>某个类要想实现拷贝的功能，就必须实现Cloneable接口，并覆盖Object的clone()方法，才能真正实现克隆。<BR><BR>浅拷贝，一种默认的实现，Teacher类中的clone方法的实现就是浅拷贝。<BR><BR>Student类的clone方法就是深拷贝。注意super.clone返回的对象实际上是被类的对象，可以放心强制转换，至于为什么，我也不知道，估计得读虚拟机规范，从Object源码看也不到什么，因为是protect native Object clone();<BR><BR><BR></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.util.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;<BR><IMG id=Codehighlighter1_42_587_Open_Image onclick="this.style.display='none'; Codehighlighter1_42_587_Open_Text.style.display='none'; Codehighlighter1_42_587_Closed_Image.style.display='inline'; Codehighlighter1_42_587_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_42_587_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_42_587_Closed_Text.style.display='none'; Codehighlighter1_42_587_Open_Image.style.display='inline'; Codehighlighter1_42_587_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;TestClone</SPAN><SPAN id=Codehighlighter1_42_587_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_42_587_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&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)<BR><IMG id=Codehighlighter1_85_415_Open_Image onclick="this.style.display='none'; Codehighlighter1_85_415_Open_Text.style.display='none'; Codehighlighter1_85_415_Closed_Image.style.display='inline'; Codehighlighter1_85_415_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_85_415_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_85_415_Closed_Text.style.display='none'; Codehighlighter1_85_415_Open_Image.style.display='inline'; Codehighlighter1_85_415_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;</SPAN><SPAN id=Codehighlighter1_85_415_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_85_415_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;Teacher&nbsp;t&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Teacher(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Name</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">22</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;Teacher&nbsp;m&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(Teacher)t.clone();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;System.out.println(m);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;Student&nbsp;stu&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Student();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;Student&nbsp;deepcloneSTU&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(Student)stu.clone();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;stu.courses.put(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Integer(</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">),</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Math</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;deepcloneSTU.courses.put(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Integer(</SPAN><SPAN style="COLOR: #000000">100</SPAN><SPAN style="COLOR: #000000">),</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Java</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;disp(stu.courses);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;disp(deepcloneSTU.courses);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&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;disp(HashMap&nbsp;h)<BR><IMG id=Codehighlighter1_449_585_Open_Image onclick="this.style.display='none'; Codehighlighter1_449_585_Open_Text.style.display='none'; Codehighlighter1_449_585_Closed_Image.style.display='inline'; Codehighlighter1_449_585_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_449_585_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_449_585_Closed_Text.style.display='none'; Codehighlighter1_449_585_Open_Image.style.display='inline'; Codehighlighter1_449_585_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;</SPAN><SPAN id=Codehighlighter1_449_585_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_449_585_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;Set&nbsp;keySet&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;h.keySet();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;Iterator&nbsp;it&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;keySet.iterator();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">while</SPAN><SPAN style="COLOR: #000000">(it.hasNext())<BR><IMG id=Codehighlighter1_537_582_Open_Image onclick="this.style.display='none'; Codehighlighter1_537_582_Open_Text.style.display='none'; Codehighlighter1_537_582_Closed_Image.style.display='inline'; Codehighlighter1_537_582_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_537_582_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_537_582_Closed_Text.style.display='none'; Codehighlighter1_537_582_Open_Image.style.display='inline'; Codehighlighter1_537_582_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_537_582_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_537_582_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;System.out.println(h.get(it.next()));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&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"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_624_946_Open_Image onclick="this.style.display='none'; Codehighlighter1_624_946_Open_Text.style.display='none'; Codehighlighter1_624_946_Closed_Image.style.display='inline'; Codehighlighter1_624_946_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_624_946_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_624_946_Closed_Text.style.display='none'; Codehighlighter1_624_946_Open_Image.style.display='inline'; Codehighlighter1_624_946_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Teacher&nbsp;</SPAN><SPAN style="COLOR: #0000ff">implements</SPAN><SPAN style="COLOR: #000000">&nbsp;Cloneable</SPAN><SPAN id=Codehighlighter1_624_946_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_624_946_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;String&nbsp;name;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;age;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;Teacher(String&nbsp;name,</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;age)<BR><IMG id=Codehighlighter1_681_722_Open_Image onclick="this.style.display='none'; Codehighlighter1_681_722_Open_Text.style.display='none'; Codehighlighter1_681_722_Closed_Image.style.display='inline'; Codehighlighter1_681_722_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_681_722_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_681_722_Closed_Text.style.display='none'; Codehighlighter1_681_722_Open_Image.style.display='inline'; Codehighlighter1_681_722_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;</SPAN><SPAN id=Codehighlighter1_681_722_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_681_722_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.name&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;name;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.age&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;age;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;Object&nbsp;clone()<BR><IMG id=Codehighlighter1_750_882_Open_Image onclick="this.style.display='none'; Codehighlighter1_750_882_Open_Text.style.display='none'; Codehighlighter1_750_882_Closed_Image.style.display='inline'; Codehighlighter1_750_882_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_750_882_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_750_882_Closed_Text.style.display='none'; Codehighlighter1_750_882_Open_Image.style.display='inline'; Codehighlighter1_750_882_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;</SPAN><SPAN id=Codehighlighter1_750_882_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_750_882_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_757_786_Open_Image onclick="this.style.display='none'; Codehighlighter1_757_786_Open_Text.style.display='none'; Codehighlighter1_757_786_Closed_Image.style.display='inline'; Codehighlighter1_757_786_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_757_786_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_757_786_Closed_Text.style.display='none'; Codehighlighter1_757_786_Open_Image.style.display='inline'; Codehighlighter1_757_786_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN id=Codehighlighter1_757_786_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_757_786_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">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">super</SPAN><SPAN style="COLOR: #000000">.clone();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">(CloneNotSupportedException&nbsp;e)<BR><IMG id=Codehighlighter1_825_879_Open_Image onclick="this.style.display='none'; Codehighlighter1_825_879_Open_Text.style.display='none'; Codehighlighter1_825_879_Closed_Image.style.display='inline'; Codehighlighter1_825_879_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_825_879_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_825_879_Closed_Text.style.display='none'; Codehighlighter1_825_879_Open_Image.style.display='inline'; Codehighlighter1_825_879_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_825_879_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_825_879_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">throw</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Error(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">This&nbsp;should&nbsp;never&nbsp;happen!</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;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;String&nbsp;toString()<BR><IMG id=Codehighlighter1_913_944_Open_Image onclick="this.style.display='none'; Codehighlighter1_913_944_Open_Text.style.display='none'; Codehighlighter1_913_944_Closed_Image.style.display='inline'; Codehighlighter1_913_944_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_913_944_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_913_944_Closed_Text.style.display='none'; Codehighlighter1_913_944_Open_Image.style.display='inline'; Codehighlighter1_913_944_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;</SPAN><SPAN id=Codehighlighter1_913_944_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_913_944_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;name&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;age;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&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"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_983_1267_Open_Image onclick="this.style.display='none'; Codehighlighter1_983_1267_Open_Text.style.display='none'; Codehighlighter1_983_1267_Closed_Image.style.display='inline'; Codehighlighter1_983_1267_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_983_1267_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_983_1267_Closed_Text.style.display='none'; Codehighlighter1_983_1267_Open_Image.style.display='inline'; Codehighlighter1_983_1267_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Student&nbsp;</SPAN><SPAN style="COLOR: #0000ff">implements</SPAN><SPAN style="COLOR: #000000">&nbsp;Cloneable</SPAN><SPAN id=Codehighlighter1_983_1267_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_983_1267_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;HashMap&nbsp;courses&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;HashMap();<BR><IMG id=Codehighlighter1_1029_1030_Open_Image onclick="this.style.display='none'; Codehighlighter1_1029_1030_Open_Text.style.display='none'; Codehighlighter1_1029_1030_Closed_Image.style.display='inline'; Codehighlighter1_1029_1030_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1029_1030_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1029_1030_Closed_Text.style.display='none'; Codehighlighter1_1029_1030_Open_Image.style.display='inline'; Codehighlighter1_1029_1030_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;Student()</SPAN><SPAN id=Codehighlighter1_1029_1030_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_1029_1030_Open_Text><SPAN style="COLOR: #000000">{}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;Object&nbsp;clone()<BR><IMG id=Codehighlighter1_1059_1265_Open_Image onclick="this.style.display='none'; Codehighlighter1_1059_1265_Open_Text.style.display='none'; Codehighlighter1_1059_1265_Closed_Image.style.display='inline'; Codehighlighter1_1059_1265_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1059_1265_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1059_1265_Closed_Text.style.display='none'; Codehighlighter1_1059_1265_Open_Image.style.display='inline'; Codehighlighter1_1059_1265_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;</SPAN><SPAN id=Codehighlighter1_1059_1265_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_1059_1265_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_1066_1169_Open_Image onclick="this.style.display='none'; Codehighlighter1_1066_1169_Open_Text.style.display='none'; Codehighlighter1_1066_1169_Closed_Image.style.display='inline'; Codehighlighter1_1066_1169_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1066_1169_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1066_1169_Closed_Text.style.display='none'; Codehighlighter1_1066_1169_Open_Image.style.display='inline'; Codehighlighter1_1066_1169_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN id=Codehighlighter1_1066_1169_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_1066_1169_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;Student&nbsp;stu&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(Student)</SPAN><SPAN style="COLOR: #0000ff">super</SPAN><SPAN style="COLOR: #000000">.clone();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;stu.courses&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(HashMap)courses.clone();<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;stu;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">(CloneNotSupportedException&nbsp;e)<BR><IMG id=Codehighlighter1_1208_1262_Open_Image onclick="this.style.display='none'; Codehighlighter1_1208_1262_Open_Text.style.display='none'; Codehighlighter1_1208_1262_Closed_Image.style.display='inline'; Codehighlighter1_1208_1262_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1208_1262_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1208_1262_Closed_Text.style.display='none'; Codehighlighter1_1208_1262_Open_Image.style.display='inline'; Codehighlighter1_1208_1262_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1208_1262_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_1208_1262_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">throw</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Error(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">This&nbsp;should&nbsp;never&nbsp;happen!</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;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&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"><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></DIV><BR><BR>如何通过对象串行化的方式来做进行拷贝工作呢？<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.util.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;<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.io.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;<BR><IMG id=Codehighlighter1_60_794_Open_Image onclick="this.style.display='none'; Codehighlighter1_60_794_Open_Text.style.display='none'; Codehighlighter1_60_794_Closed_Image.style.display='inline'; Codehighlighter1_60_794_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_60_794_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_60_794_Closed_Text.style.display='none'; Codehighlighter1_60_794_Open_Image.style.display='inline'; Codehighlighter1_60_794_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;TestClone</SPAN><SPAN id=Codehighlighter1_60_794_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_60_794_Open_Text><SPAN style="COLOR: #000000">{<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;</SPAN><SPAN style="COLOR: #0000ff">throws</SPAN><SPAN style="COLOR: #000000">&nbsp;Exception<BR><IMG id=Codehighlighter1_120_792_Open_Image onclick="this.style.display='none'; Codehighlighter1_120_792_Open_Text.style.display='none'; Codehighlighter1_120_792_Closed_Image.style.display='inline'; Codehighlighter1_120_792_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_120_792_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_120_792_Closed_Text.style.display='none'; Codehighlighter1_120_792_Open_Image.style.display='inline'; Codehighlighter1_120_792_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_120_792_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_120_792_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;BMW&nbsp;mycar&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;BMW();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ByteArrayOutputStream&nbsp;memoryOutputStream&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;ByteArrayOutputStream();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectOutputStream&nbsp;serializer&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;ObjectOutputStream(memoryOutputStream);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serializer.writeObject(mycar);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serializer.flush();<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;ByteArrayInputStream&nbsp;memoryInputStream&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;ByteArrayInputStream(memoryOutputStream.toByteArray(&nbsp;));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectInputStream&nbsp;deserializer&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;ObjectInputStream(memoryInputStream);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BMW&nbsp;mycopycar&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(BMW)deserializer.readObject();<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;&nbsp;&nbsp;&nbsp;&nbsp;mycar.add(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;String(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">NB</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;mycopycar.add(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;String(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">NBNB</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;System.out.println(mycar.hashCode());<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(mycopycar.hashCode());<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(mycar.equals(mycopycar));<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"><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">class</SPAN><SPAN style="COLOR: #000000">&nbsp;BMW&nbsp;</SPAN><SPAN style="COLOR: #0000ff">implements</SPAN><SPAN style="COLOR: #000000">&nbsp;Serializable<BR><IMG id=Codehighlighter1_831_1554_Open_Image onclick="this.style.display='none'; Codehighlighter1_831_1554_Open_Text.style.display='none'; Codehighlighter1_831_1554_Closed_Image.style.display='inline'; Codehighlighter1_831_1554_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_831_1554_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_831_1554_Closed_Text.style.display='none'; Codehighlighter1_831_1554_Open_Image.style.display='inline'; Codehighlighter1_831_1554_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_831_1554_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_831_1554_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;wheels;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;String&nbsp;model;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;ArrayList&nbsp;forTest;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;BMW()<BR><IMG id=Codehighlighter1_920_988_Open_Image onclick="this.style.display='none'; Codehighlighter1_920_988_Open_Text.style.display='none'; Codehighlighter1_920_988_Closed_Image.style.display='inline'; Codehighlighter1_920_988_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_920_988_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_920_988_Closed_Text.style.display='none'; Codehighlighter1_920_988_Open_Image.style.display='inline'; Codehighlighter1_920_988_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_920_988_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_920_988_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;wheels&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</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;&nbsp;&nbsp;&nbsp;model&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">530i</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;forTest&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;ArrayList();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;add(Object&nbsp;o)<BR><IMG id=Codehighlighter1_1023_1046_Open_Image onclick="this.style.display='none'; Codehighlighter1_1023_1046_Open_Text.style.display='none'; Codehighlighter1_1023_1046_Closed_Image.style.display='inline'; Codehighlighter1_1023_1046_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1023_1046_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1023_1046_Closed_Text.style.display='none'; Codehighlighter1_1023_1046_Open_Image.style.display='inline'; Codehighlighter1_1023_1046_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1023_1046_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_1023_1046_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;forTest.add(o);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;String&nbsp;toString()<BR><IMG id=Codehighlighter1_1080_1154_Open_Image onclick="this.style.display='none'; Codehighlighter1_1080_1154_Open_Text.style.display='none'; Codehighlighter1_1080_1154_Closed_Image.style.display='inline'; Codehighlighter1_1080_1154_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1080_1154_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1080_1154_Closed_Text.style.display='none'; Codehighlighter1_1080_1154_Open_Image.style.display='inline'; Codehighlighter1_1080_1154_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1080_1154_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_1080_1154_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;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">WHEEL:</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;wheels&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">MODEL:</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;model&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;forTest.toString();&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;hashCode()<BR><IMG id=Codehighlighter1_1185_1248_Open_Image onclick="this.style.display='none'; Codehighlighter1_1185_1248_Open_Text.style.display='none'; Codehighlighter1_1185_1248_Closed_Image.style.display='inline'; Codehighlighter1_1185_1248_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1185_1248_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1185_1248_Closed_Text.style.display='none'; Codehighlighter1_1185_1248_Open_Image.style.display='inline'; Codehighlighter1_1185_1248_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1185_1248_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_1185_1248_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;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;wheels&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;model.hashCode()&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;forTest.hashCode();&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&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;equals(Object&nbsp;o)<BR><IMG id=Codehighlighter1_1289_1550_Open_Image onclick="this.style.display='none'; Codehighlighter1_1289_1550_Open_Text.style.display='none'; Codehighlighter1_1289_1550_Closed_Image.style.display='inline'; Codehighlighter1_1289_1550_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_1289_1550_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1289_1550_Closed_Text.style.display='none'; Codehighlighter1_1289_1550_Open_Image.style.display='inline'; Codehighlighter1_1289_1550_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_1289_1550_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_1289_1550_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;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(o&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</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;</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/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(o&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&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">false</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">(o&nbsp;</SPAN><SPAN style="COLOR: #0000ff">instanceof</SPAN><SPAN style="COLOR: #000000">&nbsp;BMW))<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">false</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BMW&nbsp;bmw&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(BMW)o;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(bmw.wheels&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;wheels</SPAN><SPAN style="COLOR: #000000">&amp;&amp;</SPAN><SPAN style="COLOR: #000000">bmw.model.equals(model)</SPAN><SPAN style="COLOR: #000000">&amp;&amp;</SPAN><SPAN style="COLOR: #000000">bmw.forTest.equals(forTest))<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&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/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</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/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV>
<P><BR>记住，如果覆盖了equals方法，应该也覆盖hashCode()，因为如果两个对象相等也就是equals()返回true，那么这两个对象应该有相同的hashCode。</P><img src ="http://www.blogjava.net/lhulcn618/aggbug/27157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2006-01-08 17:15 <a href="http://www.blogjava.net/lhulcn618/archive/2006/01/08/27157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Core C++ 指针</title><link>http://www.blogjava.net/lhulcn618/archive/2005/12/28/25642.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Tue, 27 Dec 2005 16:27:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2005/12/28/25642.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/25642.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2005/12/28/25642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/25642.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/25642.html</trackback:ping><description><![CDATA[指针一个种特殊的变量，用来存放其他变量的地址。<BR><BR>定义一个变量，就会分配内存，就会开空间，有地址，地址与变量的值无关系。变量地址不会改变。<BR><BR>int theVariable = 5;<BR>int *pPointer = &amp;theVariable;<BR><BR>那么寻找变量：<BR>1.通过变量名，可以访问变量。<BR>2.通过地址，可以找到变量。（地址唯一，不变）<BR><BR>指针只保存地址。<BR><BR>一个变量的地址是有意义的，可以进行运算(+/-数字，相减，比较)。<BR><BR>指针就是一个用来保存地址的特殊变量。<BR><BR>=================================<BR><BR>由于地址有类型，所以指针也有类型。（不信？只知道地址，如果不知道类型，取几个字节无从获知）。<BR><BR>int类型的地址就是四个字节。<BR><BR>所以一定要明确&nbsp; <FONT style="BACKGROUND-COLOR: #ffff00">地址需要赋予一个类型的概念。<BR></FONT><BR>int i = 5;<BR><BR>取地址符号，会取得有类型的地址，&amp;i（整型变量的地址）<BR><BR>char ch = 'A';<BR><BR>&amp;ch，就是字符类型的地址<BR><BR>int *p = &amp;i;<BR><BR>这个语句的含义：定义一个类型是int的指针变量p，并将i的地址给p，p只存储了地址。<BR><BR>指针类型必须与地址类型一致。<BR><BR><FONT style="BACKGROUND-COLOR: #ff0000">指针的类型由它所指向的存储空间的内容的类型来确定，什么类型的变量，就用什么类型指针。</FONT><BR><BR>任何数据类型，都有指针。<BR><BR>指针是用来保存变量的地址，所以int *p = 2000; 不可以！！<BR><BR>指针+1一定是找到下一个变量。有类型信息进而找到下一个同类型的变量。<BR><BR>int i = 100;<BR>int *p = &amp;i;<BR>char ch = 'a';<BR>p = &amp;ch;<BR><BR>错！指针类型严格匹配。<BR><BR>可以给指针赋一个NULL，NULL表示内存0号单元，起始位置。不可以读，也不可以写。禁止访问。<BR>试图访问，段错误。<BR><BR>在使用指针之前，<BR><BR>===========================<BR><BR>char *p = "hello";//存于常量区，不可以修改<BR>"hello"一个字符串，也就是一个字符数组，p的地址就是这个字符数组第一个元素的地址：一个char类型的地址。<BR>p[0] 就是'h'。<BR><BR>===========================<BR><BR><img src ="http://www.blogjava.net/lhulcn618/aggbug/25642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2005-12-28 00:27 <a href="http://www.blogjava.net/lhulcn618/archive/2005/12/28/25642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>I/O流</title><link>http://www.blogjava.net/lhulcn618/archive/2005/12/25/25339.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Sat, 24 Dec 2005 16:08:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2005/12/25/25339.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/25339.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2005/12/25/25339.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/25339.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/25339.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 需求，java程序与外届交流数据。实际上是OS与JVM内存交互数据。那么针对程序，有输出流，也有输入流。java.io包下，File类，它表示文件系统上的一个文件或者目录。方法，总体来说是对磁盘文件的磁盘操作，不能看内容，主要是为了获得文件和文件属性。File dir = new File("d:\");File f = new File(dir,"11.txt");// --&gt;创建文件对象...&nbsp;&nbsp;<a href='http://www.blogjava.net/lhulcn618/archive/2005/12/25/25339.html'>阅读全文</a><img src ="http://www.blogjava.net/lhulcn618/aggbug/25339.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2005-12-25 00:08 <a href="http://www.blogjava.net/lhulcn618/archive/2005/12/25/25339.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 多线程编程</title><link>http://www.blogjava.net/lhulcn618/archive/2005/12/15/23962.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Wed, 14 Dec 2005 16:32:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2005/12/15/23962.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/23962.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2005/12/15/23962.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/23962.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/23962.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: class&nbsp;Stack{&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;index=0;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;data[]=new&nbsp;char[6];&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;synchronized&nbsp;void&nbsp;push(char&nbsp;c){&n...&nbsp;&nbsp;<a href='http://www.blogjava.net/lhulcn618/archive/2005/12/15/23962.html'>阅读全文</a><img src ="http://www.blogjava.net/lhulcn618/aggbug/23962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2005-12-15 00:32 <a href="http://www.blogjava.net/lhulcn618/archive/2005/12/15/23962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AWT和Swing</title><link>http://www.blogjava.net/lhulcn618/archive/2005/12/11/23382.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Sun, 11 Dec 2005 13:15:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2005/12/11/23382.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/23382.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2005/12/11/23382.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/23382.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/23382.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 由于本人已经有了很多界面开发经验，对于这块不是重点，只列举一些例子。JSF和Web Start（jnlp+jar），将逐步替代Swing和Applet的地位。图形界面开发，步骤一定要记住。1.选择容器2.设置布局管理器,Panel默认为Flow，Frame默认为Border3.添加组件，可能是容器组件的多层嵌套4.添加时间处理，add***Listener，并给出实现。事件模型是重点.impo...&nbsp;&nbsp;<a href='http://www.blogjava.net/lhulcn618/archive/2005/12/11/23382.html'>阅读全文</a><img src ="http://www.blogjava.net/lhulcn618/aggbug/23382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2005-12-11 21:15 <a href="http://www.blogjava.net/lhulcn618/archive/2005/12/11/23382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>达内第十五天，第十六天 Core Java 之 集合框架</title><link>http://www.blogjava.net/lhulcn618/archive/2005/12/06/22802.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Tue, 06 Dec 2005 15:13:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2005/12/06/22802.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/22802.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2005/12/06/22802.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/22802.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/22802.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 集合java.util.*一个对象，容纳多个对象，用于维护一系列相似对象。数组是一种简单集合。程序中，如何管理数据，需要一种数据结构。（数组是一种线形结构）。Java的集合框架是通过一系列接口和一些层级类形成的一套体系。通过接口来查看整个集合框架，并分类来进行学习和研究。概述：Collection接口的一个对象会把数据按照一维线形组织。里面都是对象。List代表，会按照元素的相应顺序来组织...&nbsp;&nbsp;<a href='http://www.blogjava.net/lhulcn618/archive/2005/12/06/22802.html'>阅读全文</a><img src ="http://www.blogjava.net/lhulcn618/aggbug/22802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2005-12-06 23:13 <a href="http://www.blogjava.net/lhulcn618/archive/2005/12/06/22802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第十四天 Core Java Advance Language Features II</title><link>http://www.blogjava.net/lhulcn618/archive/2005/12/03/22363.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Sat, 03 Dec 2005 11:59:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2005/12/03/22363.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/22363.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2005/12/03/22363.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/22363.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/22363.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 内部类，使用内部类使编程更有层次，结构更清晰，但一切能用内部类解决的问题，外部类都能解决，只是编码是否繁琐的问题。内部类，是作为外部类的成员。内部类，修饰符可以为private protected static四种内部类成员内部类&nbsp;&nbsp;&nbsp;局部内部类&nbsp;&nbsp;&nbsp;静态内部类&nbsp;&nbsp;&nbsp;匿名内部类1.成员内部类，可以作为外部类的...&nbsp;&nbsp;<a href='http://www.blogjava.net/lhulcn618/archive/2005/12/03/22363.html'>阅读全文</a><img src ="http://www.blogjava.net/lhulcn618/aggbug/22363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2005-12-03 19:59 <a href="http://www.blogjava.net/lhulcn618/archive/2005/12/03/22363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>达内第十三天，Core Java Advance Language Features</title><link>http://www.blogjava.net/lhulcn618/archive/2005/12/02/22169.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Thu, 01 Dec 2005 16:03:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2005/12/02/22169.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/22169.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2005/12/02/22169.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/22169.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/22169.html</trackback:ping><description><![CDATA[面向对象高级<BR><BR>static,可以修饰属性、方法、代码块。<BR><BR>每个对象称为类的实例，对象之间的存储区互不干涉。<BR><BR>static int data;是类变量（共享），为类开辟一个空间。共享存储区域。<BR><BR>访问类变量，通过类名访问。一个对象引用也可以使用静态成员，与它的编译时类型的类访问，一致。<BR><BR>MyClass m = new MyClass();<BR>m.data 《= 》MyClass.data;<BR><BR>静态方法-〉没有当前对象概念-〉也就不允许访问的类中的非静态成员（实例变量）<BR><BR>主方法之所以是静态的，它是程序入口，JVM最初没有对象，必须通过使用类名调用方法，主方法必须为静态的。<BR><BR>静态方法不能被覆盖。<BR><BR>静态代码块只执行一次。<BR><BR>static 用于单例模式Singleton模式<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG id=Codehighlighter1_18_208_Open_Image onclick="this.style.display='none'; Codehighlighter1_18_208_Open_Text.style.display='none'; Codehighlighter1_18_208_Closed_Image.style.display='inline'; Codehighlighter1_18_208_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_18_208_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_18_208_Closed_Text.style.display='none'; Codehighlighter1_18_208_Open_Image.style.display='inline'; Codehighlighter1_18_208_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;DBConnection</SPAN><SPAN id=Codehighlighter1_18_208_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_18_208_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">private</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;DBConnection&nbsp;db&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG id=Codehighlighter1_85_86_Open_Image onclick="this.style.display='none'; Codehighlighter1_85_86_Open_Text.style.display='none'; Codehighlighter1_85_86_Closed_Image.style.display='inline'; Codehighlighter1_85_86_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_85_86_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_85_86_Closed_Text.style.display='none'; Codehighlighter1_85_86_Open_Image.style.display='inline'; Codehighlighter1_85_86_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;DBConnection</SPAN><SPAN id=Codehighlighter1_85_86_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_85_86_Open_Text><SPAN style="COLOR: #000000">{}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_132_206_Open_Image onclick="this.style.display='none'; Codehighlighter1_132_206_Open_Text.style.display='none'; Codehighlighter1_132_206_Closed_Image.style.display='inline'; Codehighlighter1_132_206_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_132_206_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_132_206_Closed_Text.style.display='none'; Codehighlighter1_132_206_Open_Image.style.display='inline'; Codehighlighter1_132_206_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&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;DBConnection&nbsp;getInstance()</SPAN><SPAN id=Codehighlighter1_132_206_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_132_206_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;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(db&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)&nbsp;db&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;DBConnection();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;db;<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/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV>
<P><BR>final 修饰&nbsp; 类、属性、方法<BR><BR>修饰类，无子类，保证用户使用的一致性。典型范例String类。<BR><BR>修饰属性或者变量一旦赋值，不得更改。<BR><BR>对于对象变量来说，是不能再指向其他对象，而现有的对象内部属性可以改变。<BR><BR>会配合static一起使用，只分配一个存储空间，只需要维护一个空间。<BR><BR>public static final，是一个常量。大写。<BR><BR>class SuperClass{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final int AGE;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public SuperClass(){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AGE=10;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR>初始值0不算，需要显示赋一次值。<BR><BR>初始设定在两个地方，1定义时直接赋值，2构造器<BR><BR>静态常量也在两个地方设定，1初始设定，2静态代码块<BR><BR><BR><BR><BR>final方法不能覆盖，由于多态，一个编译时类型对应多个运行时类型，final保证某方法的稳定性。<BR><BR><BR><FONT style="BACKGROUND-COLOR: #ffff00">private<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;左边的修饰符有其中一个，系统都默认添加了final修饰符。<BR>static</FONT><BR><BR>所以之前的静态方法不能覆盖。<BR><BR>=====================<BR>方法继承是决定于在子类中是否可见。能见到就是继承。<BR><BR>final不决定继承。<BR><BR>实际上如果实例化一个子类对象，它的父类对象的所有属性（包括private成员都创建了，就是访问不了，所以不能成为继承的一部分，也就是不能继承咯）<BR><BR><BR><BR>=====================<BR><BR><BR>abstract 修饰 类 方法<BR><BR>修饰类 -&gt; 这个类必须被继承使用-&gt;不能生成对象<BR><BR>用处，把子类最大的共性提取出来放入其中，面向对象一般原则。<BR><BR>虽然不能生成对象（不能作为运行时类型），但可以声明为类型（可作为编译时类型）。<BR><BR>抽象方法，没有实现，留给子类覆盖。<BR><BR>final永远不可能和abstract在一起，那么private和static也不能和abstract联合修饰。<BR><BR>final表示必须不能被继承，不能覆盖；abstract表示必须继承，方法没有实现，必须覆盖使用。所以矛盾。<BR><BR>abstract class SuperClass{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;abstract void print(); <FONT style="BACKGROUND-COLOR: #ffc0cb">//print(){},这是空实现，也是实现，所以不能带大括号。<BR></FONT>}<BR><BR>如果类中有抽象方法的话，那么类只能是抽象类。(一个半成品)<BR><BR>如果子类没有实现父类的抽象方法，就会编译出错，因为子类继承了抽象方法，需要声明为抽象类。<BR><BR>SuperClass sc = new SubClass();<BR><BR>sc.print();动态类型判定，运行时类型不会改变，肯定是一个实现抽象方法的类对象。<BR><BR><BR><BR><BR>接口:是同类，同一个层次的数据结构。<BR><BR>interface IA{<BR>&nbsp;&nbsp;&nbsp;void print();&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;int A = 1;<BR>}<BR><BR>修饰符省略<BR>一个Java文件，只能定义一个公开接口<BR><BR>一个接口等同于一个抽象类<BR><BR>一个特殊的抽象类：<BR>&nbsp;&nbsp;&nbsp;所有方法都是公开抽象的:public abstract<BR>&nbsp;&nbsp;&nbsp;所有属性都是公开静态常量:public static final<BR><BR>interface IA{<BR>&nbsp;&nbsp;&nbsp;void print();&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;int A = 1;<BR>}<BR><BR>等价于<BR><BR>abstract class IA{<BR>&nbsp;&nbsp;&nbsp;public static final int A=1;<BR>&nbsp;&nbsp;&nbsp;public abstract void print();<BR>}<BR><BR>这时可要注意，类实现接口时，覆盖方法的访问控制符一定要写上public，接口是省略为public，类不写可是default，根据Overriding规则，覆盖方法的访问控制等于或者大于父类方法的访问控制。<BR><BR>class IAImpl extends java.util.ArrayList implements IA{}<BR><BR>1一个类除了继承类，还可以实现接口（多个）。<BR><BR>2尽管一个类只能继承一个类，一个类可以实现多个接口<BR><BR>3接口与接口之间可以继承并可以多继承，实现多重继承，但复杂度不增加。<BR><BR>interface IC extends IA,IB{}<BR><BR>IC有着IA，IB所有方法的定义<BR><BR>IA，IB可以作为编译时类型。<BR><BR>========================<BR><BR>接口，被用来定义可以***的东西。<BR><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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输入设备<BR>----|----------------|-----&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----------|-----------<BR>硬盘&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U盘&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;&nbsp;&nbsp;鼠标<BR>----|----<BR>移动硬盘<BR><BR>使用接口来剥离出一部分抽象。<BR><BR>移动硬盘、U盘、鼠标除了间接父类是统一的设备父类外。<BR><BR>他们都是USB设备，这部分抽象就需要用接口定义。<BR><BR>那么机器上的连接器是一个方法，connect(USB接口)，不管你什么具体设备，你都必须实现USB规范，才能往上插。<BR><BR>那么用接口来定义一个规范。<BR><BR><BR>例子2，JDBC，使用Java来访问数据库。<BR><BR>首先，如果由Sun公司自己提供各种数据库的驱动，那么各个DB厂商需要把数据库核心代码提供给Sun，这是不可能的，核心商业机密。<BR><BR>而由各个DB厂商自己写的话，会出现方法名的不同，导致如果数据库迁移，代码需要改动。(例如Oracle提供的方法为ConnectOracle()而ms提供的方法为ConnectSQL)。那么无法真正实现Write Once，Run Anywhere，Sun不同意。<BR><BR>怎么办？使用接口。<BR><BR>由Sun和DB联合制定一些一系列接口。<BR><BR>interface Driver()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void connect();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...<BR>}<BR><BR>OracleDriver implements Driver<BR>SQLDriver implements Driver<BR><BR>实现不同的connect()逻辑。<BR><BR>用户Driver d = getDriver();<BR>d.connect();<BR><BR>接口是实现Java一次编译，到处运行的重要技术。<BR><BR>保证了Sun制定规范，数据库厂商实现，用户使用。保证架构稳定性（将三方分开）<BR><BR>对于用户来说，接口最大化屏蔽差异。<BR><BR>1.实现不同层次，不同体系的对象的抽象。<BR>2.保证架构稳定性。对用户透明。<BR><BR><BR>==============================<BR><BR>Object 类，所有类的父类（直接，间接父类）<BR><BR>finalize(),当一个对象被垃圾回收的时候，会调用一下。不适合放入释放资源的方法。<BR><BR>toString(),对象的字符串表现形式。<BR><BR>System.out.println(obj);-&gt;obj.toString()<BR><BR>自定义类，覆盖该方法，返回一些有意义的信息。<BR><BR>==&nbsp; 判断字面值是否相等，<BR><BR>String a = new String("hello");<BR>String b = new String("hello");<BR>b==a <FONT style="BACKGROUND-COLOR: #ffff00">false</FONT><BR><BR>String final类，并且它的值也是immutable的。<BR><BR>String a = "A"<BR>a = a + "B"<BR>这两步操作一共产生了3个对象。<BR><BR>JVM内部有一个字符串池，一个独立存储区域，保存已创建的字符串，如果再有相同的，会将引用指向字符串池中的已有对象，不再创建新的，如果没有再创建。<BR><BR>String a = "abc";<BR>String b = "abc";<BR><BR>所以上面的例子是采用new String("abc")方式创建String对象，不会再去池中找，直接在堆中创建新对象。<BR><BR>String a = new String("hello");<BR>String b = "hello";<BR><BR>a为堆地址，b为串池地址，a==b，false。<BR><BR>这种方式，是一种用时间换空间的做法，比如如果程序中有100个"hello"，难道程序要去维护100个对象嘛。<BR><BR>Object.equals&nbsp;&nbsp;&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 id=Codehighlighter1_0_295_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_295_Open_Text.style.display='none'; Codehighlighter1_0_295_Closed_Image.style.display='inline'; Codehighlighter1_0_295_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_0_295_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_295_Closed_Text.style.display='none'; Codehighlighter1_0_295_Open_Image.style.display='inline'; Codehighlighter1_0_295_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN id=Codehighlighter1_0_295_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_0_295_Open_Text><SPAN style="COLOR: #008000">/*</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;Student.java<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;Created&nbsp;on&nbsp;2005年12月3日,&nbsp;上午10:43<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;To&nbsp;change&nbsp;this&nbsp;template,&nbsp;choose&nbsp;Tools&nbsp;|&nbsp;Options&nbsp;and&nbsp;locate&nbsp;the&nbsp;template&nbsp;under<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;the&nbsp;Source&nbsp;Creation&nbsp;and&nbsp;Management&nbsp;node.&nbsp;Right-click&nbsp;the&nbsp;template&nbsp;and&nbsp;choose<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;Open.&nbsp;You&nbsp;can&nbsp;then&nbsp;make&nbsp;changes&nbsp;to&nbsp;the&nbsp;template&nbsp;in&nbsp;the&nbsp;Source&nbsp;Editor.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #008000">*/</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">package</SPAN><SPAN style="COLOR: #000000">&nbsp;javaapplication1;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_325_359_Open_Image onclick="this.style.display='none'; Codehighlighter1_325_359_Open_Text.style.display='none'; Codehighlighter1_325_359_Closed_Image.style.display='inline'; Codehighlighter1_325_359_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_325_359_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_325_359_Closed_Text.style.display='none'; Codehighlighter1_325_359_Open_Image.style.display='inline'; Codehighlighter1_325_359_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_325_359_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">/**&nbsp;*/</SPAN><SPAN id=Codehighlighter1_325_359_Open_Text><SPAN style="COLOR: #008000">/**</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;</SPAN><SPAN style="COLOR: #808080">@author</SPAN><SPAN style="COLOR: #008000">&nbsp;Administrator<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_382_783_Open_Image onclick="this.style.display='none'; Codehighlighter1_382_783_Open_Text.style.display='none'; Codehighlighter1_382_783_Closed_Image.style.display='inline'; Codehighlighter1_382_783_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_382_783_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_382_783_Closed_Text.style.display='none'; Codehighlighter1_382_783_Open_Image.style.display='inline'; Codehighlighter1_382_783_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;Student&nbsp;</SPAN><SPAN id=Codehighlighter1_382_783_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_382_783_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;name;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;age;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG id=Codehighlighter1_428_467_Open_Image onclick="this.style.display='none'; Codehighlighter1_428_467_Open_Text.style.display='none'; Codehighlighter1_428_467_Closed_Image.style.display='inline'; Codehighlighter1_428_467_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_428_467_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_428_467_Closed_Text.style.display='none'; Codehighlighter1_428_467_Open_Image.style.display='inline'; Codehighlighter1_428_467_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_428_467_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">/**&nbsp;*/</SPAN><SPAN id=Codehighlighter1_428_467_Open_Text><SPAN style="COLOR: #008000">/**</SPAN><SPAN style="COLOR: #008000">&nbsp;Creates&nbsp;a&nbsp;new&nbsp;instance&nbsp;of&nbsp;Student&nbsp;</SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_490_496_Open_Image onclick="this.style.display='none'; Codehighlighter1_490_496_Open_Text.style.display='none'; Codehighlighter1_490_496_Closed_Image.style.display='inline'; Codehighlighter1_490_496_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_490_496_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_490_496_Closed_Text.style.display='none'; Codehighlighter1_490_496_Open_Image.style.display='inline'; Codehighlighter1_490_496_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;Student()&nbsp;</SPAN><SPAN id=Codehighlighter1_490_496_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_490_496_Open_Text><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>&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG id=Codehighlighter1_537_588_Open_Image onclick="this.style.display='none'; Codehighlighter1_537_588_Open_Text.style.display='none'; Codehighlighter1_537_588_Closed_Image.style.display='inline'; Codehighlighter1_537_588_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_537_588_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_537_588_Closed_Text.style.display='none'; Codehighlighter1_537_588_Open_Image.style.display='inline'; Codehighlighter1_537_588_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;Student(String&nbsp;n,</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;a)</SPAN><SPAN id=Codehighlighter1_537_588_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_537_588_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: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.name&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;n;<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">this</SPAN><SPAN style="COLOR: #000000">.age&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;a;<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>&nbsp;&nbsp;&nbsp;&nbsp;<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;equals(Object&nbsp;o)<BR><IMG id=Codehighlighter1_635_776_Open_Image onclick="this.style.display='none'; Codehighlighter1_635_776_Open_Text.style.display='none'; Codehighlighter1_635_776_Closed_Image.style.display='inline'; Codehighlighter1_635_776_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_635_776_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_635_776_Closed_Text.style.display='none'; Codehighlighter1_635_776_Open_Image.style.display='inline'; Codehighlighter1_635_776_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_635_776_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_635_776_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;Student&nbsp;s&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(Student)o;<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">(s.name.equals(</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.name)</SPAN><SPAN style="COLOR: #000000">&amp;&amp;</SPAN><SPAN style="COLOR: #000000">s.age&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.age)<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">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/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">false</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>&nbsp;&nbsp;&nbsp;&nbsp;<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></DIV>
<P>自定义类如果要进行对象值的比较，覆盖Object的equals方法，自行判断，如果不覆盖，直接调用Object.equals是判断地址。<BR><BR>equals方法覆盖标准流程：<BR></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&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;equals(Object&nbsp;o)<BR><IMG id=Codehighlighter1_40_338_Open_Image onclick="this.style.display='none'; Codehighlighter1_40_338_Open_Text.style.display='none'; Codehighlighter1_40_338_Closed_Image.style.display='inline'; Codehighlighter1_40_338_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_40_338_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_40_338_Closed_Text.style.display='none'; Codehighlighter1_40_338_Open_Image.style.display='inline'; Codehighlighter1_40_338_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_40_338_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_40_338_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: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;o)<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">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/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(o&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&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">false</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">if</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">(o&nbsp;</SPAN><SPAN style="COLOR: #0000ff">instanceof</SPAN><SPAN style="COLOR: #000000">&nbsp;Student))<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">return</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Student&nbsp;s&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(Student)o;<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">(s.name.equals(</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.name)</SPAN><SPAN style="COLOR: #000000">&amp;&amp;</SPAN><SPAN style="COLOR: #000000">s.age&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.age)<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">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/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">false</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN></DIV>
<P></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: #0000ff">double</SPAN><SPAN style="COLOR: #000000">&nbsp;d&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">10000.0d</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>Double&nbsp;D_d&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Double(d);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>String&nbsp;D_S&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;D_d.toString();</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">D&nbsp;+&nbsp;""</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">String&nbsp;d_s&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;String.valueOf(d);</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">d&nbsp;+&nbsp;""</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">double</SPAN><SPAN style="COLOR: #000000">&nbsp;s_d&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;Double.parseDouble(d_s);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>Double&nbsp;S_D&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;Double.valueOf(d_s);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">double</SPAN><SPAN style="COLOR: #000000">&nbsp;d_D&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;D_d.doubleValue();</SPAN></DIV>
<P><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>&nbsp;</P><img src ="http://www.blogjava.net/lhulcn618/aggbug/22169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2005-12-02 00:03 <a href="http://www.blogjava.net/lhulcn618/archive/2005/12/02/22169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>达内第十二天，Core Java V</title><link>http://www.blogjava.net/lhulcn618/archive/2005/11/29/21867.html</link><dc:creator>北国狼人的BloG</dc:creator><author>北国狼人的BloG</author><pubDate>Tue, 29 Nov 2005 13:37:00 GMT</pubDate><guid>http://www.blogjava.net/lhulcn618/archive/2005/11/29/21867.html</guid><wfw:comment>http://www.blogjava.net/lhulcn618/comments/21867.html</wfw:comment><comments>http://www.blogjava.net/lhulcn618/archive/2005/11/29/21867.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lhulcn618/comments/commentRss/21867.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lhulcn618/services/trackbacks/21867.html</trackback:ping><description><![CDATA[<P>面向对象三大基石：封装，继承，多态。面试会问到。<BR><BR>Overriding&nbsp; 覆盖&nbsp; 只存在于父子类之间，一定。<BR><BR>什么时候才是覆盖呢?<BR><BR>class Father{<BR>&nbsp;&nbsp;&nbsp;public void run(){<BR>&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR>class Son extends Father{<BR>&nbsp;&nbsp;&nbsp;public void run(int a){<BR>&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR><FONT style="BACKGROUND-COLOR: #ffa500">注意：这是方法的重载，不是覆盖！只是这个重载发生在父子类之间。</FONT><BR><BR>覆盖是，子类参数列表与返回值都与父类相同，并且子类在覆盖父类方法时，不能给出更严格的访问控制，并且子类方法例外的类型是等于父子方法抛出的异常类型，或者是其子类型。<BR><BR>The exceptions thrown by an overriding method must be equal to or a subset of the exceptions thrown by the overridden method.<BR><BR>注意构造方法根本不能继承，所以不存在覆盖的问题。<BR><BR>访问控制<BR><BR>private 本类内部可见<BR><BR>default 同类同包<BR><BR>protected&nbsp;同包+不同包子类<BR><BR>要构造一个对象，先构造父类对象，再构造子类对象<BR><BR>构造一个对象的执行过程。<BR><BR>1.<FONT style="BACKGROUND-COLOR: #ffff00">递归的</FONT>构造父类对象-----------〉也就是说父类本身也要走这样的步骤。<BR>2.顺序调用成员属性赋初值语句<BR>3.调用本类构造方法<BR><BR><FONT style="BACKGROUND-COLOR: #0000ff">后来课程领悟，类加载与构造对象是两回事，类加载过程，1.static静态成员加载，2运行static一次，静态代码块，3如果有静态内部类，赋值，对静态内部类的赋值是指编译产生的Employee$SomeInner.class文件的读取。</FONT><BR><BR>如果类有静态变量或者静态块，<FONT style="BACKGROUND-COLOR: #ffff00">而且用到时（<FONT style="BACKGROUND-COLOR: #9acd32">static初始化只有在必要的时候才会进行</FONT>）</FONT>，那么就会在第一步之前执行一遍，先静态变量，然后静态块，以后再怎么new都不会执行，回到创建父类开始。<BR><BR>======〉引用Think In Java<BR><BR>在这里有必要总结一下对象的创建过程。请考虑一个名为Dog的类：<BR>(1) 类型为Dog的一个对象首次创建时，或者Dog类的static方法／static字段首次访问时，Java解释器必须找到Dog.class（在事先设好的类路径里搜索）。<BR>(2) 找到Dog.class后（它会创建一个Class对象，这将在后面学到），它的所有static初始化模块都会运行。因此，static初始化仅发生一次——在Class对象首次载入的时候。<BR>(3) 创建一个new Dog()时，Dog对象的构建进程首先会在内存堆（Heap）里为一个Dog对象分配足够多的存储空间。<BR>(4) 这种存储空间会清为零，将Dog中的所有基本类型设为它们的默认值（零用于数字，以及boolean和char的等价设定）。<BR>(5) 进行字段定义时发生的所有初始化都会执行。<BR>(6) 执行构建器。正如第6章将要讲到的那样，这实际可能要求进行相当多的操作，特别是在涉及继承的时候。<BR><BR>=====================<BR><BR>多态-1.编译时多态&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;方法重载<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.运行时多态&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个对象可能会具有多个类型<BR><BR>对象是客观的。<BR><BR>人类对对象的认识是主观的<BR><BR>当人看到一个不能识别的，有生命的，区别人的东西时，会类来认识该事物。<BR><BR>也就是Animal&nbsp;a = new Dog();子类对象可以使用父类对象来引用。<BR><BR>Animal被称为编译时类型，而a真正的对象类型是运行时类型。<BR><BR>3个原则：<BR><BR>1.对象不变（运行时类型不变）（客观的肯定不会改变）<BR>2.只能调用编译时类型的方法，方法调用时，检查编译时类型内部是否定义了该方法。<BR>&nbsp;&nbsp;&nbsp;也就是说，在你以一个一个动物来看待一只狗时，你是不会知道它有散步的方法的。<BR>3.RTTI，运行时，动态类型判定（看运行时类型），子类覆盖了（Overriding）父类方法，那么调用运行时类型对象的方法。<BR><BR>a instanceof 类名（编译时类型）<BR>a为对象变量<BR>判断a是否被声明为后面类的对象。<BR>用在强制类型转换之前。如果转换错了，java.lang.ClassCastException 运行时例外<BR><BR>记住，方法只有覆盖时，调用寻找运行时类型。而Overloading -&gt;编译时多态-&gt;看编译时类型。<BR><BR>属性，重载阿，都要看编译时类型。<BR><BR></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">package</SPAN><SPAN style="COLOR: #000000">&nbsp;com.ljl;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_41_283_Open_Image onclick="this.style.display='none'; Codehighlighter1_41_283_Open_Text.style.display='none'; Codehighlighter1_41_283_Closed_Image.style.display='inline'; Codehighlighter1_41_283_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_41_283_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_41_283_Closed_Text.style.display='none'; Codehighlighter1_41_283_Open_Image.style.display='inline'; Codehighlighter1_41_283_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;TestClass&nbsp;</SPAN><SPAN id=Codehighlighter1_41_283_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_41_283_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_66_101_Open_Image onclick="this.style.display='none'; Codehighlighter1_66_101_Open_Text.style.display='none'; Codehighlighter1_66_101_Closed_Image.style.display='inline'; Codehighlighter1_66_101_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_66_101_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_66_101_Closed_Text.style.display='none'; Codehighlighter1_66_101_Open_Image.style.display='inline'; Codehighlighter1_66_101_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;print(B&nbsp;b)</SPAN><SPAN id=Codehighlighter1_66_101_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_101_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;System.out.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">is&nbsp;B</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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>&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;print(A&nbsp;a){<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("is&nbsp;A");<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></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;<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)<BR><IMG id=Codehighlighter1_212_281_Open_Image onclick="this.style.display='none'; Codehighlighter1_212_281_Open_Text.style.display='none'; Codehighlighter1_212_281_Closed_Image.style.display='inline'; Codehighlighter1_212_281_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_212_281_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_212_281_Closed_Text.style.display='none'; Codehighlighter1_212_281_Open_Image.style.display='inline'; Codehighlighter1_212_281_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_212_281_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_212_281_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;TestClass&nbsp;tc&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;TestClass();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;a&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;B();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tc.print(a);<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"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_293_294_Open_Image onclick="this.style.display='none'; Codehighlighter1_293_294_Open_Text.style.display='none'; Codehighlighter1_293_294_Closed_Image.style.display='inline'; Codehighlighter1_293_294_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_293_294_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_293_294_Closed_Text.style.display='none'; Codehighlighter1_293_294_Open_Image.style.display='inline'; Codehighlighter1_293_294_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;A</SPAN><SPAN id=Codehighlighter1_293_294_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_293_294_Open_Text><SPAN style="COLOR: #000000">{}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_314_315_Open_Image onclick="this.style.display='none'; Codehighlighter1_314_315_Open_Text.style.display='none'; Codehighlighter1_314_315_Closed_Image.style.display='inline'; Codehighlighter1_314_315_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_314_315_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_314_315_Closed_Text.style.display='none'; Codehighlighter1_314_315_Open_Image.style.display='inline'; Codehighlighter1_314_315_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;B&nbsp;</SPAN><SPAN style="COLOR: #0000ff">extends</SPAN><SPAN style="COLOR: #000000">&nbsp;A</SPAN><SPAN id=Codehighlighter1_314_315_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_314_315_Open_Text><SPAN style="COLOR: #000000">{}</SPAN></SPAN></DIV>
<P>为什么子类覆盖父类方法时，访问控制符只能更宽泛。因为如果父类方法为public,子类方法为private，那么多态时，察看父类方法可以调用（可调用编译时类型所定义的方法），而动态类型判断时，调用子类方法，发现为private，完蛋了。<BR><BR><BR><BR></P><img src ="http://www.blogjava.net/lhulcn618/aggbug/21867.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lhulcn618/" target="_blank">北国狼人的BloG</a> 2005-11-29 21:37 <a href="http://www.blogjava.net/lhulcn618/archive/2005/11/29/21867.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>