<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>peterwillcn</title>
    <description></description>
    <link>http://peterwillcn.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>对Java程序多态性支持的改进</title>
        <author>peterwillcn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://peterwillcn.javaeye.com">peterwillcn</a>&nbsp;
          链接：<a href="http://peterwillcn.javaeye.com/blog/121331" style="color:red;">http://peterwillcn.javaeye.com/blog/121331</a>&nbsp;
          发表时间: 2007年09月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          多态性(polymorphism)是面向对象编程的属性，它允许多个方法使用同一个接口。Java从多个方面支持多态性，其中两个方面最为突出。第一个是每个方法(标记为 final的方法除外)都可以被子类重写; 第二个是设立interface关键字。下面将给出这两方面的详细介绍。<br />
<br />
　　由于超类中的方法可以在派生类中重写，因此创建类的层次结构非常简单。在类的层次结构中，每个子类都将它的超类特化(specialization)。大家知道，超类的一个引用可以引用它的任何一个子类，而且通过超类的引用调用某子类对象的一个方法时，会自动执行由该子类重写后的版本。因此，可以用超类来定义对象的形式并提供对象的默认实现，而子类根据这种默认实现进行修改，以更好地适应具体情况的要求。因此，在超类中定义的一个接口可以作为多个不同实现的基础。<br />
<br />
　　当然，Java进一步采取了&ldquo;一个接口，多个方法&rdquo;的概念。它定义了interface关键字，这样就可以将类的方法和类的实现完全分离。尽管接口是抽象的，但是仍然可以声明接口类型的引用。这个概念非常重要，因为它可以改进多态性的应用。只要某个类实现一个接口，并且该接口提供了某种功能，那么任何需要这种功能的代码都可以使用这个类的对象。例如，假设某个接口的名称为MyIF，考虑下面的方法：<br />
<br />
　　void myMeth(MyIF ob) {<br />
<br />
　　// ...<br />
<br />
　　}<br />
<br />
　　任何实现了MyIF接口的对象都可以传递给myMeth()方法。该对象的其他功能无需考虑。myMeth()方法可以对任何实现了MyIF接口的对象进行操作。
          <br/>
          <span style="color:red;">
            <a href="http://peterwillcn.javaeye.com/blog/121331#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 06 Sep 2007 16:33:06 +0800</pubDate>
        <link>http://peterwillcn.javaeye.com/blog/121331</link>
        <guid>http://peterwillcn.javaeye.com/blog/121331</guid>
      </item>
      <item>
        <title>Utf-8编码是如何工作的 </title>
        <author>peterwillcn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://peterwillcn.javaeye.com">peterwillcn</a>&nbsp;
          链接：<a href="http://peterwillcn.javaeye.com/blog/82954" style="color:red;">http://peterwillcn.javaeye.com/blog/82954</a>&nbsp;
          发表时间: 2007年05月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div style="MARGIN-TOP: 1px; MARGIN-LEFT: 15px">
