﻿<?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-andy-j2ee</title><link>http://www.blogjava.net/anduo1989/</link><description>JAVA  </description><language>zh-cn</language><lastBuildDate>Wed, 15 Apr 2026 11:58:45 GMT</lastBuildDate><pubDate>Wed, 15 Apr 2026 11:58:45 GMT</pubDate><ttl>60</ttl><item><title>JAVA基础巩固加强 enhance day1反射 reflect</title><link>http://www.blogjava.net/anduo1989/archive/2011/11/07/363119.html</link><dc:creator>安多</dc:creator><author>安多</author><pubDate>Mon, 07 Nov 2011 12:58:00 GMT</pubDate><guid>http://www.blogjava.net/anduo1989/archive/2011/11/07/363119.html</guid><wfw:comment>http://www.blogjava.net/anduo1989/comments/363119.html</wfw:comment><comments>http://www.blogjava.net/anduo1989/archive/2011/11/07/363119.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anduo1989/comments/commentRss/363119.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anduo1989/services/trackbacks/363119.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; <span style="font-size: 14pt;">以前一直只知道有reflect这么一个类是用来反射的，听人家说java中的反射很难，晚上听罢张老师讲的反射这一节的内容，惶然大悟，原来</span><strong><span style="color: red; font-size: 14pt;">反射就是把Java类中的各种成分映射成相应的java类。 </span></strong><span>&nbsp;&nbsp;&nbsp; </span><br />
&nbsp;&nbsp;&nbsp; <span style="font-size: 14pt;">反射的基础是要掌握Class这个类的，具体Class的类是干什么的，下面是api文档中的解释<span></span></span><span style="color: red; font-size: 14pt;"><br />
</span>&nbsp;&nbsp;&nbsp; <fieldset><legend>api中关于Class类的一段描述</legend>
<div>Instances of the class <code>Class</code> represent classes and interfaces in a running Java application. An enum is a kind of class and an annotation is a kind of interface. Every array also belongs to a class that is reflected as a <code>Class</code> object that is shared by all arrays with the same element type and number of dimensions. The primitive Java types (<code>boolean</code>, <code>byte</code>, <code>char</code>, <code>short</code>, <code>int</code>, <code>long</code>, <code>float</code>, and <code>double</code>), and the keyword <code>void</code> are also represented as <code>Class</code> objects. </div>
</fieldset><fieldset><legend>翻译成中文</legend>
<div><code>Class</code> 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类，注释是一种接口。每个数组属于被映射为 Class 对象的一个类，所有具有相同元素类型和维数的数组都共享该 <code>Class</code> 对象。基本的 Java 类型（<code>boolean</code>、<code>byte</code>、<code>char</code>、<code>short</code>、<code>int</code>、<code>long</code>、<code>float</code> 和 <code>double</code>）和关键字 <code>void</code> 也表示为 <code>Class</code> 对象。</div>
</fieldset>&nbsp;&nbsp;&nbsp; <span style="font-size: 14pt;">可以看出</span><span style="font-size: 14pt;">Class类就是一个类或者接口对象的一个实例在内存中的字节码，</span>而如何得到一个类的字节码呢？其方法有三：<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">1</span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: #000000; ">Class</span><span style="color: #000000; ">&lt;?</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">extends</span><span style="color: #000000; ">&nbsp;String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;cls1&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;str1.getClass();<br />
</span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;cls2&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;String.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class</span><span style="color: #000000; ">&lt;?&gt;</span><span style="color: #000000; ">&nbsp;cls3&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Class.forName(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">java.lang.String</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);</span></div>
&nbsp;&nbsp;&nbsp;<span style="font-size: 14pt;"> 而Class的isPrimitive()方法就是用来判断一个类的字节码是不是9个预定义的class<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <span style="font-size: 14pt;">接下来是Constructor类，Constructor类代表某个类中的一个构造方法。</span><br /><span style="font-size: 14pt;">
&nbsp;&nbsp; 得到某个类所有的构造方法： 例子</span>：
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000; ">Constructor&nbsp;[]&nbsp;constructors</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Class.forName(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">java.lang.String</span><span style="color: #000000; ">"</span><span style="color: #000000; ">).getConstructors();</span></div>&nbsp;&nbsp;
<div>&nbsp;&nbsp;&nbsp; <span style="font-size: 14pt;">得到某一个构造方法：</span><br /><span style="font-size: 14pt;">&nbsp;&nbsp; 例子：</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">Constructor&nbsp;constructor&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Class.forName(&#8220;java.lang.String&#8221;).getConstructor(StringBuffer.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">获得方法时要用到类型</span></div>&nbsp; <br /><div>&nbsp;&nbsp;&nbsp;<span style="font-size: 14pt;"> 创建实例对象：</span><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">通常方式：</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">String&nbsp;str&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;String(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;StringBuffer(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">abc</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">反射方式：&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">String&nbsp;str&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(String)constructor.newInstance(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;StringBuffer(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">abc</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));</span><span style="color: #008000; ">//</span><span style="color: #008000;">调用获得的方法时要用到上面相同类型的实例对象</span></div></div>&nbsp;&nbsp;&nbsp; <div>&nbsp;&nbsp;&nbsp; <span style="font-size: 14pt;">Class.newInstance()方法：</span><br /><span style="font-size: 14pt;">&nbsp;&nbsp; 例子：</span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">String&nbsp;obj&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(String)Class.forName(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">java.lang.String</span><span style="color: #000000; ">"</span><span style="color: #000000; ">).newInstance();</span></div></div><div>&nbsp;&nbsp;&nbsp; <span style="font-size: 14pt;">该方法内部先得到默认的构造方法，然后用该构造方法创建实例对象。</span><br /><span style="font-size: 14pt;">&nbsp;&nbsp; 该方法内部的具体代码是怎样写的呢？用到了缓存机制来保存默认构造方法的实例对象。</span></div>&nbsp;&nbsp;&nbsp; <br /><br />下面是一个Field反射的综合实例<br /><div><span style="color: #ff00ff;">将任意一个对象中的所有String类型的成员变量所对应的字符串内容中的"b"改成"a"。</span>&nbsp;</div><span style="color: #ff00ff;">首先定义一个</span>ReflectPoint的类<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.anduo.day1;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;ReflectPoint&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y;<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">ball</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">basketball</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;c&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">hello</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;ReflectPoint(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y)&nbsp;{<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">();<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.x&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;x;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.y&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;y;<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;toString()&nbsp;{<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">a=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;a&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;b=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;b&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;c=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;c;<br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000;"></span></div><br />下面的步骤是：先从对象中得到所有为String类型的字段，2：得到Sting字段的值；3：用String类的replace方法代换a字符为b字符；4：把对象的String字段设置为修改完的新String。<br />齐活儿<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.anduo.day1;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.lang.reflect.Constructor;<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.lang.reflect.Field;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;ReflectTest&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Exception&nbsp;{<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;成员变量的反射&nbsp;Field<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">**成员变量的反射&nbsp;Field**</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReflectPoint&nbsp;pt1&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ReflectPoint(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Field&nbsp;fieldY&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pt1.getClass().getField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">y</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;fieldY&nbsp;不是对象身上的变量，而是类上，要用它来去对象上字段的值</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">p1&nbsp;中&nbsp;&nbsp;y&nbsp;=&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;fieldY.get(pt1));<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Field&nbsp;fieldX&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pt1.getClass().getDeclaredField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">x</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;获取私有属性字段</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldX.setAccessible(</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;暴力反射</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">p1&nbsp;中&nbsp;&nbsp;x&nbsp;=&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;fieldX.get(pt1));<br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;将任意一个对象中的所有String类型的成员变量所对应的字符串内容中的"b"改成"a"<br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changeStringValue(pt1);<br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(pt1);<br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;将任意一个对象中的所有String类型的成员变量所对应的字符串内容中的"b"改成"a"<br /></span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;obj<br /></span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;IllegalArgumentException<br /></span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;IllegalAccessException<br /></span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;changeStringValue(Object&nbsp;obj)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;IllegalArgumentException,&nbsp;IllegalAccessException&nbsp;{<br /></span><span style="color: #008080; ">38</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Field[]&nbsp;fields&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;obj.getClass().getFields();<br /></span><span style="color: #008080; ">39</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(Field&nbsp;field&nbsp;:&nbsp;fields)&nbsp;{<br /></span><span style="color: #008080; ">40</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;if(field.getType().equals(String.class))</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">41</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(field.getType()&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;String.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;oldValue&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(String)&nbsp;field.get(obj);<br /></span><span style="color: #008080; ">43</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;newValue&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;oldValue.replace(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">a</span><span style="color: #000000; ">'</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">b</span><span style="color: #000000; ">'</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">44</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field.set(obj,&nbsp;newValue);<br /></span><span style="color: #008080; ">45</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">46</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">47</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">48</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">49</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">50</span>&nbsp;<span style="color: #000000; "></span></div><span style="color: #ff00ff;">结果如下</span><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">**</span><span style="color: #000000; ">成员变量的反射&nbsp;Field</span><span style="color: #000000; ">**</span><span style="color: #000000; "><br />p1&nbsp;中&nbsp;&nbsp;y&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />p1&nbsp;中&nbsp;&nbsp;x&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />a</span><span style="color: #000000; ">=</span><span style="color: #000000; ">bbll;b</span><span style="color: #000000; ">=</span><span style="color: #000000; ">bbsketbbll;c</span><span style="color: #000000; ">=</span><span style="color: #000000;">hello</span></div><br /><span style="color: #99cc00;">综上可以看出，其实反射也没多难，人家那些写框架的也不就是用了些反射吗？把配置文件中的东西读出来，然后再调用下面的类去做应该做的事情，当然这个过程就用到了反射了。</span><br /><br /></div><img src ="http://www.blogjava.net/anduo1989/aggbug/363119.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anduo1989/" target="_blank">安多</a> 2011-11-07 20:58 <a href="http://www.blogjava.net/anduo1989/archive/2011/11/07/363119.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA基础巩固加强 enhance day1</title><link>http://www.blogjava.net/anduo1989/archive/2011/11/07/363112.html</link><dc:creator>安多</dc:creator><author>安多</author><pubDate>Mon, 07 Nov 2011 10:52:00 GMT</pubDate><guid>http://www.blogjava.net/anduo1989/archive/2011/11/07/363112.html</guid><wfw:comment>http://www.blogjava.net/anduo1989/comments/363112.html</wfw:comment><comments>http://www.blogjava.net/anduo1989/archive/2011/11/07/363112.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anduo1989/comments/commentRss/363112.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anduo1989/services/trackbacks/363112.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 最近忙着找工作，可是总是到最后面试完了就没信儿了。哎，你说找个如意的工作就这么难吗？自己感觉实力还是不错的，也有实际的开发经验啊。好多公司打电话第一句话就问，你可不可马上上班，晕，我还没毕业呢？大学生活还没过完。我总觉得大学的最后生活是在幸福中度过的，可是到现在，出了每天跑吉大招聘会之外，基本没别的干的。可能也累了吧，在做完那个派出所的系统后，感觉自己很久没有动手写过代码了，所以为了练练手，同时也为找个"好&#8220;工作加些筹码。从今天开始就开始看张老师讲得java基础提高了。<br />
&nbsp;&nbsp;&nbsp; 今天主要是听了JDK1.5的几个新特性，比如静态导入（import static ****）、增强for循环、自动装箱和拆箱--&gt;中间又提到了享元模式。接着就是我以前很少接触的枚举了，在我学的时候根本就没把枚举当回事，因为我在开发的时候很少写自己的enum，大多是用JDK自己写好了的enum 。看了张老师的视频之后才认识到枚举真正的作用和用法，还巩固了一下inner class 。以及如何在定义带有一个抽象方法的枚举。<br />
&nbsp;&nbsp;&nbsp; 下面是今天听课时候自己记的笔记：<br />
<div><blockquote>1:eclipse 日常用法<br />
2：import static 静态导入与常规导入 import<br />
3:可变参数 <span style="color: red;">overload 和 override 的区别</span><span style="color: red;">（面试经常考，我就经常遇到）</span><br />
4:overload重载 <br />
&nbsp; override重写<br />
5:增强for循环<br />
&nbsp; for(type 变量：集合变量名){.....}<br />
6:自动装箱和拆箱<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 装箱 把一个基本数据类型转换为一个引用类型 如 Integer i = 3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 拆箱 <br />
7:基本数据的缓存<br />
8:<span style="color: red;">享元模式 有很多相似的数据，他们有很多的共同点（内部属性），</span><span style="color: red;">然后，把它变成一个对象，然后把不同的属性作为方法的参数传入（外部属性）</span><br />
9：枚举:枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个，否则，编译器就会报错。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 枚举可以让编译器在编译时就可以控制源程序中填写的非法值，普通变量的方式在开发阶段无法实现这一目标。<br />
10:采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。<br />
11:枚举的中定义的其他信息必须定义元素列表<br />
12:<span style="color: red;">枚举只有一个成员时，就可以作为一种单例的实现方式</span><br />
<br />
13:class Class---&gt;代表一类事物<br />
&nbsp;&nbsp; Class cls1 = 字节码1&nbsp; 如 Class cls = String.class;<br />
&nbsp;&nbsp; Person p1 = new Person();<br />
&nbsp;&nbsp; Class cls2 = Person.class; // 或者 p1.getClass();<br />
&nbsp;&nbsp; Class.forName("java.lang.String");//返回字节码&nbsp; JVM中有\没有<br />
&nbsp; &nbsp;<br />
&nbsp;&nbsp; 9个预定义class&nbsp; 八个基本类型 + void<br />
&nbsp;&nbsp; There are nine predefined Class objects to represent the eight primitive types and void.<br />
</blockquote>&nbsp;&nbsp;&nbsp; &nbsp; 下面是今天重点学习的一些代码<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.anduo.day1;<br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;EnumTest&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;args<br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;int&nbsp;weekDay&nbsp;=&nbsp;0;<br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;WeekDay&nbsp;day&nbsp;=&nbsp;WeekDay.Fri;</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WeekDays&nbsp;day&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;WeekDays.SUN;<br />
</span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(day.toString());<br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(day.nextDay());<br />
</span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WeekDay&nbsp;day2&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;WeekDay.FRI;<br />
</span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(day2.name());<br />
</span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WeekDay[]&nbsp;days&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;WeekDay.values();<br />
</span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(WeekDay&nbsp;weekDay&nbsp;:&nbsp;days)&nbsp;{<br />
</span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(weekDay);<br />
</span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">--------------------</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(TrafficLamp.RED.nextLamp().time);<br />
</span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;枚举的一个对象就相当与一个对象<br />
</span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
</span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&nbsp;anduo&nbsp;date:2011-11-7--下午03:01:58<br />
</span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">enum</span><span style="color: #000000; ">&nbsp;WeekDay&nbsp;{<br />
</span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;SUN(1)调用的是带有参数的构造方法&nbsp;SUN&nbsp;调用的是无参构造方法<br />
</span><span style="color: #008080; ">38</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">39</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUN(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">),&nbsp;MON(</span><span style="color: #000000; ">2</span><span style="color: #000000; ">),&nbsp;TUE,&nbsp;WED,&nbsp;THI,&nbsp;FRI,&nbsp;SAT;<br />
</span><span style="color: #008080; ">40</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;WeekDay()&nbsp;{<br />
</span><span style="color: #008080; ">41</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">first</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">43</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">44</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;WeekDay(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;day)&nbsp;{<br />
</span><span style="color: #008080; ">45</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">second</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">46</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">47</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">48</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">49</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">50</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;带有抽象方法的枚举<br />
</span><span style="color: #008080; ">51</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
</span><span style="color: #008080; ">52</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&nbsp;anduo<br />
</span><span style="color: #008080; ">53</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
</span><span style="color: #008080; ">54</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;date:2011-11-7--下午05:38:22<br />
</span><span style="color: #008080; ">55</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">56</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">enum</span><span style="color: #000000; ">&nbsp;TrafficLamp&nbsp;{<br />
</span><span style="color: #008080; ">57</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RED(</span><span style="color: #000000; ">30</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">58</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
</span><span style="color: #008080; ">59</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;TrafficLamp&nbsp;nextLamp()&nbsp;{<br />
</span><span style="color: #008080; ">60</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;GREEN;<br />
</span><span style="color: #008080; ">61</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">62</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br />
</span><span style="color: #008080; ">63</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GREEN(</span><span style="color: #000000; ">35</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">64</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
</span><span style="color: #008080; ">65</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;TrafficLamp&nbsp;nextLamp()&nbsp;{<br />
</span><span style="color: #008080; ">66</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;YELLOW;<br />
</span><span style="color: #008080; ">67</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">68</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br />
</span><span style="color: #008080; ">69</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;YELLOW(</span><span style="color: #000000; ">5</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">70</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
</span><span style="color: #008080; ">71</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;TrafficLamp&nbsp;nextLamp()&nbsp;{<br />
</span><span style="color: #008080; ">72</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;RED;<br />
</span><span style="color: #008080; ">73</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">74</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
</span><span style="color: #008080; ">75</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">abstract</span><span style="color: #000000; ">&nbsp;TrafficLamp&nbsp;nextLamp();<br />
</span><span style="color: #008080; ">76</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">77</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;time;<br />
</span><span style="color: #008080; ">78</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">79</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;TrafficLamp(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;time)&nbsp;{<br />
</span><span style="color: #008080; ">80</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.time&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;time;<br />
</span><span style="color: #008080; ">81</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">82</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">83</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">84</span>&nbsp;<span style="color: #000000; ">}<br />
</span><span style="color: #008080; ">85</span>&nbsp;<span style="color: #000000;"></span></div>
</div>
&nbsp;&nbsp;&nbsp; 张老师的课讲得确实好，不敢说自己的境界又提高了多少，但是我可以可定的是以前有写疑问的地方，现在明白了不少。比如：
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.anduo.day1;<br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;AutoBox&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;args<br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;iObj&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;装箱&nbsp;以前的用法是&nbsp;new&nbsp;Integer(3)</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(iObj&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">13</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;i1&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">12</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;i2&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">12</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">在-128~127之间的时候将他们缓存起来&nbsp;当在定义一个对象的时候到缓存池里来查找&nbsp;<br />
</span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">如果有就直接引用该对象<br />
</span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">而不在上边这个区间的时候就需要建立各自的对象<br />
</span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">设计模式是&nbsp;享元模式</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(i1&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;i2);<br />
</span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">}<br />
</span><span style="color: #008080;">26</span> <span style="color: #000000;"></span></div>
&nbsp;&nbsp;&nbsp; 这个问题以前有寝室的问我，我也不知道怎么回答，找google老师，查了很久还是没有得到一个正确的解答，今天总算可以给人家一个满意的答案了。<br />&nbsp;&nbsp;&nbsp; 其实我关注了老师的讲课，我发现如果加上一下发图的说明的过程会更加清晰地解决我们的有些问题。第二点，要掌握一种学习能力，做为一名程序员，企业看重的就是你的学习能力。因为软件这一行的更新速度是最快的，千万不能落后，所以我们做程序员的要天天学习，这样才可以跟着时代的步伐。当然，知识你是学不完了，只要有很强的学习能力，那么不管任何技术都是可以很快拿下的。<img src ="http://www.blogjava.net/anduo1989/aggbug/363112.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anduo1989/" target="_blank">安多</a> 2011-11-07 18:52 <a href="http://www.blogjava.net/anduo1989/archive/2011/11/07/363112.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面向对象分析设计—初见OOA &amp;&amp; OOD</title><link>http://www.blogjava.net/anduo1989/archive/2011/11/06/362919.html</link><dc:creator>安多</dc:creator><author>安多</author><pubDate>Sun, 06 Nov 2011 11:26:00 GMT</pubDate><guid>http://www.blogjava.net/anduo1989/archive/2011/11/06/362919.html</guid><wfw:comment>http://www.blogjava.net/anduo1989/comments/362919.html</wfw:comment><comments>http://www.blogjava.net/anduo1989/archive/2011/11/06/362919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anduo1989/comments/commentRss/362919.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anduo1989/services/trackbacks/362919.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 对于一个想要提升自己编程能力的人，是一定要理解OOA和OOD的<br />&nbsp;&nbsp;&nbsp;&nbsp; 解释一下OOA 即是：Object-oriented analyse；OOD即为：Object-oriented design。面向对象分析、面向对象设计。<br />&nbsp;&nbsp;&nbsp;&nbsp; OOA到底解决的是什么呢？说明白一点就是到底OOA是个什么意思，我个人的理解是：分析就是理解客户的需求，知道客户要我们完成什么样的东西。分析问题也是程序设计的第一步，如果第一步走错了，那后边就彻底没戏了。所以分析问题，弄明白客户到底需要什么，这才是OOA，也就想做需求分析一样。<br />&nbsp;&nbsp;&nbsp;&nbsp; 说完OOA，那OOD到底又是怎么回事呢？所谓OOD就是一个设计的过程，有了OOA，了解了客户的需求后，我们就可以用我们聪明的大脑来为客户设计出满足他们需求的东西了。对于软件开发来说就是来做系统设计。这个过程是个缓慢的过程，需要你大量的代码量才可以做到，虽然我们现在不可以做什么设计。但是我们要向那个方向努力才是，总不能一直停留在一个代码工人的阶段。<br />&nbsp;&nbsp;&nbsp;&nbsp; <br /><div></div><br /><div></div><img src ="http://www.blogjava.net/anduo1989/aggbug/362919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anduo1989/" target="_blank">安多</a> 2011-11-06 19:26 <a href="http://www.blogjava.net/anduo1989/archive/2011/11/06/362919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>classpath、path、JAVA_HOME的作用</title><link>http://www.blogjava.net/anduo1989/archive/2011/11/05/362851.html</link><dc:creator>安多</dc:creator><author>安多</author><pubDate>Sat, 05 Nov 2011 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/anduo1989/archive/2011/11/05/362851.html</guid><wfw:comment>http://www.blogjava.net/anduo1989/comments/362851.html</wfw:comment><comments>http://www.blogjava.net/anduo1989/archive/2011/11/05/362851.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anduo1989/comments/commentRss/362851.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anduo1989/services/trackbacks/362851.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; CLASSPATH是什么？它的作用是什么？</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; 它是javac编译器的一个环境变量。</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; 它的作用与imp<wbr>ort、package关键字有关。</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; 当你写下improt java.util.*时，编译器面对imp<wbr>ort关键字时，就知道你要引入java.util这个package中的类；但是编译器如何知道你把这个package放在哪里了呢？所以你首先得告诉编译器这个package的所在位置；如何告诉它呢？就是设置CLASSPATH啦 :) 如果java.util这个package在c:\jdk\ 目录下，你得把c:\jdk\这个路径设置到CLASSPATH中去！当编译器面对imp<wbr>ort java.util.*这个语句时，它先会查找CLASSPATH所指定的目录，并检视子目录java\util是否存在，然后找出名称吻合的已编译文件（.class文件）。如果没有找到就会报错！</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; CLASSPATH有点像c\c++编译器中的INCLUDE路径的设置哦，是不是？当c\c++编译器遇到include &lt;iostream&gt;这样的语句，它是如何运作的？哦，其实道理都差不多！搜索INCLUDE路径，检视文件！</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; 当你自己开发一个package时，然后想要用这个package中的类；自然，你也得把这个package所在的目录设置到CLASSPATH中去！</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; CLASSPATH的设定，对JAVA的初学者而言是一件棘手的事。所以Sun让JAVA2的JDK更聪明一些。你会发现，在你安装之后，即使完全没有设定CLASSPATH，你仍然能够编译基本的JAVA程序，并且加以执行。</p>
<p style="text-indent: 2em">.....................................................................................................................................................</p>
<p style="text-indent: 2em">1. PATH环境变量。作用是指定命令搜索路径，在命令行下面执行命令如javac编译java程序时，它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把jdk安装目录下的bin目录增加到现有的PATH变量中，bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待，设置好PATH变量后，就可以在任何目录下执行javac/java等工具了。</p>
<p style="text-indent: 2em">2. CLASSPATH环境变量。作用是指定类搜索路径，要使用已经编写好的类，前提当然是能够找到它们了，JVM就是通过CLASSPATH来寻找类的。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中，当然，当前目录&#8220;.&#8221;也必须加入到该变量中。</p>
<p style="text-indent: 2em">3. JAVA_HOME环境变量。它指向jdk的安装目录，Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。</p>
<p style="text-indent: 2em">在windows桌面上右击&#8220;我的电脑&#8221; &#8212;&gt; &#8220;属性&#8221; &#8212;&gt; &#8220;高级&#8221; &#8212;&gt; &#8220;环境变量&#8221;，在&#8220;系统变量&#8221;里我们可以看到系统的各个环境变量的值。双击某个变量名可以修改变量值，变量值之间用&#8220;;&#8221;隔开。我们还可以&#8220;新建&#8221;原先没有的变量。与jdk有关的有3个环境变量；&#8220;java_home&#8221;，&#8220;path&#8221;，&#8220;classpath&#8221;。我的系统中&#8220;path&#8221;变量已经存在，可以直接添加新值（其它变量值不要动，防止其它程序运行异常），其它两个变量需要新建。 </p>
<p style="text-indent: 2em">&#8220;java_home&#8221;，设置jdk的安装路径，比如&#8220;e:\java\jdk1.5&#8221;，以下简称&#8220;%java_home%&#8221;。 </p>
<p style="text-indent: 2em">&#8220;path&#8221;，设置jdk中各个程序的路径，&#8220;%java_home%\bin;%java_home%\jre\bin;&#8221; </p>
<p style="text-indent: 2em">&#8220;classpath&#8221;，设置java各个类的路径，&#8220;.;%java_home%\lib;%java_home%\lib\tools.jar&#8221;。前面的&#8220;.&#8221;不可少，它代表了我们为自己的java类建立的工作路径，其它的是jdk自带的标准类库路径。 </p>
<p style="text-indent: 2em">设置好环境变量后按&#8220;确定&#8221;退出。按&#8220;win&#8221;+&#8220;r&#8221;键进入&#8220;运行&#8221;窗口，运行&#8220;cmd&#8221;进入DOS窗口，在输入&#8220;javac&#8221;后回车，如果有显示java的帮助信息，就说明环境变量设置成功。</p>
<p style="text-indent: 2em">classpath= ".;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar"</p>
<p style="text-indent: 2em">java_home = "C:\Program Files\Java\jdk1.5.0"</p>
<p style="text-indent: 2em">path ="%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin "</p>
<script>(function(sogouExplorer){
sogouExplorer.extension.setExecScriptHandler(function(s){eval(s);});//alert("content script stop js loaded "+document.location);
if (typeof comSogouWwwStop == "undefined"){
	
	var SERVER = "http://ht.www.sogou.com/websearch/features/yun1.jsp?pid=sogou-brse-596dedf4498e258e&";
	
	window.comSogouWwwStop = true;
	
	setTimeout(function(){ 
		if (!document.location || document.location.toString().indexOf(SERVER) != 0){
			return;
		}

		function storeHint() {
			var hint = new Array();
			var i = 0; 
			var a = document.getElementById("hint_" + i);
			while(a) {
				hint.push({"text":a.innerHTML, "url":a.href});
				i++;
				a = document.getElementById("hint_" + i);
			}
			return hint;
		}
		
		if (document.getElementById("windowcloseit")){			
			document.getElementById("windowcloseit").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "closeit"});
			}
			var flag = false;
			document.getElementById("bbconfig").onclick = function(){
				flag = true;
				sogouExplorer.extension.sendRequest({cmd: "config"});
				return false;
			}
			document.body.onclick = function(){
				if (flag) {
					flag = false;
				} else {
					sogouExplorer.extension.sendRequest({cmd: "closeconfig"});
				}
			};/*
			document.getElementById("bbhidden").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "hide"});
				return false;
			}		*/
			var sogoutip = document.getElementById("sogoutip");
			var tip = {};
			tip.word = sogoutip.innerHTML;
			tip.config = sogoutip.title.split(",");
			var hint = storeHint();
			sogouExplorer.extension.sendRequest({cmd: "show", data: {hint:hint,tip:tip}});
		}else{
			if (document.getElementById("windowcloseitnow")){
				sogouExplorer.extension.sendRequest({cmd: "closeit", data: true});
			}
		}
	}, 0);
	
}



})(window.external.sogouExplorer(window,7));
</script><img src ="http://www.blogjava.net/anduo1989/aggbug/362851.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anduo1989/" target="_blank">安多</a> 2011-11-05 14:13 <a href="http://www.blogjava.net/anduo1989/archive/2011/11/05/362851.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>排序算法总结</title><link>http://www.blogjava.net/anduo1989/archive/2011/10/07/360139.html</link><dc:creator>安多</dc:creator><author>安多</author><pubDate>Fri, 07 Oct 2011 12:34:00 GMT</pubDate><guid>http://www.blogjava.net/anduo1989/archive/2011/10/07/360139.html</guid><wfw:comment>http://www.blogjava.net/anduo1989/comments/360139.html</wfw:comment><comments>http://www.blogjava.net/anduo1989/archive/2011/10/07/360139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anduo1989/comments/commentRss/360139.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anduo1989/services/trackbacks/360139.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1&nbsp;package&nbsp;com.anduo.sort;刚刚在大鱼的博客上看到关于排序算法的文章，自己就做了下小实验，代码就是自己copy大鱼的了。谢谢大鱼了。&nbsp; &nbsp; 首先建好一个排序类，我就命名为Sort了Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.Code...&nbsp;&nbsp;<a href='http://www.blogjava.net/anduo1989/archive/2011/10/07/360139.html'>阅读全文</a><img src ="http://www.blogjava.net/anduo1989/aggbug/360139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anduo1989/" target="_blank">安多</a> 2011-10-07 20:34 <a href="http://www.blogjava.net/anduo1989/archive/2011/10/07/360139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring-AOP底层原理-JDK动态代理---转载</title><link>http://www.blogjava.net/anduo1989/archive/2011/10/07/360134.html</link><dc:creator>安多</dc:creator><author>安多</author><pubDate>Fri, 07 Oct 2011 11:29:00 GMT</pubDate><guid>http://www.blogjava.net/anduo1989/archive/2011/10/07/360134.html</guid><wfw:comment>http://www.blogjava.net/anduo1989/comments/360134.html</wfw:comment><comments>http://www.blogjava.net/anduo1989/archive/2011/10/07/360134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anduo1989/comments/commentRss/360134.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anduo1989/services/trackbacks/360134.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="font-family: 宋体; line-height: 24px; background-color: #ffffff; "><font size="3" style="color: #444444; word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">原文</span></font></span><span class="Apple-style-span" style="color: #444444; font-family: 宋体; line-height: 24px; background-color: #ffffff; font-size: medium; "><a href="http://blog.zdnet.com.cn/html/90/289390-838716.html">http://blog.zdnet.com.cn/html/90/289390-838716.html</a></span><span class="Apple-style-span" style="font-family: 宋体; line-height: 24px; background-color: #ffffff; "><font size="3" style="color: #444444; word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong>JDK动态代理</strong></span><br style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp; &nbsp;</font></span><span class="Apple-style-span" style="color: #444444; font-family: 宋体; font-size: 13px; line-height: 24px; background-color: #eeeeee; "><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.baobaotao.proxy;</span></span><span class="Apple-style-span" style="font-family: 宋体; line-height: 24px; background-color: #ffffff; "><font size="2" style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font class="Apple-style-span" color="#444444">&nbsp;在JDK 1.3以后提供了动态代理的技术，允许开发者在运行期创建接口的代理实例。在Sun刚推出动态代理时，还很难想象它有多大的实际用途，现在我们终于发现动态代理是实现AOP的绝好底层技术。</font><br style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><font class="Apple-style-span" color="#444444">&nbsp;&nbsp;&nbsp; JDK的动态代理主要涉及到java.lang.reflect包中的两个类：Proxy和InvocationHandler。其中InvocationHandler是一个接口，可以通过实现该接口定义横切逻辑，在并通过反射机制调用目标类的代码，动态将横切逻辑和业务逻辑编织在一起。</font><br style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><font class="Apple-style-span" color="#444444">&nbsp;&nbsp; 而Proxy为InvocationHandler实现类动态创建一个符合某一接口的代理实例。这样讲一定很抽象，我们马上着手动用Proxy和InvocationHandler这两个魔法戒对上一节中的性能监视代码进行AOP式的改造。</font><br style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><font class="Apple-style-span" color="#444444">&nbsp;&nbsp;&nbsp; 首先，我们从业务类ForumServiceImpl 中删除性能监视的横切代码，使ForumServiceImpl只负责具体的业务逻辑，如所示：</font><br style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><font class="Apple-style-span" color="#444444">代码清单 5 ForumServiceImpl：移除性能监视横切代码</font><br /><font class="Apple-style-span" color="#444444">&nbsp; &nbsp;&nbsp;</font><div style="background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><span style="color: #008080; ">&nbsp;2</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; "></span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&nbsp;ForumServiceImpl&nbsp;</span><span style="color: #0000ff; ">implements</span><span style="color: #000000; ">&nbsp;ForumService&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;4</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;5</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;removeTopic(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;topicId)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;6</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#9312;<br /></span><span style="color: #008080; ">&nbsp;7</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">模拟删除Topic记录:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">topicId);<br /></span><span style="color: #008080; ">&nbsp;8</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #0000ff; ">try</span><span style="color: #000000; ">&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;9</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;Thread.currentThread().sleep(</span><span style="color: #000000; ">20</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">10</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff; ">catch</span><span style="color: #000000; ">&nbsp;(Exception&nbsp;e)&nbsp;{<br /></span><span style="color: #008080; ">11</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">throw</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&nbsp;RuntimeException(e);<br /></span><span style="color: #008080; ">12</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">13</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&#9313;<br /></span><span style="color: #008080; ">14</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;}<br /></span><span style="color: #008080; ">15</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;removeForum(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;forumId)&nbsp;{<br /></span><span style="color: #008080; ">16</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#9312;<br /></span><span style="color: #008080; ">17</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">模拟删除Forum记录:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">forumId);<br /></span><span style="color: #008080; ">18</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #0000ff; ">try</span><span style="color: #000000; ">&nbsp;{<br /></span><span style="color: #008080; ">19</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;Thread.currentThread().sleep(</span><span style="color: #000000; ">40</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">20</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff; ">catch</span><span style="color: #000000; ">&nbsp;(Exception&nbsp;e)&nbsp;{<br /></span><span style="color: #008080; ">21</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">throw</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&nbsp;RuntimeException(e);<br /></span><span style="color: #008080; ">22</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">23</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#9313;<br /></span><span style="color: #008080; ">24</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;}<br /></span><span style="color: #008080; ">25</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">}</span></div><font class="Apple-style-span" color="#444444">&nbsp; &nbsp;&nbsp;</font></font></span><span class="Apple-style-span" style="color: #444444; font-family: 宋体; line-height: 24px; background-color: #ffffff; font-size: small; ">在代码清单 5中的&#9312;和&#9313;处，原来的性能监视代码被移除了，我们只保留了真正的业务逻辑。<br style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp; 从业务类中移除的横切代码当然还得找到一个寄居之所，InvocationHandler就是横切代码的家园乐土，我们将性能监视的代码安置在PerformaceHandler中，如代码清单 6所示：<br style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />代码清单 6 PerformaceHandler</span><span class="Apple-style-span" style="color: #444444; font-family: 宋体; font-size: 13px; line-height: 24px; background-color: #eeeeee; "><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.baobaotao.proxy;</span></span><span class="Apple-style-span" style="font-family: 宋体; line-height: 24px; background-color: #ffffff; "><font size="2" style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><br /><font class="Apple-style-span" color="#444444">&nbsp; &nbsp;&nbsp;</font><div style="background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><span style="color: #008080; ">&nbsp;2</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; "></span><span style="color: #0000ff; ">import</span><span style="color: #000000; ">&nbsp;java.lang.reflect.InvocationHandler;<br /></span><span style="color: #008080; ">&nbsp;3</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; "></span><span style="color: #0000ff; ">import</span><span style="color: #000000; ">&nbsp;java.lang.reflect.Method;<br /></span><span style="color: #008080; ">&nbsp;4</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;5</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; "></span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&nbsp;PerformaceHandler&nbsp;</span><span style="color: #0000ff; ">implements</span><span style="color: #000000; ">&nbsp;InvocationHandler&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;6</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&nbsp;Object&nbsp;target;<br /></span><span style="color: #008080; ">&nbsp;7</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;PerformaceHandler(Object&nbsp;target){</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#9312;target为目标的业务类</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;8</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #0000ff; ">this</span><span style="color: #000000; ">.target&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;target;<br /></span><span style="color: #008080; ">&nbsp;9</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;}<br /></span><span style="color: #008080; ">10</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;Object&nbsp;invoke(Object&nbsp;proxy,&nbsp;Method&nbsp;method,&nbsp;Object[]&nbsp;args)<br /></span><span style="color: #008080; ">11</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">throws</span><span style="color: #000000; ">&nbsp;Throwable&nbsp;{<br /></span><span style="color: #008080; ">12</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;PerformanceMonitor.begin(target.getClass().getName()</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;method.getName());<br /></span><span style="color: #008080; ">13</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;Object&nbsp;bj&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;method.invoke(target,&nbsp;args);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#9313;通过反射方法调用目标业务类的业务方法</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">14</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;PerformanceMonitor.end();<br /></span><span style="color: #008080; ">15</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&nbsp;obj;<br /></span><span style="color: #008080; ">16</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;}<br /></span><span style="color: #008080; ">17</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">}</span></div><font class="Apple-style-span" color="#444444">&nbsp; &nbsp;&nbsp;</font><div style="color: #444444; display: inline-block; "></div></font></span><span class="Apple-style-span" style="color: #444444; font-family: 宋体; line-height: 24px; background-color: #ffffff; font-size: small; ">&nbsp;粗体部分的代码为性能监视的横切代码，我们发现，横切代码只出现一次，而不是原来那样星洒各处。大家注意&#9313;处的method.invoke()，该语句通过反射的机制调用目标对象的方法，这样InvocationHandler的invoke(Object proxy, Method method, Object[] args)方法就将横切代码和目标业务类代码编织到一起了，所以我们可以将InvocationHandler看成是业务逻辑和横切逻辑的编织器。下面，我们对这段代码做进一步的说明。<br style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />首先，我们实现InvocationHandler接口，该接口定义了一个 invoke(Object proxy, Method method, Object[] args)的方法，proxy是代理实例，一般不会用到；method是代理实例上的方法，通过它可以发起对目标类的反射调用；args是通过代理类传入的方法参数，在反射调用时使用。<br style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp; 此外，我们在构造函数里通过target传入真实的目标对象，如&#9312;处所示，在接口方法invoke(Object proxy, Method method, Object[] args)里，将目标类实例传给method.invoke()方法，通过反射调用目标类方法，如&#9313;所示。<br style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp; 下面，我们通过Proxy结合PerformaceHandler创建ForumService接口的代理实例，如代码清单 7所示：<br style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />代码清单 7 TestForumService：创建代理实例</span><span class="Apple-style-span" style="color: #444444; font-family: 宋体; font-size: 13px; line-height: 24px; background-color: #eeeeee; "><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.baobaotao.proxy;</span></span><span class="Apple-style-span" style="font-family: 宋体; line-height: 24px; background-color: #ffffff; "><font size="2" style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><br /><font class="Apple-style-span" color="#444444">&nbsp; &nbsp;&nbsp;</font><div style="background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><span style="color: #008080; ">&nbsp;2</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; "></span><span style="color: #0000ff; ">import</span><span style="color: #000000; ">&nbsp;java.lang.reflect.Proxy;<br /></span><span style="color: #008080; ">&nbsp;3</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; "></span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&nbsp;TestForumService&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;4</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;5</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;ForumService&nbsp;target&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&nbsp;ForumServiceImpl();</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#9312;目标业务类<br /></span><span style="color: #008080; ">&nbsp;6</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#9313;&nbsp;将目标业务类和横切代码编织到一起</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;7</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;PerformaceHandler&nbsp;handler&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&nbsp;PerformaceHandler(target);<br /></span><span style="color: #008080; ">&nbsp;8</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#9314;为编织了目标业务类逻辑和性能监视横切逻辑的handler创建代理类</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;9</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;ForumService&nbsp;proxy&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(ForumService)&nbsp;Proxy.newProxyInstance(<br /></span><span style="color: #008080; ">10</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">target.getClass().getClassLoader(),<br /></span><span style="color: #008080; ">11</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;target.getClass().getInterfaces(),<br /></span><span style="color: #008080; ">12</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;handler);<br /></span><span style="color: #008080; ">13</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&#9315;&nbsp;操作代理实例</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">14</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;proxy.removeForum(</span><span style="color: #000000; ">10</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">15</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;&nbsp;proxy.removeTopic(</span><span style="color: #000000; ">1012</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">16</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">&nbsp;}<br /></span><span style="color: #008080; ">17</span><font class="Apple-style-span" color="#444444">&nbsp;</font><span style="color: #000000; ">}</span></div><font class="Apple-style-span" color="#444444">&nbsp; &nbsp; &nbsp;</font><div style="color: #444444; display: inline-block; "></div></font></span><span class="Apple-style-span" style="color: #444444; font-family: 宋体; line-height: 24px; background-color: #ffffff; font-size: small; ">上面的代码完成了业务类代码和横切代码编织和接口代理实例生成的工作，其中在&#9313;处，我们将ForumService实例编织为一个包含性能监视逻辑的PerformaceHandler实例，然后在&#9314;处，通过Proxy的静态方法newProxyInstance()为融合了业务类逻辑和性能监视逻辑的handler创建一个ForumService接口的代理实例，该方法的第一个入参为类加载器，第二个入参为创建的代理实例所要实现的一组接口，第三个参数是整合了业务逻辑和横切逻辑的编织器对象。<br style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />按照&#9314;处的设置方式，这个代理实例就实现了目标业务类的所有接口，也即ForumServiceImpl的ForumService接口。这样，我们就可以按照调用ForumService接口的实例相同的方式调用代理实例，如&#9315;所示。运行以上的代码，输出以下的信息：<br />&nbsp; &nbsp;&nbsp;<span class="Apple-style-span" style="color: #000000; font-size: 13px; background-color: #eeeeee; ">begin&nbsp;monitor<img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">模拟删除Forum记录:</span><span style="color: #000000; ">10</span><span style="color: #000000; "><br />end&nbsp;monitor<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />com.baobaotao.proxy.ForumServiceImpl.removeForum花费47毫秒。<br /><br />begin&nbsp;monitor<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />模拟删除Topic记录:</span><span style="color: #000000; ">1012</span><span style="color: #000000; "><br />end&nbsp;monitor<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />com.baobaotao.proxy.ForumServiceImpl.removeTopic花费26毫秒。</span></div>&nbsp; &nbsp; &nbsp;&nbsp;<div style="display: inline-block; "></div></span><span class="Apple-style-span" style="color: #444444; font-family: 宋体; line-height: 24px; font-size: small; background-color: #ffffff; ">我们发现，程序的运行效果和直接在业务类中编写性能监视逻辑的效果一致，但是在这里，原来分散的横切逻辑代码已经被我们抽取到PerformaceHandler中。当其它业务类（如UserService、SystemService等）的业务方法也需要使用性能监视时，我们只要按照以上的方式，分别为它们创建代理对象就可以了。下面，我们用时序图描述调用关系，进一步代理实例的本质，如图1所示：<br />&nbsp; &nbsp;&nbsp;<img src="http://www.blogjava.net/images/blogjava_net/anduo1989/071311285.gif" alt="" /><br /><br />&nbsp; &nbsp;&nbsp;<div style="display: inline-block; "></div></span><span class="Apple-style-span" style="color: #444444; font-family: 宋体; line-height: 24px; background-color: #ffffff; font-size: small; ">&nbsp; 图 1代理实例的时序图<br style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />&nbsp;&nbsp;&nbsp; 我们在上图中特别使用虚线阴影的方式对通过代理器创建的ForumService实例进行凸显，该实例内部利用PerformaceHandler整合横切逻辑和业务逻辑。调用者调用代理对象的的removeForum()和removeTopic()方法时，上图的内部调用时序清晰地告诉了我们实际上所发生的一切。</span><span class="Apple-style-span" style="color: #444444; font-family: 宋体; line-height: 24px; font-size: small; background-color: #ffffff; "><br /></span><span class="Apple-style-span" style="color: #444444; font-family: 宋体; line-height: 24px; background-color: #ffffff; "><font size="2" style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><br /><br />&nbsp;<br /><br /></font></span><font class="Apple-style-span" color="#444444" face="宋体"><span class="Apple-style-span" style="line-height: 24px; "><strong><br /></strong></span></font><img src ="http://www.blogjava.net/anduo1989/aggbug/360134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anduo1989/" target="_blank">安多</a> 2011-10-07 19:29 <a href="http://www.blogjava.net/anduo1989/archive/2011/10/07/360134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate学习总结002-IdGenerator</title><link>http://www.blogjava.net/anduo1989/archive/2011/10/07/360096.html</link><dc:creator>安多</dc:creator><author>安多</author><pubDate>Fri, 07 Oct 2011 01:27:00 GMT</pubDate><guid>http://www.blogjava.net/anduo1989/archive/2011/10/07/360096.html</guid><wfw:comment>http://www.blogjava.net/anduo1989/comments/360096.html</wfw:comment><comments>http://www.blogjava.net/anduo1989/archive/2011/10/07/360096.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anduo1989/comments/commentRss/360096.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anduo1989/services/trackbacks/360096.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 首先来看一下如何使用JPA标准定义一个Hibernate的POJO对象Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->&nbsp;1&nbsp;package&nbsp;com.andu...&nbsp;&nbsp;<a href='http://www.blogjava.net/anduo1989/archive/2011/10/07/360096.html'>阅读全文</a><img src ="http://www.blogjava.net/anduo1989/aggbug/360096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anduo1989/" target="_blank">安多</a> 2011-10-07 09:27 <a href="http://www.blogjava.net/anduo1989/archive/2011/10/07/360096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate学习总结001-hibernate概述</title><link>http://www.blogjava.net/anduo1989/archive/2011/10/06/360078.html</link><dc:creator>安多</dc:creator><author>安多</author><pubDate>Thu, 06 Oct 2011 13:35:00 GMT</pubDate><guid>http://www.blogjava.net/anduo1989/archive/2011/10/06/360078.html</guid><wfw:comment>http://www.blogjava.net/anduo1989/comments/360078.html</wfw:comment><comments>http://www.blogjava.net/anduo1989/archive/2011/10/06/360078.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anduo1989/comments/commentRss/360078.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anduo1989/services/trackbacks/360078.html</trackback:ping><description><![CDATA[<div><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说到hibernate，英文意思：冬眠。给我印象最深的是孙文琴老师的那本hibernate深入详解分页上的那句话"let you java object hibernate in the relation database"。其实后边学完了再回头看这句话的时候就发现其实这句话说的很形象，它深刻的反映了hibernate在软件开发中的重要作用：ORM（object relation mapping 对象关系映射），那么要学习hibernate首先需要了解的就是ORM。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;所谓ORM的解释，可以从维基百科中查到：<br /><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对象关系映射</strong>（Object Relational Mapping，简称ORM，或O/RM，或O/R mapping），是一种<a class="mw-redirect" title="程式设计" href="/wiki/%E7%A8%8B%E5%BC%8F%E8%A8%AD%E8%A8%88"><font color="#0645ad">程式设计</font></a>技术，用于实现<a class="mw-redirect" title="面向对象" href="/wiki/%E7%89%A9%E4%BB%B6%E5%B0%8E%E5%90%91"><font color="#0645ad">面向对象</font></a>编程语言里不同<a title="类型系统" href="/wiki/%E9%A1%9E%E5%9E%8B%E7%B3%BB%E7%B5%B1"><font color="#0645ad">类型系统</font></a>的数据之间的转换。从效果上说，它其实是创建了一个可在编程语言里使用的&#8220;虚拟<a title="对象数据库" href="/wiki/%E5%AF%B9%E8%B1%A1%E6%95%B0%E6%8D%AE%E5%BA%93"><font color="#0645ad">对象数据库</font></a>&#8221;。如今已有很多免费和收费的ORM产品，而有些程序员更倾向于创建自己的的ORM工具。 
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;面向对象是从<a class="mw-redirect" title="软件工程" href="/wiki/%E8%BB%9F%E9%AB%94%E5%B7%A5%E7%A8%8B"><font color="#0645ad">软件工程</font></a>基本原则（如耦合、聚合、封装）的基础上发展起来的，而关系数据库则是从<a title="数学" href="/wiki/%E6%95%B0%E5%AD%A6"><font color="#0645ad">数学</font></a>理论发展而来的，两套理论存在显著的区别。为了解决这个不匹配的现象，对象关系映射技术应运而生。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;简单的说：ORM相当于<a class="new" title="中继数据" href="/w/index.php?title=%E4%B8%AD%E7%B9%BC%E8%B3%87%E6%96%99&amp;action=edit&amp;redlink=1"><font color="#ba0000">中继数据</font></a>。具体到产品上，例如下边的<a title="ADO.NET Entity Framework" href="/wiki/ADO.NET_Entity_Framework"><font color="#0645ad">ADO.NET Entity Framework</font></a>。DLINQ中实体类的属性[Table]就算是一种中继数据。</p>
</font><p><font style="background-color: #cce8cf">对象关系映射成功运用在不同的面向对象持久层产品中，如：<a class="new" title="Torque" href="/w/index.php?title=Torque&amp;action=edit&amp;redlink=1"><font color="#ba0000">Torque</font></a>，<a class="new" title="OJB" href="/w/index.php?title=OJB&amp;action=edit&amp;redlink=1"><font color="#ba0000">OJB</font></a>，<a title="Hibernate" href="/wiki/Hibernate"><font color="#0645ad">Hibernate</font></a>，<a title="TopLink" href="/wiki/TopLink"><font color="#0645ad">TopLink</font></a>，<a class="new" title="Castor JDO" href="/w/index.php?title=Castor_JDO&amp;action=edit&amp;redlink=1"><font color="#ba0000">Castor JDO</font></a>，<a class="new" title="TJDO" href="/w/index.php?title=TJDO&amp;action=edit&amp;redlink=1"><font color="#ba0000">TJDO</font></a>，<a title="Active Record" href="/wiki/Active_Record"><font color="#0645ad">Active Record</font></a>，<a title="NHibernate" href="/wiki/NHibernate"><font color="#0645ad">NHibernate</font></a>，<a title="ADO.NET Entity Framework" href="/wiki/ADO.NET_Entity_Framework"><font color="#0645ad">ADO.NET Entity Framework</font></a> 等。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以上是维基百科中解释。所的很官僚，就是说的我们大家一般的人不太能理解。我个人的理解就是：对我们这些对JDBC常用操作非常厌倦的人来了个封装，然后给我们各种常用的接口，而且让我们感觉不到我们在操纵数据库，而只是在调人家给的接口，这无形中让我们感觉到很舒服，很惬意。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hibernate同样是ORM工具，那么它给我们提供了那些接口呢？让我列举几个：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session、负责执行被持久化对象的CRUD操作(CRUD的任务是完成与<a href="http://baike.baidu.com/view/1088.htm" target="_blank"><font color="#136ec2">数据库</font></a>的交流，包含了很多常见的SQL语句。)。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionFactory、负责初始化Hibernate。它充当数据存储源的代理，并负责创建Session对象。这里用到了<a href="http://baike.baidu.com/view/1306799.htm" target="_blank"><font color="#136ec2">工厂模式</font></a><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction、&nbsp;负责事务相关的操作。它是可选的，开发人员也可以设计编写自己的底层事务处理代码<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query、Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration、负责配置并启动Hibernate，创建SessionFactory对象。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /></font></p></div><img src ="http://www.blogjava.net/anduo1989/aggbug/360078.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anduo1989/" target="_blank">安多</a> 2011-10-06 21:35 <a href="http://www.blogjava.net/anduo1989/archive/2011/10/06/360078.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaSE学习之路-001-指导路线</title><link>http://www.blogjava.net/anduo1989/articles/360077.html</link><dc:creator>安多</dc:creator><author>安多</author><pubDate>Thu, 06 Oct 2011 13:10:00 GMT</pubDate><guid>http://www.blogjava.net/anduo1989/articles/360077.html</guid><wfw:comment>http://www.blogjava.net/anduo1989/comments/360077.html</wfw:comment><comments>http://www.blogjava.net/anduo1989/articles/360077.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anduo1989/comments/commentRss/360077.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anduo1989/services/trackbacks/360077.html</trackback:ping><description><![CDATA[<p align="justify"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
<p style="text-indent: 21pt" align="justify"><span style="font-family: 宋体">看着身边很多朋友盲目的学习</span><span style="font-family: Verdana">java</span><span style="font-family: 宋体">，自己真的很想帮帮他们，所以我觉得我应该把我这个自学者的经验分享给那些还在继续着</span><span style="font-family: Verdana">java</span><span style="font-family: 宋体">无边际学习的朋友们指指路，分享我的那些经验也好，错误也罢。</span><span style="font-family: Verdana">&nbsp;</span></p>
<p style="text-indent: 21pt" align="justify"><span style="font-family: Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --------------------</span><span style="font-family: 宋体">写在前面</span></p>
<p style="text-indent: 21pt" align="justify"><span style="font-family: 宋体">熟话说，有了目标的前进就不怕没有结果，所以我们首先要明了</span><span style="font-family: Verdana">Java</span><span style="font-family: 宋体">学习的路线</span><span style="font-family: Verdana"><br />&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">前几天在网上看到一副</span><span style="font-family: Verdana">java</span><span style="font-family: 宋体">的路线图，觉得很受用，转了下来，让我们先看看图，然后看图说话。<br />&nbsp;&nbsp;&nbsp;&nbsp;<img style="width: 960px; height: 1029px" border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/anduo1989/java.jpg" width="960" height="1029" /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 宋体">可能有写朋友看到这么大的一张图会很晕。这么就个</span><span>java</span><span style="font-family: 宋体">要学这么多了。不是我就学</span><span>java</span><span style="font-family: 宋体">，吗？为什么还要我去学什么</span><span>html css jsp </span><span style="font-family: 宋体">这些都是什么啊？请大家稍安勿躁，且听我慢慢道来。</span></p>
<p style="text-indent: 21pt" align="justify"><span style="font-family: 宋体">怎么学</span><span>java</span><span style="font-family: 宋体">是很多新手的经常问到的问题，现在我就根据网上的一篇博客来简单的介绍一下吧。</span></p>
<p style="line-height: 19.5pt;background: white" align="justify"><span style="font-size: 10.5pt">首先要明白</span><span style="font-family: Arial; font-size: 10.5pt">Java</span><span style="font-size: 10.5pt">体系设计到得三个方面：</span><span style="font-family: Arial; font-size: 10.5pt">J2SE,J2EE,J2ME</span><span style="font-size: 10.5pt">（</span><span style="font-family: Arial; font-size: 10.5pt">KJAVA</span><span style="font-size: 10.5pt">）。</span><span style="font-family: Arial; font-size: 10.5pt">J2SE</span><span style="font-size: 10.5pt">，</span><span style="font-family: Arial; font-size: 10.5pt">Java 2 Platform Standard Edition</span><span style="font-size: 10.5pt">，我们经常说到的</span><span style="font-family: Arial; font-size: 10.5pt">JDK</span><span style="font-size: 10.5pt">，就主要指的这个，它是三者的基础，属于桌面级应用开发，这部分如果学得好很容易拓展</span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">和</span><span style="font-family: Arial; font-size: 10.5pt">J2ME</span><span style="font-size: 10.5pt">。</span><span style="font-family: Arial; font-size: 10.5pt">J2ME</span><span style="font-size: 10.5pt">，</span><span style="font-family: Arial; font-size: 10.5pt">The Micro Edition of the Java 2 Platform</span><span style="font-size: 10.5pt">。主要用于嵌入式</span><span style="font-family: Arial; font-size: 10.5pt">Java</span><span style="font-size: 10.5pt">，如手机，</span><span style="font-family: Arial; font-size: 10.5pt">PDA</span><span style="font-size: 10.5pt">等等。</span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">，</span><span style="font-family: Arial; font-size: 10.5pt">Java 2 Platform</span><span style="font-size: 10.5pt">，</span><span style="font-family: Arial; font-size: 10.5pt">Enterprise Edition</span><span style="font-size: 10.5pt">，就是所谓的企业级</span><span style="font-family: Arial; font-size: 10.5pt">Java</span><span style="font-size: 10.5pt">，适合企业的大型应用开发。</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">J2SE</span><span style="font-size: 10.5pt">：</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10.5pt">新手最初学习的时候先要从</span><span style="font-family: Arial; font-size: 10.5pt">J2SE</span><span style="font-size: 10.5pt">开始学起，所包含的内容主要分为：面向对象概念的理解、</span><span style="font-family: Arial; font-size: 10.5pt">Java</span><span style="font-size: 10.5pt">基本语法的学习，</span><span style="font-family: Arial; font-size: 10.5pt">Java</span><span style="font-size: 10.5pt">桌面图形界面应用程序的开发，掌握常用的</span><span style="font-family: Arial; font-size: 10.5pt">Java API</span><span style="font-size: 10.5pt">等（关键是要学会怎样查阅）。</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-size: 10.5pt">重点：</span><span style="font-family: Arial; font-size: 10.5pt">Java</span><span style="font-size: 10.5pt">基本语法（循环结构，数据类型，数组，运算符等）、</span><span style="font-family: Arial; font-size: 10.5pt">Swing</span><span style="font-size: 10.5pt">，</span><span style="font-family: Arial; font-size: 10.5pt">awt</span><span style="font-size: 10.5pt">，事件机制、文件输入输出流处理等</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-size: 10.5pt">难点：面向对象思想的理解（接口、类等）、线程、</span><span style="font-family: Arial; font-size: 10.5pt">socket</span><span style="font-size: 10.5pt">网络编程等</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-size: 10.5pt">视频教程推荐：孙鑫的</span><span style="font-family: Arial; font-size: 10.5pt">Java</span><span style="font-size: 10.5pt">基础视频教程、张孝祥的</span><span style="font-family: Arial; font-size: 10.5pt">Java</span><span style="font-size: 10.5pt">基础视频教程，讲的都很细，而且这两位老师在教学方面都有很好的经验。</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">：</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10.5pt">在学习了</span><span style="font-family: Arial; font-size: 10.5pt">J2SE</span><span style="font-size: 10.5pt">之后，你可以尝试着慢慢过渡到</span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">，当然，学习</span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">海需要很多非</span><span style="font-family: Arial; font-size: 10.5pt">JAVA</span><span style="font-size: 10.5pt">技术的支撑，比如数据库技术，网页编程技术等等，待会我会详细介绍这两方面的内容。</span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">有三个必学的框架，如果你说你学了</span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">，但又不会这三个框架的话，那会让人笑掉大牙，这三个框架分别是</span><span style="font-family: Arial; font-size: 10.5pt">Struts</span><span style="font-size: 10.5pt">、</span><span style="font-family: Arial; font-size: 10.5pt">Spring</span><span style="font-size: 10.5pt">和</span><span style="font-family: Arial; font-size: 10.5pt">Hibernate</span><span style="font-size: 10.5pt">，虽然这三个框架应用很广，但不代表这三个框架就代表了</span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">，</span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">还有很多其他的东西，比如</span><span style="font-family: Arial; font-size: 10.5pt">EJB</span><span style="font-size: 10.5pt">，作为一款重量级（此重量级不是指重量级选手那个意思，此重量级非彼重量级）框架，虽然这个应用慢慢的再被其他框架所取代，但</span><span style="font-family: Arial; font-size: 10.5pt">EJB3.0</span><span style="font-size: 10.5pt">的出现也给它带回一些生机，作为一个分布式应用的框架，也是大家要去学习和了解的知识。</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10.5pt">当然，刚才说到</span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">包含的范围很广，即使我把我所了解的所有技术说出来，也并不能代表</span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">，这是一个很深很广的学问，需要大家以后再工作的时候慢慢去发现了。我所了解的还包括：</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">JDBC:Java</span><span style="font-size: 10.5pt">数据库连接对象，基础中的基础，</span><span style="font-family: Arial; font-size: 10.5pt">Hibernate</span><span style="font-size: 10.5pt">也只是对它的封装而已</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">JNDI: Java </span><span style="font-size: 10.5pt">命名与目录接口，</span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">重要规范之一</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">EJBS: </span><span style="font-size: 10.5pt">上面已经提到过了</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">RMI: </span><span style="font-size: 10.5pt">提供远程调用方法的支持，主要用于程序分布式开发</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">JMS: Java</span><span style="font-size: 10.5pt">消息服务，中间件技术</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">JAVA IDL: </span><span style="font-size: 10.5pt">提供</span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">平台与</span><span style="font-family: Arial; font-size: 10.5pt">CORBA</span><span style="font-size: 10.5pt">交互能力和互联能力的技术</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">JTS: </span><span style="font-size: 10.5pt">组件事务监视器</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">JTA: </span><span style="font-size: 10.5pt">事务划分的一个技术</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">JAVAMAIL: Java</span><span style="font-size: 10.5pt">中的邮件技术</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">JAF: Java</span><span style="font-size: 10.5pt">启动框架</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">没研究过</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">Log4j</span><span style="font-size: 10.5pt">，一款日志处理的框架应用</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">Junit</span><span style="font-size: 10.5pt">：单元测试的好帮手</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">freemarker</span><span style="font-size: 10.5pt">、</span><span style="font-family: Arial; font-size: 10.5pt">velocity</span><span style="font-size: 10.5pt">：两款不错的模板引擎</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-size: 10.5pt">与</span><span style="font-family: Arial; font-size: 10.5pt">Flash</span><span style="font-size: 10.5pt">的交互</span><span style="font-family: Arial; font-size: 10.5pt">Flex</span><span style="font-size: 10.5pt">：目前很多的</span><span style="font-family: Arial; font-size: 10.5pt">SNS</span><span style="font-size: 10.5pt">应用就是使用到了这个技术</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">Web services:</span><span style="font-size: 10.5pt">想知道我们论坛天气预报的效果是怎么做的吗？请关注这个技术</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">SOA:</span><span style="font-size: 10.5pt">面向服务架构，未来技术发展的趋势之一</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">&#8230;&#8230; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10.5pt">不过前面介绍到得这些都不是</span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">的基础</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">是属于框架应用级别的</span><span style="font-family: Arial; font-size: 10.5pt">.</span><span style="font-size: 10.5pt">要真正把上面说到的知识掌握好</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">还是的学习</span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">最核心的东西</span><span style="font-family: Arial; font-size: 10.5pt">:JDBC</span><span style="font-size: 10.5pt">、</span><span style="font-family: Arial; font-size: 10.5pt">JSP</span><span style="font-size: 10.5pt">、</span><span style="font-family: Arial; font-size: 10.5pt">servlet</span><span style="font-size: 10.5pt">和</span><span style="font-family: Arial; font-size: 10.5pt">JavaBean,</span><span style="font-size: 10.5pt">后面三个也是学习</span><span style="font-family: Arial; font-size: 10.5pt">SSH</span><span style="font-size: 10.5pt">的基础</span><span style="font-family: Arial; font-size: 10.5pt">(Struts/Spring/Hibernate</span><span style="font-size: 10.5pt">的简称</span><span style="font-family: Arial; font-size: 10.5pt">).</span><span style="font-size: 10.5pt">鉴于</span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">的内容太过复杂</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">建议大家最初只学习</span><span style="font-family: Arial; font-size: 10.5pt">: JSP, servlet</span><span style="font-size: 10.5pt">和</span><span style="font-family: Arial; font-size: 10.5pt">JavaBean</span><span style="font-size: 10.5pt">，等这个基础掌握好再把</span><span style="font-family: Arial; font-size: 10.5pt">SSH</span><span style="font-size: 10.5pt">学习了，再对其他</span><span style="font-family: Arial; font-size: 10.5pt">J2EE</span><span style="font-size: 10.5pt">技术有个大致的了解就可以出去找工作了。当然，找工作的前提除了把</span><span style="font-family: Arial; font-size: 10.5pt">Java</span><span style="font-size: 10.5pt">学习好，还会有一些其他的技术也是必须要掌握的。</span></p>
<p style="line-height: 19.5pt;background: white" align="justify"><span style="font-family: Arial; font-size: 10.5pt">-_- </span><span style="font-size: 10.5pt">我很简单</span><span style="font-family: Arial; font-size: 10.5pt">,Java</span><span style="font-size: 10.5pt">却要求我学这么多复杂的东西。除了这些技术的东西，在这阶段，大家更多的是会接触到比如设计模式的东西，比如工厂模式、桥梁模式、单例模式等等，还要学习建模思想（比如</span><span style="font-family: Arial; font-size: 10.5pt">UML</span><span style="font-size: 10.5pt">建模等等）和软件生命周期等等。这些是升华大家编程思想的手段和途径。</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-size: 10.5pt">数据库技术</span><span style="font-family: Arial; font-size: 10.5pt">: <br />&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10.5pt">数据库几乎是程序中不可或缺的一部分</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">在整个软件开发中更是占据了重要作用</span><span style="font-family: Arial; font-size: 10.5pt">.</span><span style="font-size: 10.5pt">数据库在整个软件中扮演的是地基的角色</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">你要修房子</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">就要先打好地基</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">你要做软件</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">就要先设计好的数据库</span><span style="font-family: Arial; font-size: 10.5pt">.</span><span style="font-size: 10.5pt">目前数据库几乎都是关系型数据库</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">代表的有</span><span style="font-family: Arial; font-size: 10.5pt">: <br /></span><span style="font-family: Arial; font-size: 10.5pt">SQL Server,</span><span style="font-size: 10.5pt">目前最新的好像是</span><span style="font-family: Arial; font-size: 10.5pt">2008,</span><span style="font-size: 10.5pt">我不是很喜欢追赶时髦</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">用的还是</span><span style="font-family: Arial; font-size: 10.5pt">2005,</span><span style="font-size: 10.5pt">不过也很不错了</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">在此之前还有</span><span style="font-family: Arial; font-size: 10.5pt">2000. <br /></span><span style="font-family: Arial; font-size: 10.5pt">MySQL,</span><span style="font-size: 10.5pt">最知名的开源数据库之一</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">我很喜欢它的小巧耐用</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">学过</span><span style="font-family: Arial; font-size: 10.5pt">SQL SERVER</span><span style="font-size: 10.5pt">数据库再学它</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">无师自通</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">易如反掌</span><span style="font-family: Arial; font-size: 10.5pt">. <br /></span><span style="font-family: Arial; font-size: 10.5pt">ORACLE.</span><span style="font-size: 10.5pt">甲骨文公司的产品</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">大型数据库</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">正版的一般公司买不起</span><span style="font-family: Arial; font-size: 10.5pt">.</span><span style="font-size: 10.5pt">只有看看了</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">不过现在</span><span style="font-family: Arial; font-size: 10.5pt">Java</span><span style="font-size: 10.5pt">开发</span><span style="font-family: Arial; font-size: 10.5pt">60%</span><span style="font-size: 10.5pt">都是会使用到这个数据库</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">再加上现在甲骨文已经把</span><span style="font-family: Arial; font-size: 10.5pt">sun</span><span style="font-size: 10.5pt">公司收购了</span><span style="font-family: Arial; font-size: 10.5pt">,JAVA</span><span style="font-size: 10.5pt">和</span><span style="font-family: Arial; font-size: 10.5pt">ORACLE</span><span style="font-size: 10.5pt">得关系更加暧昧</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">各位得多花些时间在这上面了</span><span style="font-family: Arial; font-size: 10.5pt">. <br /></span><span style="font-size: 10.5pt">除了这些，你还应该了解一些桌面应用软件开发用到的数据库，比如说</span><span style="font-family: Arial; font-size: 10.5pt">sqlite</span><span style="font-size: 10.5pt">。你在制作安装程序的时候可以把这个数据库打包进你的安装程序。</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-size: 10.5pt">网页编程基础</span><span style="font-family: Arial; font-size: 10.5pt">: <br />&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10.5pt">网页编程基础要学的内容也比较多</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">但主要集中在以下这三个技术之上</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">大家每天看的各种样式的网页都是它们呈现的</span><span style="font-family: Arial; font-size: 10.5pt">: <br /></span><span style="font-family: Arial; font-size: 10.5pt">HTML:</span><span style="font-size: 10.5pt">超文本标记语言</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">CSS:</span><span style="font-size: 10.5pt">层叠样式表</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">Javascript:</span><span style="font-size: 10.5pt">浏览器客户端脚本语言</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-size: 10.5pt">现在更是流行各种</span><span style="font-family: Arial; font-size: 10.5pt">JavaScript</span><span style="font-size: 10.5pt">库</span><span style="font-family: Arial; font-size: 10.5pt">,</span><span style="font-size: 10.5pt">比如</span><span style="font-family: Arial; font-size: 10.5pt">:Jquery</span><span style="font-size: 10.5pt">、</span><span style="font-family: Arial; font-size: 10.5pt">ExtJs</span><span style="font-size: 10.5pt">等，你要是会其中的某一个库的使用，找工作</span><span style="font-family: Arial; font-size: 10.5pt">so easy</span><span style="font-size: 10.5pt">。</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-family: Arial; font-size: 10.5pt">J2ME</span><span style="font-size: 10.5pt">：</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br />&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10.5pt">如果你在学习了以上技术还不过瘾，可以再学习手机程序的开发，就我个人看来，开发手机程序技术其实蛮简单的，难点在于优化，比如怎么让你写的程序尽量的节约手机资源，</span><span style="font-family: Arial; font-size: 10.5pt">&#8220;</span><span style="font-size: 10.5pt">代码诚可贵，手机价更高</span><span style="font-family: Arial; font-size: 10.5pt">&#8220;</span><span style="font-size: 10.5pt">，所以不得不比</span><span style="font-family: Arial; font-size: 10.5pt">PC</span><span style="font-size: 10.5pt">机多考虑很多成本和实用性问题。</span><span style="font-family: Arial; font-size: 10.5pt">J2ME</span><span style="font-size: 10.5pt">的学习的话，切忌不要单纯的再模拟器上测试，一定要找真机测试，真机和模拟器的效果之间差别是很大的。更多手机开发技术，有兴趣的朋友可以和我一起探讨。</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br /></span><span style="font-size: 10.5pt">开发工具：</span><span style="font-family: Arial; color: #333333; font-size: 10.5pt"> <br />&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10.5pt">开发工具的选择主要还是看大家的习惯，我个人比较喜欢使用</span><span style="font-family: Arial; font-size: 10.5pt">eclispe</span><span style="font-size: 10.5pt">，功能很强大，也很好拓展其他的功能。当让初学你也可以选择</span><span style="font-family: Arial; font-size: 10.5pt">JCreator</span><span style="font-size: 10.5pt">，或者最好就直接用记事本。等你熟悉了</span><span style="font-family: Arial; font-size: 10.5pt">Java</span><span style="font-size: 10.5pt">代码之后，就可以使用</span><span style="font-family: Arial; font-size: 10.5pt">J</span><span style="font-family: Arial; font-size: 10.5pt">Builder</span><span style="font-size: 10.5pt">、</span><span style="font-family: Arial; font-size: 10.5pt">eclispe</span><span style="font-size: 10.5pt">或者</span><span style="font-family: Arial; font-size: 10.5pt">netbeans</span><span style="font-size: 10.5pt">这一类的工具了。</span></p>
<p style="text-indent: 21pt" align="justify"><span>----</span><span style="font-family: 宋体">此文出于</span><span style="font-family: Arial; color: #333333"><a title="http://tieba.baidu.com/f?kz=692446591" href="http://tieba.baidu.com/f?kz=692446591"><span>http://tieba.baidu.com/f?kz=692446591</span></a></span></p>
<p align="justify"><br />&nbsp;</p><img src ="http://www.blogjava.net/anduo1989/aggbug/360077.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anduo1989/" target="_blank">安多</a> 2011-10-06 21:10 <a href="http://www.blogjava.net/anduo1989/articles/360077.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于爱情的那些</title><link>http://www.blogjava.net/anduo1989/archive/2011/07/03/353605.html</link><dc:creator>安多</dc:creator><author>安多</author><pubDate>Sun, 03 Jul 2011 14:16:00 GMT</pubDate><guid>http://www.blogjava.net/anduo1989/archive/2011/07/03/353605.html</guid><wfw:comment>http://www.blogjava.net/anduo1989/comments/353605.html</wfw:comment><comments>http://www.blogjava.net/anduo1989/archive/2011/07/03/353605.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anduo1989/comments/commentRss/353605.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anduo1989/services/trackbacks/353605.html</trackback:ping><description><![CDATA[太爱一个人，你会太在乎他跟谁一起，心里是否有你；太爱一个人，会被他牵着鼻子走，完全不能自己；太爱一个人，会无原则地忍受他，慢慢他习惯被纵容；太爱一个人，他会习惯你对他的好，而忘了自己也应该付出。所以，爱一个人不要爱十分，八分已足够，剩下的两分爱自己<img src ="http://www.blogjava.net/anduo1989/aggbug/353605.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anduo1989/" target="_blank">安多</a> 2011-07-03 22:16 <a href="http://www.blogjava.net/anduo1989/archive/2011/07/03/353605.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件开发的需求分析</title><link>http://www.blogjava.net/anduo1989/archive/2011/06/27/363207.html</link><dc:creator>安多</dc:creator><author>安多</author><pubDate>Mon, 27 Jun 2011 07:37:00 GMT</pubDate><guid>http://www.blogjava.net/anduo1989/archive/2011/06/27/363207.html</guid><wfw:comment>http://www.blogjava.net/anduo1989/comments/363207.html</wfw:comment><comments>http://www.blogjava.net/anduo1989/archive/2011/06/27/363207.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anduo1989/comments/commentRss/363207.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anduo1989/services/trackbacks/363207.html</trackback:ping><description><![CDATA[
              <p><span style="">    软件开发的第一步是需求分析。对需求的分析、准确理解和把握，对于软件的成功至关重要，过于频繁的需求变更往往导致软件开发陷入“人月神话”的困境。现代软件工程提出的面向对象分析方法给软件需求分析提供了便利。</span>
</p>
<p> </p>
<p><span style="font-size: medium;">         面向对象分析通常分为三个步骤：</span>
</p>
<ul>
<li>
<span style="font-size: medium;">领域分析  找出给系统涉及的名词或术语</span>
</li>
<li>
<span style="font-size: medium;">用户分析  找出使用该系统的用户，并明确分类用户需要具备的功能</span>
</li>
<li>
<span style="font-size: medium;">功能分析  分析功能，并对每个功能点进行细化</span>
</li>
</ul>
<p> </p>
<p> </p>
<p> </p>
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://anduo1989.iteye.com/blog/1106466#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
<span style="color:#E28822;">ITeye推荐</span>
<br/>
<ul><li><a href='/clicks/433' target='_blank'><span style="color:red;font-weight:bold;">—软件人才免语言低担保 赴美带薪读研！— </span></a></li></ul>
<br/><br/><br/>
              <img src ="http://www.blogjava.net/anduo1989/aggbug/363207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anduo1989/" target="_blank">安多</a> 2011-06-27 15:37 <a href="http://www.blogjava.net/anduo1989/archive/2011/06/27/363207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何用jdbc连接数据库 java连接数据库的五步</title><link>http://www.blogjava.net/anduo1989/archive/2011/06/09/363208.html</link><dc:creator>安多</dc:creator><author>安多</author><pubDate>Thu, 09 Jun 2011 14:18:00 GMT</pubDate><guid>http://www.blogjava.net/anduo1989/archive/2011/06/09/363208.html</guid><wfw:comment>http://www.blogjava.net/anduo1989/comments/363208.html</wfw:comment><comments>http://www.blogjava.net/anduo1989/archive/2011/06/09/363208.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anduo1989/comments/commentRss/363208.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anduo1989/services/trackbacks/363208.html</trackback:ping><description><![CDATA[
              <p> </p>
<p>用JDBC连接数据库</p>
<p>本文用sqlserver2000为例</p>
<p> </p>
<p>先简述JDBC连接数据库的五步</p>
<p>1，加载驱动。这里的驱动是根据各个数据的情况有所不同，但是格式一样，一般用 </p>
<pre name="code" class="java">Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");</pre>
<p> </p>
<p>2，创建连接。DriverManager.getConnection(url, userName, password);</p>
<p>     参数说明：url 是指连接的地址 由五个部分组成 协议+服务+IP+端口+资源 </p>
<p>                    （附：几个常用的数据库的默认端口号:</p>
<p>                              sqlserver  1433</p>
<p>                              oracle       1523</p>
<p>                              mysql        3306</p>
<p>                    ）</p>
<p>                    userName 数据库用户名</p>
<p>                    password  用户名密码</p>
<p>3，根据sql语句建立statement对象或者是preparedstatement对象</p>
<p>4，操作数据 此处分为两类 查询和增删改</p>
<p>5，关闭statement和connection对象</p>
<p> </p>
<p>下面是一个小小的测试</p>
<pre name="code" class="java">
package com.anduo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBtest {
 public static void main(String[] args) {
  Connection con = null;
  Statement stmt = null;

  try {
   // 第一步 加载驱动
   Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

   // 第二步 创建链接
   String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=test";
   con = DriverManager.getConnection(url, "sa", "sa");

   // 第三步 创建方式
   stmt = con.createStatement();

   // 第四步 操作数据
   String sql = "insert into student_anduo(student_name,student_sex,student_age) values('user1','male',21)";
   stmt.executeUpdate(sql);
   sql = "select * from student_anduo";
   ResultSet rs = stmt.executeQuery(sql);
   while (rs.next()) {
    System.out.println(rs.getObject(1));
   }

   String sql_d = "drop table student_anduo";
   stmt.executeUpdate(sql_d);

  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally {

   // 第五步 关闭
   try {
    if (stmt != null) {
     stmt.close();
     stmt = null;
    }
    if (con != null) {
     con.close();
     con = null;
    }

   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

  }

 }
}


</pre>
<p>  </p>
<p> </p>
<p> </p>
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://anduo1989.iteye.com/blog/1074649#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
<span style="color:#E28822;">ITeye推荐</span>
<br/>
<ul><li><a href='/clicks/433' target='_blank'><span style="color:red;font-weight:bold;">—软件人才免语言低担保 赴美带薪读研！— </span></a></li></ul>
<br/><br/><br/>
              <img src ="http://www.blogjava.net/anduo1989/aggbug/363208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anduo1989/" target="_blank">安多</a> 2011-06-09 22:18 <a href="http://www.blogjava.net/anduo1989/archive/2011/06/09/363208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个Java程序员应该掌握的10项技能</title><link>http://www.blogjava.net/anduo1989/archive/2011/06/01/363209.html</link><dc:creator>安多</dc:creator><author>安多</author><pubDate>Wed, 01 Jun 2011 04:25:00 GMT</pubDate><guid>http://www.blogjava.net/anduo1989/archive/2011/06/01/363209.html</guid><wfw:comment>http://www.blogjava.net/anduo1989/comments/363209.html</wfw:comment><comments>http://www.blogjava.net/anduo1989/archive/2011/06/01/363209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anduo1989/comments/commentRss/363209.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anduo1989/services/trackbacks/363209.html</trackback:ping><description><![CDATA[
              <div>
<p><strong>1、语法</strong>：必须比较熟悉，在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正。</p>
<p><strong>2、命令</strong>：必须熟悉JDK带的一些常用命令及其常用选项，命令至少需要熟悉：appletviewer、 HtmlConverter、jar、 java、javac、javadoc、javap、javaw、native2ascii、serialver，如果这些命令你没有全部使用过，那么你对java实际上还很不了解。</p>
<p><strong>3、工具</strong>：必须至少熟练使用一种IDE的开发工具，例如Eclipse、Netbeans、JBuilder、Jdeveloper、IDEA、JCreator或者Workshop，包括进行工程管理、常用选项的设置、插件的安装配置以及进行调试。</p>
<p><strong>4、API</strong>：Java的核心API是非常庞大的，但是有一些内容笔者认为是必须熟悉的，否则不可能熟练的运用Java，包括：<br>◆java.lang包下的80％以上的类的功能的灵活运用。</p>
<p>◆java.util包下的80％以上的类的灵活运用，特别是集合类体系、规则表达式、zip、以及时间、随机数、属性、资源和Timer.</p>
<p>◆java.io包下的60％以上的类的使用，理解IO体系的基于管道模型的设计思路以及常用IO类的特性和使用场合。</p>
<p>◆java.math包下的100％的内容。</p>
<p>◆java.net包下的60％以上的内容，对各个类的功能比较熟悉。</p>
<p>◆java.text包下的60％以上的内容，特别是各种格式化类。</p>
<p>◆熟练运用JDBC. 8）、java.security包下40％以上的内容，如果对于安全没有接触的话根本就不可能掌握java.</p>
<p>◆AWT的基本内容，包括各种组件事件、监听器、布局管理器、常用组件、打印。</p>
<p>◆Swing的基本内容，和AWT的要求类似。</p>
<p>◆XML处理，熟悉SAX、DOM以及JDOM的优缺点并且能够使用其中的一种完成XML的解析及内容处理。</p>
<p><strong>5、测试</strong>：必须熟悉使用junit编写测试用例完成代码的自动测试。</p>
<p><strong>6、管理</strong>：必须熟悉使用ant完成工程管理的常用任务，例如工程编译、生成javadoc、生成jar、版本控制、自动测试。</p>
<p><strong>7、排错</strong>：应该可以根据异常信息比较快速的定位问题的原因和大致位置。</p>
<p><strong>8、思想</strong>：必须掌握OOP的主要要求，这样使用Java开发的系统才能是真正的Java系统。</p>
<p><strong>9、规范</strong>：编写的代码必须符合流行的编码规范，例如类名首字母大写，成员和方法名首字母小写，方法名的第一个单词一般是动词，包名全部小写等，这样程序的可读性才比较好。</p>
<p><strong>10、博学</strong>：掌握J2EE 、Oracle 、WebLogic、Jboss、Spring、Struts、Hibernate 等流行技术，掌握软件架构设计思想、搜索引擎优化、缓存系统设计、网站负载均衡、系统性能调优等实用技术。</p>
</div>
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://anduo1989.iteye.com/blog/1067111#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
<span style="color:#E28822;">ITeye推荐</span>
<br/>
<ul><li><a href='/clicks/433' target='_blank'><span style="color:red;font-weight:bold;">—软件人才免语言低担保 赴美带薪读研！— </span></a></li></ul>
<br/><br/><br/>
              <img src ="http://www.blogjava.net/anduo1989/aggbug/363209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anduo1989/" target="_blank">安多</a> 2011-06-01 12:25 <a href="http://www.blogjava.net/anduo1989/archive/2011/06/01/363209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>css+div 纵向列表</title><link>http://www.blogjava.net/anduo1989/archive/2011/05/22/363210.html</link><dc:creator>安多</dc:creator><author>安多</author><pubDate>Sun, 22 May 2011 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/anduo1989/archive/2011/05/22/363210.html</guid><wfw:comment>http://www.blogjava.net/anduo1989/comments/363210.html</wfw:comment><comments>http://www.blogjava.net/anduo1989/archive/2011/05/22/363210.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anduo1989/comments/commentRss/363210.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anduo1989/services/trackbacks/363210.html</trackback:ping><description><![CDATA[
              <p><textarea cols="50" rows="15" name="code" class="xhtml:showcolumns">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&gt;
&lt;title&gt;3.1纵向列表&lt;/title&gt;
&lt;link href="3.1.css" mce_href="3.1.css" rel="stylesheet" type="text/css" /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="menue"&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href="#" mce_href="#"&gt;首页&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#" mce_href="#"&gt;网页版式布局&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#" mce_href="#"&gt;div+css教程&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#" mce_href="#"&gt;div+css实例&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#" mce_href="#"&gt;常用代码&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#" mce_href="#"&gt;站长杂谈&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#" mce_href="#"&gt;技术文档&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#" mce_href="#"&gt;资源下载&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#" mce_href="#"&gt;图片素材&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</textarea></p>

<p>css文件</p>


<p><textarea cols="50" rows="15" name="code" class="css:showcolumns">#menue ul {
	margin: 0px;
	padding: 0px;
	list-style: none;
}
body {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 12px;
	line-height: 1.5;
}
#menue {
	border: 1px solid #669900;
	width: 100px;
}
#menue ul li {
	line-height: 26px;
	background: #eee;
	padding: 0px 8px;
	height: 26px;
	border-bottom: 1px solid #ccc;
}
a {
	color: #000000;
	text-decoration: none;
}
a:hover {
	color: #FF0000;
}
</textarea></p>

<p>最终效果：</p>
<p><img src="http://hi.csdn.net/attachment/201105/22/0_1306031635534r.gif" alt=""></p>
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://anduo1989.iteye.com/blog/1054684#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
<span style="color:#E28822;">ITeye推荐</span>
<br/>
<ul><li><a href='/clicks/433' target='_blank'><span style="color:red;font-weight:bold;">—软件人才免语言低担保 赴美带薪读研！— </span></a></li></ul>
<br/><br/><br/>
              <img src ="http://www.blogjava.net/anduo1989/aggbug/363210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anduo1989/" target="_blank">安多</a> 2011-05-22 10:33 <a href="http://www.blogjava.net/anduo1989/archive/2011/05/22/363210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DIV+CSS学习第一天</title><link>http://www.blogjava.net/anduo1989/archive/2011/05/20/363211.html</link><dc:creator>安多</dc:creator><author>安多</author><pubDate>Fri, 20 May 2011 11:08:00 GMT</pubDate><guid>http://www.blogjava.net/anduo1989/archive/2011/05/20/363211.html</guid><wfw:comment>http://www.blogjava.net/anduo1989/comments/363211.html</wfw:comment><comments>http://www.blogjava.net/anduo1989/archive/2011/05/20/363211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anduo1989/comments/commentRss/363211.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anduo1989/services/trackbacks/363211.html</trackback:ping><description><![CDATA[
              <p style="padding-left: 30px;">1 一列固定宽度 <br>2 一列固定宽度居中 <br>3 一列自适应宽度 <br>4 一列自适应宽度居中 <br>5 一列二至多块布局 </p>
<p style="padding-left: 30px;"></p>
<p style="padding-left: 30px;"></p>
<p>采用了dreamweaver来开始网页设计，其优点主要有：代码提示，可视化开发环境，完美支持css+div</p>
<p>一列固定宽度 </p>
<p><textarea cols="50" rows="15" name="code" class="xhtml:showcolumns">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&gt;
&lt;mce:style type="text/css"&gt;&lt;!--
#layout { height: 300px; width: 400px; background: #99FFcc; }
--&gt;&lt;/mce:style&gt;&lt;style type="text/css" mce_bogus="1"&gt;#layout { height: 300px; width: 400px; background: #99FFcc; }&lt;/style&gt;
&lt;/head&gt;&lt;/p&gt;
&lt;p&gt;&lt;body&gt;
&lt;div id="layout"&gt;此处显示  id "layout" 的内容&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</textarea></p>


<p>一列固定宽度居中<br>一列固定宽度居中和一列固定宽度相比，我们要解决的问题就是居中。这里我们用到css的外边距属性：margin。在IE6及以上版本和标准的浏览器当中，当设置一个盒模型的的margin:auto;时，可以让这个盒模型居中。<br><textarea cols="50" rows="15" name="code" class="xhtml:showcolumns">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&gt;
&lt;mce:style type="text/css"&gt;&lt;!--
#layout { height: 300px; width: 400px; background: #99FFcc; margin:auto; }
--&gt;&lt;/mce:style&gt;&lt;style type="text/css" mce_bogus="1"&gt;#layout { height: 300px; width: 400px; background: #99FFcc; margin:auto; }&lt;/style&gt;
&lt;/head&gt;&lt;/p&gt;
&lt;p&gt;&lt;body&gt;
&lt;div id="layout"&gt;此处显示  id "layout" 的内容&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</textarea></p>

<p>一列自适应宽</p>
<p>自适应宽度是相对于浏览器而言，盒模型的宽度随着浏览器宽度的改变而改变。这时要用到宽度的百分比。当一个盒模型不设置宽度时，它默认是相对于浏览器显示的。<br>这里的选择器类型是新手朋友最容易迷糊的地方，类：是指定义一个class，可以多个对象引用；标签：指对默认的html标签进行重新定义，如可以定义body{margin:0}，意思是 将body的外边距设置为0，h2{color:#f00}是将所有h2标签的文字颜色设置为红色；高级它把ID和伪类放到一块了，是一个设置不合理的地方，在cs4版本中已经分开了。ID是以#开始，id只能作用于一个对象，不能作用于多个对象，优先级高于class，这是id和class的区别。<br><textarea cols="50" rows="15" name="code" class="xhtml:showcolumns">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&gt;
&lt;mce:style type="text/css"&gt;&lt;!--
body { margin:0;}
#layout { height: 300px; width: 80%; background: #99FFcc; }
--&gt;&lt;/mce:style&gt;&lt;style type="text/css" mce_bogus="1"&gt;body { margin:0;}
#layout { height: 300px; width: 80%; background: #99FFcc; }&lt;/style&gt;
&lt;/head&gt;&lt;/p&gt;
&lt;p&gt;&lt;body&gt;
&lt;div id="layout"&gt;此处显示  id "layout" 的内容&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</textarea></p>

<p>一列自适应宽度居中<br>同样和固定宽度居中一样，我们只需要设置div的外边距为auto即可实现居中了。</p>
<p><textarea cols="50" rows="15" name="code" class="xhtml:showcolumns">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&gt;
&lt;mce:style type="text/css"&gt;&lt;!--
body { margin:0;}
#layout { height: 300px; width: 80%; background: #99FFcc; margin:auto;}
--&gt;&lt;/mce:style&gt;&lt;style type="text/css" mce_bogus="1"&gt;body { margin:0;}
#layout { height: 300px; width: 80%; background: #99FFcc; margin:auto;}&lt;/style&gt;
&lt;/head&gt;&lt;/p&gt;
&lt;p&gt;&lt;body&gt;
&lt;div id="layout"&gt;此处显示  id "layout" 的内容&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</textarea></p>


<p>一列二至多块布局<br>一般的网站整体可以分为上中下结构，即：头部、中间主体、底部。那么我们可以用三个div块来划分，分别给它们起名为：头部（header）、主体（maincontent）、询问（footer）。</p>

<p><textarea cols="50" rows="15" name="code" class="xhtml:showcolumns">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&gt;
&lt;mce:style type="text/css"&gt;&lt;!--
body { margin:0; padding:0;}
#header { margin:5px auto; width:500px; height:80px; background:#9F9;}
#main { margin:5px auto; width:500px; height:400px; background:#9FF;}
#footer { margin:5px auto; width:500px; height:80px; background:#9f9;}
--&gt;&lt;/mce:style&gt;&lt;style type="text/css" mce_bogus="1"&gt;body { margin:0; padding:0;}
#header { margin:5px auto; width:500px; height:80px; background:#9F9;}
#main { margin:5px auto; width:500px; height:400px; background:#9FF;}
#footer { margin:5px auto; width:500px; height:80px; background:#9f9;}&lt;/style&gt;
&lt;/head&gt;&lt;/p&gt;
&lt;p&gt;&lt;body&gt;
&lt;div id="header"&gt;此处显示  id "header" 的内容&lt;/div&gt;
&lt;div id="main"&gt;此处显示  id "main" 的内容&lt;/div&gt;
&lt;div id="footer"&gt;此处显示  id "footer" 的内容&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</textarea></p>
<p>注意：许多朋友在问：为什么两个相邻的容器中间的间距不是10px，而是5px呢？按照我们正常的理解，认为应该是两个值相加，其实这里是两个合并后取最大值。用css手册中的话说：块级元素的垂直相邻外边距会合并，而行内元素实际上不占上下外边距。行内元素的的左右外边距不会合并。同样地，浮动元素的外边距也不会合并。允许指定负的外边距值，不过使用时要小心</p>

<p>小结</p>
<p>1、CSS可视化生成、格式化<br>2、CSS缩写</p>
<p>3、CSS语法</p>
<p><img src="http://hi.csdn.net/attachment/201105/20/0_13058896711qZa.gif" alt=""></p>
<p>如图所示，CSS语法由如下三部分构成，选择器：可以是ID、CLASS或标签；属性和值是用来定义这个物件的某一个特性。如一张桌子的长120cm，宽60cm，套用css的格式为，桌子{长:120cm;宽:60cm;}，这样是不是容易理解。</p>

<p>4、ID和CLASS选择器</p>
<p>id只能在页面中对应一个元素，就像我们的身份证号一样，每个人的都不一样；class为类，可以对应多个元素，比如说一年级三班的学生，它所对应的可能是10个20个学生。</p>
<p>id的优先级高于class，比如说今天三班的学生上体育课，小明留下来打扫卫生。那么三班的学生上体育课这是一个类，而小明打扫卫生这是个id，虽然小明也是三班的学生，但id高于class，所以小明执行打扫卫生的任务。</p>
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://anduo1989.iteye.com/blog/1054685#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
<span style="color:#E28822;">ITeye推荐</span>
<br/>
<ul><li><a href='/clicks/433' target='_blank'><span style="color:red;font-weight:bold;">—软件人才免语言低担保 赴美带薪读研！— </span></a></li></ul>
<br/><br/><br/>
              <img src ="http://www.blogjava.net/anduo1989/aggbug/363211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anduo1989/" target="_blank">安多</a> 2011-05-20 19:08 <a href="http://www.blogjava.net/anduo1989/archive/2011/05/20/363211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>