﻿<?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-编程小记-随笔分类-java</title><link>http://www.blogjava.net/roymoro/category/47784.html</link><description>scorpio 小蝎</description><language>zh-cn</language><lastBuildDate>Sun, 12 Aug 2012 20:07:00 GMT</lastBuildDate><pubDate>Sun, 12 Aug 2012 20:07:00 GMT</pubDate><ttl>60</ttl><item><title>基于开源ssh Ganymed 的ssh远程连接工具（共同讨论版）</title><link>http://www.blogjava.net/roymoro/archive/2012/08/12/385318.html</link><dc:creator>scorpio小蝎</dc:creator><author>scorpio小蝎</author><pubDate>Sun, 12 Aug 2012 10:34:00 GMT</pubDate><guid>http://www.blogjava.net/roymoro/archive/2012/08/12/385318.html</guid><wfw:comment>http://www.blogjava.net/roymoro/comments/385318.html</wfw:comment><comments>http://www.blogjava.net/roymoro/archive/2012/08/12/385318.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/roymoro/comments/commentRss/385318.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/roymoro/services/trackbacks/385318.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ssh 连接工具实现， ganymed-ssh2 阻塞&nbsp;&nbsp;<a href='http://www.blogjava.net/roymoro/archive/2012/08/12/385318.html'>阅读全文</a><img src ="http://www.blogjava.net/roymoro/aggbug/385318.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/roymoro/" target="_blank">scorpio小蝎</a> 2012-08-12 18:34 <a href="http://www.blogjava.net/roymoro/archive/2012/08/12/385318.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hadoop 集群配置过程及问题总结</title><link>http://www.blogjava.net/roymoro/archive/2012/01/02/367731.html</link><dc:creator>scorpio小蝎</dc:creator><author>scorpio小蝎</author><pubDate>Mon, 02 Jan 2012 09:41:00 GMT</pubDate><guid>http://www.blogjava.net/roymoro/archive/2012/01/02/367731.html</guid><wfw:comment>http://www.blogjava.net/roymoro/comments/367731.html</wfw:comment><comments>http://www.blogjava.net/roymoro/archive/2012/01/02/367731.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/roymoro/comments/commentRss/367731.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/roymoro/services/trackbacks/367731.html</trackback:ping><description><![CDATA[<p align="center"><span style="font-size: 22pt">转载请注明：
<table id="TableEdit" class="TableEdit" width="100%">
<tbody>
<tr>
<td><a id="Editor_Edit_hlEntryLink" title="view: Hadoop 实践入门" href="http://www.blogjava.net/roymoro/archive/2012/01/02/367731.html" target="_blank"><font color="#002c99">http://www.blogjava.net/roymoro/archive/2012/01/02/367731.html</font></a></td></tr></tbody></table>Hadoop </span><span style="font-family: 宋体; font-size: 22pt">实践入门<br /></span></p>
<p style="text-indent: -21.25pt; margin: 0cm 0cm 0pt 21.25pt"><span>1<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">实验环境搭建</span></p>
<p style="text-indent: -1cm; margin: 0cm 0cm 0pt 49.6pt"><span>1.1<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">准备工作</span></p>
<p style="margin: 0cm 0cm 0pt 63pt">ubuntu/redhat</p>
<p style="margin: 0cm 0cm 0pt 63pt">JDK/openjdk</p>
<p style="margin: 0cm 0cm 0pt 63pt">Hadoop</p>
<p style="margin: 0cm 0cm 0pt 63pt">Eclipse</p>
<p style="margin: 0cm 0cm 0pt 63pt">vmvare/virtureBox</p>
<p style="text-indent: -1cm; margin: 0cm 0cm 0pt 70.9pt"><span>1.1.1<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span>ubuntu <span style="font-family: 宋体">安装</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">下载最新版本</span>ubuntu 11.10<span style="font-family: 宋体">。</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">安装注意事项：</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: red">1</span></span><span style="font-family: 宋体; color: red">、关闭防火墙：</span><span style="color: red">shell</span><span style="font-family: 宋体; color: red">命令</span><span style="color: red"> sudo ufw disable</span><span style="font-family: 宋体; color: red">。不关闭有可能造成</span><span style="color: red">master slave </span><span style="font-family: 宋体; color: red">通信失败。出现连接超时，重连错误。可以通过指定</span><span style="color: red">iptables </span><span style="font-family: 宋体; color: red">实现端口过滤。</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</span><span style="font-family: 宋体; color: red">、安装</span><span style="color: red">ssh</span><span style="font-family: 宋体; color: red">（用于</span><span style="color: red">master</span><span style="font-family: 宋体; color: red">和</span><span style="color: red">slave</span><span style="font-family: 宋体; color: red">远程登录）：</span><span style="color: red">sudo apt-get install ssh</span></p>
<p style="text-indent: -1cm; margin: 0cm 0cm 0pt 70.9pt"><span>1.1.2<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">安装</span>jdk</p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</span><span style="font-family: 宋体">）解压</span>sun jdk<span style="font-family: 宋体">压缩包到指定的文件夹。</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sudo vi /etc/profile </span><span style="font-family: 宋体">或者</span> etc nano /etc/profile</p>
<ul style="margin-top: 0cm" type="square"><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">配置</span>/etc/profile<span style="font-family: 宋体">，加入：</span></li></ul>
<p style="text-indent: 35.9pt; margin: 0cm 0cm 0pt 54pt">export JAVA_HOME=/usr/java/jdk1.6.0_22</p>
<p style="text-indent: 35.9pt; margin: 0cm 0cm 0pt 54pt">export JRE_HOME=/usr/java/jdk1.6.0_22/jre</p>
<p style="text-indent: 35.9pt; margin: 0cm 0cm 0pt 54pt">export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH</p>
<p style="text-indent: 35.9pt; margin: 0cm 0cm 0pt 54pt">export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH</p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp; 2</span><span style="font-family: 宋体">）可以使用</span>openjdk sudo apt-get insall open-jdk-6 <span style="font-family: 宋体">或者通过软件中心。</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="font-family: 宋体">验证</span> shell<span style="font-family: 宋体">命令</span> <span style="font-family: 宋体">：</span>java -version <span style="font-family: 宋体">看是否与你的版本号一致</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">1.1.3 <span style="font-family: 宋体">安装</span>hadoop</p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="font-family: 宋体">在每台机器上相同用户的</span>home<span style="font-family: 宋体">根目录下解压，</span>hadoop-0.20.2.tar.gz <span style="font-family: 宋体">配置</span>conf/hadoop-env.sh<span style="font-family: 宋体">文件。</span> <span style="font-family: 宋体">增加</span> export JAVA_HOME =/usr/lib/jvm/java-6-openjdk <span style="font-family: 宋体">这里修改为你的</span>jdk<span style="font-family: 宋体">的安装位置。</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">&nbsp;</p>
<p style="text-indent: -1cm; margin: 0cm 0cm 0pt 49.6pt"><span>1.2<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">伪分布式搭建</span></p>
<p style="margin: 0cm 0cm 0pt 21.25pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hadoop</span><span style="font-family: 宋体">可以在单电商以为分布分布式模式运行，用不同的</span>java<span style="font-family: 宋体">进程模拟分布式中的中的各类节点</span>namenode<span style="font-family: 宋体">，</span>datanode<span style="font-family: 宋体">，</span>jobtracker<span style="font-family: 宋体">，</span>tasktracker<span style="font-family: 宋体">，</span>secondary namenode</p>
<p style="text-indent: -1cm; margin: 0cm 0cm 0pt 70.9pt"><span>1.2.1<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span>hadoop<span style="font-family: 宋体">配置</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hadoop 0.2.0.2</span><span style="font-family: 宋体">之后需要修改</span>core-site.xml\hdfs-site.xml <span style="font-family: 宋体">以及</span> mapred-site.xml</p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="font-family: 宋体">配置文件如下：</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">core-site.xml <span style="font-family: 宋体">配置核心内容，其中</span>fs.default.name <span style="font-family: 宋体">为</span>hdfs<span style="font-family: 宋体">地址；</span>tmp<span style="font-family: 宋体">为</span>hadoop.tnp.dir<span style="font-family: 宋体">为临时文件</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">&lt;configuration&gt;</p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &lt;property&gt;</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;fs.default.name&lt;/name&gt;</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;hdfs://localhost:49000&lt;/value&gt;</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">&lt;property&gt;</p>
<p style="margin: 0cm 0cm 0pt 42.55pt">&lt;name&gt;hadoop.tmp.dir&lt;/name&gt;</p>
<p style="margin: 0cm 0cm 0pt 42.55pt">&nbsp;&lt;value&gt;/home/hadooper/hadooptmp&lt;/value&gt;</p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">&lt;/configuration&gt;</p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="font-family: 宋体; color: red">注意事项：一定要指定，相同的用户名，并且</span><span style="color: red">tmp</span><span style="font-family: 宋体; color: red">一定要设置，否则会出现权限问题。导致</span><span style="color: red">hadoop</span><span style="font-family: 宋体; color: red">启动失败。也可以通过</span><span style="color: red">chmod </span><span style="font-family: 宋体; color: red">命令来改变默认</span><span style="color: red">tmp</span><span style="font-family: 宋体; color: red">的权限。默认</span><span style="color: red">tmp</span><span style="font-family: 宋体; color: red">路径为：</span><span style="color: red">/usr/tmp</span><span style="font-family: 宋体; color: red">。推荐第一种方式。</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 42.55pt">hdfs-site.xml <span style="font-family: 宋体">设置</span> hdfs <span style="font-family: 宋体">参数</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">&lt;configuration&gt;</p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &lt;property&gt;</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;dfs.replication&lt;/name&gt;</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;1&lt;/value&gt;</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">&lt;/configuration&gt;</p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="font-family: 宋体">这里</span>dfs.replication<span style="font-family: 宋体">指块的副本数。副本数具体策略可参加见</span>hadoop<span style="font-family: 宋体">官方指南。</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 42.55pt">mapred-site.xml <span style="font-family: 宋体">文件的修改</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">&lt;configuration&gt;</p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &lt;property&gt;</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;mapred.job.tracker&lt;/name&gt;</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;localhost:49001&lt;/value&gt;</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">&lt;/configuration&gt;</p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="font-family: 宋体">这个设置了</span>jobtracker<span style="font-family: 宋体">的端口。</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="font-family: 宋体; color: red">注意端口的选择一定要恰当，尤其是集群的配置。默认的</span><span style="color: red">9000</span><span style="font-family: 宋体; color: red">和</span><span style="color: red">9001</span><span style="font-family: 宋体; color: red">很容易被</span><span style="color: red">ubuntu</span><span style="font-family: 宋体; color: red">中其他进程占用，导致</span><span style="color: red">datanode</span><span style="font-family: 宋体; color: red">失效，因此选择没有占用的</span><span style="color: red">49000 </span><span style="font-family: 宋体; color: red">和</span><span style="color: red">49001</span><span style="font-family: 宋体; color: red">。笔者，曾经就曾困扰与此。集群配置中将再次强调。</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">&nbsp;</p>
<p style="text-indent: -1cm; margin: 0cm 0cm 0pt 70.9pt"><span>1.2.2<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span>ssh<span style="font-family: 宋体">设置</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="font-family: 宋体">因为</span>master<span style="font-family: 宋体">需要访问</span>datanode<span style="font-family: 宋体">因此需要免密码</span>ssh</p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="font-family: 宋体">设置方法：</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">ssh-keygen -t rsa<span style="font-family: 宋体">然后一直按回车</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="font-family: 宋体">完成后，在</span>home<span style="font-family: 宋体">跟目录下会产生隐藏文件夹</span>.ssh</p>
<p style="margin: 0cm 0cm 0pt 42.55pt">cd .ssh</p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="font-family: 宋体">之后</span>ls <span style="font-family: 宋体">查看文件</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">cp id_rsa.pub authorized_keys</p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="font-family: 宋体">测试：</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">ssh localhost<span style="font-family: 宋体">发现链接成功，并且无需密码。</span></p>
<p style="text-indent: -1cm; margin: 0cm 0cm 0pt 70.9pt"><span>1.2.3<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span>hadoop<span style="font-family: 宋体">运行</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="font-family: 宋体">在</span>hadoop<span style="font-family: 宋体">安装目录下：</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="font-family: 宋体">首先</span> bin/hadoop namenode -format<span style="font-family: 宋体">格式化文件系统</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="font-family: 宋体">然后</span> bin/start-all.sh <span style="font-family: 宋体">来启动守护进程。</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt"><span style="font-family: 宋体">利用</span>java <span style="font-family: 宋体">命令</span> jps <span style="font-family: 宋体">查看进程。或者通过</span> <span style="font-family: 宋体">网址：</span>localhost:50070 localhost:50030<span style="font-family: 宋体">来查看是否成功。</span></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">&nbsp;</p>
<p style="text-indent: -1cm; margin: 0cm 0cm 0pt 49.6pt"><span>1.3<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">集群搭建</span></p>
<p style="margin: 0cm 0cm 0pt 21.25pt"><span style="font-family: 宋体">如上所述安装</span>ubuntu <span style="font-family: 宋体">并且拥有相同用户。安装</span>jdk <span style="font-family: 宋体">，安装</span>hadoop<span style="font-family: 宋体">。配置</span>jdk<span style="font-family: 宋体">路径等。</span></p>
<p style="text-indent: -1cm; margin: 0cm 0cm 0pt 70.9pt"><span>1.3.1<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">主机信息：</span></p>
<div align="center">
<table style="width: 305.25pt" border="0" cellspacing="0" cellpadding="0" width="407">
<tbody>
<tr style="height: 34.5pt">
<td style="border-bottom: black 1pt solid; border-left: black 1.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 0cm; width: 63pt; padding-right: 0cm; height: 34.5pt; border-top: black 1.5pt solid; border-right: black 1pt solid; padding-top: 0cm" valign="top" width="84">
<p style="margin: 0cm 0cm 0pt 21.25pt"><span style="font-family: 宋体">机器名</span></p></td>
<td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 0cm; width: 74.25pt; padding-right: 0cm; height: 34.5pt; border-top: black 1.5pt solid; border-right: black 1pt solid; padding-top: 0cm" valign="top" width="99">
<p style="margin: 0cm 0cm 0pt 21.25pt">IP<span style="font-family: 宋体">地址</span></p></td>
<td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 0cm; width: 169.5pt; padding-right: 0cm; height: 34.5pt; border-top: black 1.5pt solid; border-right: black 1.5pt solid; padding-top: 0cm" valign="top" width="226">
<p style="margin: 0cm 0cm 0pt 21.25pt"><span style="font-family: 宋体">作用</span></p></td></tr>
<tr style="height: 33.75pt">
<td style="border-bottom: black 1pt solid; border-left: black 1.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 0cm; width: 63pt; padding-right: 0cm; height: 33.75pt; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0cm" valign="top" width="84">
<p style="margin: 0cm 0cm 0pt 21.25pt">Node1</p></td>
<td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 0cm; width: 74.25pt; padding-right: 0cm; height: 33.75pt; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0cm" valign="top" width="99">
<p style="margin: 0cm 0cm 0pt 21.25pt">192.168.234.128</p></td>
<td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 0cm; width: 169.5pt; padding-right: 0cm; height: 33.75pt; border-top: black 1pt solid; border-right: black 1.5pt solid; padding-top: 0cm" valign="top" width="226">
<p style="margin: 0cm 0cm 0pt 21.25pt">NameNode<span style="font-family: 宋体">、</span>JobTracker</p></td></tr>
<tr style="height: 35.25pt">
<td style="border-bottom: black 1pt solid; border-left: black 1.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 0cm; width: 63pt; padding-right: 0cm; height: 35.25pt; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0cm" valign="top" width="84">
<p style="margin: 0cm 0cm 0pt 21.25pt">Node2</p></td>
<td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 0cm; width: 74.25pt; padding-right: 0cm; height: 35.25pt; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0cm" valign="top" width="99">
<p style="margin: 0cm 0cm 0pt 21.25pt">192.168.234.129</p></td>
<td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 0cm; width: 169.5pt; padding-right: 0cm; height: 35.25pt; border-top: black 1pt solid; border-right: black 1.5pt solid; padding-top: 0cm" valign="top" width="226">
<p style="margin: 0cm 0cm 0pt 21.25pt">DataNode<span style="font-family: 宋体">、</span>TaskTracker</p></td></tr>
<tr style="height: 35.25pt">
<td style="border-bottom: black 1.5pt solid; border-left: black 1.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 0cm; width: 63pt; padding-right: 0cm; height: 35.25pt; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0cm" valign="top" width="84">
<p style="margin: 0cm 0cm 0pt 21.25pt">Node3</p></td>
<td style="border-bottom: black 1.5pt solid; border-left: black 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 0cm; width: 74.25pt; padding-right: 0cm; height: 35.25pt; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0cm" valign="top" width="99">
<p style="margin: 0cm 0cm 0pt 21.25pt">192.168.234.130</p></td>
<td style="border-bottom: black 1.5pt solid; border-left: black 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 0cm; width: 169.5pt; padding-right: 0cm; height: 35.25pt; border-top: black 1pt solid; border-right: black 1.5pt solid; padding-top: 0cm" valign="top" width="226">
<p style="margin: 0cm 0cm 0pt 21.25pt">DataNode<span style="font-family: 宋体">、</span>TaskTracker</p></td></tr></tbody></table></div>
<p style="margin: 0cm 0cm 0pt 21.25pt"><span style="font-family: 宋体">修改每台机器上的</span>hosts</p>
<p style="margin: 0cm 0cm 0pt 21.25pt">sudo vi /etc/hosts</p>
<p style="margin: 0cm 0cm 0pt 21.25pt">192.168.1.31<span>&nbsp;&nbsp; node1</span></p>
<p style="margin: 0cm 0cm 0pt 21.25pt">192.168.1.32&nbsp;&nbsp;node2</p>
<p style="margin: 0cm 0cm 0pt 21.25pt">192.168.1.33 <span>&nbsp;&nbsp;node3</span></p>
<p style="text-indent: -1cm; margin: 0cm 0cm 0pt 70.9pt"><span>1.3.2<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span>ssh <span style="font-family: 宋体">设置</span></p>
<p style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt"><span style="font-family: 'Comic Sans MS'">&nbsp;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>&nbsp;<span style="font-family: 宋体">把</span>NameNode <span style="font-family: 宋体">上的</span>id_dsa.pub <span style="font-family: 宋体">文件追加到</span>DataNode <span style="font-family: 宋体">的</span>authorized_keys <span style="font-family: 宋体">内：</span></p>
<p style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt"><span style="font-family: 'Comic Sans MS'">&nbsp;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>&nbsp;a. <span style="font-family: 宋体">拷贝</span>NameNode <span style="font-family: 宋体">的</span>id_dsa.pub <span style="font-family: 宋体">文件：</span></p>
<p style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt"><span style="font-family: 'Comic Sans MS'">&nbsp;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>&nbsp;$ scp id_dsa.pub hadooper@node2:/home/hadoop/</p>
<p style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt"><span style="font-family: 'Comic Sans MS'">&nbsp;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>&nbsp;b. <span style="font-family: 宋体">登录</span>node2<span style="font-family: 宋体">，执行</span></p>
<p style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt"><span style="font-family: 'Comic Sans MS'">&nbsp;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ cat id_dsa.pub &gt;&gt; .ssh/authorized_keys</span></p>
<p style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt"><span style="font-family: 'Comic Sans MS'">&nbsp;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">在所有</span>datanode<span style="font-family: 宋体">上执行相同的操作。</span></p>
<p style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt"><span style="font-family: 'Comic Sans MS'">&nbsp;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">验证：从</span>node1 </p>
<p style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt"><span style="font-family: 'Comic Sans MS'">&nbsp;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>ssh node2</p>
<p style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt"><span style="font-family: 'Comic Sans MS'">&nbsp;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>exit</p>
<p style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt"><span style="font-family: 'Comic Sans MS'">&nbsp;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>ssh node3</p>
<p style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt"><span style="font-family: 'Comic Sans MS'">&nbsp;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>exit</p>
<p style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt"><span style="font-family: 'Comic Sans MS'">&nbsp;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">如果全部免密码登录则成功</span></p>
<p style="text-indent: -1cm; margin: 0cm 0cm 0pt 70.9pt"><span>1.3.3<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">配置</span>hadoop</p>
<p style="margin: 0cm 0cm 0pt 44.95pt"><span style="font-family: 宋体">配置</span>conf/masters <span style="font-family: 宋体">和</span>conf/slaves <span style="font-family: 宋体">文件</span></p>
<p style="margin: 0cm 0cm 0pt 44.95pt">Masters</p>
<p style="margin: 0cm 0cm 0pt 44.95pt">node1</p>
<p style="margin: 0cm 0cm 0pt 44.95pt">Slaves</p>
<p style="margin: 0cm 0cm 0pt 44.95pt">node2</p>
<p style="margin: 0cm 0cm 0pt 44.95pt">node3</p>
<p style="margin: 0cm 0cm 0pt 44.95pt">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 44.95pt">core-site mapred-site <span style="font-family: 宋体">和</span>hdfs-site <span style="font-family: 宋体">和伪分布配置基本相同</span>.<span style="font-family: 宋体">只是对应地址，</span>localhost<span style="font-family: 宋体">换成了</span>namenode<span style="font-family: 宋体">的名称，</span>node1<span style="font-family: 宋体">。</span></p>
<p style="text-indent: -18pt; margin: 0cm 0cm 0pt 62.95pt"><span style="font-family: Wingdings">q<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">配置</span>conf/core-site.xml</p>
<p style="margin: 0cm 0cm 0pt 44.95pt">&lt;configuration&gt;</p>
<p style="margin: 0cm 0cm 0pt 44.95pt">&nbsp;&lt;property&gt;</p>
<p style="margin: 0cm 0cm 0pt 44.95pt"><span>&nbsp;&nbsp;&nbsp; &lt;name&gt;fs.default.name&lt;/name&gt;</span></p>
<p style="margin: 0cm 0cm 0pt 44.95pt"><span>&nbsp;&nbsp;&nbsp; &lt;value&gt;hdfs://<span style="color: red">node1</span>:49000&lt;/value&gt;</span></p>
<p style="margin: 0cm 0cm 0pt 44.95pt">&nbsp;&lt;/property&gt;</p>
<p style="margin: 0cm 0cm 0pt 44.95pt">&lt;/configuration&gt;</p>
<p style="margin: 0cm 0cm 0pt 44.95pt"><span style="font-family: 宋体; color: red">仍然注意端口，在运行时如果</span><span style="color: red">datanode</span><span style="font-family: 宋体; color: red">连接不上</span><span style="color: red">namenode</span><span style="font-family: 宋体; color: red">，有可能是由于端口问题。换一个端口</span></p>
<p style="text-indent: -1cm; margin: 0cm 0cm 0pt 70.9pt"><span>1.3.4<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">运行</span>hadoop</p>
<p style="margin: 0cm 0cm 0pt 44.95pt"><span style="font-family: 宋体">首先格式化文件系统：</span>$ bin/hadoop namenode &#8211;format</p>
<p style="margin: 0cm 0cm 0pt 44.95pt"><span style="font-family: 宋体">启动</span>Hadoop<span style="font-family: 宋体">集群：</span></p>
<p style="margin: 0cm 0cm 0pt 44.95pt">$ bin/start-all.sh</p>
<p style="margin: 0cm 0cm 0pt 44.95pt"><span style="font-family: 宋体">停止</span>Hadoop<span style="font-family: 宋体">集群：</span></p>
<p style="margin: 0cm 0cm 0pt 44.95pt">$ bin/stop-all.sh</p>
<p style="margin: 0cm 0cm 0pt 44.95pt"><span style="font-family: 宋体">查看集群状态：</span>$ bin/hadoop dfsadmin -report</p>
<p style="margin: 0cm 0cm 0pt 44.95pt">Hadoop <span style="font-family: 宋体">的</span>web <span style="font-family: 宋体">方式查看</span></p>
<p style="margin: 0cm 0cm 0pt 44.95pt">JobTracker<span style="font-family: 宋体">：</span><a href="http://cnode031:50030/" target="_parent">http://node1:50030</a></p>
<p style="margin: 0cm 0cm 0pt 44.95pt">NameNode<span style="font-family: 宋体">：</span><a href="http://cnode031:50070/" target="_parent">http://node1:50070</a></p>
<p style="margin: 0cm 0cm 0pt 42.55pt">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 21.25pt">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 21.25pt"></p>
<p style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt"><span style="font-family: 'Comic Sans MS'">&nbsp;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 21.25pt">&nbsp;</p>
<p style="text-indent: -1cm; margin: 0cm 0cm 0pt 49.6pt"><span>1.4<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>eclipse <span style="font-family: 宋体">插件安装</span></p>
<p style="margin: 0cm 0cm 0pt 21.25pt"><span style="font-family: 宋体">安装</span>eclipse <span style="font-family: 宋体">只需要把</span>hadoop/contrib/eclipse-plus <span style="font-family: 宋体">下的包考到</span>eclipse<span style="font-family: 宋体">的</span>plus<span style="font-family: 宋体">里即可。</span>(<span style="font-family: 宋体">该方法有问题，因为该插件只能部分支持</span>eclipse3.6<span style="font-family: 宋体">，如果需要全部支持安装</span>eclipse3.4<span style="font-family: 宋体">以下版本，或修改该插件较复杂</span>)<span style="font-family: 宋体">。如果有谁修改了适合</span>3.6<span style="font-family: 宋体">以上的插件</span>roymoro@gmail.com.<span style="font-family: 宋体">帮我发一份。</span></p>
<p style="margin: 0cm 0cm 0pt 21.25pt"></p>
<p>&nbsp;</p> <img src ="http://www.blogjava.net/roymoro/aggbug/367731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/roymoro/" target="_blank">scorpio小蝎</a> 2012-01-02 17:41 <a href="http://www.blogjava.net/roymoro/archive/2012/01/02/367731.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 实现程序运行状态监控 之我的思路（守护进程） </title><link>http://www.blogjava.net/roymoro/archive/2011/05/09/349833.html</link><dc:creator>scorpio小蝎</dc:creator><author>scorpio小蝎</author><pubDate>Mon, 09 May 2011 05:42:00 GMT</pubDate><guid>http://www.blogjava.net/roymoro/archive/2011/05/09/349833.html</guid><wfw:comment>http://www.blogjava.net/roymoro/comments/349833.html</wfw:comment><comments>http://www.blogjava.net/roymoro/archive/2011/05/09/349833.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/roymoro/comments/commentRss/349833.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/roymoro/services/trackbacks/349833.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;Java 实现程序运行监控状态之我的思路（守护进程）问题：写出这个工具的意义在于我运行一个需要长时间执行的程序，如单线程爬虫。在网络出现中断的或网站丢包情况下，程序会抛出socketexception 和sockettimeoutexception。程序会中断。（再此只是提出一种假设）解决方案：Java 并不能像C#一样对windows的进程进行监控（资料说这是跨平台原...&nbsp;&nbsp;<a href='http://www.blogjava.net/roymoro/archive/2011/05/09/349833.html'>阅读全文</a><img src ="http://www.blogjava.net/roymoro/aggbug/349833.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/roymoro/" target="_blank">scorpio小蝎</a> 2011-05-09 13:42 <a href="http://www.blogjava.net/roymoro/archive/2011/05/09/349833.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA 正则表达式的溢出问题 及不完全解决方案。 （感谢Lancelot  在评论中给出的方法）</title><link>http://www.blogjava.net/roymoro/archive/2011/04/28/349163.html</link><dc:creator>scorpio小蝎</dc:creator><author>scorpio小蝎</author><pubDate>Thu, 28 Apr 2011 02:55:00 GMT</pubDate><guid>http://www.blogjava.net/roymoro/archive/2011/04/28/349163.html</guid><wfw:comment>http://www.blogjava.net/roymoro/comments/349163.html</wfw:comment><comments>http://www.blogjava.net/roymoro/archive/2011/04/28/349163.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.blogjava.net/roymoro/comments/commentRss/349163.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/roymoro/services/trackbacks/349163.html</trackback:ping><description><![CDATA[<span style="widows: 2; text-transform: none; text-indent: 0px; letter-spacing: normal; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 23px; font-family: monospace; white-space: pre; font-size: 12px" class="Apple-style-span"><span style="line-height: 18px; color: rgb(0,0,0)">Exception in thread </span><span style="line-height: 18px; color: rgb(0,0,0)">"</span><span style="line-height: 18px; color: rgb(0,0,0)">main</span><span style="line-height: 18px; color: rgb(0,0,0)">"</span><span style="line-height: 18px; color: rgb(0,0,0)"> java.lang.StackOverflowError <br />
at java.lang.Character.codePointAt(Character.java:</span><span style="line-height: 18px; color: rgb(0,0,0)">2335</span><span style="line-height: 18px; color: rgb(0,0,0)">) <br />
at java.util.regex.Pattern$CharProperty.match(Pattern.java:</span><span style="line-height: 18px; color: rgb(0,0,0)">3344</span><span style="line-height: 18px; color: rgb(0,0,0)">) <br />
at java.util.regex.Pattern$Branch.match(Pattern.java:</span><span style="line-height: 18px; color: rgb(0,0,0)">4114</span><span style="line-height: 18px; color: rgb(0,0,0)">) <br />
at java.util.regex.Pattern$GroupHead.match(Pattern.java:</span><span style="line-height: 18px; color: rgb(0,0,0)">4168</span><span style="line-height: 18px; color: rgb(0,0,0)">) <br />
at java.util.regex.Pattern$LazyLoop.match(Pattern.java:</span><span style="line-height: 18px; color: rgb(0,0,0)">4357</span><span style="line-height: 18px; color: rgb(0,0,0)">) <br />
at java.util.regex.Pattern$GroupTail.match(Pattern.java:</span><span style="line-height: 18px; color: rgb(0,0,0)">4227</span><span style="line-height: 18px; color: rgb(0,0,0)">)<br />
&nbsp;at java.util.regex.Pattern$BranchConn.match(Pattern.java:</span><span style="line-height: 18px; color: rgb(0,0,0)">4078</span><span style="line-height: 18px; color: rgb(0,0,0)">)<br />
类似于以上异常，源自于正则匹配需要不断地递归字符串。当字符串递归超过800+，具体数字忘记了，就会出现堆栈溢出。<br />
&nbsp;我在实际应用的场景是，匹配一个网页寻求《div》《/div》 之间的内容。当div 之间字符达到了950的时候这时候产生了 类似以上的错误。<br />
经过<font face="Courier New"><a href="http://topic.csdn.net/u/20110303/10/6a7dce52-481b-430a-b442-98099e9a01c9.html">分析，和网友</a>遇到的类似问题贴<font face="Courier New">http://topic.csdn.net/u/20110303/10/6a7dce52-481b-430a-b442-98099e9a01c9.html</font><br />
得出以下不完全正确的解析方案<br />
<br />
在正则表达式匹配时对字符个数进行限制 如：<font face="Courier New">"&lt;div&gt;(.*?|\n*|\r*)*&lt;/div&gt;</font> 变成了 <font face="Courier New">&lt;div&gt;(.*?|\n*|\r*){0,700}&lt;/div&gt;</font> 这样达到了限制字符的作用。<br />
但是当解析到此条目时速度仍然非常慢。<br />
<br />
如果您有更好的解决方案请您联系我。<br />
<br />
欢迎转帖。转帖请标注出处，以更好的和大家探讨解决问题。</font></span></span></span> <br />
——————————————————————————————————————<br />
Lancelot 提出的正则&lt;div[^&gt;]*&gt;([\s\S]*?)&lt;/div&gt;&nbsp; 或&lt;div&gt;([\s\S]*?)&lt;/div&gt; <br />
由于没有分支条件，因此大大减少了正则匹配过程的回溯深度。因此成功解决了这一问题。<br />
目前能和大家分享的是，如果遇到类似问题还需简化正则，减少分支条件等。<br />
如果您有更好的方案欢迎您提出宝贵的建议。
<img src ="http://www.blogjava.net/roymoro/aggbug/349163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/roymoro/" target="_blank">scorpio小蝎</a> 2011-04-28 10:55 <a href="http://www.blogjava.net/roymoro/archive/2011/04/28/349163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 枚举学习--从小程序中学习</title><link>http://www.blogjava.net/roymoro/archive/2011/03/02/345523.html</link><dc:creator>scorpio小蝎</dc:creator><author>scorpio小蝎</author><pubDate>Wed, 02 Mar 2011 12:32:00 GMT</pubDate><guid>http://www.blogjava.net/roymoro/archive/2011/03/02/345523.html</guid><wfw:comment>http://www.blogjava.net/roymoro/comments/345523.html</wfw:comment><comments>http://www.blogjava.net/roymoro/archive/2011/03/02/345523.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/roymoro/comments/commentRss/345523.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/roymoro/services/trackbacks/345523.html</trackback:ping><description><![CDATA[&nbsp;
<p>Java <span style="font-family: 宋体">枚举类型</span> <span style="font-family: 宋体">解析</span></p>
<p><span style="font-family: 宋体">简介：</span>java<span style="font-family: 宋体">中枚举是一个类</span></p>
<p><span style="font-family: 宋体">用之前我觉得还是要知道应该何时使用：</span></p>
<p><span style="font-family: 宋体">一条普遍的规律是，任何使用常量的地方，例如目前使用的</span>switch <span style="font-family: 宋体">代码切换的地方。</span> <span style="font-family: 宋体">如果只是单独一个值（例如，</span> max <span style="font-family: 宋体">和</span>min<span style="font-family: 宋体">）这类只要把任务留给常量就行。但是如果定义了一组值，而这些值中的任何一个都可以用于特定的数据类型，那么将枚举用在这个地方最适合不过。</span></p>
<p>Java <span style="font-family: 宋体">代码</span></p>
<ol type="1">
    <li style="text-align: left; tab-stops: list 36.0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt">public&nbsp;enum&nbsp;Color{ &nbsp;&nbsp;</span></li>
    <li style="text-align: left; tab-stops: list 36.0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;RED,BLUE,BLACK,YELLOW,GREEN &nbsp;&nbsp;</span></li>
    <li style="text-align: left; tab-stops: list 36.0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt">}&nbsp;&nbsp;</span></li>