<h2>&nbsp;</h2>
</div>
<div style="MARGIN-TOP: 10px; MARGIN-LEFT: 15px; OVERFLOW: auto">
<table width="100%">
    <tbody>
        <tr>
            <td>
            <p>Utf-8编码是如何工作的讲起。</p>
            <p>（JVM规范第4.4.7提了一些，O'Reilly出的Java I/O里讲的比较详细,我手里的是第一版,在第14章,Mutillingual Character Sets and Unicode)</p>
            <p>Java用的Unicode用两个字节表示一个charater,字母A用Hex表示是00 41， B是00 42，在一个纯英文的环境里面，直接存成Unicode的文件一半都是由零组成的，浪费资源。Utf-8的主要目的是对ASCII表格头128个字母优化，牺牲的是对中文字符的存储。</p>
            <p>头128个字节(0到127），可以用七个bit来表示，x6 x5 x4 x3 x2 x1 x0.第八个bit永远是0</p>
            <p>例子，A, 用Hex表示是00 41，去掉开头的零字节是Hex 41，转成二进制是 0100 0001。XP带的计算器可以在Hex和Binary <br />
            之间转换，自己试试。</p>
            <p>第128到2047个字节，要用10个bit来表示</p>
            <p>&nbsp;</p>
            <div class="code_title">代码</div>
            <div class="code_div">
            <div class="dp-highlighter">
            <div class="bar"></div>
            <ol class="dp-j">
                <li class="alt"><span><span class="number">0</span><span>&nbsp;&nbsp;</span><span class="number">0</span><span>&nbsp;&nbsp;</span><span class="number">0</span><span>&nbsp;&nbsp;</span><span class="number">0</span><span>&nbsp;&nbsp;</span><span class="number">0</span><span>&nbsp;x10&nbsp;x9&nbsp;x8 &nbsp;&nbsp;</span></span> </li>
                <li class=""><span></span><span class="number">7</span><span>&nbsp;x6&nbsp;x5&nbsp;x4&nbsp;x3&nbsp;x2&nbsp;x1&nbsp;x0 &nbsp;&nbsp;</span> </li>
            </ol>
            </div>
            </div>
            <script>render_code();</script>
            <p>&nbsp;</p>
            <p>Utf-8就把这些字节编成下面这样的两个byte</p>
            <p>&nbsp;</p>
            <div class="code_title">代码</div>
            <div class="code_div">
            <div class="dp-highlighter">
            <div class="bar"></div>
            <ol class="dp-j">
                <li class="alt"><span><span class="number">1</span><span>&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span><span class="number">0</span><span>&nbsp;x10&nbsp;x9&nbsp;x8&nbsp;x7&nbsp;x6 &nbsp;&nbsp;</span></span> </li>
                <li class=""><span></span><span class="number">1</span><span>&nbsp;</span><span class="number">0</span><span>&nbsp;x5&nbsp;x4&nbsp;x3&nbsp;x2&nbsp;x1&nbsp;x0 &nbsp;&nbsp;</span> </li>
            </ol>
            </div>
            </div>
            <script>render_code();</script>
            <p>&nbsp;</p>
            <p>第2048到65535个字节，要用16个bit来表示，Utf-8把这些字节编成下面这样的三个byte <br />
            </p>
            <div class="code_title">代码</div>
            <div class="code_div">
            <div class="dp-highlighter">
            <div class="bar"></div>
            <ol class="dp-j">
                <li class="alt"><span><span class="number">1</span><span>&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span><span class="number">0</span><span>&nbsp;&nbsp;&nbsp;x15&nbsp;x14&nbsp;x13&nbsp;x12 &nbsp;&nbsp;</span></span> </li>
                <li class=""><span></span><span class="number">1</span><span>&nbsp;</span><span class="number">0</span><span>&nbsp;x11&nbsp;x10&nbsp;x9&nbsp;x8&nbsp;x7&nbsp;x6 &nbsp;&nbsp;</span> </li>
                <li class="alt"><span></span><span class="number">1</span><span>&nbsp;</span><span class="number">0</span><span>&nbsp;x5&nbsp;x4&nbsp;&nbsp;&nbsp;x3&nbsp;x2&nbsp;x1&nbsp;x0 &nbsp;&nbsp;</span> </li>
            </ol>
            </div>
            </div>
            <script>render_code();</script>
            <p>&nbsp;</p>
            <p>读一个Utf-8编码的array，如果第一个byte的高位是1110，那么要连读下面两个以 10 开头的byte。如果一个byte的高位是110，那么要连读下面一个以 10 开头的byte。 <br />
            如果一个byte的高位是0，那么这个byte就是一个字符了。</p>
            <p>可以做个练习，中文字&quot;哈&quot;的Unicode编码是Hex 54 C8,转成Utf-8是什么？</p>
            <p>Hex 54 C8 转成十进制是21704，转成Utf-8后要用三个byte，找张纸，画三行，每行8个格子，第一行头四个格子填上1110，第二行头两个格子填上10，第三行头两个格子填上10。剩下的自己算算。然后和这个程序的结果比较一下。</p>
            <p>&nbsp;<font face="Arial">http://www.ingrid.org/java/i18n/utf-16/</font></p>
            <div class="code_title">代码</div>
            <div class="code_div">
            <div class="dp-highlighter">
            <div class="bar"></div>
            <ol class="dp-j">
                <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Test&nbsp;{ &nbsp;&nbsp;</span></span> </li>
                <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
                <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">char</span><span>&nbsp;c[]&nbsp;=&nbsp;{&nbsp;'\u54c8'&nbsp;}; &nbsp;&nbsp;</span> </li>
                <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;ha&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;String(c); &nbsp;&nbsp;</span> </li>
                <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">byte</span><span>&nbsp;b[]&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
                <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span> </li>
                <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;ha.getBytes(</span><span class="string">&quot;utf-8&quot;</span><span>);&nbsp; &nbsp;&nbsp;</span> </li>
                <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(Exception&nbsp;e)&nbsp;{&nbsp;System.exit(-</span><span class="number">1</span><span>);} &nbsp;&nbsp;</span> </li>
                <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
                <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>;&nbsp;i </span></li>
                <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(Integer.toHexString(b[i]).substring(</span><span class="number">6</span><span>)&nbsp;+&nbsp;</span><span class="string">&quot;&nbsp;&quot;</span><span>); &nbsp;&nbsp;</span> </li>
                <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
                <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(); &nbsp;&nbsp;</span> </li>
                <li class=""><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
                <li class="alt"><span>} &nbsp;&nbsp;</span> </li>
            </ol>
            </div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://peterwillcn.javaeye.com/blog/82954#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 May 2007 11:32:19 +0800</pubDate>
        <link>http://peterwillcn.javaeye.com/blog/82954</link>
        <guid>http://peterwillcn.javaeye.com/blog/82954</guid>
      </item>
  </channel>
</rss>