﻿<?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/simonshen/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 02 May 2026 03:08:43 GMT</lastBuildDate><pubDate>Sat, 02 May 2026 03:08:43 GMT</pubDate><ttl>60</ttl><item><title>观察者模式</title><link>http://www.blogjava.net/simonshen/archive/2011/04/07/347745.html</link><dc:creator>simon.shen</dc:creator><author>simon.shen</author><pubDate>Thu, 07 Apr 2011 14:29:00 GMT</pubDate><guid>http://www.blogjava.net/simonshen/archive/2011/04/07/347745.html</guid><wfw:comment>http://www.blogjava.net/simonshen/comments/347745.html</wfw:comment><comments>http://www.blogjava.net/simonshen/archive/2011/04/07/347745.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/simonshen/comments/commentRss/347745.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simonshen/services/trackbacks/347745.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;概念：观察者模式定义了一对多依赖，这样一来，当一个对象改变状态时，它的所有依赖者都会收到通知并自动更新。&nbsp;&nbsp;&nbsp;&nbsp;举个网上商城的例子，比如很多顾客对某个商品感兴趣，把商品收藏，当该商品降价、促销、有货了等事件发生时，就会发Email通知顾客。&nbsp;&nbsp;&nbsp;&nbsp;UML图...&nbsp;&nbsp;<a href='http://www.blogjava.net/simonshen/archive/2011/04/07/347745.html'>阅读全文</a><img src ="http://www.blogjava.net/simonshen/aggbug/347745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simonshen/" target="_blank">simon.shen</a> 2011-04-07 22:29 <a href="http://www.blogjava.net/simonshen/archive/2011/04/07/347745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>策略模式</title><link>http://www.blogjava.net/simonshen/archive/2011/04/06/347744.html</link><dc:creator>simon.shen</dc:creator><author>simon.shen</author><pubDate>Wed, 06 Apr 2011 14:56:00 GMT</pubDate><guid>http://www.blogjava.net/simonshen/archive/2011/04/06/347744.html</guid><wfw:comment>http://www.blogjava.net/simonshen/comments/347744.html</wfw:comment><comments>http://www.blogjava.net/simonshen/archive/2011/04/06/347744.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/simonshen/comments/commentRss/347744.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simonshen/services/trackbacks/347744.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;从今天开始，把常用的设计模式都简单的整理一遍，希望每个星期能至少整理2个模式吧，先从简单的策略模式开始。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>概念：</strong>它定义了一系列的算法，并将每一个算法封装起来，而且使它们还可以相互替换。策略模式让算法的变化不会影响到使用算法的客户。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;策略模式很简单，实际上就是OO中的多态，举个例子，某商场要进行促销，对于普通顾客打88折，对于银卡客户在88折基础上再满400减160，对于金卡客户在88折基础上再满400减200。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt"><strong>UML图如下所示：<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/simonshen/strategy_uml.PNG" width="500" height="187" /><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;接口DiscountStrategy代码如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp; </span>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="font-size: 10pt"><img id="Codehighlighter1_34_76_Open_Image" onclick="this.style.display='none'; Codehighlighter1_34_76_Open_Text.style.display='none'; Codehighlighter1_34_76_Closed_Image.style.display='inline'; Codehighlighter1_34_76_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_34_76_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_34_76_Closed_Text.style.display='none'; Codehighlighter1_34_76_Open_Image.style.display='inline'; Codehighlighter1_34_76_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;DiscountStrategy&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_34_76_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span></span><span id="Codehighlighter1_34_76_Open_Text"><span style="font-size: 10pt"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;discount(</span><span style="color: #0000ff">double</span></span><span style="color: #000000"><span style="font-size: 10pt">&nbsp;sum);<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></span></div>
</span><br />
<span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;类GeneralDiscountStrategy类代码如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp; </span>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="font-size: 10pt"><img id="Codehighlighter1_65_157_Open_Image" onclick="this.style.display='none'; Codehighlighter1_65_157_Open_Text.style.display='none'; Codehighlighter1_65_157_Closed_Image.style.display='inline'; Codehighlighter1_65_157_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_65_157_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_65_157_Closed_Text.style.display='none'; Codehighlighter1_65_157_Open_Image.style.display='inline'; Codehighlighter1_65_157_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;GeneralDiscountStrategy&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;DiscountStrategy&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_65_157_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span></span><span id="Codehighlighter1_65_157_Open_Text"><span style="font-size: 10pt"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
<img id="Codehighlighter1_121_154_Open_Image" onclick="this.style.display='none'; Codehighlighter1_121_154_Open_Text.style.display='none'; Codehighlighter1_121_154_Closed_Image.style.display='inline'; Codehighlighter1_121_154_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_121_154_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_121_154_Closed_Text.style.display='none'; Codehighlighter1_121_154_Open_Image.style.display='inline'; Codehighlighter1_121_154_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;discount(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;sum)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_121_154_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span></span><span id="Codehighlighter1_121_154_Open_Text"><span style="font-size: 10pt"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;sum&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0.88</span></span><span style="color: #000000"><span style="font-size: 10pt">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span><span style="color: #000000"><br />
<span style="font-size: 10pt"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></span></div>
<br />
<span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;类SilverDiscountStrategy类代码如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp; </span>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="font-size: 10pt"><img id="Codehighlighter1_64_236_Open_Image" onclick="this.style.display='none'; Codehighlighter1_64_236_Open_Text.style.display='none'; Codehighlighter1_64_236_Closed_Image.style.display='inline'; Codehighlighter1_64_236_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_64_236_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_64_236_Closed_Text.style.display='none'; Codehighlighter1_64_236_Open_Image.style.display='inline'; Codehighlighter1_64_236_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SilverDiscountStrategy&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;DiscountStrategy&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_64_236_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span></span><span id="Codehighlighter1_64_236_Open_Text"><span style="font-size: 10pt"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
<img id="Codehighlighter1_120_234_Open_Image" onclick="this.style.display='none'; Codehighlighter1_120_234_Open_Text.style.display='none'; Codehighlighter1_120_234_Closed_Image.style.display='inline'; Codehighlighter1_120_234_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_120_234_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_120_234_Closed_Text.style.display='none'; Codehighlighter1_120_234_Open_Image.style.display='inline'; Codehighlighter1_120_234_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;discount(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;sum)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_120_234_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span></span><span id="Codehighlighter1_120_234_Open_Text"><span style="font-size: 10pt"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sum&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0.88</span></span><span style="font-size: 10pt"><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;(</span><span style="color: #0000ff">int</span><span style="color: #000000">)&nbsp;sum&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">400</span></span><span style="font-size: 10pt"><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sum&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;16</span><span style="color: #000000">0</span></span><span style="font-size: 10pt"><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span></span><span style="color: #000000"><span style="font-size: 10pt">&nbsp;sum;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span><span style="color: #000000"><br />
<span style="font-size: 10pt"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></span></div>
<br />
<span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;类GoldenDiscountStrategy代码如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp; </span>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="font-size: 10pt"><img id="Codehighlighter1_64_236_Open_Image" onclick="this.style.display='none'; Codehighlighter1_64_236_Open_Text.style.display='none'; Codehighlighter1_64_236_Closed_Image.style.display='inline'; Codehighlighter1_64_236_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_64_236_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_64_236_Closed_Text.style.display='none'; Codehighlighter1_64_236_Open_Image.style.display='inline'; Codehighlighter1_64_236_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;GoldenDiscountStrategy&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;DiscountStrategy&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_64_236_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span></span><span id="Codehighlighter1_64_236_Open_Text"><span style="font-size: 10pt"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
<img id="Codehighlighter1_120_234_Open_Image" onclick="this.style.display='none'; Codehighlighter1_120_234_Open_Text.style.display='none'; Codehighlighter1_120_234_Closed_Image.style.display='inline'; Codehighlighter1_120_234_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_120_234_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_120_234_Closed_Text.style.display='none'; Codehighlighter1_120_234_Open_Image.style.display='inline'; Codehighlighter1_120_234_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;discount(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;sum)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_120_234_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span></span><span id="Codehighlighter1_120_234_Open_Text"><span style="font-size: 10pt"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sum&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0.88</span></span><span style="font-size: 10pt"><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;(</span><span style="color: #0000ff">int</span><span style="color: #000000">)&nbsp;sum&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">400</span></span><span style="font-size: 10pt"><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sum&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">200</span></span><span style="font-size: 10pt"><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span></span><span style="color: #000000"><span style="font-size: 10pt">&nbsp;sum;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span><span style="color: #000000"><br />
<span style="font-size: 10pt"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></span></div>
<br />
<span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;类Cashier代码如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp; </span>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="font-size: 10pt"><img id="Codehighlighter1_21_676_Open_Image" onclick="this.style.display='none'; Codehighlighter1_21_676_Open_Text.style.display='none'; Codehighlighter1_21_676_Closed_Image.style.display='inline'; Codehighlighter1_21_676_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_21_676_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_21_676_Closed_Text.style.display='none'; Codehighlighter1_21_676_Open_Image.style.display='inline'; Codehighlighter1_21_676_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Cashier&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_21_676_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span></span><span id="Codehighlighter1_21_676_Open_Text"><span style="font-size: 10pt"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;DiscountStrategy&nbsp;discountStrategy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span></span><span style="font-size: 10pt"><span style="color: #000000">&nbsp;GeneralDiscountStrategy();<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br />
<img id="Codehighlighter1_168_559_Open_Image" onclick="this.style.display='none'; Codehighlighter1_168_559_Open_Text.style.display='none'; Codehighlighter1_168_559_Closed_Image.style.display='inline'; Codehighlighter1_168_559_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_168_559_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_168_559_Closed_Text.style.display='none'; Codehighlighter1_168_559_Open_Image.style.display='inline'; Codehighlighter1_168_559_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />&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;getDiscountStrategy(CustomerLevel&nbsp;customerLevel)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_168_559_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span></span><span id="Codehighlighter1_168_559_Open_Text"><span style="font-size: 10pt"><span style="color: #000000">{<br />
<img id="Codehighlighter1_201_553_Open_Image" onclick="this.style.display='none'; Codehighlighter1_201_553_Open_Text.style.display='none'; Codehighlighter1_201_553_Closed_Image.style.display='inline'; Codehighlighter1_201_553_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_201_553_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_201_553_Closed_Text.style.display='none'; Codehighlighter1_201_553_Open_Image.style.display='inline'; Codehighlighter1_201_553_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">switch</span><span style="color: #000000">&nbsp;(customerLevel)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_201_553_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span></span><span id="Codehighlighter1_201_553_Open_Text"><span style="font-size: 10pt"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">case</span></span><span style="font-size: 10pt"><span style="color: #000000">&nbsp;GENERAL:<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;discountStrategy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span></span><span style="font-size: 10pt"><span style="color: #000000">&nbsp;GeneralDiscountStrategy();<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span></span><span style="font-size: 10pt"><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">case</span></span><span style="font-size: 10pt"><span style="color: #000000">&nbsp;SILVER:<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;discountStrategy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span></span><span style="font-size: 10pt"><span style="color: #000000">&nbsp;SilverDiscountStrategy();<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span></span><span style="font-size: 10pt"><span style="color: #000000">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">case</span></span><span style="font-size: 10pt"><span style="color: #000000">&nbsp;GOLDEN:<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;discountStrategy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span></span><span style="font-size: 10pt"><span style="color: #000000">&nbsp;GeneralDiscountStrategy();<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span></span><span style="color: #000000"><span style="font-size: 10pt">;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span><span style="color: #000000"><br />
<span style="font-size: 10pt"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span><span style="color: #000000"><br />
<span style="font-size: 10pt"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br />
<img id="Codehighlighter1_613_674_Open_Image" onclick="this.style.display='none'; Codehighlighter1_613_674_Open_Text.style.display='none'; Codehighlighter1_613_674_Closed_Image.style.display='inline'; Codehighlighter1_613_674_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_613_674_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_613_674_Closed_Text.style.display='none'; Codehighlighter1_613_674_Open_Image.style.display='inline'; Codehighlighter1_613_674_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-size: 10pt"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;calculate(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;price,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;num)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_613_674_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span></span><span id="Codehighlighter1_613_674_Open_Text"><span style="font-size: 10pt"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;discountStrategy.discount(price&nbsp;</span><span style="color: #000000">*</span></span><span style="color: #000000"><span style="font-size: 10pt">&nbsp;num);<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span><span style="color: #000000"><br />
<span style="font-size: 10pt"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></span></div>
<img src ="http://www.blogjava.net/simonshen/aggbug/347744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simonshen/" target="_blank">simon.shen</a> 2011-04-06 22:56 <a href="http://www.blogjava.net/simonshen/archive/2011/04/06/347744.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMX In Action 总结（二）--HelloWorld例子</title><link>http://www.blogjava.net/simonshen/archive/2011/04/05/347639.html</link><dc:creator>simon.shen</dc:creator><author>simon.shen</author><pubDate>Tue, 05 Apr 2011 08:20:00 GMT</pubDate><guid>http://www.blogjava.net/simonshen/archive/2011/04/05/347639.html</guid><wfw:comment>http://www.blogjava.net/simonshen/comments/347639.html</wfw:comment><comments>http://www.blogjava.net/simonshen/archive/2011/04/05/347639.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/simonshen/comments/commentRss/347639.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simonshen/services/trackbacks/347639.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;这篇写一个简单的HelloWorld例子。&nbsp;&nbsp;&nbsp;&nbsp;首先准备环境，我使用的JDK1.6,1.5应该也可以。还需要去oracle下载JMX RI包，地址为：http://www.oracle.com/technetwork/java/javase/tech/download-jsp-141676.html，下载...&nbsp;&nbsp;<a href='http://www.blogjava.net/simonshen/archive/2011/04/05/347639.html'>阅读全文</a><img src ="http://www.blogjava.net/simonshen/aggbug/347639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simonshen/" target="_blank">simon.shen</a> 2011-04-05 16:20 <a href="http://www.blogjava.net/simonshen/archive/2011/04/05/347639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMX In Action 总结（一）</title><link>http://www.blogjava.net/simonshen/archive/2011/04/03/347589.html</link><dc:creator>simon.shen</dc:creator><author>simon.shen</author><pubDate>Sun, 03 Apr 2011 15:08:00 GMT</pubDate><guid>http://www.blogjava.net/simonshen/archive/2011/04/03/347589.html</guid><wfw:comment>http://www.blogjava.net/simonshen/comments/347589.html</wfw:comment><comments>http://www.blogjava.net/simonshen/archive/2011/04/03/347589.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/simonshen/comments/commentRss/347589.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simonshen/services/trackbacks/347589.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;这是我读了JMX In Action以后的总结，这篇文章是这个系列的第一篇，主要介绍一下什么是JMX，为什么要使用JMX？以及简单阐述一下JMX的架构。<br />
&nbsp;&nbsp;&nbsp;<strong>&nbsp;什么是JMX？<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;首先看一下<font size="2">维基百科的定义：JMX（Java Management Extensions，即Java管理扩展）是Java平台上为应用程序、设备、系统等植入管理功能的框架。<br />
JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议，灵活的开发无缝集成的系统、网络和服务管理应用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font size="2">随着企业 IT 规模的不断增长，IT 资源（IT resource）数量不断增加，IT 资源的分布也越来越分散。IT资源主要包括网络和应用等。管理网络（硬件）的主要工具是<br />
简单网络管理协议（SNMP），硬件厂商一般都会在设备中提供SNMP hooks，但SNMP开发不是件容易的事情，而且需要掌握特定的语言，对JAVA开发者绝非易事。<br />
&nbsp;&nbsp;&nbsp;&nbsp;有些企业开发的应用的时候，是不会考虑运行时配置和管理问题。有些企业直接在产品中开发管理工具和界面。也有一些企业直接使用应用服务器或web服务器的管理工具。<br />
&nbsp;&nbsp;&nbsp;&nbsp;现实世界的IT资源管理需求主要有以下一些：<br />
&nbsp;&nbsp;&nbsp;&nbsp;1、监控平台和硬件的健康。硬件可以通过SNMP，WEB服务器和应用服务器可以通过他们自己的管理工具。数据库也是一样等。<br />
&nbsp;&nbsp; 2、配置应用层面的资源。比如配置应用在查询结果中每页显示的数量，配置数据库连接池，或者外部请求数等。<br />
&nbsp;&nbsp; 3、收集应用程序的统计信息。如多少成功订单，多少失败订单等。<br />
&nbsp;&nbsp; 4、日志级别，改变日志级别。出问题的时候，可以通过改变日志级别来打印调试信息，快速定位问题。<br />
&nbsp;&nbsp; 5、监视服务器的性能、负载，通过email、sms等通知关键性事件，比如服务器负载超过预设的界限。<br />
&nbsp;&nbsp;&nbsp;&nbsp;要满足这些需求往往是非常昂贵和困难的，管理员通常需要通过不同的工具来管理不同的服务和硬件。&nbsp;如果使用JMX，创建一个满足上面需求的管理系统将是廉价、更加灵活、所需时间更短。&nbsp;&nbsp;&nbsp;&nbsp;</font></font></span>&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt"><strong>使用JMX的好处<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、非常容易使用。特别是对一个JAVA程序员，要理解SNMP是困难的。而JMX对他来说非常容易。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、利用现有的技术：现有的管理工具可以插入JMX，JMX提供了很多协议（SNMP、HTTP）和传输方式（如RMI），如果原有的应用和设备没有提供管理能力，则可以创建JMX代理提供管理能力。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、模块化。以模块化的方式创建你的管理环境。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4、警告、事件和统计信息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JMX提供了一套通知系统，充分利用了面向对象优势，通知提供了不仅仅是数据，而是一个有分布式JAVA对象，封装了数据和行为。例如，你发送了一个服务器负载的通知，里面还包含了一个显示负载重要性的级别的机制，说白了就是对象里面有个方法，可以判定负载的严重程度。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5、快速的监控解决方案。不同的开发人员只需要自己开发MBean，而不需要花很多的时间在相互的协作上面，这些MBean分布在不同的主机上，但可以通过一个管理工具就可以管理所有的这些应用。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;JMX的一些术语<br />
<font size="2">&nbsp;&nbsp;&nbsp;&nbsp;1、可管理资源（<font size="2">Manageable resource</font>）<br />
&nbsp;&nbsp;&nbsp;&nbsp;可以是任何的应用、设备、或者其他存在的实体，能够被java访问和包装。是被JMX MBean管理的资源。<br />
&nbsp;&nbsp;&nbsp;&nbsp;2、MBean（Managed Bean）<br />
&nbsp;&nbsp;&nbsp;&nbsp;是满足某些命名规则和继承JMX 规范的java类，为可管理资源的管理和访问暴露接口。通过属性和行为来暴露接口。有这3类：Standard, Dynamic, and Model MBeans。<br />
&nbsp;&nbsp;&nbsp;&nbsp;3、MBean Server<br />
&nbsp;&nbsp;&nbsp;&nbsp;管理一组MBean的JAVA类。是JMX 管理环境核心。是MBean的注册器。<br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font size="2">4、JMX Agent<br />
&nbsp;&nbsp;&nbsp;&nbsp;JMX代理是为管理一组MBean提供一系列服务的java进程。是一个MBean&nbsp;Server的容器，它还提供了一些有用的服务：创建MBean之间的关系，动态加载类，简单的监控服务，定时器服务。Agent有一个协议适配器和连接器集合能使外部程序连接到他们。<br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font size="2">5、Protocol adapters and connectors<br />
&nbsp;&nbsp;&nbsp;&nbsp;协议适配器和连接器是位于JMX Agent内部的对象。把Agent暴露给管理程序和协议。一个Agent可以有很多适配器和连接器。<br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font size="2">6、Management application<br />
&nbsp;&nbsp;&nbsp;&nbsp;连接到JMX Agent的用户应用程序。<br />
&nbsp;&nbsp;&nbsp;&nbsp;</font><font size="2">7、Notification<br />
&nbsp;&nbsp;&nbsp;&nbsp;通知是Mbean或者Mbean server发送的java对象，他们封装了事件、警告、或者其他的一般信息。其他的Mbean或者java对象可以注册成为监听器来接受通知。<br />
</font><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;8、Instrumentation（设备化）<br />
&nbsp;&nbsp;&nbsp;&nbsp;用MBean暴露一个可管理资源的过程。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>JMX架构<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;JMX架构主要分为三层：<font size="2">Distributed layer</font>，<font size="2">Agent layer</font>，<font size="2">Instrumentation layer，如下图所示：</font><br />
<strong>&nbsp;&nbsp;&nbsp;&nbsp;<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">&nbsp;<img style="width: 661px; height: 339px" border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/simonshen/jmx_architecture.png" width="661" height="339" /><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></strong></font></span>&nbsp;<br />
<br />
&nbsp;<span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;1、</span><font size="2">Distributed layer（分布式层）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;属于JMX架构的最外层，这层主要负责使JMX Agent能对外部程序可用。&nbsp;&nbsp;&nbsp;&nbsp;又分为两种：一种通过不同的协议（如SNMP，HTTP）来为MBean提供可见性。</font> <span style="font-size: 10pt">另一种是把Agent API暴露给其他的分布式技术如RMI。<br />
&nbsp;&nbsp;&nbsp;&nbsp;2、<font size="2">The agent layer</font>（代理层）<br />
&nbsp;&nbsp;&nbsp;&nbsp;它包含的最主要的组件是MBean Server，它还包括4个代理服务使管理MBean更加容易，它们分别是：&nbsp;&nbsp;&nbsp;&nbsp;定时器（timer）、监控服务、动态MBean加载、和MBean关系服务。Agent可以和被管理的资源在同一个主机上，也可以是远程的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;3、<font size="2">The instrumentation layer</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;这是最靠近资源的一层，它包含了注册在Agent里面的MBean。<br />
&nbsp;&nbsp;&nbsp;&nbsp;4、<font size="2">Notifications</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;除了架构中的三层以外，JMX提供了一个通知机制，类似于JAVA事件模型。通知机制是管理系统的最后必须的组件。Agent和MBean可以使用通知机制来发送警告或信息给管理应用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;以上就是JMX架构的主要内容，下一篇构建一个HelloWorld的JMX程序。<br />
</span>
<img src ="http://www.blogjava.net/simonshen/aggbug/347589.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simonshen/" target="_blank">simon.shen</a> 2011-04-03 23:08 <a href="http://www.blogjava.net/simonshen/archive/2011/04/03/347589.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Restful Web Services 读书笔记（一）</title><link>http://www.blogjava.net/simonshen/archive/2011/03/30/347237.html</link><dc:creator>simon.shen</dc:creator><author>simon.shen</author><pubDate>Wed, 30 Mar 2011 13:59:00 GMT</pubDate><guid>http://www.blogjava.net/simonshen/archive/2011/03/30/347237.html</guid><wfw:comment>http://www.blogjava.net/simonshen/comments/347237.html</wfw:comment><comments>http://www.blogjava.net/simonshen/archive/2011/03/30/347237.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/simonshen/comments/commentRss/347237.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simonshen/services/trackbacks/347237.html</trackback:ping><description><![CDATA[<p style="font-family: 微软雅黑; font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt">这本书的前面三章主要讲了一下基本概念，客户端程序，和Amazon的S3，这篇博客总结一下第四章，个人感觉有很多重要的概念。<br />
&nbsp;&nbsp;&nbsp;&nbsp;面向资源的架构（<font face="微软雅黑">The Resource-Oriented Architecture</font>），这里的资源必须要有一个URI，资源和URI的关系：一个资源可能有一个或多个URI，而一个URI只能指定一个资源。<br />
<br />
&nbsp;&nbsp;&nbsp; Restful WS的特性：<br />
&nbsp;&nbsp;&nbsp;&nbsp;1、<strong>可寻址性（</strong><font face="微软雅黑"><strong>Addressability）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;资源通过URI来暴露给用户，可寻址性是最基本的特性。由于可寻址性，你可以把URI保存在你的书签里，你可以把链接发给别人，而不用把Html文件下载下来发给别人，也可以通过URI对资源进行缓存。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;2、<strong>无状态性（<font face="微软雅黑">Statelessness</font>）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;无状态性意味着每个HTTP请求是完全隔离的。每次客户端发送请求都必须带上所有服务器端需要的信息。&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;无状态的应用更容易分布到有负责均衡的多台服务器上；无状态性也更容易缓存：缓存工具只需要看这一个请求，和任何其他请求无关。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>应用状态和资源状态（<font face="微软雅黑">Application State Versus Resource State</font>）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;应用状态位于客户端，而资源状态位于服务器端，对于客户端，每个客户端都有各自的应用状态，例如：在google搜索，你可能搜索某个单词且当前页是第3页，我可能搜索另一个单词且在第一页，所以每个客户端都有一个应用状态。当客户端发起请求的时候，必须告诉服务器你的应用状态，比如你当前要看某个单词搜索结果的第几页，服务器端返回结果上有其他链接，这些链接客户端可能作为未来的请求。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而对于资源状态，对于每个客户端都是相同的，就是服务器上的资源。&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<strong>&nbsp;3、表述性（<font face="微软雅黑">Representations</font>）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;表述性，就是资源的表现形式，相同的资源可以有不同的表述性，比如同一个bug列表可以用XML文档表示，也可以用文本方式表示等等。对于同一资源的不同的<font face="微软雅黑">Representation</font>，如何知道客户端请求哪一种呢？作者建议不同的<font face="微软雅黑">Representation</font>使用不同的URI。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>4、连通性（<font face="微软雅黑">Links and Connectedness</font>）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;简单点说，就是返回的结果中有对其他资源的链接（URI），比如google搜索，搜索结果可能有其他页的链接。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>5、统一的接口（<font face="微软雅黑">The Uniform Interface</font>）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;也就是说Restful WS使用HTTP的基本方法作为他的方法的表示，主要使用HTTP的四个方法：GET,PUT,DELETE,POST。HEAD和OPTIONS用的比较少。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;取得某个资源的表述的时候使用GET。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建一个新的资源的时候，PUT到一个新的URI，或者POST到一个已经存在的URI。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;修改资源，使用PUT到存在的URI。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;删除资源使用DELETE。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUT和POST都可以创建新的资源，那有什么区别呢？POST可以创建从属资源，如一个webblog程序通过资源（/weblogs/myweblog）暴露每个blog，而某个blog下面的条目作为从属资源为/weblogs/myweblog/entries/1，当你需要增加一个条目的时候，你可以POST到父资源/weblogs/myweblog，同样PUT也可以完成这个工作，在这里POST和PUT的区别是：当客户端可以控制新资源的URI的时候，则使用PUT，比如blog的下面的某篇文章使用名字来访问，如/weblogs/myweblog/entries/restful_ws_1（这样某个博客下面的文章不能重复），则当你发表一篇新文章的时候，可以PUT到新的URI如/weblogs/myweblog/entries/restful_ws_2来创建资源。而如果客户端不能控制URI的时候，比如blog是通过服务器端某个序列号来访问，客户端是无法知道下一个序号是什么，这时只能使用POST，这种POST如果创建成功，则返回201，响应头中的Location可以保护新创建资源的URI。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;还有一个区别，POST对某个存在的资源更新时，一般是追加（append），比如说对某个日志文件做POST，则把日志追加到原日志的后面。如果是PUT则进行的是替换，所以PUT是等幂的，而POST不是（后面会讲）。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp;安全（Safety）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GET和HEAD方法只是获取资源的表述，所以是安全的。当然也可能有一些副作用，比如有些服务端会记录GET的次数等。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp;等幂性（Idempotence）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;等幂性简单点说就是一次请求和多次请求，资源的状态是一样。比如GET和HEAD，不论你请求多少次，资源还是在那里。请注意，DELETE和PUT也是等幂的，以为对同一个资源删除一次或者多次，结果是一样的，就是资源被删除了，不存在了。为什么说PUT也是等幂的？当你PUT一个新资源的时候，资源被创建，再次PUT这个URI的时候，资源还是没变。当你PUT一个存在的资源时，更新了资源，再次PUT的时候，还是更新成这个样子。在PUT更新的时候，不能做相对的更新（依赖资源现在的状态），比如每次对一个数加1，这样资源状态就会变化。应该每次更新成某个数，比如把某个数变成4，则无论多少次PUT，值都是4，这样就是等幂了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们设计Restful WS的时候，GET，HEAD, PUT, DELETE一定要设计成等幂的。由于网络是不可靠的，安全性和等幂性就显得特别重要。如果一次请求，服务器收到处理以后，客户端没有收到相应，客户端会再次请求，如果没有等幂性保障，就会发生意想不到的问题。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POST是不安全也不等幂的，还是拿weblog的例子，如果两次POST相同的博文，则会产生两个资源，URI可能是这样/weblogs/myweblog/entries/1和/weblogs/myweblog/entries/2，尽管他们的内容是一摸一样的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span><font face="微软雅黑"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
</font></p>
<img src ="http://www.blogjava.net/simonshen/aggbug/347237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simonshen/" target="_blank">simon.shen</a> 2011-03-30 21:59 <a href="http://www.blogjava.net/simonshen/archive/2011/03/30/347237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java ClassLoader详解</title><link>http://www.blogjava.net/simonshen/archive/2010/02/28/314109.html</link><dc:creator>simon.shen</dc:creator><author>simon.shen</author><pubDate>Sun, 28 Feb 2010 10:54:00 GMT</pubDate><guid>http://www.blogjava.net/simonshen/archive/2010/02/28/314109.html</guid><wfw:comment>http://www.blogjava.net/simonshen/comments/314109.html</wfw:comment><comments>http://www.blogjava.net/simonshen/archive/2010/02/28/314109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/simonshen/comments/commentRss/314109.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simonshen/services/trackbacks/314109.html</trackback:ping><description><![CDATA[<p><span style="font-family: 微软雅黑">&nbsp;&nbsp;&nbsp; <strong>双亲委派模型</strong><br />
&nbsp;&nbsp;&nbsp; Java从1.2开始引入双亲委派模型。除了启动类装载器，每个类装载器都有一个双亲。当类装载器装载某个类的时候，首先会委派它的双亲去装载这个类，它的双再委派自己的双亲，直到启动类装载器。<br />
&nbsp;&nbsp;&nbsp;&nbsp;Java类装载器的结构如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img height="250" alt="" src="http://www.blogjava.net/images/blogjava_net/simonshen/aa.png" width="206" border="0" /></span></p>
<p><span style="font-family: 微软雅黑">&nbsp;&nbsp;&nbsp;&nbsp;1、启动类装载器<br />
&nbsp;&nbsp;&nbsp;&nbsp;主要负责装载jdk_home/lib目录下的核心api&nbsp; 或 -Xbootclasspath 选项指定的jar包。处于双亲委派的最顶层，该类其实是由C语言编写。<br />
&nbsp;&nbsp;&nbsp;&nbsp;2、扩展类装载器<br />
&nbsp;&nbsp;&nbsp; 主要负责装载jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包<br />
&nbsp;&nbsp;&nbsp; 3、系统类装载器<br />
&nbsp;&nbsp;&nbsp;&nbsp;主要负责装载ClassPath下的类。<br />
&nbsp;&nbsp;&nbsp; 4、自定义类装载器<br />
&nbsp;&nbsp;&nbsp;&nbsp;自定义类继承ClassLoader或其子类。可以运行时动态装载某些类。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; </span></p>
<img src ="http://www.blogjava.net/simonshen/aggbug/314109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simonshen/" target="_blank">simon.shen</a> 2010-02-28 18:54 <a href="http://www.blogjava.net/simonshen/archive/2010/02/28/314109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java Class文件解析实例</title><link>http://www.blogjava.net/simonshen/archive/2010/02/22/311566.html</link><dc:creator>simon.shen</dc:creator><author>simon.shen</author><pubDate>Mon, 22 Feb 2010 11:30:00 GMT</pubDate><guid>http://www.blogjava.net/simonshen/archive/2010/02/22/311566.html</guid><wfw:comment>http://www.blogjava.net/simonshen/comments/311566.html</wfw:comment><comments>http://www.blogjava.net/simonshen/archive/2010/02/22/311566.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/simonshen/comments/commentRss/311566.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simonshen/services/trackbacks/311566.html</trackback:ping><description><![CDATA[<span style="font-size: 18pt"><span style="font-size: 12pt">其实网上已经有很多java Class文件的解析实例的文章，写这篇博客，只是为了自己仔仔细细的按照jvm spec看一边，别无其他。<br />
<br />
先上class文件的格式。<code></code></span></span><code><br />
</code>
<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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">ClassFile&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u4&nbsp;magic;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u2&nbsp;minor_version;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u2&nbsp;major_version;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u2&nbsp;constant_pool_count;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cp_info&nbsp;constant_pool[constant_pool_count</span><span style="color: #000000">-</span><span style="color: #000000">1</span></span></span><span style="color: #000000"><span style="font-size: 18pt"><span style="font-size: 12pt">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u2&nbsp;access_flags;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u2&nbsp;this_class;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u2&nbsp;super_class;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u2&nbsp;interfaces_count;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u2&nbsp;interfaces[interfaces_count];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u2&nbsp;fields_count;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field_info&nbsp;fields[fields_count];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u2&nbsp;methods_count;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method_info&nbsp;methods[methods_count];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u2&nbsp;attributes_count;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attribute_info&nbsp;attributes[attributes_count];<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span></span></span></div>
<br />
<span style="font-size: 18pt"><span style="font-size: 12pt"><code>其中，u2代表2个字节的无符号整数。u4代表4个字节的无符号整数，其他如</code><code>cp_info</code>、</span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><code>field_info<br />
</code>是一些结构数据，接下去会讲。<br />
这次要解析的是一个非常简单的类：TJ.java，代码如下：<br />
</span></span>
<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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span></span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;TJ<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;f1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span></span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">;<br />
<br />
&nbsp;&nbsp;&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;m1(</span><span style="color: #0000ff">int</span></span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;i){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">+</span><span style="color: #000000">1</span></span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span></span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;m2(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span><br />
</span></span></div>
<pre><span style="font-size: 18pt"><span style="font-size: 12pt">使用jdk1.6编译，产生的二进制类文件如下：<br />
<br />
</span></span></pre>
<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%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">CA&nbsp;FE&nbsp;BA&nbsp;BE&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">32</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">16</span><span style="color: #000000">&nbsp;0A&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">04</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">12</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">09</span></span></span><span style="color: #000000"><br />
</span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">03</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">13</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">07</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">14</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">07</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">15</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">02</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">66</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">31</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span></span></span><span style="color: #000000"><br />
</span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">49</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;0D&nbsp;</span><span style="color: #000000">43</span><span style="color: #000000">&nbsp;6F&nbsp;6E&nbsp;</span><span style="color: #000000">73</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">74</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">61</span><span style="color: #000000">&nbsp;6E&nbsp;</span><span style="color: #000000">74</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">56</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">61</span></span></span><span style="color: #000000"><br />
<span style="font-size: 18pt"><span style="font-size: 12pt">6C&nbsp;</span></span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">75</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">65</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">03</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">02</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">06</span><span style="color: #000000">&nbsp;3C&nbsp;</span><span style="color: #000000">69</span><span style="color: #000000">&nbsp;6E&nbsp;</span><span style="color: #000000">69</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">74</span></span></span><span style="color: #000000"><br />
<span style="font-size: 18pt"><span style="font-size: 12pt">3E&nbsp;</span></span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">03</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">28</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">29</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">56</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">04</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">43</span><span style="color: #000000">&nbsp;6F&nbsp;</span><span style="color: #000000">64</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">65</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span></span></span><span style="color: #000000"><br />
<span style="font-size: 18pt"><span style="font-size: 12pt">0F&nbsp;4C&nbsp;</span></span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">69</span><span style="color: #000000">&nbsp;6E&nbsp;</span><span style="color: #000000">65</span><span style="color: #000000">&nbsp;4E&nbsp;</span><span style="color: #000000">75</span><span style="color: #000000">&nbsp;6D&nbsp;</span><span style="color: #000000">62</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">65</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">72</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">54</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">61</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">62</span><span style="color: #000000">&nbsp;6C&nbsp;</span><span style="color: #000000">65</span></span></span><span style="color: #000000"><br />
</span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">02</span><span style="color: #000000">&nbsp;6D&nbsp;</span><span style="color: #000000">31</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">04</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">28</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">49</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">29</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">49</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">02</span></span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;6D<br />
</span><span style="color: #000000">32</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;0A&nbsp;</span><span style="color: #000000">53</span><span style="color: #000000">&nbsp;6F&nbsp;</span><span style="color: #000000">75</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">72</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">63</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">65</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">46</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">69</span><span style="color: #000000">&nbsp;6C&nbsp;</span><span style="color: #000000">65</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span></span></span><span style="color: #000000"><br />
</span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">07</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">54</span><span style="color: #000000">&nbsp;4A&nbsp;2E&nbsp;6A&nbsp;</span><span style="color: #000000">61</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">76</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">61</span><span style="color: #000000">&nbsp;0C&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">09</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;0A&nbsp;0C&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">05</span></span></span><span style="color: #000000"><br />
</span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">06</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">02</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">54</span><span style="color: #000000">&nbsp;4A&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">&nbsp;6A&nbsp;</span><span style="color: #000000">61</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">76</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">61</span></span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;2F&nbsp;6C<br />
</span><span style="color: #000000">61</span><span style="color: #000000">&nbsp;6E&nbsp;</span><span style="color: #000000">67</span><span style="color: #000000">&nbsp;2F&nbsp;4F&nbsp;</span><span style="color: #000000">62</span><span style="color: #000000">&nbsp;6A&nbsp;</span><span style="color: #000000">65</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">63</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">74</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">21</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">03</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">04</span></span></span><span style="color: #000000"><br />
</span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">12</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">05</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">06</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">07</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span></span></span><span style="color: #000000"><br />
</span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">02</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">08</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">03</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">09</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;0A&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span></span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;0B<br />
</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">26</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">02</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;0A&nbsp;2A&nbsp;B7&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span></span></span><span style="color: #000000"><br />
<span style="font-size: 18pt"><span style="font-size: 12pt">2A&nbsp;</span></span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">05</span><span style="color: #000000">&nbsp;B5&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">02</span><span style="color: #000000">&nbsp;B1&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;0C&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span></span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;0A<br />
</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">02</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">04</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">03</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;0D&nbsp;</span><span style="color: #000000">00</span></span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;0E<br />
</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;0B&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;1C&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">02</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">02</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">04</span></span></span><span style="color: #000000"><br />
<span style="font-size: 18pt"><span style="font-size: 12pt">1B&nbsp;</span></span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">04</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">60</span><span style="color: #000000">&nbsp;AC&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;0C&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">06</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span></span></span><span style="color: #000000"><br />
</span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">06</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">02</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;0F&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;0A&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;0B&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span></span></span><span style="color: #000000"><br />
</span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">19</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;B1&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span></span></span><span style="color: #000000"><br />
<span style="font-size: 18pt"><span style="font-size: 12pt">0C&nbsp;</span></span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">06</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;0B&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span></span></span><span style="color: #000000"><br />
</span><span style="font-size: 18pt"><span style="font-size: 12pt"><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">02</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">11</span></span></span></div>
<pre><span style="font-size: 18pt"><span style="font-size: 12pt">下面对照上面的格式结构一点点的解析。<br />
CA FE BA BE：头四个字节是魔数，表示这是java class文件。<br />
00 00：次版本为0。<br />
00 32：主版本0x32，表示jdk1.6编译的。Jdk1.5为0x31，jdk1.4为0x30。<br />
00 16：常量池的入口（entry）数量。包括自己本身（这里很奇怪），所以接下来有21项的常量池入口。<br />

我会在每个常量池项的前面表上索引。常量池的第一个字节表示类型。具体类型对照表如下：<br />
</span></span></pre>
<table border="1">
    <tbody>
        <tr>
            <th><strong><em><span style="font-size: 18pt"><span style="font-size: 12pt">Constant Type </span></span></em></strong></th>
            <th><strong><em><span style="font-size: 18pt"><span style="font-size: 12pt">Value </span></span></em></strong></th>
        </tr>
        <tr>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>CONSTANT_Class</code> </span></span></td>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>7</code> </span></span></td>
        </tr>
        <tr>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>CONSTANT_Fieldref</code> </span></span></td>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>9</code> </span></span></td>
        </tr>
        <tr>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>CONSTANT_Methodref</code> </span></span></td>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>10</code> </span></span></td>
        </tr>
        <tr>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>CONSTANT_InterfaceMethodref</code> </span></span></td>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>11</code> </span></span></td>
        </tr>
        <tr>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>CONSTANT_String</code> </span></span></td>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>8</code> </span></span></td>
        </tr>
        <tr>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>CONSTANT_Integer</code> </span></span></td>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>3</code> </span></span></td>
        </tr>
        <tr>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>CONSTANT_Float</code> </span></span></td>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>4</code> </span></span></td>
        </tr>
        <tr>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>CONSTANT_Long</code> </span></span></td>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>5</code> </span></span></td>
        </tr>
        <tr>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>CONSTANT_Double</code> </span></span></td>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>6</code> </span></span></td>
        </tr>
        <tr>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>CONSTANT_NameAndType</code> </span></span></td>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>12</code> </span></span></td>
        </tr>
        <tr>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt"><code>CONSTANT_Utf8</code> </span></span></td>
            <td><span style="font-size: 18pt"><span style="font-size: 12pt">1</span></span></td>
        </tr>
    </tbody>
</table>
<pre><span style="font-size: 18pt"><span style="font-size: 12pt">0A 00 04 00 12：<span style="color: red">【1】</span>，第一个字节为10，所以是CONSTANT_Methodref，它的结构如下：<br />
CONSTANT_Methodref_info {<br />
<br />
u1 tag;<br />
<br />
u2 class_index;<br />
<br />
u2 name_and_type_index;<br />
<br />
}<br />
<br />
所以，class_index=4，name_and_type_index=12,这两个代表常量池第4项和第12项。<br />
<br />
09 00 03 00 13：<span style="color: red">【2】</span> 这是一个CONSTANT_Fieldref，他的结构和上面的类似class_index=3，name_and_type_index=13<br />
<br />
07 00 14：<span style="color: red">【3】</span>这个是CONSTANT_Class，它的结构如下：<br />
<br />
</span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><code>CONSTANT_Class_info {<br />
<br />
</code>&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><code> u1 tag;<br />
<br />
</code>&nbsp;&nbsp;&nbsp;&nbsp;</span></span><code><span style="font-size: 18pt"><span style="font-size: 12pt"> u2 name_index;<br />
<br />
</span></span></code><a style="background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&file=anchor.gif); width: 20px; text-indent: 20px; background-repeat: no-repeat; height: 20px" name="1226"></a><span style="font-size: 18pt"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-size: 18pt"><span style="font-size: 12pt"><code>}<br />
</code><br />
name_index为20，指向的是一个utf8的字节码，即TJ，这个后面会看到。<br />
<br />
07 00 15: <span style="color: red">【4】 也是一个</span>CONSTANT_Class，name_index为21，即java/lang/Object<br />
<br />
01 00 02 66 31: <span style="color: red">【5】</span>CONSTANT_Utf8，结构如下：<br />
<br />
CONSTANT_Utf8_info {<br />
<br />
u1 tag;<br />
<br />
u2 length;<br />
<br />
u1 bytes[length];<br />
<br />
}<br />
<br />
最后两个字节代表字符串&#8220;f1&#8221;的utf-8字节码。<br />
<br />
01 00 01 49<span style="color: red">：【6】</span>字符串I<br />
<br />
01 00 0D 43 6F 6E 73 74 61 6E 74 56 61 6C 75 65 <span style="color: red">：【7】</span>字符串ConstantValue<br />
<br />
03 00 00 00 02<span style="color: red">：【8】</span>CONSTANT_Integer，整数值2 <br />
<br />
01 00 06 3C 69 6E 69 74 3E：【9】字符串&lt;init&gt;<br />
<br />
01 00 03 28 29 56：【10】字符串()V<br />
<br />
01 00 04 43 6F 64 65：【11】字符串code<br />
<br />
01 00 0F 4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65：【12】字符串LineNumberTable<br />
<br />
01 00 02 6D 31：【13】字符串m1<br />
<br />
01 00 04 28 49 29 49 ：【14】字符串(I)I，表示一个整数参数且返回整数的方法。<br />
<br />
01 00 02 6D 32 ：【15】字符串m2<br />
<br />
01 00 0A 53 6F 75 72 63 65 46 69 6C 65 ：【16】字符串SourceFile<br />
<br />
01 00 07 54 4A 2E 6A 61 76 61：【17】字符串TJ.java<br />
<br />
0C 00 09 00 0A：【18】CONSTANT_NameAndType，结构如下：<br />
<br />
CONSTANT_NameAndType_info {<br />
<br />
u1 tag;<br />
<br />
u2 name_index;<br />
<br />
u2 descriptor_index;<br />
<br />
}<br />
name_index=9，代表方法&lt;init&gt;，descriptor_index=10，()V，代表无参且返回void的方法。<br />
<br />
<br />
0C 00 05 00 06：【19】结构同上，name_index=5，即f1，descriptor_index=6，即整数。<br />
<br />
01 00 02 54 4A ：【20】字符串TJ<br />
<br />
01 00 10 6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74：【21】字符串java/lang/Object</span></span></pre>
<p><span style="font-size: 18pt"><span style="font-size: 12pt">到此，常量池结束。<br />
00 21：类的描述符为public。<br />
00 03 ：this class为常量池第三个，TJ，即这个类的名字为TJ<br />
00 04：super class为常量池第四个，java/lang/Object，即它的超类为java.lang.Object<br />
00 00：接口个数0。<br />
00 01：field数量1。<br />
00 12 00 05 00 06 00 01 00 07 00 00 00 02 00 08：field的结构如下<br />
field_info {<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 access_flags;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 name_index;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 descriptor_index;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 attributes_count;<br />
&nbsp;&nbsp;&nbsp; &nbsp;attribute_info attributes[attributes_count];<br />
&nbsp;&nbsp;&nbsp; }<br />
access_flags为00 12，代表ACC_PRIVATE+ ACC_FINAL<br />
<br />
name_index：常量池索引为5的入口，即f1，即类成员的名字为f1<br />
descriptor_index：I，代表integer。<br />
&nbsp;attributes_count：1个。<br />
attribute_info：<br />
attribute_info {<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 attribute_name_index;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u4 attribute_length;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u1 info[attribute_length];<br />
}<br />
</span></span></p>
<p><span style="font-size: 18pt"><span style="font-size: 12pt">attribute_name_index：7，即ConstantValue，结构如下<br />
ConstantValue_attribute {<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 attribute_name_index;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u4 attribute_length;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 constantvalue_index;<br />
&nbsp;&nbsp;&nbsp; }<br />
attribute_length：2<br />
constantvalue_index：2<br />
----------------------------------------下面开始方法</span></span></p>
<p><span style="font-size: 18pt"><span style="font-size: 12pt">00 03：3个方法。<br />
method_info {<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 access_flags;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 name_index;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 descriptor_index;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 attributes_count;<br />
&nbsp;&nbsp;&nbsp; &nbsp;attribute_info attributes[attributes_count];<br />
&nbsp;&nbsp;&nbsp; }<br />
--------------------------------------------第一个方法&lt;init&gt;，这个是编译器产生的生成实例的初始化方法。<br />
access_flags：public<br />
name_index：00 09，&lt;init&gt;<br />
descriptor_index：00 0A，()V表示无参数，返回void<br />
attributes_count :00 01,1个<br />
attribute_name_index ：00 0B ，code<br />
attribute_length：38个<br />
Code_attribute {<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 attribute_name_index;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u4 attribute_length;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 max_stack;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 max_locals;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u4 code_length;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u1 code[code_length];<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 exception_table_length;<br />
&nbsp;&nbsp;&nbsp; &nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;u2 start_pc;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;u2 end_pc;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;u2&nbsp; handler_pc;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;u2&nbsp; catch_type;<br />
&nbsp;&nbsp;&nbsp; &nbsp;}&nbsp;exception_table[exception_table_length];<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 attributes_count;<br />
&nbsp;&nbsp;&nbsp; &nbsp;attribute_info attributes[attributes_count];<br />
&nbsp;&nbsp;&nbsp; }<br />
max_stack: 00 02<br />
max_locals: 00 01<br />
code_length: 00 00 00 0A,10<br />
code: 2A B7 00 01 2A 05 B5 00 02 B1,指令<br />
exception table length：00 00<br />
attributes_count：1<br />
attribute_name_index：00 0C，LineNumberTable<br />
LineNumberTable_attribute {<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 attribute_name_index;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u4 attribute_length;<br />
&nbsp;&nbsp;&nbsp; &nbsp;u2 line_number_table_length;<br />
&nbsp;&nbsp;&nbsp; &nbsp;{&nbsp; u2 start_pc;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; u2 line_number;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;} line_number_table[line_number_table_length];<br />
&nbsp;&nbsp;&nbsp; }<br />
attribute_length：10<br />
line_number_table_length：2<br />
start_pc：00 00<br />
line_number：00 01<br />
tart_pc：00 04<br />
line_number：00 03<br />
到此第一个方法结束。<br />
----------------------------------------------------------------------第二个方法开始<br />
<span lang="EN-US" style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 11.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-font-kerning: 0pt">access_flags</span><span style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 11.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-font-kerning: 0pt">：<span lang="EN-US">00 01</span>，<span lang="EN-US">public</span></span><br />
name_index：00 0D，m1<br />
desc_index：00 0E，(I)I，有一个整数参数，返回一个整数。<br />
00 01：一个attr<br />
00 0B：code<br />
00 00 00 1C：attr_length:28<br />
Code_atrr:28个字节，不分析了和上面的方法相同。<br />
<br />
----------------------------------------------------------------------第三个方法<br />
00 02：private<br />
00 0F：m2<br />
00 0A: ()V，无参，返回void<br />
00 01：一个attr<br />
00 0B：code<br />
00 00 00 19：attr_length&nbsp; 25<br />
接下去的25个字节是Code_atrr，同样不分析了。<br />
------------------------------------------------------------------<br />
00 01：1个类的attr<br />
00 10：SourceFile<br />
00 00 00 02：len=2<br />
00 11：17，TJ.java<br />
</span></span></p> <img src ="http://www.blogjava.net/simonshen/aggbug/311566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simonshen/" target="_blank">simon.shen</a> 2010-02-22 19:30 <a href="http://www.blogjava.net/simonshen/archive/2010/02/22/311566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>URI和URL的区别</title><link>http://www.blogjava.net/simonshen/archive/2010/01/18/309998.html</link><dc:creator>simon.shen</dc:creator><author>simon.shen</author><pubDate>Mon, 18 Jan 2010 13:13:00 GMT</pubDate><guid>http://www.blogjava.net/simonshen/archive/2010/01/18/309998.html</guid><wfw:comment>http://www.blogjava.net/simonshen/comments/309998.html</wfw:comment><comments>http://www.blogjava.net/simonshen/archive/2010/01/18/309998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/simonshen/comments/commentRss/309998.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simonshen/services/trackbacks/309998.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 搞了那么多年的程序，一直也没去搞明白URI和URL的区别，总感觉这两个东东差不多。看了《OReilly HTTP The Definitive Guide》，总结一下：<br />
<br />
&nbsp;&nbsp; 从字面上理解，URI强调的是&#8220;资源&#8221;，而URL强调的是&#8220;定位&#8221;.URI<span id="articlecontent" class="wenzhang_con" onmouseup="NewHighlight(event)" style="width: 740px;">更为注重资源而不太注重位置,URI对于定位Internet上的资源是更为通用的架构</span>。<br />
<br />
&nbsp;&nbsp; URI有两种形式：一种是URL，另一种是URN。<br />
<br />
&nbsp;&nbsp; URL表示的是某台特定主机上的一个资源的具体路径，是一个精确的、固定的位置。<br />
<br />
&nbsp;&nbsp;&nbsp; URN（<span lang="EN-GB"><span class="docemphasis1">uniform resource name）</span></span>指的是某一块特定内容的唯一的名字，和资源所在的位置无关，是<span lang="EN-GB">location-independent的，允许资源从一个地方移到另一个地方。<br />
<br />
&nbsp;&nbsp;&nbsp; URN仍然是实验性的，还没有被广泛的采用。URN需要一个基础架构来支持解决资源定位问题。<br />
<br />
&nbsp;&nbsp;&nbsp; 所以说，现在URI基本上都是URL。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
</span>
<img src ="http://www.blogjava.net/simonshen/aggbug/309998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simonshen/" target="_blank">simon.shen</a> 2010-01-18 21:13 <a href="http://www.blogjava.net/simonshen/archive/2010/01/18/309998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>