</ol>
<p><span style="font-family: 宋体">从这里看到</span>Enum <span style="font-family: 宋体">是一个类。</span> <span style="font-family: 宋体">而这些类都是类库中</span>enum<span style="font-family: 宋体">的子类。</span></p>
<p>Java<span style="font-family: 宋体">中已有的</span>enum <span style="font-family: 宋体">是</span>Color <span style="font-family: 宋体">枚举类。</span>Color c=Color.RED;<span style="font-family: 宋体">这些都是</span>public static final <span style="font-family: 宋体">的</span></p>
<p><span style="font-family: 宋体">既然枚举类是</span>class<span style="font-family: 宋体">，当然在枚举类中有构造器，方法和数据域。但是它是特殊的构造函数。（不深入研究，只应用）</span></p>
<p><span style="font-family: 宋体; color: red">枚举中常见的方法</span><span style="font-family: 宋体; color: red">：</span></p>
<p style="text-align: left" class="MsoNormal" align="left">Ordinal<span style="font-family: 宋体">（）；</span><span style="font-family: 宋体; font-size: 12pt">返回枚举值在枚举类种的顺序。这个顺序根据枚举值声明的顺序而定。<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Color.RED.ordinal();&nbsp; //返回结果：0<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Color.BLUE.ordinal();&nbsp; //返回结果：1<br />
compareTo()方法: Enum实现了java.lang.Comparable接口，因此可以比较象与指定对象的顺序。Enum中的compareTo返回的是两个枚举值的顺序之差。当然，前提是两个枚举值必须属于同一个枚举类，否则会抛出ClassCastException()异常。(具体可见源代码)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Color.RED.compareTo(Color.BLUE);&nbsp; //返回结果 -1<br />
values()方法： 静态方法，返回一个包含全部枚举值的数组。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Color[] colors=Color.values();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(Color c:colors){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(c+","); <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; }//返回结果：RED,BLUE,BLACK YELLOW,GREEN,<br />
toString()方法： 返回枚举常量的名称。<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Color c=Color.RED;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(c);//返回结果: RED<br />
valueOf()方法： 这个方法和toString方法是相对应的，返回带指定名称的指定枚举类型的枚举常量。<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Color.valueOf("BLUE");&nbsp;&nbsp; //返回结果: Color.BLUE<br />
equals()方法： 比较两个枚举类对象的引用。</span></p>
<p><span style="font-family: 宋体; color: red">枚举类的具体应用</span></p>
<p><span style="font-family: 宋体; font-size: 12pt">枚举类可以在switch语句中使用</span></p>
<ol type="1">
    <li style="text-align: left; tab-stops: list 36.0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt">Color&nbsp;color=Color.RED; &nbsp;&nbsp;</span></li>
    <li style="text-align: left; tab-stops: list 36.0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt">switch(color){ &nbsp;&nbsp;</span></li>
    <li style="text-align: left; tab-stops: list 36.0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;RED:&nbsp;System.out.println("it's&nbsp;red");break; &nbsp;&nbsp;</span></li>
    <li style="text-align: left; tab-stops: list 36.0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;BLUE:&nbsp;System.out.println("it's&nbsp;blue");break; &nbsp;&nbsp;</span></li>
    <li style="text-align: left; tab-stops: list 36.0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;BLACK:&nbsp;System.out.println("it's&nbsp;blue");break; &nbsp;&nbsp;</span></li>
    <li style="text-align: left; tab-stops: list 36.0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt">}&nbsp;&nbsp;</span></li>
