﻿<?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-&lt;script language="javascript" src="http://www.shi-ci.com/embeded.do"&gt;&lt;/script&gt;-随笔分类-Java Study(JavaThinking4)</title><link>http://www.blogjava.net/yglwxl/category/31645.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 13 Feb 2011 21:19:57 GMT</lastBuildDate><pubDate>Sun, 13 Feb 2011 21:19:57 GMT</pubDate><ttl>60</ttl><item><title>Observer模式在J2EE中的实现 [http://35java.com/zhibo/forum.php?mod=viewthread&amp;tid=108&amp;extra=page%3D3]</title><link>http://www.blogjava.net/yglwxl/archive/2011/02/13/344203.html</link><dc:creator>九宝</dc:creator><author>九宝</author><pubDate>Sun, 13 Feb 2011 11:24:00 GMT</pubDate><guid>http://www.blogjava.net/yglwxl/archive/2011/02/13/344203.html</guid><wfw:comment>http://www.blogjava.net/yglwxl/comments/344203.html</wfw:comment><comments>http://www.blogjava.net/yglwxl/archive/2011/02/13/344203.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yglwxl/comments/commentRss/344203.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yglwxl/services/trackbacks/344203.html</trackback:ping><description><![CDATA[<span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">引言：</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;设计模式是经验的文档化。它是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。更通俗的来说，它是一个问题/解决方案对。一旦我们掌握了设计模式，就等于拥有了一支强有力的专家队伍。它甚至能够使面向对象的新手利用前人的经验找出职责明确的类和对象，从而获得优雅的解决方案。由于设计模式也是重构的目标，如果在设计的初期适当地引入设计模式，可以减少重构的工作量。</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;但是，我们也不能陷入模式的陷阱，为了使用模式而去套模式，那样会陷入形式主义。我们在使用模式的时候，一定要注意模式的意图（intent），而不要过多的去关注模式的实现细节，因为这些实现细节在特定情况下，可能会发生一些改变。不要顽固地认为设计模式一书中的类图或实现代码就代表了模式本身。</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;下面，我们来讨论一下为什么要在分布式、多层系统中使用Observer模式。</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;</span><hr class="l" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; display: block; clear: both; height: 1px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #cdcdcd; color: #cdcdcd; border-collapse: collapse; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; " />
<span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">多层体系结构（multi-tier architecture）：</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;三层体系结构是多层体系结构中最简单的一种，它一般包括：</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;</span>
<ul type="1" class="litype_1" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 14px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 2em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; list-style-type: decimal; list-style-position: initial; list-style-image: initial; ">表示层(presentation)－窗口、报表-</li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 2em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; list-style-type: decimal; list-style-position: initial; list-style-image: initial; ">业务逻辑层(business logic)－管理业务过程的任务和规则。它又可以细分为领域对象层（代表领域概念）和服务层（提供数据库交互、安全性、打印报表）。</li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 2em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; list-style-type: decimal; list-style-position: initial; list-style-image: initial; ">存储层(storage)－持久化存储机制。如数据库服务器等。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
    </li>
</ul>
<span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; font-weight: 700; ">图一：三层体系结构</strong></span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><img width="157" height="197" src="http://www.ibm.com/developerworks/cn/java/l-observerinj2ee/1.gif" border="0" alt="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " /></span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;而Java 2平台企业版（J2EE）是一种利用Java 2平台来简化诸多与多级企业解决方案的开发、部署和管理相关的复杂问题的体系结构。它是开放的、基于标准的平台，用以开发、部署和管理N层结构、面向Web的，以服务器为中心的企业级应用。</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;为了支持领域对象的复用，并且使领域对象的接口变更所带来的影响最小化。我们将领域层（模型）和表示层（视图）相分离。</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;采用模型－视图模式的意义在于：</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;</span>
<ul type="1" class="litype_1" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 14px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 2em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; list-style-type: decimal; list-style-position: initial; list-style-image: initial; ">支持聚合度更高的模型定义，使模型的定义可以集中在领域过程的定义，而不是图形界面上。</li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 2em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; list-style-type: decimal; list-style-position: initial; list-style-image: initial; ">允许将模型和用户界面并行开发。</li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 2em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; list-style-type: decimal; list-style-position: initial; list-style-image: initial; ">使用户界面的需求变化对领域层所造成的影响最小化。</li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 2em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; list-style-type: decimal; list-style-position: initial; list-style-image: initial; ">允许建立与一个现有的领域层对象相连接的新视图，同时不影响领域层。</li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 2em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; list-style-type: decimal; list-style-position: initial; list-style-image: initial; ">允许一个模型同时有多个视图，例如使用SVG和表格。</li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 2em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; list-style-type: decimal; list-style-position: initial; list-style-image: initial; ">允许模型层独立于用户界面层执行。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
    </li>
</ul>
<span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;而这恰恰与Observer模式的意图相吻合。因此我们有必要跨层来实现Observer模式。</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;其实，在应用中更多的是采用MVC框架来架构整个企业应用的。在MVC框架中，Model和View之间存在着依赖关系，是Observer模式的典型应用。当然MVC框架还包括其它模式如Composite模式和Strategy模式。在J2EE平台中，我们可以把Web Tier（包括Jsp和servelet和JavaBean）看作是表示层，EJB Tier看作是领域层。而controller可能跨距Web Tier和 EJB Tier。</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;在Java类库中采用Java.util.Observable类和Java.util.Observer接口来实现Observer模式，它们在单个的Java VM.中运行的很好，但如果想在EJB中使用它们就会有一些问题。这正如我们引言中提到的，模式的具体实现在特定情况下，可能会发生一些改变。</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;</span><hr class="l" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; display: block; clear: both; height: 1px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #cdcdcd; color: #cdcdcd; border-collapse: collapse; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; " />
<span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">值传递还是远程引用传递？</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; font-weight: 700; ">值传递：</strong></span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">在Java RMI中要求所有的参数和返回类型是JAVA的基本类型或实现Java.io.Serilizable的对象。串行化对象通过值传递（又名拷贝传递），而不是引用传递，这意味着在某一层中串行化对象的更并不自动影响到其它的对象。&nbsp; &nbsp;&nbsp; &nbsp;</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; font-weight: 700; ">远程引用传递：</strong></span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">对于EJB对象而言，它由两个接口（home接口和remote接口）和一个类组成。容器会根据ejb规范来生成实现上面两个接口的类（我们分别称为xxxEJBHome对象和xxxEjbObject对象）。在较多的容器的实现方案中，xxxEJBHome对象使用了factory模式来创建xxxEjbObject对象；xxxEjbObject对象则采用proxy模式，作为xxxBean的代理类。在生成以上两个对象的同时，容器会从部署文件中读取关于安全、事务、持久性等服务并在xxxEjbObject对象和xxxEJBHome对象中添加以上服务的代码。而且xxxEJBHome对象和xxxEjbObject对象都是分布式对象，我们在此只讨论xxxEjbObject对象。所谓分布式对象，从本质上来讲，分为3个部分：object server、skeleton、stub。其中object server和skeleton位于服务器端，而stub位于客户端。Object server负责实现业务逻辑，skeleton负责marshal和unmarshal方法签名。&nbsp; &nbsp;&nbsp; &nbsp;</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; font-weight: 700; ">图二：分布式对象</strong></span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><img width="576" height="310" src="http://www.ibm.com/developerworks/cn/java/l-observerinj2ee/2.gif" border="0" alt="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " /></span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;显然，EJB的客户（调用EJB的对象）可以是任何对象，包括EJB和一般的Java类甚至是用任何语言写的corba客户端。</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
</span><span  style="border-collapse: collapse; color: #444444; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; font-size: 14px; line-height: 21px; ">&nbsp; &nbsp;&nbsp; &nbsp;从EJB的客户视角来看的话，我们只能看到一个home接口、一个remote接口（对于实体bean的话，还可以看见一个主键类，而bean类对客户是不可见的）。但我们从上面的论述，我们可以知道，对于remote接口中地方法调用，实际上是多态地调用XXX_Stub类。即XXX_Stub对象对客户具有可见性（但这种可见性是透明的，即客户不知道这种可见性的存在）。由于，XXX_Stub对象和Object Server实现了相同的接口，并且Object server真正实现了业务逻辑。所以，当在客户端调用XXX_Stub对象的方法时候，XXX_Stub对象通过socket通信机制将方法签名传给XXX_Skeleton对象，XXX_Skeleton对象在去委托Object Server完成业务处理逻辑。因此，Object Server本身发生了改变。我们称XXX_Stub对象是Object Server对象的远程引用，并认为当分布式对象作为参数传递的时候，是通过引用传递的（会产生副作用</span>
<img src ="http://www.blogjava.net/yglwxl/aggbug/344203.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yglwxl/" target="_blank">九宝</a> 2011-02-13 19:24 <a href="http://www.blogjava.net/yglwxl/archive/2011/02/13/344203.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaBean PropertyChange 之设计模式Observer(转)</title><link>http://www.blogjava.net/yglwxl/archive/2011/02/13/344201.html</link><dc:creator>九宝</dc:creator><author>九宝</author><pubDate>Sun, 13 Feb 2011 10:26:00 GMT</pubDate><guid>http://www.blogjava.net/yglwxl/archive/2011/02/13/344201.html</guid><wfw:comment>http://www.blogjava.net/yglwxl/comments/344201.html</wfw:comment><comments>http://www.blogjava.net/yglwxl/archive/2011/02/13/344201.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yglwxl/comments/commentRss/344201.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yglwxl/services/trackbacks/344201.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: java语言里包含了许多对设计模式的直接支持，如command模式，agent模式，observer模式等。虽然java提供的对这些模式的支持很简单，不能满足比较复杂的应用。但在简单的场景下，使用这些类往往能够得到立杆见影的效果。所以，如果没有什么特殊需求，还是最好利用java的这些类。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Observ...&nbsp;&nbsp;<a href='http://www.blogjava.net/yglwxl/archive/2011/02/13/344201.html'>阅读全文</a><img src ="http://www.blogjava.net/yglwxl/aggbug/344201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yglwxl/" target="_blank">九宝</a> 2011-02-13 18:26 <a href="http://www.blogjava.net/yglwxl/archive/2011/02/13/344201.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)UML中类图实例</title><link>http://www.blogjava.net/yglwxl/archive/2011/02/12/344130.html</link><dc:creator>九宝</dc:creator><author>九宝</author><pubDate>Sat, 12 Feb 2011 05:02:00 GMT</pubDate><guid>http://www.blogjava.net/yglwxl/archive/2011/02/12/344130.html</guid><wfw:comment>http://www.blogjava.net/yglwxl/comments/344130.html</wfw:comment><comments>http://www.blogjava.net/yglwxl/archive/2011/02/12/344130.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yglwxl/comments/commentRss/344130.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yglwxl/services/trackbacks/344130.html</trackback:ping><description><![CDATA[<span  style="font-size: 15px; line-height: 22px; "><span style="line-height: normal; word-spacing: 0px; font: normal normal normal 14px/22px georgia; text-transform: none; color: #4b4b4b; text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: left; orphans: 2; widows: 2; ">接口：空心圆+直线（唐老鸭类实现了&#8216;讲人话&#8217;）；<br style="line-height: 22px; " />
依赖：虚线+箭头（动物和空气的关系）；<br style="line-height: 22px; " />
关联：实线+箭头（企鹅需要知道气候才迁移）；<br style="line-height: 22px; " />
聚合：空心四边形+实线+箭头（雁群和大雁的关系）；<br style="line-height: 22px; " />
合成/组合：实心四边形+实线+箭头（鸟和翅膀的关系）；<br style="line-height: 22px; " />
泛化/</span></span><span  style="font-size: 15px; line-height: 22px; "><span style="line-height: normal; word-spacing: 0px; font: normal normal normal 14px/22px georgia; text-transform: none; color: #4b4b4b; text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: left; orphans: 2; widows: 2; ">继承</span></span><span  style="font-size: 15px; line-height: 22px; "><span style="line-height: normal; word-spacing: 0px; font: normal normal normal 14px/22px georgia; text-transform: none; color: #4b4b4b; text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: left; orphans: 2; widows: 2; ">：空心三角形+实线（动物和鸟的继承关系）；<br style="line-height: 22px; " />
实现：空心三角形+虚线（实现大雁飞翔的接口）；
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "></div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "><strong style="line-height: 22px; ">UML类图</strong>&nbsp;&nbsp;</div>
<dl style="line-height: 22px; "><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "><span style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "><img title="UML中类图实例 - Doom - 风云掠过" height="670" src="http://hiphotos.baidu.com/liang125353769/pic/item/b70db9225fc72a0393580758.jpg" width="703" style="line-height: 22px; border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; max-width: 100%; border-right-width: 0px; "  alt="" /></div>
解释</span><span style="line-height: 22px; ">UML<span style="line-height: 22px; ">类图：</span></span></div>
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; ">1.<span style="line-height: normal; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="line-height: 19px; ">&nbsp;</span></span><span style="line-height: 22px; ">首先看&#8220;动物&#8221;矩形框，它代表一个类。该类图分为三层，第一层显示类的名称，如果是抽象类就要用斜体显示。第二层是类的特性，通常就是字段和属性。第三层是类的操作，通常是方法和行为。</span></div>
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; "><span style="line-height: 22px; ">&nbsp;&nbsp; 注意前面的符号，&#8216;</span>+<span style="line-height: 22px; ">&#8217;表示</span>public, &#8216;<span style="line-height: 22px; ">—</span>&#8217;<span style="line-height: 22px; ">&nbsp;</span><span style="line-height: 22px; ">表示</span>private, &#8216;#&#8217;<span style="line-height: 22px; ">表示</span>protected.&nbsp;&nbsp;&nbsp;</div>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "><img title="UML中类图实例 - Doom - 风云掠过" src="http://hiphotos.baidu.com/liang125353769/pic/item/48598af20714951d342acc58.jpg" style="line-height: 22px; border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; max-width: 100%; cursor: pointer; border-right-width: 0px; "  alt="" />&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;</div>
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; ">2.<span style="line-height: normal; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="line-height: 19px; ">&nbsp;</span></span>&#8220;<span style="line-height: 22px; ">飞翔</span>&#8221;<span style="line-height: 22px; ">矩形框表示一个接口图，它与类图的区别主要是顶端有《</span>interface<span style="line-height: 22px; ">》显示，第一行是接口名称，第二行是接口方法。接口还有另一种表示方法，俗称棒棒糖表示法，就是唐老鸭类实现了&#8220;讲人话&#8221;的接口。</span></div>
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "><img title="UML中类图实例 - Doom - 风云掠过" height="159" src="http://hiphotos.baidu.com/liang125353769/pic/item/2f017cbee612fc4718d81f58.jpg" width="500" style="line-height: 22px; border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; max-width: 100%; cursor: pointer; border-right-width: 0px; "  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
</div>
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "><span style="line-height: 22px; color: #0000ff; ">interface</span><span style="line-height: 22px; color: #000000; ">&nbsp;IFly&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;</span><span style="line-height: 22px; color: #0000ff; ">interface</span><span style="line-height: 22px; color: #000000; ">&nbsp;Ilanguage&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 style="line-height: 22px; " />
{&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 style="line-height: 22px; " />
&nbsp;&nbsp;&nbsp;</span><span style="line-height: 22px; color: #0000ff; ">void</span><span style="line-height: 22px; color: #000000; ">&nbsp;Fly();&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;<span style="line-height: 22px; ">&nbsp;</span></span><span style="line-height: 22px; color: #0000ff; ">void</span><span style="line-height: 22px; color: #000000; ">&nbsp;Speak();<br style="line-height: 22px; " />
}&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; }</span></div>
</div>
</div>
</dt><dt style="line-height: 22px; "><br style="line-height: 22px; " />
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; ">3.<span style="line-height: normal; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="line-height: 19px; ">&nbsp;</span></span><span style="line-height: 22px; ">动物，鸟，鸭，唐老鸭他们之间都是继承的关系，<span style="line-height: 22px; color: red; "><span style="line-height: 22px; ">继承关系用空心三角形</span>+<span style="line-height: 22px; ">实现来表示</span></span></span><span style="line-height: 22px; ">。</span>&nbsp;&nbsp;&nbsp;</div>
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "><img title="UML中类图实例 - Doom - 风云掠过" src="http://hiphotos.baidu.com/liang125353769/pic/item/92d8300b954bc073b0351d58.jpg" style="line-height: 22px; border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; max-width: 100%; cursor: pointer; border-right-width: 0px; "  alt="" /></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
</dt><dt style="line-height: 22px; "><br style="line-height: 22px; " />
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; "><span style="line-height: 22px; ">4.&#8220;大雁&#8221;实现了&#8220;飞翔&#8221;接口。<span style="line-height: 22px; color: red; "><span style="line-height: 22px; ">实现接口用</span><span style="line-height: 22px; ">空心三角形</span>+<span style="line-height: 22px; ">虚线来表示</span></span></span><span style="line-height: 22px; ">。（<span style="line-height: 22px; background-color: yellow; ">注：下面的图中应为空心三角形</span>）</span></div>
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; "><span style="line-height: 22px; "><span style="line-height: 22px; color: #0000ff; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "><img title="UML中类图实例 - Doom - 风云掠过" src="http://hiphotos.baidu.com/liang125353769/pic/item/7cd2161f3a40815240341758.jpg" style="line-height: 22px; border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; max-width: 100%; cursor: pointer; border-right-width: 0px; "  alt="" /></div>
</span></span></div>
</dt><dt style="line-height: 22px; "><br style="line-height: 22px; " />
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "><span style="line-height: 22px; color: #0000ff; ">class</span><span style="line-height: 22px; color: #000000; ">&nbsp;Bird:Animal&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="line-height: 22px; color: #0000ff; ">class</span><span style="line-height: 22px; color: #000000; ">&nbsp;WideGoose:IFly<br style="line-height: 22px; " />
{&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 style="line-height: 22px; " />
&nbsp;&nbsp;&nbsp;</span><span style="line-height: 22px; color: #008000; ">//</span><span style="line-height: 22px; color: #008000; ">继承动物类&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;</span><span style="line-height: 22px; color: #008000; ">//</span><span style="line-height: 22px; color: #008000; ">实现飞翔接口</span><span style="line-height: 22px; color: #008000; "><br style="line-height: 22px; " />
</span><span style="line-height: 22px; color: #000000; ">}&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; }</span></div>
</dt><dt style="line-height: 22px; "><br style="line-height: 22px; " />
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; ">5.<span style="line-height: normal; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="line-height: 19px; ">&nbsp;</span></span><span style="line-height: 22px; ">企鹅与气候有很大的关系，企鹅需要&#8220;知道&#8221;气候的变化，需要&#8220;了解&#8221;气候规律。当一个类&#8220;知道&#8221;另一个类时，可以用关联</span>(association)<span style="line-height: 22px; ">关系。<span style="line-height: 22px; color: red; ">关联关系用实线箭头来表示</span>。</span><span style="line-height: 22px; ">&nbsp;&nbsp;</span></div>
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; "><span style="line-height: 22px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img title="UML中类图实例 - Doom - 风云掠过" src="http://hiphotos.baidu.com/liang125353769/pic/item/568a4d1ed5a7eb47314e1558.jpg" style="line-height: 22px; border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; max-width: 100%; cursor: pointer; border-right-width: 0px; "  alt="" /></span></div>
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; "></div>
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "><span style="line-height: 22px; color: #0000ff; ">class</span><span style="line-height: 22px; color: #000000; ">&nbsp;Penguin :Bird<br style="line-height: 22px; " />
{<br style="line-height: 22px; " />
&nbsp;&nbsp;&nbsp;</span><span style="line-height: 22px; color: #0000ff; ">private</span><span style="line-height: 22px; color: #000000; ">&nbsp;Climate climate;</span><span style="line-height: 22px; color: #008000; ">//</span><span style="line-height: 22px; color: #008000; ">在企鹅Penguin中，引用到气候Climate对象</span><span style="line-height: 22px; color: #008000; "><br style="line-height: 22px; " />
</span><span style="line-height: 22px; color: #000000; ">}</span></div>
</dt><dt style="line-height: 22px; "><br style="line-height: 22px; " />
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; ">6.<span style="line-height: normal; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="line-height: 19px; ">&nbsp;</span></span><span style="line-height: 22px; ">&#8220;大雁&#8221;和&#8220;雁群&#8221;这两个类。大雁是群居动物，每只大雁都属于一个雁群，一个雁群可以有多只大雁。所以它们之间就满足聚合</span>(Aggregation)<span style="line-height: 22px; ">关系。<span style="line-height: 22px; color: red; "><span style="line-height: 22px; background-color: yellow; "><span style="line-height: 22px; color: #000000; "><span style="line-height: 22px; font-size: 10.5pt; ">聚合表示一种弱的&#8220;拥有&#8221;关系，体现的是</span><span style="line-height: normal; ">A</span><span style="line-height: 22px; font-size: 10.5pt; ">对象可以包含</span><span style="line-height: normal; ">B</span><span style="line-height: 22px; font-size: 10.5pt; ">对象，但</span><span style="line-height: normal; ">B</span><span style="line-height: 22px; font-size: 10.5pt; ">对象不是</span><span style="line-height: normal; ">A</span><span style="line-height: 22px; font-size: 10.5pt; ">对象的一部分。</span></span></span></span></span><span style="line-height: 22px; "><span style="line-height: 22px; color: red; "><span style="line-height: 22px; ">聚合关系用空心的菱形</span>+<span style="line-height: 22px; ">&nbsp;</span><span style="line-height: 22px; ">实线箭头表示</span></span></span><span style="line-height: 22px; ">。</span></div>
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; "><span style="line-height: 22px; ">&nbsp;&nbsp;&nbsp;&nbsp;<span style="line-height: 22px; color: #0000ff; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "><img title="UML中类图实例 - Doom - 风云掠过" src="http://hiphotos.baidu.com/liang125353769/pic/item/6b9361c93d15b55a7e3e6f58.jpg" style="line-height: 22px; border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; max-width: 100%; cursor: pointer; border-right-width: 0px; "  alt="" /></div>
</span></span></div>
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; "></div>
<br style="line-height: 22px; " />
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "><span style="line-height: 22px; color: #0000ff; ">class</span><span style="line-height: 22px; color: #000000; ">&nbsp;WideGooseAggregate<br style="line-height: 22px; " />
{<br style="line-height: 22px; " />
&nbsp;&nbsp;&nbsp;</span><span style="line-height: 22px; color: #0000ff; ">private</span><span style="line-height: 22px; color: #000000; ">&nbsp;WideGoose[] arrayWideGoose;<br style="line-height: 22px; " />
&nbsp;&nbsp;&nbsp;</span><span style="line-height: 22px; color: #008000; ">//</span><span style="line-height: 22px; color: #008000; ">在雁群WideGooseAggregate类中，有大雁数组对象arrayWideGoose</span><span style="line-height: 22px; color: #008000; "><br style="line-height: 22px; " />
</span><span style="line-height: 22px; color: #000000; ">}</span></div>
</dt><dt style="line-height: 22px; "><br style="line-height: 22px; " />
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; ">7.<span style="line-height: normal; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="line-height: 19px; ">&nbsp;</span></span><span style="line-height: 22px; ">&#8220;鸟&#8221;和&#8220;翅膀&#8221;这两个类。鸟和翅膀似整体和部分的关系，并且翅膀和鸟的生命周期是相同的，在这里鸟和其翅膀就是合成关系。<span style="line-height: 22px; background-color: yellow; "><span style="line-height: 22px; ">合成</span>(composition)<span style="line-height: 22px; ">是一种强的&#8220;拥有&#8221;关系，体现了严格的部分和整体的关系，部分和整体的生命周期一样</span></span></span><span style="line-height: 22px; ">。<span style="line-height: 22px; color: red; "><span style="line-height: 22px; ">合成关系用实心的的菱形</span>+<span style="line-height: 22px; ">实线箭头来表示</span></span></span><span style="line-height: 22px; ">。另外，合成关系的连线两端还有一个数字&#8220;</span>1<span style="line-height: 22px; ">&#8221;和数字&#8220;</span>2<span style="line-height: 22px; ">&#8221;，，这被称为基数。表明这一端的类可以有几个实例，很显然，一个鸟应该有两支翅膀。如果一个类可能有无数个实例，则就用&#8220;</span>n<span style="line-height: 22px; ">&#8221;来表示。关联关系，聚合关系也可以有基数的。</span></div>
</dt></dl><dl style="line-height: 22px; "><dt style="line-height: 22px; "><span style="line-height: 22px; color: #0000ff; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "><img title="UML中类图实例 - Doom - 风云掠过" src="http://hiphotos.baidu.com/liang125353769/pic/item/59df7916e3ad1b44c83d6d58.jpg" style="line-height: 22px; border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; max-width: 100%; cursor: pointer; border-right-width: 0px; "  alt="" /></div>
</span>
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "><span style="line-height: 22px; color: #0000ff; ">class</span><span style="line-height: 22px; color: #000000; ">&nbsp;Bird&nbsp;<br style="line-height: 22px; " />
{<br style="line-height: 22px; " />
&nbsp;&nbsp;</span><span style="line-height: 22px; color: #0000ff; ">private</span><span style="line-height: 22px; color: #000000; ">&nbsp;Wing wing;<br style="line-height: 22px; " />
&nbsp;&nbsp;</span><span style="line-height: 22px; color: #0000ff; ">public</span><span style="line-height: 22px; color: #000000; ">&nbsp;Bird()<br style="line-height: 22px; " />
&nbsp;&nbsp; {<br style="line-height: 22px; " />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wing</span><span style="line-height: 22px; color: #000000; ">=</span><span style="line-height: 22px; color: #0000ff; ">new</span><span style="line-height: 22px; color: #000000; ">&nbsp;Wing();<br style="line-height: 22px; " />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="line-height: 22px; color: #008000; ">//</span><span style="line-height: 22px; color: #008000; ">在鸟Bird类中，初始化时，实例化翅膀Wing,它们之间同时生成</span><span style="line-height: 22px; color: #008000; "><br style="line-height: 22px; " />
</span><span style="line-height: 22px; color: #000000; ">&nbsp;&nbsp; }<br style="line-height: 22px; " />
}</span></div>
</dt><dt style="line-height: 22px; "><br style="line-height: 22px; " />
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; ">8.<span style="line-height: normal; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="line-height: 19px; ">&nbsp;</span></span><span style="line-height: 22px; ">&#8220;动物&#8221;、&#8220;氧气&#8221;与&#8220;水&#8221;之间。动物有几大特征，比如有新陈代谢，能繁殖。而动物要有生命，需要氧气，水以及食物等。也就是说动物依赖于氧气和水。它们之间是<span style="line-height: 22px; color: red; "><span style="line-height: 22px; ">依赖关系</span>(Dependency),<span style="line-height: 22px; ">用虚线箭头来表示</span></span></span><span style="line-height: 22px; ">。</span></div>
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; "></div>
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; "><span style="line-height: 22px; "><span style="line-height: 22px; color: #0000ff; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "><img title="UML中类图实例 - Doom - 风云掠过" src="http://hiphotos.baidu.com/liang125353769/pic/item/8167d70857ae0c823ac76358.jpg" style="line-height: 22px; border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; max-width: 100%; cursor: pointer; border-right-width: 0px; "  alt="" /></div>
</span></span></div>
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; margin-left: 18pt; text-indent: -18pt; "></div>
<br style="line-height: 22px; " />
</dt><dt style="line-height: 22px; ">
<div style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 14px; line-height: 22px; "><span style="line-height: 22px; color: #0000ff; ">abstract</span>&nbsp;<span style="line-height: 22px; color: #0000ff; ">class</span><span style="line-height: 22px; color: #000000; ">&nbsp;Animal<br style="line-height: 22px; " />
{<br style="line-height: 22px; " />
&nbsp;&nbsp;&nbsp;</span><span style="line-height: 22px; color: #0000ff; ">public</span><span style="line-height: 22px; color: #000000; ">&nbsp;bolism(Oxygen oxygen,Water water)<br style="line-height: 22px; " />
&nbsp;&nbsp;&nbsp; {<br style="line-height: 22px; " />
&nbsp;&nbsp;&nbsp; }&nbsp;<br style="line-height: 22px; " />
}</span></div>
</dt></dl></span></span>
<img src ="http://www.blogjava.net/yglwxl/aggbug/344130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yglwxl/" target="_blank">九宝</a> 2011-02-12 13:02 <a href="http://www.blogjava.net/yglwxl/archive/2011/02/12/344130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Bitwise operators and Shift operators</title><link>http://www.blogjava.net/yglwxl/archive/2008/05/20/201630.html</link><dc:creator>九宝</dc:creator><author>九宝</author><pubDate>Tue, 20 May 2008 05:22:00 GMT</pubDate><guid>http://www.blogjava.net/yglwxl/archive/2008/05/20/201630.html</guid><wfw:comment>http://www.blogjava.net/yglwxl/comments/201630.html</wfw:comment><comments>http://www.blogjava.net/yglwxl/archive/2008/05/20/201630.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yglwxl/comments/commentRss/201630.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yglwxl/services/trackbacks/201630.html</trackback:ping><description><![CDATA[位运算符与逻辑运算符基本相似，不过后者的对象只是表示真和假的二值运算，位运算符的对象则是二进制数。Java语言中字节、字符和整数等都可以转换为二进制，所以位运算符的对象也可以是它们。常见位运算符有： <br />
按位进行与运算 ： &amp; <br />
按位进行或运算 ： | <br />
按位进行位异运算： ^ <br />
按位进行取反运算： ~ <br />
按位进行循环左移：&lt;&lt;，运算符左侧对象左移由右侧指定的位数，低位补0，最高位抛弃。带符号的左移位运算相当于对左操作数进行乘2运算。 <br />
按位进行循环右移：&gt;&gt;，运算符左侧对象右移由右侧指定的位数，若值为正，在最高位插入0，若值为负，在最高位插入1，即移入的最高位和原最高符号位相同。带符号的右移位运算相当于对左边的运算对象进行除2运算。 <br />
按位进行无符号右移：&gt;&gt;&gt;，无论运算符左边的运算对象取值正负，都在高位插入0，即移入位始终补0. <br />
要注意是没有按位进行无符号左移的。位运算符的操作数只能是整数，char,byte,short, <br />
int和long,进行位运算时，总是先将字符型值、字节型值和短整型值转换为整型再进行位运算。位运算符游标的操作数用于指定移动的位数，按规定其不应超过左侧数的进制表示位数。 <br />
The bitwise operators allow you to manipulate individual bits in an integral primitive data type.Bitwise operators perform Boolean algebra on the corresponding bits in the two arguments to produce the result. The bitwise operators come from C&#8217;s low-level orientation, where you often manipulate hardware<br />
directly and must set the bits in hardware registers. Java was originally designed to be embedded in TV set-top boxes, so this low-level orientation still made sense. However, you probably won&#8217;t use the bitwise operators much.<br />
The bitwise AND operator (&amp;) produces a one in the output bit if both input bits are one; otherwise, it produces a zero. <br />
The bitwise OR operator (|) produces a one in the output bit if either input bit is a one and produces a zero only if both input bits are zero. <br />
The bitwise EXCLUSIVE OR, or XOR (^), produces a one in the output bit if one or the other input bit is a one, but not both. <br />
The bitwise NOT (~, also called the ones complement operator) is a unary operator; it takes only one argument. (All other bitwise operators are binary operators.) Bitwise NOT produces the opposite of the input bit—a one if the input bit is zero, a zero if the input bit is one. 
<img src ="http://www.blogjava.net/yglwxl/aggbug/201630.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yglwxl/" target="_blank">九宝</a> 2008-05-20 13:22 <a href="http://www.blogjava.net/yglwxl/archive/2008/05/20/201630.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Special case: primitive types</title><link>http://www.blogjava.net/yglwxl/archive/2008/05/20/201623.html</link><dc:creator>九宝</dc:creator><author>九宝</author><pubDate>Tue, 20 May 2008 05:12:00 GMT</pubDate><guid>http://www.blogjava.net/yglwxl/archive/2008/05/20/201623.html</guid><wfw:comment>http://www.blogjava.net/yglwxl/comments/201623.html</wfw:comment><comments>http://www.blogjava.net/yglwxl/archive/2008/05/20/201623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yglwxl/comments/commentRss/201623.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yglwxl/services/trackbacks/201623.html</trackback:ping><description><![CDATA[&nbsp;
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 18pt; font-family: Verdana; mso-bidi-font-family: Verdana">Special case: primitive types</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10.5pt; color: red; font-family: Georgia; mso-bidi-font-family: Georgia">Java determines the size of each primitive type</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">. These sizes don&#8217;t change from one machine<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">architecture to another as they do in most languages. This size invariance is one reason Java<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">programs are more portable than programs in most other languages.<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><strong><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia"><o:p>&nbsp;</o:p></span></strong></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><strong><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia"><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="width: 6in; height: 156pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///D:\Profiles\a24010\LOCALS~1\Temp\msohtml1\01\clip_image001.emz"></v:imagedata></v:shape><v:shape id="_x0000_i1026" style="width: 6in; height: 59.25pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///D:\Profiles\a24010\LOCALS~1\Temp\msohtml1\01\clip_image003.emz"></v:imagedata></v:shape><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><strong><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia"><o:p>&nbsp;</o:p></span></strong></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">All numeric types are signed, so don&#8217;t look for unsigned types.<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">The size of the <strong>boolean </strong>type is not explicitly specified; it is only defined to be able to take the literal values <strong>true </strong>or <strong>false</strong>.<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">The &#8220;wrapper&#8221; classes for the primitive data types allow you to make a non-primitive object on the heap to represent that primitive type. For example:<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10pt; font-family: AndaleMono; mso-bidi-font-family: AndaleMono">char c = 'x';<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10pt; font-family: AndaleMono; mso-bidi-font-family: AndaleMono">Character ch = new Character(c);<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">Or you could also use:<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10pt; font-family: AndaleMono; mso-bidi-font-family: AndaleMono">Character ch = new Character('x');<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">Java SE5 <em>autoboxing </em>will automatically convert from a primitive to a wrapper type:<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10pt; font-family: AndaleMono; mso-bidi-font-family: AndaleMono">Character ch = 'x';<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">and back:<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10pt; font-family: AndaleMono; mso-bidi-font-family: AndaleMono">char c = ch;<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">The reasons for wrapping primitives will be shown in a later chapter.<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 14pt; font-family: Verdana; mso-bidi-font-family: Verdana">High-precision numbers<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">Java includes two classes for performing high-precision arithmetic: <strong>BigInteger </strong>and<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><strong><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">BigDecimal</span></strong><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">. Although these approximately fit into the same category as the &#8220;wrapper&#8221; classes, neither one has a primitive analogue.<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">Both classes have methods that provide analogues for the operations that you perform on<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">primitive types. That is, you can do anything with a <strong>BigInteger </strong>or <strong>BigDecimal </strong>that you can with an <strong>int </strong>or <strong>float</strong>, it&#8217;s just that you must use method calls instead of operators. Also, since there&#8217;s more involved, the operations will be slower. You&#8217;re exchanging speed for accuracy.<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><strong><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">BigInteger </span></strong><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">supports arbitrary-precision integers. This means that you can accurately represent integral values of any size without losing any information during operations.<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><strong><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">BigDecimal </span></strong><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">is for arbitrary-precision fixed-point numbers; you can use these for accurate<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">monetary calculations, for example.<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="mso-layout-grid-align: none"><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">OX123</span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">＝</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">1</span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">&#215;</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">16<sup>2</sup></span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">＋</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">2</span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">&#215;</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">16<sup>1</sup></span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">＋</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">3</span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">&#215;</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">16<sup>0</sup><o:p></o:p></span></p>
<img src ="http://www.blogjava.net/yglwxl/aggbug/201623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yglwxl/" target="_blank">九宝</a> 2008-05-20 13:12 <a href="http://www.blogjava.net/yglwxl/archive/2008/05/20/201623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>整型数据</title><link>http://www.blogjava.net/yglwxl/archive/2008/05/20/201617.html</link><dc:creator>九宝</dc:creator><author>九宝</author><pubDate>Tue, 20 May 2008 05:10:00 GMT</pubDate><guid>http://www.blogjava.net/yglwxl/archive/2008/05/20/201617.html</guid><wfw:comment>http://www.blogjava.net/yglwxl/comments/201617.html</wfw:comment><comments>http://www.blogjava.net/yglwxl/archive/2008/05/20/201617.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yglwxl/comments/commentRss/201617.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yglwxl/services/trackbacks/201617.html</trackback:ping><description><![CDATA[三种形式的整型常量数据：<br />
1.十进制<br />
2.八进制，以o开头O123<span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">＝1</span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">&#215;</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">8<sup>2</sup></span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">＋1</span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">&#215;</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">8<sup>1</sup></span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">＋3</span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">&#215;</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">8<sup>0</sup>＝十进制的83<br />
3.十六进制&nbsp;，以ox开头&nbsp; <span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">OX123</span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">＝</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">1</span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">&#215;</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">16<sup>2</sup></span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">＋</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">2</span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">&#215;</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">16<sup>1</sup></span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">＋</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">3</span><span lang="ZH-CN" style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-family: Georgia; mso-ascii-font-family: Georgia; mso-hansi-font-family: Georgia">&#215;</span><span style="font-size: 10.5pt; font-family: Georgia; mso-bidi-font-family: Georgia">16<sup>0<br />
</sup><o:p><br />
</o:p></span></span>
 <img src ="http://www.blogjava.net/yglwxl/aggbug/201617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yglwxl/" target="_blank">九宝</a> 2008-05-20 13:10 <a href="http://www.blogjava.net/yglwxl/archive/2008/05/20/201617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Introduction to Objects</title><link>http://www.blogjava.net/yglwxl/archive/2008/05/20/199515.html</link><dc:creator>九宝</dc:creator><author>九宝</author><pubDate>Tue, 20 May 2008 05:10:00 GMT</pubDate><guid>http://www.blogjava.net/yglwxl/archive/2008/05/20/199515.html</guid><wfw:comment>http://www.blogjava.net/yglwxl/comments/199515.html</wfw:comment><comments>http://www.blogjava.net/yglwxl/archive/2008/05/20/199515.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yglwxl/comments/commentRss/199515.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yglwxl/services/trackbacks/199515.html</trackback:ping><description><![CDATA[<p>1.The hidden implementation<br />