</ol>
<p>-----------------------java<span style="font-family: 宋体">枚举学习心得从小程序出发</span> ---------------------------</p>
<p><span style="font-family: 宋体">基本的</span>enum<span style="font-family: 宋体">特性</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">public</span></strong><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">class</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> Test {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Courier New'; color: #3f5fbf; font-size: 10pt">/**</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: #3f5fbf; font-size: 10pt">&nbsp;&nbsp;&nbsp; &nbsp;* </span><strong><span style="font-family: 'Courier New'; color: #7f9fbf; font-size: 10pt">@param</span></strong><span style="font-family: 'Courier New'; color: #3f5fbf; font-size: 10pt"> args</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: #3f5fbf; font-size: 10pt">&nbsp;&nbsp;&nbsp; &nbsp;*/</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">enum</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> Shrubbery {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">GROUND</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">, </span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">GRAWLING</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">, </span><em><span style="font-family: 'Courier New'; background: silver; color: #0000c0; font-size: 10pt">HANGING</span></em></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: #3f5fbf; font-size: 10pt">/**</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: #3f5fbf; font-size: 10pt">&nbsp;* </span><span style="font-family: 宋体; color: #3f5fbf; font-size: 10pt">枚举类的基础知识</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: #3f5fbf; font-size: 10pt">&nbsp;*/</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">public</span></strong><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">static</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;</span><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">void</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> bKOfEmun(){</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; </span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">for</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> (Shrubbery s : Shrubbery.<em>values</em>()) {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">// ordinal() </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">返回枚举中的位置</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">如</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">GROUND </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">在</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">0 </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">位置</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.println(s + </span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">"ordinal"</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> + s.ordinal());</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">// </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">名称</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">+</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">位置信息</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">// <u>compareto</u></span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">比较</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">枚举类型按照</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt"> ordinal</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">的值比较</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">-1 0 1</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.print(s.compareTo(Shrubbery.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">GRAWLING</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">) + </span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">" "</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">// equals </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">和</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">== </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">看枚举值是否相同</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.print(s.equals(Shrubbery.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">GRAWLING</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">) + </span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">" "</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.println(s == Shrubbery.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">GRAWLING</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">// </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">返回枚举所在的</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">类的名称。</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.println(s.getDeclaringClass());</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">// name()</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">相当于</span><u><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">tostring</span></u><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">()</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">返回枚举的值</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.println(s.name());</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.println(</span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">"-----------------------"</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">for</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> (String s : </span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">"HANGING GRAWLING GROUND"</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.split(</span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">" "</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">)) {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">// <u>valueof</u> </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">返回枚举类中名称为</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt"> s</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">的</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">枚举对象</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Shrubbery shrub = Enum.<em>valueOf</em>(Shrubbery.</span><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">class</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt">, s);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.println(shrub);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">for</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> (Shrubbery s : Shrubbery.<em>values</em>()) {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">// ordinal() </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">返回枚举中的位置</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">如</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">GROUND </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">在</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">0 </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">位置</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.println(s + </span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">"ordinal"</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> + s.ordinal());</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">// </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">名称</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">+</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">位置信息</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">// <u>compareto</u></span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">比较</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">枚举类型按照</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt"> ordinal</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">的值比较</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">-1 0 1</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.print(s.compareTo(Shrubbery.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">GRAWLING</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">) + </span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">" "</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">// equals </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">和</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">== </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">看枚举值是否相同</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.print(s.equals(Shrubbery.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">GRAWLING</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">) + </span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">" "</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.println(s == Shrubbery.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">GRAWLING</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">// </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">返回枚举所在的</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">类的名称。</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.println(s.getDeclaringClass());</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">// name()</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">相当于</span><u><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">tostring</span></u><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">()</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">返回枚举的值</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.println(s.name());</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.println(</span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">"-----------------------"</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">for</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> (String s : </span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">"HANGING GRAWLING GROUND"</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.split(</span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">" "</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">)) {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">// <u>valueof</u> </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">返回枚举类中名称为</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt"> s</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">的</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">枚举对象</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Shrubbery shrub = Enum.<em>valueOf</em>(Shrubbery.</span><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">class</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt">, s);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.println(shrub);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">}</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">public</span></strong><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">static</span></strong><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">void</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> main(String[] args) {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">// </span><strong><span style="font-family: 'Courier New'; color: #7f9fbf; font-size: 10pt">TODO</span></strong><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt"> Auto-generated method stub</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">bKOfEmun</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">();</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">//</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">枚举类的</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">基础知识</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">}</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">}</span></p>
<p><strong>&nbsp;</strong></p>
<p><span style="font-family: 宋体">枚举中填入方法</span></p>
<p><span style="font-family: 宋体">一般说来我们希望每个枚举实例能够返回对自身的描述，而不仅仅是默认</span>toString()<span style="font-family: 宋体">实现，这只能返回枚举实例的名字。为此我们可以提供一个构造器，专门负责处理这个额外的信息，然后添加一个方法，返回这个描述信息。</span></p>
<p><span style="font-family: 宋体">构造过程如下</span> <span style="font-family: 宋体">：</span></p>
<p><span style="font-family: 宋体">首先</span> <span style="font-family: 宋体">建立枚举</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">public</span></strong><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">enum</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> OzWitch {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">WEST</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">,</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">NORTH</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">,</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">EAST</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">,</span><em><span style="font-family: 'Courier New'; background: silver; color: #0000c0; font-size: 10pt">SOUTH</span></em></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">}</span></p>
<p><span style="font-family: 宋体">然后创建描述信息</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">public</span></strong><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">enum</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> OzWitch {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">WEST</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">,</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">NORTH</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">,</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">EAST</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">,</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">SOUTH</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">;</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">//</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">注意分号</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">private</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> String </span><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">description</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">;</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">//</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">描述信息</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">public</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> String getDescription() {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">return</span></strong><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">description</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">;</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">}</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">public</span></strong><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">static</span></strong><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">void</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> main(String[] args) {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; </span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">}</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">}</span></p>
<p><span style="font-family: 宋体">创建构造器</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">public</span></strong><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">enum</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> OzWitch {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">WEST</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">(</span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">"1111"</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">),</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">NORTH</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">(</span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">"2222"</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">),</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">EAST</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">(</span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">"3333"</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">),</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">SOUTH</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">(</span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">"4444"</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">);</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">//</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">注意分号</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">private</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> String </span><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">description</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">;</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">//</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">描述信息</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">OzWitch(String description) {</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">//</span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">注意只能为</span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt"> private </span><span style="font-family: 宋体; color: #3f7f5f; font-size: 10pt">这里与正常类的构造函数有区别</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">this</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.</span><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">description</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">=description;</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">}</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">public</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> String getDescription() {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">return</span></strong><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">description</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">;</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">}</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">public</span></strong><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">static</span></strong><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">void</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> main(String[] args) {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">for</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt">(OzWitch <span style="background: yellow">o</span>:OzWitch.<em>values</em>()){</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.println(<span style="background: silver">o</span>.name()+</span><span style="font-family: 'Courier New'; color: #2a00ff; font-size: 10pt">":"</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">+<span style="background: silver">o</span>.getDescription());</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">}</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">}</span></p>
<p><span style="font-family: 宋体">覆盖</span>enum<span style="font-family: 宋体">方法：此程序目的在于把枚举对象的首字母保留大写，其余小写</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">public</span></strong><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">enum</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> SpaceShip {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">SCOUT</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">,</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">CARGO</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">,</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">TRANSPORT</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">,</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">CRUISER</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">,</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">BATTLESHIP</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">,</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">MOTHERSHIP</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">;</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp; </span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Courier New'; color: #646464; font-size: 10pt">@Override</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">public</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> String toString() {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt">// </span><strong><span style="font-family: 'Courier New'; color: #7f9fbf; font-size: 10pt">TODO</span></strong><span style="font-family: 'Courier New'; color: #3f7f5f; font-size: 10pt"> Auto-generated method stub</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String id=name();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String lower=name().substring(1).toLowerCase();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">return</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> id.charAt(0)+lower;</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">public</span></strong><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">static</span></strong><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">void</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt"> main(String[] args) {</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 'Courier New'; color: #7f0055; font-size: 10pt">for</span></strong><span style="font-family: 'Courier New'; color: black; font-size: 10pt">(SpaceShip s:SpaceShip.<em>values</em>()){</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-family: 'Courier New'; color: #0000c0; font-size: 10pt">out</span></em><span style="font-family: 'Courier New'; color: black; font-size: 10pt">.println(s);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: black; font-size: 10pt">}</span></p>
<img src ="http://www.blogjava.net/roymoro/aggbug/345523.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/roymoro/" target="_blank">scorpio小蝎</a> 2011-03-02 20:32 <a href="http://www.blogjava.net/roymoro/archive/2011/03/02/345523.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达式三十分钟入门（本文转自http://deerchao.net/tutorials/regex/regex.htm）感谢作者 deerchao</title><link>http://www.blogjava.net/roymoro/archive/2011/02/24/345063.html</link><dc:creator>scorpio小蝎</dc:creator><author>scorpio小蝎</author><pubDate>Thu, 24 Feb 2011 06:49:00 GMT</pubDate><guid>http://www.blogjava.net/roymoro/archive/2011/02/24/345063.html</guid><wfw:comment>http://www.blogjava.net/roymoro/comments/345063.html</wfw:comment><comments>http://www.blogjava.net/roymoro/archive/2011/02/24/345063.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/roymoro/comments/commentRss/345063.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/roymoro/services/trackbacks/345063.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;正则表达式学习笔记首先推荐一篇入门文章：http://deerchao.net/tutorials/regex/regex.htm#mission感谢作者下面先对本文章做一下笔记：1、&nbsp;正则表达式是什么：处理字符串的有效工具。2、&nbsp;从例子开始学习正则：                                    ...&nbsp;&nbsp;<a href='http://www.blogjava.net/roymoro/archive/2011/02/24/345063.html'>阅读全文</a><img src ="http://www.blogjava.net/roymoro/aggbug/345063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/roymoro/" target="_blank">scorpio小蝎</a> 2011-02-24 14:49 <a href="http://www.blogjava.net/roymoro/archive/2011/02/24/345063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>