The goal of the class creator is to build a class that exposes only what is necessary to the client programmer and keeps everything else hidden. Why? <br />
(1)Becuase if it is hidden, the client programmer can't access it, which means that the class creator can change the hidden portion at will withou worring about the impact on anyone else. <br />
(2)The hidden portion usually reprsents the tender insides of an object that could easily be corrupted by a careless or uninformed client programmer, so hiding the implementation reduces program bugs.<br />
<br />
2.Reusing the implementation<br />
The simplest way to reuse a class is to just use an object of that class directly, but you can also place an object of that class inside a new class. We call this "creating a member object." Your new class can be made up of any mumber and type of other objectss, in any combination that you need to achieve the fuctionality desired in your new class. Because you are composing a new class from existing classes, this conception is called <strong>composition</strong>. Compositon is often referred to as a "has-a" relationship, as "A car has an engine."<br />
Because inheritance is so important in OOP, it is often highly emphasized, and the new programmer can get the idea that inheritance should be used everywhere. This can result in awkward and overly complicated designs. Instead, you should first look to composition when creating new classes, since it is simpler and more flexible. If you take this approach,your designer will be cleaner. Once you have had some experience, it will be reasonably obvious when you need inheritance.<br />
<br />
3.Inheritance<br />
You have two ways to differentiate your new derived class from the original base class.<br />
The first is quite straightforward: You simply add brand new methods to the derived class. This means that the base class simply didn't as much as you wanted it to, so you added more methods. This simple and primitive use for inheritance is, at times, the perfect solution to your problem. However, you should look closely for the posiblilty that your base class might also need these additional methods. This process of discovery and iteration of your design happens regularly in OOP.<br />
The second and more important way to differentiate your new class is to change the behavior of an existing base-class method. This is referred to as overriding that method. To override&nbsp;a method, you simply create a new definition for the method in the derived class. You are saying, "I am using the same interface method here, but I want it to do something different for my new type."<br />
<br />
4.Is-a vs. is-like-a relationships<br />
<br />
5.Interchangeable objects with polymorphism<br />
<br />
6The single rooted hierarchy<br />
All objects have a single rooted hierarchy can be guaranteed to have certain functionality. You know you can perform certain basic operations on every object in your system. All objects can easy be created on the heap, and argument passing is greatly simplified.<br />
A single rooted hierarchy makes it much easier to implement a garbage collector, which is one of the fundamental improvements of Java over C++. And since information about the type of an object is guaranteed to be in all objects, you'll never end up with an object whose type you cannot determine. This is especially important with system-level operations, such as exception handling, and to allow greater flexibility in programming.<br />
<br />
7.Containers<br />
<br />
8.Parameterized types(generics)<br />
One of the big changes in Java SE5 is the addition of parameterized types, called generics in java. you will recongize the use of generics by angle brackets with types inside.<br />
<br />
9.Object creation &amp; lifetime<br />
How can you possibly know when to destroy the objects?<br />
(1).C++ takes the approach that control of efficiency is the most important issue, so it give the programmer a choice.<br />
(2).Java, in heap<br />
<br />
10 Exception handling: dealing with errors<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
</p>
<br />
<br />
<br />
 <img src ="http://www.blogjava.net/yglwxl/aggbug/199515.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yglwxl/" target="_blank">九宝</a> 2008-05-20 13:10 <a href="http://www.blogjava.net/yglwxl/archive/2008/05/20/199515.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java byte类型为什么是（127—— －128）</title><link>http://www.blogjava.net/yglwxl/archive/2008/05/20/201595.html</link><dc:creator>九宝</dc:creator><author>九宝</author><pubDate>Tue, 20 May 2008 04:48:00 GMT</pubDate><guid>http://www.blogjava.net/yglwxl/archive/2008/05/20/201595.html</guid><wfw:comment>http://www.blogjava.net/yglwxl/comments/201595.html</wfw:comment><comments>http://www.blogjava.net/yglwxl/archive/2008/05/20/201595.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yglwxl/comments/commentRss/201595.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yglwxl/services/trackbacks/201595.html</trackback:ping><description><![CDATA[所有的整数类型（除了char&nbsp;类型之外）都是有符号的整数<br />
<br />
因为， java的byte是8bit（位），就是8个0/1 来表示。<br />
但是第一位是符号位，表示正数还是负数。所以：<br />
0000 0001表示1，&nbsp;&nbsp;&nbsp;&nbsp; （1&#215;&nbsp; <span style="font-size: 10.5pt; font-family: Georgia">2<sup>0</sup></span>）<br />
0000 0000表示0，&nbsp;&nbsp;&nbsp;&nbsp; （0&#215;&nbsp; <span style="font-size: 10.5pt; font-family: Georgia">2<sup>0</sup></span>）<br />
<br />
计算机中负数的二进制码是是负数的绝对值取反，然后加1.<br />
例如－1的二进制：<br />
－1的绝对值是1（0000 0001）;<br />
取反是（1111 1110）;<br />
再加 1（0000 0001&nbsp;）；<br />
结果是（1111 1111）<br />
<br />
要对一个负数的二进制进行解码，首先对其所有的位取反，然后加1。<br />
例如－1的&nbsp;二进制&nbsp;&nbsp; （1111 1111）<br />
取反：&nbsp; 0000 0000 是0<br />
再加1：（0＋1＝1）<br />
符号位是1，是负数，所以是－1<br />
<br />
1000 0000 表示－128，&nbsp;&nbsp; （解码过程：位取反是0111 1111＝＝》127，然后加1＝＝》128，符号位为1,是负数，表示－128）<br />
<br />
 <img src ="http://www.blogjava.net/yglwxl/aggbug/201595.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yglwxl/" target="_blank">九宝</a> 2008-05-20 12:48 <a href="http://www.blogjava.net/yglwxl/archive/2008/05/20/201595.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>