<?xml version="1.0" encoding="UTF-8"?>




<rss version="2.0"> <channel> <title>Evernote Openbook: day day study</title>
<link>http://www.evernote.com/pub/smartwgd/daydaystudy</link>
<description>Notes from smartwgd&#039;s  Evernote Openbook: day day study</description> 

  
  <lastBuildDate>Wed, 29 Jul 2009 00:50:24 GMT</lastBuildDate>
 
  
  <item> <title>JAVA和JAVAC 命令行 - 冷圣子的胡言乱语 - 博客园</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#be3b0616-8766-4cf5-b96e-07e6cf98a8b5</link>
  <description><![CDATA[
    
    
    
        
        <div class="ennote">
<div>
<a href="http://www.cnblogs.com/JeffChen/archive/2008/01/15/1039708.html" shape="rect">JAVA和JAVAC 命令行</a>
<div>javac和java命令行中的-classpath选项<br clear="none"/>
这是个很基础的问题，但是因为基本上都是用现有的IDE工具 来开发java程序，所以很少有人意识到这一点。<br clear="none"/>
javac<br clear="none"/>
-classpath，设定要搜索类的路径，可以是目录，jar文件，zip文件（里面都是class文件），会覆盖掉所有在CLASSPATH里面的设定。<br clear="none"/>
-sourcepath， 设定要搜索编译所需java 文件的路径，可以是目录，jar文件，zip文件（里面都是java文件）。<br clear="none"/>
所以一个完整的javac命令行应该是这样的，<br clear="none"/>
假设abc.java在路径c:\src里面，在任何的目录的都可以执行以下命令来编译。<br clear="none"/>
javac -classpath c:\classes;c:\jar\abc.jar;c:\zip\abc.zip -sourcepath c:\source\project1\src;c:\source\project2 \lib\src.jar;c:\source\project3\lib\src.zip c:\src\abc.java<br clear="none"/>
<br clear="none"/>
表示编译需要c:\classed下面的class文件，c:\jar\abc.jar里面的class文件，c:\zip\abc.zip里面的class文件<br clear="none"/>
还需要c:\source\project1\src下面的源文件，c:\source\project2 \lib\src.jar里面的源文件，c:\source\project3\lib\src.zip里面的源文件，<br clear="none"/>
注意：jar，zip里面的源文件不会有什么改动，目录下的源文件，有可能会被重新编译。<br clear="none"/>
java<br clear="none"/>
-classpath， 设定要搜索的类的路径，可以是目录，jar文件，zip文件（里面都是class文件），会覆盖掉所有的CLASSPATH的设定。<br clear="none"/>
由于所要执行的类也是要搜索的类的一部分，所以一定要把这个类的路径也放到-classpath的设置里面。<br clear="none"/>
表现在，在要执行的类的路径里面执行java时，一定要添加上点号（.）标示本目录也要搜索。<br clear="none"/>
<br clear="none"/>
假设abc.class在路径c:\src里面<br clear="none"/>
可以在任何路径下执行以下命令<br clear="none"/>
java -classpath c:\classes;c:\jar\abc.jar;c:\zip\abc.zip;c:\src abc<br clear="none"/>
<br clear="none"/>
问题：如果main.class属于c:\jar\abc.jar，并且在com.cnblogs.jeffchen这个包里，那么执行java -classpath c:\classes;c:\jar\abc.jar;c:\zip\abc.zip;com.cnblogs.jeffchen.main即可， 但是如果classpath中包含多个jar包呢？并且其他jar包中也有com.cnblogs.jeffchen会发生什么情况？错误？<br clear="none"/>
<br clear="none"/>
在windows下，<br clear="none"/>
文件路径的分割符为反斜杠  \  <br clear="none"/>
类或者java文件列表的分割符为分号 ;<br clear="none"/>
<br clear="none"/>
在linux下<br clear="none"/>
文件路径的分隔符位斜杠 /<br clear="none"/>
类或者java文件列表的分隔符为冒号 :<br clear="none"/>
<br clear="none"/>
一个linux下编译和运行的例子<br clear="none"/>
 /usr/local/java/bin/javac -classpath /tmp/javatest/lib/mail-1.3.3.jar -d /tmp/javatest/bin/ /tmp/javatest/src/jp/co/realseed/Capability.java<br clear="none"/>
<br clear="none"/>
/usr/local/java/bin/java -classpath /tmp/javatest/lib/mail-1.3.3.jar:/tmp/javatest/bin/ jp.co.realseed.Capability</div>
</div>
</div>
    
    ]]></description> <pubDate>Wed, 29 Jul 2009 00:50:24 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#be3b0616-8766-4cf5-b96e-07e6cf98a8b5</guid> 
  
  </item>

  
  <item> <title>Java XML API 漫谈 - 企业应用 - Java - JavaEye论坛</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#f33c2655-9194-4c25-8dbe-ccabada66c97</link>
  <description><![CDATA[
    
    
    
        <a href="http://www.evernote.com/pub/smartwgd/daydaystudy#f33c2655-9194-4c25-8dbe-ccabada66c97"><img align="right" src="http://www.evernote.com/shard/s1/thumb/f33c2655-9194-4c25-8dbe-ccabada66c97"/></a>
        <div class="ennote">
<div>在IBM的developerWorks上有几篇非常优秀的关于Java XML API的评测文章，它们是：<br clear="none"/>
<br clear="none"/>
<a target="_blank" href="http://www-900.ibm.com/developerWorks/cn/xml/x-injava/index.shtml" shape="rect">http://www-900.ibm.com/developerWorks/cn/xml/x-injava/index.shtml</a><br clear="none"/>
<br clear="none"/>
<a target="_blank" href="http://www-900.ibm.com/developerWorks/cn/xml/x-injava2/index.shtml" shape="rect">http://www-900.ibm.com/developerWorks/cn/xml/x-injava2/index.shtml</a><br clear="none"/>
<br clear="none"/>
<a target="_blank" href="http://www-900.ibm.com/developerWorks/cn/xml/x-databdopt/part2/index.shtml" shape="rect">http://www-900.ibm.com/developerWorks/cn/xml/x-databdopt/part2/index.shtml</a><br clear="none"/>
<br clear="none"/>
<a target="_blank" href="http://www-900.ibm.com/developerWorks/cn/xml/x-databdopt/part1/index.shtml" shape="rect">http://www-900.ibm.com/developerWorks/cn/xml/x-databdopt/part1/index.shtml</a><br clear="none"/>
<br clear="none"/>
对这几篇文章我想说的就是“吐血推荐”<br clear="none"/>
<br clear="none"/>
Java的XML API这几篇文章该讲的都讲到了，我只想补充几点：<br clear="none"/>
<br clear="none"/>
一、Crimson和Xerces恩仇录<br clear="none"/>
<br clear="none"/>
Crimson来自于Sun捐赠给Apache的ProjectX项目，Xerces来自IBM捐赠给Apache的XML4J项目，结果Xerces胜出，成了Apache XML小组全力开发的XML API，而Crimon已经早就不做了，如今Xerces名满天下，到处都是在用Xerces DOM和SAX解析器，只有Sun不服气，非要在JDK1.4里面使用过时的Crimson，让人感觉像是在赌气一样，真是让人可怜又可气！不过IBM发行JDK用的XML 解析器自然是Xerces。<br clear="none"/>
<br clear="none"/>
由于JDK的Class Loader的优先级关系，当你采用JAXP编写XML程序的时候，即使把Xerces包引入CLASSPATH，JDK还是会顽固的使用Crimson，这一点通过打开JVM的verbose参数可以观察到。不过JDK也允许你采用其它的解析器，因此我们可以通过在JRE\lib\目录下建一个jaxp.properties的文件，来替换解析器，jaxp.properties内容如下：<br clear="none"/>
<br clear="none"/>
<div>引用</div>
<div>javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl<br clear="none"/>
javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl</div>
<br clear="none"/>
这样就可以使用Xerces，当然你必须还是要把Xerces包放到CLASSPATH下。<br clear="none"/>
<br clear="none"/>
二、JAXP的姗姗来迟<br clear="none"/>
<br clear="none"/>
Sun在XML领域总是后知后觉，等到Sun重视XML的时候，XML的API早就满天 飞了，尤其是IBM具有非常大的领先优势。不过Sun是规范的制订者，于是参考W3C的标准制订了JAXP规范。JAXP不像Xerces和Crimon那样，它只是一个spec，本身是不做任何事情的，它的作用就是提出一个统一的接口，让其它的XML API都来遵循JAXP编程，那么用JAXP写出来的程序，底层的API可以任意切换。<br clear="none"/>
<br clear="none"/>
具体来说JAXP包括了几个工厂类，这就是JDK1.4里面的javax.xml.parsers 包，用来寻找符合DOM标准的XML API实现类的位置；此外JAXP还包括一整套interface，这就是JDK1.4里面的org.w3c.dom那几个包。工厂类负责加载DOM的实现类。那么加载的规则是什么呢？<br clear="none"/>
<br clear="none"/>
我是通过阅读JAXP的源代码知道的，工厂类首先会根据java命令行传入的参数进行寻找，然后在根据JRE\lib\jaxp.properties中定义的实现类寻找，最后什么都找不到的话，就用Crimson。注意Crimons是由Bootstrap Class Loader来load的，如果你不通过上面两个方法来改变工厂的寻找顺序，那么铁定用Crimson了<br clear="none"/>
<br clear="none"/>
三、 DOM解析器和DOM API<br clear="none"/>
<br clear="none"/>
当你严格采用JAXP编程的时候，是遵循W3C的DOm标准的，那么在JAXP底层你实际上可以任意切换不同的DOM实现，例如Xerces，或者Crimon，再或者其它，切换方法就是配置jaxp.properties。因此JAXP就是一些标准接口而已。<br clear="none"/>
<br clear="none"/>
而Xerces和Crimon也不单单是一个DOM实现那么简单，他们本身实际上也包含SAX解析器和DOM解析器。所以一个JAXP程序下面有如下层次：<br clear="none"/>
<br clear="none"/>
<div>引用</div>
<div>JAXP应用程序 -&amp;gt; JAXP接口 -&amp;gt; Xerces DOM实现 -&amp;gt; Xerces DOM/SAX 解析器</div>
<br clear="none"/>
<br clear="none"/>
只要你用JAXP编程，那么你就可以切换到Crimson上来<br clear="none"/>
<br clear="none"/>
<div>引用</div>
<div>JAXP应用程序 -&amp;gt; JAXP接口 -&amp;gt; Crimson DOM实现 -&amp;gt; Crimson DOM/SAX 解析器</div>
<br clear="none"/>
<br clear="none"/>
另外你也可以这样来做：<br clear="none"/>
<br clear="none"/>
<div>引用</div>
<div>JAXP应用程序 -...</div></div></div>
    
    ]]></description> <pubDate>Wed, 29 Jul 2009 00:49:47 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#f33c2655-9194-4c25-8dbe-ccabada66c97</guid> 
  
    <enclosure url="http://www.evernote.com/shard/s1/thumb/f33c2655-9194-4c25-8dbe-ccabada66c97"
               length="0" type="image/jpeg"/>
  
  </item>

  
  <item> <title>Div+CSS布局入门教程</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#b6a9be4f-9874-404f-baf8-569c02d758b9</link>
  <description><![CDATA[
    
    
    
        <a href="http://www.evernote.com/pub/smartwgd/daydaystudy#b6a9be4f-9874-404f-baf8-569c02d758b9"><img align="right" src="http://www.evernote.com/shard/s1/thumb/b6a9be4f-9874-404f-baf8-569c02d758b9"/></a>
        <div style="background-color:#ffffff;" class="ennote">

Div+CSS布局入门教程

<p>作者：<a href="http://www.blueidea.com/common/contact.asp?type=%E4%BD%9C%E8%80%85&amp;username=aultoale" target="_blank" shape="rect">aultoale</a>　时间： 2006-06-10　文档类型：原创　来自：<a href="http://www.blueidea.com/" shape="rect">蓝色理想</a></p>
<p> 第 1 页 <a href="http://www.blueidea.com/tech/site/2006/3574.asp" shape="rect">页面布局与规划</a><br clear="none"/>
 第 2 页 <a href="http://www.blueidea.com/tech/site/2006/3574_2.asp" shape="rect">写入整体层结构与CSS</a><br clear="none"/>
 第 3 页 <a href="http://www.blueidea.com/tech/site/2006/3574_3.asp" shape="rect">页面顶部制作之一</a><br clear="none"/>
 第 4 页 <a href="http://www.blueidea.com/tech/site/2006/3574_4.asp" shape="rect">页面顶部制作之二</a><br clear="none"/>
 第 5 页 页面制作-用好border和clear</p>




<p>这一节里面，主要就是想告诉大家如何使用好border和clear这两个属性。</p>
<p>首先，如果你曾用过table制作网页，你就应该知道，如果要在表格中绘制一条虚线该如何做，那需要制作一个很小的图片来填充，其实我们还有更简单的办法，只要在&lt;td&gt;&lt;/td&gt;中加入这么一段就可以了，你可以试试：<br clear="none"/>
&lt;div style=&quot;border-bottom:1px dashed #ccc&quot;&gt;&lt;/div&gt;</p>
<p>大家可以再次参考手册，然后你就能明白dashed、solid、dotted...等的作用，利用它们你可以制作出许多效果来，实线、虚线、双线、阴影线等等。</p>
<p>&lt;div id=&quot;banner&quot;&gt;&lt;/div&gt;</p>
<p>以上代码便可以实现设计草图中的banner，在css.css中加入以下样式：</p>
<p>#banner {<br clear="none"/>
background:url(banner.jpg) 0 30px no-repeat; /*加入背景图片*/<br clear="none"/>
width:730px; /*设定层的宽度*/<br clear="none"/>
margin:auto; /*层居中*/<br clear="none"/>
height:240px; /*设定高度*/<br clear="none"/>
border-bottom:5px solid #EFEFEF; /*画一条浅灰色实线*/<br clear="none"/>
clear:both /*清除浮动*/<br clear="none"/>
}</p>
<p>通过border很容易就绘制出一条实线了，并且减少了图片下载所占用的网络资源，使得页面载入速度变得更快。</p>
<p>另一个要说明的就是clear:both，表示清除左、右所有的浮动，在接下来的布局中我们还会用这个属性：clear:left/right。在这里添加clear:both是由于之前的ul、li元素设置了浮动，如果不清除则会影响banner层位置的设定。</p>
<p>&lt;div id=&quot;pagebody&quot;&gt;&lt;!--页面主体--&gt;<br clear="none"/>
&lt;div id=&quot;sidebar&quot;&gt;&lt;!--侧边栏--&gt;<br clear="none"/>
&lt;/div&gt;<br clear="none"/>
&lt;div id=&quot;mainbody&quot;&gt;&lt;!--主体内容--&gt;<br clear="none"/>
&lt;/div&gt;<br clear="none"/>
&lt;/div&gt;</p>
<p>以上是页面主体部分，我们在css.css中添加以下样式：</p>
<p>#pagebody {<br clear="none"/>
width:730px; /*设定宽度*/<br clear="none"/>
margin:8px auto; /*居中*/<br clear="none"/>
}<br clear="none"/>
#sidebar {<br clear="none"/>
width:160px; /*设定宽度*/<br clear="none"/>
text-align:left; /*文字左对齐*/<br clear="none"/>
float:left; /*浮动居左*/<br clear="none"/>
clear:left; /*不允许左侧存在浮动*/<br clear="none"/>
overflow:hidden; /*超出宽度部分隐藏*/<br clear="none"/>
}<br clear="none"/>
#mainbody {<br clear="none"/>
width:570px;<br clear="none"/>
text-align:left;<br clear="none"/>
float:right; /*浮动居右*/<br clear="none"/>
clear:right; /*不允许右侧存在浮动*/<br clear="none"/>
overflow:hidden<br clear="none"/>
}</p>
<p>为了可以查看到效果，建议在#sidebar和#mainbody中加入以下代码，预览完成后可以删除这段代码：</p>
<p>border:1px solid #E00;<br clear="none"/>
height:200px</p>
<p>保存预览效果，可以发现这两个层完美的浮动，在达到了我们布局的要求，而两个层的实际宽度应该 160+2(border)+570+2=734px，已经超出了父层的宽度，由于clear的原因，这两个层才不会出现错位的情况，这样可以使我们布局 的页面不会因为内容太长（例如图片）而导致错位。</p>
<p align="center"/>
<p>而之后添加的overflow:hidden则可以使内容太长（例如图片）的部份自动被隐藏。通常我们会看到一些网页在载入时，由于图片太大，导致布局被撑开，直到页面下载完成才恢复正常，通过添加overflow:hidden就可以解决这个问题。</p>
<p>CSS中每一个属性运用得当，就可以解决许多问题，或许它们与你在布局的页并没有太大的关系，但是你必须知道这些属性的作用，在遇到难题的时候，可以尝试使用这些属性去解决问题。</p>
<div>本文链接：<a href="http://www.blueidea.com/tech/site/2006/3574.asp" target="_blank" shape="rect">http://www.blueidea.com/tech/site/2006/3574.asp</a>　</div>
<p align="right">出处：<a href="http://www.blueidea.com/" shape="rect">蓝色理想</a><br clear="none"/>
责任编辑：<a href="http://www.blueidea.com/common/contact.asp?type=%E7%BC%96%E8%BE%91&amp;username=moby" target="_blank" shape="rect">moby</a></p>

</div>
    
    ]]></description> <pubDate>Sun, 19 Oct 2008 05:24:08 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#b6a9be4f-9874-404f-baf8-569c02d758b9</guid> 
  
    <enclosure url="http://www.evernote.com/shard/s1/thumb/b6a9be4f-9874-404f-baf8-569c02d758b9"
               length="0" type="image/jpeg"/>
  
  </item>

  
  <item> <title>Div+CSS布局入门教程</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#e3dc67d4-f6fc-4ccc-ba92-8f1072e8e639</link>
  <description><![CDATA[
    
    
    
        <a href="http://www.evernote.com/pub/smartwgd/daydaystudy#e3dc67d4-f6fc-4ccc-ba92-8f1072e8e639"><img align="right" src="http://www.evernote.com/shard/s1/thumb/e3dc67d4-f6fc-4ccc-ba92-8f1072e8e639"/></a>
        <div style="background-color:#ffffff;" class="ennote">

　Div+CSS布局入门教程

<p>作者：<a href="http://www.blueidea.com/common/contact.asp?type=%E4%BD%9C%E8%80%85&amp;username=aultoale" target="_blank" shape="rect">aultoale</a>　时间： 2006-06-10　文档类型：原创　来自：<a href="http://www.blueidea.com/" shape="rect">蓝色理想</a></p>
<p> 第 1 页 <a href="http://www.blueidea.com/tech/site/2006/3574.asp" shape="rect">页面布局与规划</a><br clear="none"/>
 第 2 页 <a href="http://www.blueidea.com/tech/site/2006/3574_2.asp" shape="rect">写入整体层结构与CSS</a><br clear="none"/>
 第 3 页 <a href="http://www.blueidea.com/tech/site/2006/3574_3.asp" shape="rect">页面顶部制作之一</a><br clear="none"/>
 第 4 页 页面顶部制作之二<br clear="none"/>
 第 5 页 <a href="http://www.blueidea.com/tech/site/2006/3574_5.asp" shape="rect">页面制作-用好border和clear</a></p>




<p>使用列表&lt;li&gt;制作菜单</p>
<p>开始此节的学习前，请确认你已经参照之前的几节内容写入了DIV、CSS到index.htm和css.css文件中。</p>
<p>这一节我将告诉大家如何用列表&lt;li&gt;来制作菜单。</p>
<p>  &lt;div id=&quot;menu&quot;&gt;<br clear="none"/>
  &lt;ul&gt;<br clear="none"/>
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;首页&lt;/a&gt;&lt;/li&gt;<br clear="none"/>
 &lt;li class=&quot;menuDiv&quot;&gt;&lt;/li&gt;<br clear="none"/>
 &lt;li&gt;&lt;a href=&quot;#&quot;&gt;博客&lt;/a&gt;&lt;/li&gt;<br clear="none"/>
 &lt;li class=&quot;menuDiv&quot;&gt;&lt;/li&gt;<br clear="none"/>
 &lt;li&gt;&lt;a href=&quot;#&quot;&gt;设计&lt;/a&gt;&lt;/li&gt;<br clear="none"/>
 &lt;li class=&quot;menuDiv&quot;&gt;&lt;/li&gt;<br clear="none"/>
 &lt;li&gt;&lt;a href=&quot;#&quot;&gt;相册&lt;/a&gt;&lt;/li&gt;<br clear="none"/>
 &lt;li class=&quot;menuDiv&quot;&gt;&lt;/li&gt;<br clear="none"/>
 &lt;li&gt;&lt;a href=&quot;#&quot;&gt;论坛&lt;/a&gt;&lt;/li&gt;<br clear="none"/>
 &lt;li class=&quot;menuDiv&quot;&gt;&lt;/li&gt;<br clear="none"/>
 &lt;li&gt;&lt;a href=&quot;#&quot;&gt;关于&lt;/a&gt;&lt;/li&gt;<br clear="none"/>
  &lt;/ul&gt;<br clear="none"/>
&lt;/div&gt;</p>
<p>以上是这部分的结构，有关于&lt;ul&gt;&lt;/ul&gt;、&lt;li&gt;&lt;/li&gt;这两个HTML元素大家自己去参考相关的内容吧，它们最主要的作用就是在HTML中以列表的形式来显示一些信息。</p>
<p>还有一点需要大家一定要分清楚的，当在HTML中定义为id=&quot;divID&quot;时，在CSS对应的设置语法则是#divID{} ，如果在HTML中定义为class=&quot;divID&quot;时，则在CSS中对应的设置语法是.divID。</p>
<p>如果id=&quot;divID&quot;这个层中包括了一个&lt;img&gt;&lt;/img&gt;，则这个img在CSS中对应的设置语法应该是#divID img {}，同样，如果是包含在class=&quot;divID&quot;这个层中时，则设置语法应该是.divID img {}，这一点希望大家要分清楚了。</p>
<p>另外，HTML中的一切元素都是可以定义的，例如table、tr、td、th、form、img、input...等等，如果你要在CSS中设置它们，则直接写入元素的名称加上一对大括号{}就可以了。所有的CSS代码都应该写在大括号{}中。</p>
<p>按照上面的介绍，我们先在css.css中写入以下代码：</p>
<p>#menu ul {list-style:none;margin:0px;}<br clear="none"/>
#menu ul li {float:left;}</p>
<p>解释一下：</p>
<p>#menu ul {list-style:none;margin:0px;}<br clear="none"/>
list-style:none，这一句是取消列表前点，因为我们不需要这些点。<br clear="none"/>
margin:0px，这一句是删除UL的缩进，这样做可以使所有的列表内容都不缩进。</p>
<p>#menu ul li {float:left;}<br clear="none"/>
这里的 float:left 的左右是让内容都在同一行显示，因此使用了浮动属性(float)。</p>
<p>到这一步，建议大家先保存预览一下效果，我们再添加下面的内容，效果如下：</p>
<p align="left"/>
<p>这时，列表内容是排列在一行，我们在#menu ul li {}再加入代码margin:0 10px</p>
<p>#menu ul {list-style:none;margin:0px;}<br clear="none"/>
#menu ul li {float:left;margin:0 10px}</p>
<p>margin:0 10px的作用就是让列表内容之间产生一个20像素的距离(左：10px，右：10px)，预览的效果如下：</p>
<p align="center"/>
<p>现在，雏形已经出来了，我们再来固定菜单的位置，把代码改成如下：</p>
<p>#menu {padding:20px 20px 0 0}<br clear="none"/>
/*利用padding:20px 20px 0 0来固定菜单位置*/<br clear="none"/>
#menu ul {float:right;list-style:none;margin:0px;}<br clear="none"/>
/*添加了float:right使得菜单位于页面右侧*/<br clear="none"/>
#menu ul li {float:left;margin:0 10px}</p>
<p>这时，位置已经确定了，可是构思图中，菜单选项之间还有一条竖线，怎么办呢？<br clear="none"/>
别忘了，我们早就已经留好了一个空的&lt;li class=&quot;menuDiv&quot;&gt;&lt;/li&gt;，要想加入竖线就使用它了。<br clear="none"/>
按照上面说的方法，我们再添加以下代码：</p>
<p>.menuDiv {width:1px;height:28px;background:#999}</p>
<p>保存预览一下，竖线是否已经出来了？关于这段代码就不多讲了，应该是很容易理解的。</p>
<p/>
<p>不过，菜单选项的文字却在顶部，我们再修改成以下代码：</p>
<p>#menu ul li {float:left;margin:0 ...</p></div>
    
    ]]></description> <pubDate>Sun, 19 Oct 2008 05:16:08 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#e3dc67d4-f6fc-4ccc-ba92-8f1072e8e639</guid> 
  
    <enclosure url="http://www.evernote.com/shard/s1/thumb/e3dc67d4-f6fc-4ccc-ba92-8f1072e8e639"
               length="0" type="image/jpeg"/>
  
  </item>

  
  <item> <title>Div+CSS布局入门教程</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#0bca4fd2-ff10-4adf-be4a-1d95538eafed</link>
  <description><![CDATA[
    
    
    
        <a href="http://www.evernote.com/pub/smartwgd/daydaystudy#0bca4fd2-ff10-4adf-be4a-1d95538eafed"><img align="right" src="http://www.evernote.com/shard/s1/thumb/0bca4fd2-ff10-4adf-be4a-1d95538eafed"/></a>
        <div style="background-color:#ffffff;" class="ennote">

Div+CSS布局入门教程

<p>作者：<a href="http://www.blueidea.com/common/contact.asp?type=%E4%BD%9C%E8%80%85&amp;username=aultoale" target="_blank" shape="rect">aultoale</a>　时间： 2006-06-10　文档类型：原创　来自：<a href="http://www.blueidea.com/" shape="rect">蓝色理想</a></p>
<p> 第 1 页 <a href="http://www.blueidea.com/tech/site/2006/3574.asp" shape="rect">页面布局与规划</a><br clear="none"/>
 第 2 页 <a href="http://www.blueidea.com/tech/site/2006/3574_2.asp" shape="rect">写入整体层结构与CSS</a><br clear="none"/>
 第 3 页 页面顶部制作之一<br clear="none"/>
 第 4 页 <a href="http://www.blueidea.com/tech/site/2006/3574_4.asp" shape="rect">页面顶部制作之二</a><br clear="none"/>
 第 5 页 <a href="http://www.blueidea.com/tech/site/2006/3574_5.asp" shape="rect">页面制作-用好border和clear</a></p>




<p>当我们写好了页面大致的DIV结构后，我们就可以开始细致地对每一个部分进行制作了。</p>
<p>在上一章中我们写入了一些样式，那些样式是为了预览结构而写入的，我们把css.css中的样式全部清除掉，重新写入以下样式代码：</p>
<p>/*基本信息*/<br clear="none"/>
body {font:12px Tahoma;margin:0px;text-align:center;background:#FFF;}<br clear="none"/>
a:link,a:visited {font-size:12px;text-decoration:none;}<br clear="none"/>
a:hover{}</p>
<p>/*页面层容器*/<br clear="none"/>
#container {width:800px;margin:10px auto}</p>
<p>样式说明：</p>
<p>a:link,a:visited {font-size:12px;text-decoration:none;}<br clear="none"/>
a:hover {}</p>
<p>这两项分别是控制页面中超链接的样式，具体我就不说明了，请大家参阅手册。</p>
<p>#container {width:800px;margin:10px auto}</p>
<p>指定整个页面的显示区域。<br clear="none"/>
width:800px指定宽度为800像素，这里根据实际所需设定。<br clear="none"/>
margin:10px auto，则是页面上、下边距为10个像素，并且居中显示。<br clear="none"/>
上一章中我们讲过，对层的margin属性的左右边距设置为auto可以让层居中显示。</p>
<p>接下来，我们开始制作TOP部分，TOP部分包括了LOGO、菜单和Banner，首先我们要做的就是对设计好的图片进行切片，以下是在FW下完成的切片：</p>
<p align="center"/>
<p>我将TOP部分切片为两部分，第一部分包括了LOGO和一条横线。由于LOGO图片并没有太多的颜色，这里我于是将这一部分保存为GIF格式，调色 板选择为精确，选择Alpha透明度，色版为白色(此处颜色应与背景色相同)，导出为logo.gif，图像宽度为800px。</p>
<p>到这里，有的朋友就说了，* 为什么要使用GIF格式？使用JPEG不是更好吗？<br clear="none"/>因为GIF格式的图片文件更小，这样能使页面载入的速度更快，当然使用此格式之前必须确定图片并没有使用太多的颜色，当我们使用了GIF格式时，从肉眼上并不能看出图片有什么太大的变化，因此这是可行的。</p>
<p>* 接下来的Banner部分还能使用GIF格式吗？<br clear="none"/>
答案是不能，因为Banner部分是一个细致的图片，如果使用GIF格式颜色会有太大的损失，所以必须使用JPEG格式，将文件导出为banner.jpg。</p>
<p>* 合理的切片是非常之重要的，因为切片的方法正确与否决定了CSS书写的简易程度以及页面载入速度。</p>
<p>切好片后，我们还需要对TOP部分进行分析并将DIV结构写入Header中代码如下：</p>
<p>　　&lt;div id=&quot;menu&quot;&gt;<br clear="none"/>
　　　&lt;ul&gt;<br clear="none"/>
　　　　&lt;li&gt;&lt;a href=&quot;#&quot;&gt;首页&lt;/a&gt;&lt;/li&gt;<br clear="none"/>
　　　　&lt;li class=&quot;menuDiv&quot;&gt;&lt;/li&gt;<br clear="none"/>
　　　　&lt;li&gt;&lt;a href=&quot;#&quot;&gt;博客&lt;/a&gt;&lt;/li&gt;<br clear="none"/>
　　　　&lt;li class=&quot;menuDiv&quot;&gt;&lt;/li&gt;<br clear="none"/>
　　　　&lt;li&gt;&lt;a href=&quot;#&quot;&gt;设计&lt;/a&gt;&lt;/li&gt;<br clear="none"/>
　　　　&lt;li class=&quot;menuDiv&quot;&gt;&lt;/li&gt;<br clear="none"/>
　　　　&lt;li&gt;&lt;a href=&quot;#&quot;&gt;相册&lt;/a&gt;&lt;/li&gt;<br clear="none"/>
　　　　&lt;li class=&quot;menuDiv&quot;&gt;&lt;/li&gt;<br clear="none"/>
　　　　&lt;li&gt;&lt;a href=&quot;#&quot;&gt;论坛&lt;/a&gt;&lt;/li&gt;<br clear="none"/>
　　　　&lt;li class=&quot;menuDiv&quot;&gt;&lt;/li&gt;<br clear="none"/>
　　　　&lt;li&gt;&lt;a href=&quot;#&quot;&gt;关于&lt;/a&gt;&lt;/li&gt;<br clear="none"/>
　　　&lt;/ul&gt;<br clear="none"/>
　　&lt;/div&gt;<br clear="none"/>
　　&lt;div id=&quot;banner&quot;&gt;<br clear="none"/>
　　&lt;/div&gt;</p>
<p>为什么要这么写呢，因为对菜单使用列表&lt;li&gt;形式，可以在以后方便对菜单定制样式。</p>
<p>而为什么要添加以下代码呢？<br clear="none"/>
&lt;li class=&quot;menuDiv&quot;&gt;&lt;/li&gt;<br clear="none"/>
插入这一段代码是可以方便地对菜单选项之间插入一些分隔样式，例如预览图中的竖线分隔。</p>
<p>然后我们在css.css中再写入以下样式：</p>
<p>/*页面头部*/<br clear="none"/>
#header {background:url(logo.gif) no-repeat}</p>
<p>样式说明：<br clear="none"/>
#header {background:url(logo.gif) no-repeat}<br clear="none"/>给页面头部分加入一个背景图片LOGO，并且不作填充。</p>
<p>这里，我们没有指定header层的高度，为什么不指定呢？</p>
<p>因为header层中还有菜单和banner项，所以层的高度暂时是未知的，而层的属性又可以让层根据内容自动设定调整...</p></div>
    
    ]]></description> <pubDate>Sun, 19 Oct 2008 05:10:25 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#0bca4fd2-ff10-4adf-be4a-1d95538eafed</guid> 
  
    <enclosure url="http://www.evernote.com/shard/s1/thumb/0bca4fd2-ff10-4adf-be4a-1d95538eafed"
               length="0" type="image/jpeg"/>
  
  </item>

  
  <item> <title>Div+CSS布局入门教程</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#4a96347f-58d3-471e-a411-df4384c10286</link>
  <description><![CDATA[
    
    
    
        <a href="http://www.evernote.com/pub/smartwgd/daydaystudy#4a96347f-58d3-471e-a411-df4384c10286"><img align="right" src="http://www.evernote.com/shard/s1/thumb/4a96347f-58d3-471e-a411-df4384c10286"/></a>
        <div style="background-color:#ffffff;" class="ennote">

Div+CSS布局入门教程

<p>作者：<a href="http://www.blueidea.com/common/contact.asp?type=%E4%BD%9C%E8%80%85&amp;username=aultoale" target="_blank" shape="rect">aultoale</a>　时间： 2006-06-10　文档类型：原创　来自：<a href="http://www.blueidea.com/" shape="rect">蓝色理想</a></p>
<p> 第 1 页 <a href="http://www.blueidea.com/tech/site/2006/3574.asp" shape="rect">页面布局与规划</a><br clear="none"/>
 第 2 页 写入整体层结构与CSS<br clear="none"/>
 第 3 页 <a href="http://www.blueidea.com/tech/site/2006/3574_3.asp" shape="rect">页面顶部制作之一</a><br clear="none"/>
 第 4 页 <a href="http://www.blueidea.com/tech/site/2006/3574_4.asp" shape="rect">页面顶部制作之二</a><br clear="none"/>
 第 5 页 <a href="http://www.blueidea.com/tech/site/2006/3574_5.asp" shape="rect">页面制作-用好border和clear</a></p>




<p>接下来我们在桌面新建一个文件夹，命名为“DIV+CSS布局练习”，在文件夹下新建两个空的记事本文档，输入以下内容：</p>
<p>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;<br clear="none"/>
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;<br clear="none"/>
&lt;head&gt;<br clear="none"/>
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot; /&gt;<br clear="none"/>
&lt;title&gt;无标题文档&lt;/title&gt;<br clear="none"/>
&lt;link href=&quot;css.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;<br clear="none"/>
&lt;/head&gt;</p>
<p>&lt;body&gt;<br clear="none"/>
&lt;/body&gt;<br clear="none"/>
&lt;/html&gt;</p>
<p>这是XHTML的基本结构，将其命名为index.htm，另一个记事本文档则命名为css.css。</p>
<p>下面，我们在&lt;body&gt;&lt;/body&gt;标签对中写入DIV的基本结构，代码如下：</p>
<p>&lt;div id=&quot;container&quot;&gt;[color=#aaaaaa]&lt;!--页面层容器--&gt;[/color]<br clear="none"/>
　　&lt;div id=&quot;Header&quot;&gt;[color=#aaaaaa]&lt;!--页面头部--&gt;[/color]<br clear="none"/>
　　&lt;/div&gt;<br clear="none"/>
　　&lt;div id=&quot;PageBody&quot;&gt;[color=#aaaaaa]&lt;!--页面主体--&gt;[/color]<br clear="none"/>
　　　　&lt;div id=&quot;Sidebar&quot;&gt;[color=#aaaaaa]&lt;!--侧边栏--&gt;[/color]<br clear="none"/>
　　　　&lt;/div&gt;<br clear="none"/>
　　　　&lt;div id=&quot;MainBody&quot;&gt;[color=#aaaaaa]&lt;!--主体内容--&gt;[/color]<br clear="none"/>
　　　　&lt;/div&gt;<br clear="none"/>
　　&lt;/div&gt;<br clear="none"/>
　　&lt;div id=&quot;Footer&quot;&gt;[color=#aaaaaa]&lt;!--页面底部--&gt;[/color]<br clear="none"/>
　　&lt;/div&gt;<br clear="none"/>
&lt;/div&gt;</p>
<p>为了使以后阅读代码更简易，我们应该添加相关注释，接下来打开css.css文件，写入CSS信息，代码如下：</p>
<p>/*基本信息*/<br clear="none"/>
body {font:12px Tahoma;margin:0px;text-align:center;background:#FFF;}</p>
<p>/*页面层容器*/<br clear="none"/>
#container {width:100%}</p>
<p>/*页面头部*/<br clear="none"/>
#Header {width:800px;margin:0 auto;height:100px;background:#FFCC99}</p>
<p>/*页面主体*/<br clear="none"/>
#PageBody {width:800px;margin:0 auto;height:400px;background:#CCFF00}</p>
<p>/*页面底部*/<br clear="none"/>
#Footer {width:800px;margin:0 auto;height:50px;background:#00FFFF}</p>
<p>把以上文件保存，用浏览器打开，这时我们已经可以看到基础结构了，这个就是页面的框架了。</p>
<p>关于以上CSS的说明（详细请参考CSS2.0中文手册，网上有下载）：</p>
<p>1、请养成良好的注释习惯，这是非常重要的；</p>
<p>2、body是一个HTML元素，页面中所有的内容都应该写在这标签对之内，我就不多说了；</p>
<p>3、讲解一些常用的CSS代码的含义：</p>
<p>font:12px Tahoma；<br clear="none"/>
这里使用了缩写，完整的代码应该是：font-size:12px;font-family:Tahoma；说明字体为12像素大小，字体为Tahoma格式；</p>
<p>margin:0px；<br clear="none"/>
也使用了缩写，完整的应该是：</p>
<p>margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px<br clear="none"/>
或<br clear="none"/>
margin:0px 0px 0px 0px</p>
<p>顺序是 上 / 右 / 下 / 左，你也可以书写为margin:0(缩写)；<br clear="none"/>
以上样式说明body部分对上右下左边距为0像素，如果使用auto则是自动调整边距，</p>
<p>另外还有以下几种写法：<br clear="none"/>
margin:0px auto；<br clear="none"/>
说明上下边距为0px，左右为自动调整；<br clear="none"/>
我们以后将使用到的padding属性和margin有许多相似之处，他们的参数是一样的，<br clear="none"/>
只不过各自表示的含义不相同，margin是外部距离，而padding则是内部距离。</p>
<p>text-align:c...</p></div>
    
    ]]></description> <pubDate>Sun, 19 Oct 2008 04:06:02 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#4a96347f-58d3-471e-a411-df4384c10286</guid> 
  
    <enclosure url="http://www.evernote.com/shard/s1/thumb/4a96347f-58d3-471e-a411-df4384c10286"
               length="0" type="image/jpeg"/>
  
  </item>

  
  <item> <title>Div+CSS布局入门教程</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#cb1e5e42-fbeb-48c2-8bf3-703e01131838</link>
  <description><![CDATA[
    
    
    
        <a href="http://www.evernote.com/pub/smartwgd/daydaystudy#cb1e5e42-fbeb-48c2-8bf3-703e01131838"><img align="right" src="http://www.evernote.com/shard/s1/thumb/cb1e5e42-fbeb-48c2-8bf3-703e01131838"/></a>
        <div style="background-color:#ffffff;" class="ennote">

Div+CSS布局入门教程

<p>作者：<a href="http://www.blueidea.com/common/contact.asp?type=%E4%BD%9C%E8%80%85&amp;username=aultoale" target="_blank" shape="rect">aultoale</a>　时间： 2006-06-10　文档类型：原创　来自：<a href="http://www.blueidea.com/" shape="rect">蓝色理想</a></p>
<p> 第 1 页 页面布局与规划<br clear="none"/>
 第 2 页 <a href="http://www.blueidea.com/tech/site/2006/3574_2.asp" shape="rect">写入整体层结构与CSS</a><br clear="none"/>
 第 3 页 <a href="http://www.blueidea.com/tech/site/2006/3574_3.asp" shape="rect">页面顶部制作之一</a><br clear="none"/>
 第 4 页 <a href="http://www.blueidea.com/tech/site/2006/3574_4.asp" shape="rect">页面顶部制作之二</a><br clear="none"/>
 第 5 页 <a href="http://www.blueidea.com/tech/site/2006/3574_5.asp" shape="rect">页面制作-用好border和clear</a></p>




<p>在网页制作中，有许多的术语，例如：CSS、HTML、DHTML、XHTML等等。在下面的文章中我们将会用到一些有关于HTML的基本知识，而 在你学习这篇入门教程之前，请确定你已经具有了一定的HTML基础。下面我们就开始一步一步使用DIV+CSS进行网页布局设计吧。</p>
<p>所有的设计第一步就是构思，构思好了，一般来说还需要用PhotoShop或FireWorks(以下简称PS或FW)等图片处理软件将需要制作的界面布局简单的构画出来，以下是我构思好的界面布局图。</p>
<p align="center"/>
<p>下面，我们需要根据构思图来规划一下页面的布局，仔细分析一下该图，我们不难发现，图片大致分为以下几个部分：</p>
<p>　　1、顶部部分，其中又包括了LOGO、MENU和一幅Banner图片；<br clear="none"/>
　　2、内容部分又可分为侧边栏、主体内容；<br clear="none"/>
　　3、底部，包括一些版权信息。<br clear="none"/>
　　有了以上的分析，我们就可以很容易的布局了，我们设计层如下图:</p>
<p align="center"/>
<p>根据上图，我再画了一个实际的页面布局图，说明一下层的嵌套关系，这样理解起来就会更简单了。</p>
<p align="center"/>
<p>　　DIV结构如下：<br clear="none"/>
　　│body {}　/*这是一个HTML元素，具体我就不说明了*/<br clear="none"/>
　　└#Container {}　/*页面层容器*/<br clear="none"/>
　　　　　├#Header {}　/*页面头部*/<br clear="none"/>
　　　　　├#PageBody {}　/*页面主体*/<br clear="none"/>
　　　　　│　├#Sidebar {}　/*侧边栏*/<br clear="none"/>
　　　　　│　└#MainBody {}　/*主体内容*/<br clear="none"/>
　　　　　└#Footer {}　/*页面底部*/</p>
<p>至此，页面布局与规划已经完成，接下来我们要做的就是开始书写HTML代码和CSS。</p>
<p align="right">出处：<a href="http://www.blueidea.com/" shape="rect">蓝色理想</a><br clear="none"/>
责任编辑：<a href="http://www.blueidea.com/common/contact.asp?type=%E7%BC%96%E8%BE%91&amp;username=moby" target="_blank" shape="rect">moby</a></p>

</div>
    
    ]]></description> <pubDate>Sun, 19 Oct 2008 04:05:20 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#cb1e5e42-fbeb-48c2-8bf3-703e01131838</guid> 
  
    <enclosure url="http://www.evernote.com/shard/s1/thumb/cb1e5e42-fbeb-48c2-8bf3-703e01131838"
               length="0" type="image/jpeg"/>
  
  </item>

  
  <item> <title>第六讲　Java的线程和Java Applet - 心蓝 - CSDNBlog</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#1577acd4-17ff-4643-ae17-16c3a3780616</link>
  <description><![CDATA[
    
    
    
        
        <div class="ennote">
<div><br clear="none"/></div>
<div>
<div>
<div></div>
</div>
<div>
<div><a href="http://blog.csdn.net/coolriver/archive/2004/09/12/102311.aspx" shape="rect"> 第六讲　Java的线程和Java Applet</a></div>
<div>
<p align="left"><b><a href="http://blog.csdn.net/java%20教程/JAVA-qinghua/text/ch06/se01/keqian.htm" target="_parent" shape="rect">课前索引</a></b></p>
<p align="left">【课前思考】<br clear="none"/>　　1. 什么是线程？它和进程有什么区别？适用方向是什么？<br clear="none"/>　　2. Java的线程是如何实现的？<br clear="none"/>　　3. Java的线程是如何调度的？<br clear="none"/>　　4. Java中的多线程有什么特点？同步和互斥的原理是如何实现的？<br clear="none"/>　　5. 什么是Java Applet，它和Application的区别是什么？<br clear="none"/>　　6. 如何创建Java Applet？<br clear="none"/>　　7. Applet的生命周期及主要方法是什么？<br clear="none"/>　　8. Applet的用途和用法是什么？<b><br clear="none"/>
<a href="http://blog.csdn.net/java%20教程/JAVA-qinghua/text/ch06/se01/6_1.htm" target="_parent" shape="rect">6．1 线程简介</a><a name="end" shape="rect"></a></b></p>
<p align="left">线程与进程相似，是一段完成某个特定功能的代码，是程序中单个顺序的流控制；但与进程不同的是，同类的多个线程是共享一块内存空间和一组系统资源，而线程本身的数据通常只有微处理器的寄存器数据，以及一个供程序执行时使用的堆栈。所以系统在产生一个线程，或者在各个线程之间切换时，负担要比进程小的多，正因如此，线程被称为轻负荷进程（light-weight process）。一个进程中可以包含多个线程。<br clear="none"/>一个线程是一个程序内部的顺序控制流。<br clear="none"/>　　1. 进程：每个进程都有独立的代码和数据空间（进程上下文） ，进程切换的开销大。 <br clear="none"/>　　2. 线程：轻量的进程，同一类线程共享代码和数据空间，每个线程有独立的运行栈和程序计数器（PC），线程切换的开销小。 <br clear="none"/>　　3. 多进程：在操作系统中，能同时运行多个任务程序。 <br clear="none"/>　　4. 多线程：在同一应用程序中，有多个顺序流同时执行。</p>
<p>6．1．1 线程的概念模型</p>
<p align="left">Java内在支持多线程，它的所有类都是在多线程下定义的，Java利用多线程使整个系统成为异步系统。Java中的线程由三部分组成，如图6.1所示。<br clear="none"/>　　1. 虚拟的CPU，封装在java.lang.Thread类中。<br clear="none"/>　　2. CPU所执行的代码，传递给Thread类。<br clear="none"/>　　3. CPU所处理的数据，传递给Thread类。</p>
<p>6. 1. 2 线程体(1)</p>
<p align="left">　Java的线程是通过java.lang.Thread类来实现的。当我们生成一个Thread类的对象之后,一个新的线程就产生了。</p>
<p>此线程实例表示Java解释器中的真正的线程，通过它可以启动线程、终止线程、线程挂起等，每个线程都是通过类Thread在Java的软件包Java.lang中定义，它的构造方法为：<br clear="none"/>
　　　public Thread （ThreadGroup group，Runnable target，String name）；<br clear="none"/>
　　其中，group 指明该线程所属的线程组；target实际执行线程体的目标对象，它必须实现接口Runnable； name为线程名。Java中的每个线程都有自己的名称，Java提供了不同Thread类构造器，允许给线程指定名称。如果name为null时，则Java自动提供唯一的名称。<br clear="none"/>
当上述构造方法的某个参数为null时，我们可得到下面的几个构造方法：<br clear="none"/>
　　public Thread （）；<br clear="none"/>
　　public Thread （Runnable target）；<br clear="none"/>
　　public Thread （Runnable target，String name）；<br clear="none"/>
　　public Thread （String name）；<br clear="none"/>
　　public Thread （ThreadGroup group，Runnable target）；<br clear="none"/>
　　public Thread （ThreadGroup group，String name）；<br clear="none"/>　　一个类声明实现Runnable接口就可以充当线程体，在接口Runnable中只定义了一个方法 run（）： <br clear="none"/>
　　　　　　　public void run（）；<br clear="none"/>
　　任何实现接口Runnable的对象都可以作为一个线程的目标对象，类Thread本身也实现了接口Runnable，因此我们可以通过两种方法实现线程体。<br clear="none"/>
　　（一）定义一个线程类，它继承线程类Thread并重写其中的方法 run（），这时在初始化这个类的实例时，目标target可为null，表示由这个实例对来执行线程体。由于Java只支持单重继承，用这种方法定义的类不能再继承其它父类。<br clear="none"/>
　　（二）提供一个实现接口Runnable的类作为一个线程的目标对象，在初始化一个Thread类或者Thread子类的线程对象时，把目标对象传递给这个线程实例，由该目标对象提供线程体 run（）。这时，实现接口Runnable的类仍然可以继承其它父类。</p>
<p>　　每个线程都是通过某个特定Thread对象的方法run( )来完成其操作的，方法run( )称为线程体。图6.2表示了java线程的不同状态以及状态之间转换所调用的方法。<br clear="none"/>图6.2 线程的状态</p>
<p><br clear="none"/>
　 <b>1. 创建状态(new Thread)</b><br clear="none"/>
　　执行下列语句时，线程就处于创建状态：<br clear="none"/>
　　Thread myThread = new MyThreadClass( );...</p></div></div></div></div>
    
    ]]></description> <pubDate>Sun, 03 Aug 2008 00:33:59 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#1577acd4-17ff-4643-ae17-16c3a3780616</guid> 
  
  </item>

  
  <item> <title>[JMX一步步来]　9、基于JBoss来写MBean - 子在川上曰 - BlogJava</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#d1e15d61-91c3-436d-b62e-a9a4269e3a89</link>
  <description><![CDATA[
    
    
    
        <a href="http://www.evernote.com/pub/smartwgd/daydaystudy#d1e15d61-91c3-436d-b62e-a9a4269e3a89"><img align="right" src="http://www.evernote.com/shard/s1/thumb/d1e15d61-91c3-436d-b62e-a9a4269e3a89"/></a>
        <div class="ennote">
<div>
<a href="http://www.blogjava.net/chengang/archive/2006/03/07/34091.html" shape="rect">[JMX一步步来]　9、基于JBoss来写MBean</a>
<div>
<div align="center">　文/陈刚  from <a href="http://www.chengang.com.cn/" shape="rect">www.chengang.com.cn</a> at 2005-12-26</div>
<div align="center">　</div>
<div>　　前面都是用JDK自带的JMX实现来写的MBean，JMX的实现不独SUN一家，JBOSS也有自己的JMX实现。如果你使用JBOSS来做WEB服务器，那么基于JBOSS的实现来写MBean，是一个不错的选择。象我们公司就是用JBOSS的，因此所有MBean都是基于JBoss来写的。基于JBoss的MBean和基于SUN的MBean有什么不同吗？有一些不同之外，但绝大部份都一样。</div>
<div>　</div>
<div>　　下面是我最早发的一篇关于JMX的文章，是我对公司所做项目的笔记，它上面的JMX例子就是基于JBOSS的。博客搬了几次家，文章删的删丢的丢，但这篇文章还保留着，简单修改一下，再帖上吧。</div>
<div>
一、  HelloWorld实例
1、准备工作
<p>　　JBOSS实现了JMX规范，这个实例是基于JBOSS来实现的。请先去下载一个JBOSS，我是jboss-3.2.6，下载地址：<a href="http://www.jboss.com/downloads/index#as" shape="rect">http://www.jboss.com/downloads/index#as</a>。这个实例需要JBOSS的两个JAR包的支持：jboss-system-3.2.6.jar、jboss-jmx-3.2.6.jar，如果你和我一样用Eclipse来开发（推荐），那么把这个两个包加入到项目的库引用中（加入到库引用的方法参考前面两章）。</p>
2、程序代码
<p>　　假设我们有一个叫message的属性要需要经常进行改动配置的，那么我们就把它写成一个MBean。</p>
<p>1、HelloWorldServiceMBean接口</p>
<p>　　在写MBean之前，我们先需要写一个MBean接口，接口里的方法都是属性的set/get方法。这个接口必须继承接口ServiceMBean。</p>
<div><br clear="none"/>import org.jboss.system.ServiceMBean;<br clear="none"/>public interface HelloWorldServiceMBean extends ServiceMBean {<br clear="none"/>    String getMessage();<br clear="none"/>    void setMessage(String message);<br clear="none"/>}</div>
<p>2、HelloWorldService实现类</p>
<p>　　然后写出HelloWorldServiceMBean接口的实现类HelloWorldService，这个实现类还必须继承ServiceMBeanSupport类。这种类再简单不过了，就是属性和相应的set/get方法，EJB中叫实体类、Hibernate中叫POJO。</p>
<div>
<p>import org.jboss.system.ServiceMBeanSupport;<br clear="none"/>public class HelloWorldService extends ServiceMBeanSupport implements HelloWorldServiceMBean {<br clear="none"/>    private String message;<br clear="none"/>    public String getMessage() {<br clear="none"/>        System.out.println(&quot;getMessage()=&quot; + message);<br clear="none"/>        return message;<br clear="none"/>    }</p>
<p>    public void setMessage(String message) {<br clear="none"/>        System.out.println(&quot;setMessage(&quot; + message + &quot;)&quot;);<br clear="none"/>        this.message = message;<br clear="none"/>    }<br clear="none"/>}</p>
</div>
<p>3、配置文件jboss-service.xml</p>
<div>
<p>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br clear="none"/>&lt;server&gt;<br clear="none"/>    &lt;mbean code=&quot;example.mbean.HelloWorldService&quot; name=&quot;www.chengang.com.cn:service=HelloWorld&quot;&gt;<br clear="none"/>        &lt;attribute name=&quot;Message&quot;&gt;Hello World&lt;/attribute&gt;<br clear="none"/>    &lt;/mbean&gt;<br clear="none"/>&lt;/server&gt;</p>
</div>
<p>说明：</p>
<p>l code项指向MBean的实现类HelloWorldService<br clear="none"/>l name项是一个名称，格式一般是：[说明性文字]:service=[类名]<br clear="none"/>l attribute是为属性设置初始值，这样当JBOSS一加载HelloWorldService类时，message属性就有了一个初始值Hello World。注意Message的第一个字母必须是大写。</p>
二、将实例部署到JBOSS
<p>　　在jboss-3.2.6\server\default\deploy目录下创建一个hello.sar目录，然后创建如下目录文件结构：</p>
<p>hello.sar<br clear="none"/>|----e...</p></div></div></div></div>
    
    ]]></description> <pubDate>Sat, 19 Jul 2008 02:13:03 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#d1e15d61-91c3-436d-b62e-a9a4269e3a89</guid> 
  
    <enclosure url="http://www.evernote.com/shard/s1/thumb/d1e15d61-91c3-436d-b62e-a9a4269e3a89"
               length="0" type="image/jpeg"/>
  
  </item>

  
  <item> <title>[JMX一步步来]　8、编写程序来连接MBean - 子在川上曰 - BlogJava</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#6461828e-57fd-4657-a629-4ab1b5ca9528</link>
  <description><![CDATA[
    
    
    
        
        <div class="ennote">
<div>
<a href="http://www.blogjava.net/chengang/archive/2006/03/07/34089.html" shape="rect">[JMX一步步来]　8、编写程序来连接MBean</a>
<div>
<div align="center">文/陈刚  from <a href="http://www.chengang.com.cn/" shape="rect">www.chengang.com.cn</a> at 2005-12-26</div>
<div align="center">　</div>
<div>　　前面用Html、jconsole等方法连接上了MBeanServer，并能够通过这些界面来操纵MBean。但有时我们需要不借助这些客户端，而是在自己的程序来操纵这些MBean，这就要求我们知道如何在代码里连接MBean。</div>
<div>　</div>
<div>　　基于上一篇为jconsole而修改的例子，给出一个示例的客户端程序，基本的操作都有了：</div>
<div>
<div>
<div>
<div>
<div><br clear="none"/><br clear="none"/>import java.util.Iterator;<br clear="none"/>import java.util.Set;<br clear="none"/></div>

<div><br clear="none"/>import javax.management.Attribute;<br clear="none"/>import javax.management.MBeanInfo;<br clear="none"/>import javax.management.MBeanServerConnection;<br clear="none"/>import javax.management.MBeanServerInvocationHandler;<br clear="none"/>import javax.management.ObjectInstance;<br clear="none"/>import javax.management.ObjectName;<br clear="none"/>import javax.management.remote.JMXConnector;<br clear="none"/>import javax.management.remote.JMXConnectorFactory;<br clear="none"/>import javax.management.remote.JMXServiceURL;<br clear="none"/></div>

<div><br clear="none"/>public class Client {<br clear="none"/></div>

<div><br clear="none"/>    public static void main(String[] args) throws Exception {<br clear="none"/>        JMXServiceURL url = new JMXServiceURL(&quot;service:jmx:rmi:///jndi/rmi://localhost:9999/server&quot;);<br clear="none"/>        JMXConnector jmxc = JMXConnectorFactory.connect(url, null);<br clear="none"/>        MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();<br clear="none"/>        ObjectName mbeanName = new ObjectName(&quot;chengang:name=HelloWorld&quot;);<br clear="none"/></div>

<div><br clear="none"/>        //把所有Domain都打印出来<br clear="none"/>        System.out.println(&quot;Domains:---------------&quot;);<br clear="none"/>        String domains[] = mbsc.getDomains();<br clear="none"/>        for (int i = 0; i &lt; domains.length; i++) {<br clear="none"/>            System.out.println(&quot;\tDomain[&quot; + i + &quot;] = &quot; + domains[i]);<br clear="none"/>        }<br clear="none"/></div>

<div><br clear="none"/>        //MBean的总数<br clear="none"/>        System.out.println(&quot;MBean count = &quot; + mbsc.getMBeanCount());<br clear="none"/></div>

<div><br clear="none"/>        //对name属性的操作（属性名的第一个字母要大写）<br clear="none"/>        mbsc.setAttribute(mbeanName, new Attribute(&quot;Name&quot;, &quot;Chen.Gang&quot;));//设值<br clear="none"/>        System.out.println(&quot;Name = &quot; + mbsc.getAttribute(mbeanName, &quot;Name&quot;));//取值<br clear="none"/></div>

<div><br clear="none"/>        //得到proxy代理后直接调用的方式<br clear="none"/>        HelloMBean proxy = (HelloMBean) MBeanServerInvocationHandler.newProxyInstance(mbsc, mbeanName, HelloMBean.class, false);<br clear="none"/>        proxy.printHello();<br clear="none"/>        proxy.printHello(&quot;陈刚&quot;);<br clear="none"/></div>

<div><br clear="none"/>        //远程调用的方式<br clear="none"/>        mbsc.invoke(mbeanName, &quot;printHello&quot;, null, null);<br clear="none"/>        mbsc.invoke(mbeanName, &quot;printHello&quot;, new Object[] { &quot;子在川上曰&quot; }, new String[] { String.class.getName() });<br clear="none"/></div>

<div><br clear="none"/>        //得mbean的信息<br clear="none"/>        MBeanInfo inf...</div></div></div></div></div></div></div></div>
    
    ]]></description> <pubDate>Sat, 19 Jul 2008 02:12:09 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#6461828e-57fd-4657-a629-4ab1b5ca9528</guid> 
  
  </item>

  
  <item> <title>[JMX一步步来]　7、用JDK5.0的JConsole来连接MBean - 子在川上曰 - BlogJava</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#e954fbc7-1036-49fd-afa4-1c8c4d18d699</link>
  <description><![CDATA[
    
    
    
        
        <div class="ennote">
<div>
<a href="http://www.blogjava.net/chengang/archive/2006/03/07/34088.html" shape="rect">[JMX一步步来]　7、用JDK5.0的JConsole来连接MBean</a>
<div>
<div align="center">文/陈刚  from <a href="http://www.chengang.com.cn/" shape="rect">www.chengang.com.cn</a> at 2005-12-26</div>
<div>　</div>
<div>　　前面所有看效果都是通过Html网页来看的。JDK5.0自带了一个jmx客户端，叫jconsole，位于c:\jdk\bin\jconsole.exe。我们来用用这个客户端来连接Mbean Server。</div>
<div>　</div>
<div>一、vm参数方式</div>
<div>　</div>
<div>1、还是用第一篇的那个HelloAgent，修改HelloAgent，将第一句：</div>
<div>MBeanServer server = MBeanServerFactory.createMBeanServer();</div>
<div>改为：MBeanServer server = ManagementFactory.getPlatformMBeanServer();</div>
<div>注：ManagementFactory的全路径为：java.lang.management.ManagementFactory</div>
<div>　</div>
<div>2、修改Eclipse的run选项，把“-Dcom.sun.management.jmxremote=HelloAgent”这一句加入到run选项中，修改如下图：</div>
<div></div>
<div>　</div>
<div>3、运行HelloAgent，然后在Dos窗口输入“jconsole”来启到JConsole，得到如下界面。　</div>
<div>4、单击“连接”，进入以下界面：</div>
<div></div>
<div>　</div>
<div>二、RMI方式</div>
<div>　</div>
<div>　　还是用jconsole，但方式变了。这里不需要象上面那样修改Eclipse run的vm选项。</div>
<div>　</div>
<div>1、还是用第一篇的HelloAgent，加上一段代码，启动一个JMXConnectorServer服务</div>
<div>
<div>
<div>
<div>
<div><br clear="none"/>import javax.management.MBeanServer;<br clear="none"/>import javax.management.MBeanServerFactory;<br clear="none"/>import javax.management.ObjectName;<br clear="none"/>import javax.management.remote.JMXConnectorServer;<br clear="none"/>import javax.management.remote.JMXConnectorServerFactory;<br clear="none"/>import javax.management.remote.JMXServiceURL;<br clear="none"/></div>

<div><br clear="none"/>import com.sun.jdmk.comm.HtmlAdaptorServer;<br clear="none"/></div>

<div><br clear="none"/>public class HelloAgent {<br clear="none"/>    public static void main(String args[]) throws Exception {<br clear="none"/>        MBeanServer server = MBeanServerFactory.createMBeanServer();<br clear="none"/>        ObjectName helloName = new ObjectName(&quot;chengang:name=HelloWorld&quot;);<br clear="none"/>        Hello hello = new Hello();<br clear="none"/>        server.registerMBean(hello, helloName);<br clear="none"/>        ObjectName adapterName = new ObjectName(&quot;HelloAgent:name=htmladapter,port=8082&quot;);<br clear="none"/>        HtmlAdaptorServer adapter = new HtmlAdaptorServer();<br clear="none"/>        server.registerMBean(adapter, adapterName);<br clear="none"/>        adapter.start();<br clear="none"/>        System.out.println(&quot;start.....&quot;);<br clear="none"/></div>

<div><br clear="none"/>        // Create an RMI connector and start it<br clear="none"/>        JMXServiceURL url = new JMXServiceURL(&quot;service:jmx:rmi:///jndi/rmi://localhost:9999/server&quot;);<br clear="none"/>        JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, server);<br clear="none"/>        cs.start();<br clear="none"/>        System.out.println(&quot;rmi　start.....&quot;);<br clear="none"/>    }<br clear="none"/>}<br clear="none"/></div>
</div>
</div>
<div> 　</div>
<div>2、在Dos运行一个命令：rmiregistry 9999</div>
<div> </div>
<div>3、运行HelloAgent，然后再在dos下运行命令jconsole，得到如下界面，输入service:jmx:rmi:///jndi/rmi://localhost:...</div></div></div></div></div></div>
    
    ]]></description> <pubDate>Sat, 19 Jul 2008 02:11:22 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#e954fbc7-1036-49fd-afa4-1c8c4d18d699</guid> 
  
  </item>

  
  <item> <title>[JMX一步步来]　6、模型Bean：Model Bean - 子在川上曰 - BlogJava</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#0f6aa1ba-844a-4526-aaa6-f0ec6b41b689</link>
  <description><![CDATA[
    
    
    
        
        <div class="ennote">
<a href="http://www.blogjava.net/chengang/archive/2006/03/07/34087.html" shape="rect">[JMX一步步来]　6、模型Bean：Model Bean</a>
<div align="center">文/陈刚  from <a href="http://www.chengang.com.cn/" shape="rect">www.chengang.com.cn</a> at 2005-12-26</div>
<div>　</div>
<div>　　在上一节是用apache的commons-modeler来开发的一个model，只不过commons-modeler帮助我们实现了很多的代码，而我们只需要写描述XML文件就行了。这一节，来一个实打实的Model Bean，不借助任何第三方工具包。例子还是沿用Hello这个类，以便于和以前的实现相比较。</div>
<div>　</div>
<div>一、Model MBean实例</div>
<div> </div>
<div>1、Hello.java还是和以前的一样。这里它没有再加上一个MBean接口了，只是一个很普通的类。</div>
<div><br clear="none"/>
public class Hello{<br clear="none"/>
   private String name;<br clear="none"/>
   public String getName() {<br clear="none"/>
       return name;<br clear="none"/>
   }<br clear="none"/>
   public void setName(String name) {<br clear="none"/>
       this.name = name;<br clear="none"/>
   }<br clear="none"/>
   public void printHello() {<br clear="none"/>
       System.out.println(&quot;Hello World, &quot; + name);<br clear="none"/>
   }<br clear="none"/>
   public void printHello(String whoName) {<br clear="none"/>
       System.out.println(&quot;Hello , &quot; + whoName);<br clear="none"/>
   }<br clear="none"/>
}</div>
<div>　</div>
<div>2、接下来是HelloAgent的写法，和以前就差一句：把“new Hello()”这一句删除了，加上了ModelMbeanUtils.createModlerMbean();</div>
<div><br clear="none"/>
import javax.management.MBeanServer;<br clear="none"/>
import javax.management.MBeanServerFactory;<br clear="none"/>
import javax.management.ObjectName;<br clear="none"/>
import javax.management.modelmbean.RequiredModelMBean;</div>
<div><br clear="none"/>
import com.sun.jdmk.comm.HtmlAdaptorServer;</div>
<div><br clear="none"/>
public class HelloAgent {<br clear="none"/>
   public static void main(String[] args) throws Exception {<br clear="none"/>
       MBeanServer server = MBeanServerFactory.createMBeanServer();<br clear="none"/>
       ObjectName helloName = new ObjectName(&quot;chengang:name=HelloWorld&quot;);<br clear="none"/>
       //Hello hello = new Hello();<br clear="none"/>
       RequiredModelMBean hello = ModelMBeanUtils.createModlerMBean();<br clear="none"/>
       server.registerMBean(hello, helloName);<br clear="none"/>
       ObjectName adapterName = new ObjectName(&quot;HelloAgent:name=htmladapter,port=8082&quot;);<br clear="none"/>
       HtmlAdaptorServer adapter = new HtmlAdaptorServer();<br clear="none"/>
       server.registerMBean(adapter, adapterName);<br clear="none"/>
       adapter.start();<br clear="none"/>
       System.out.println(&quot;start.....&quot;);<br clear="none"/>
   }<br clear="none"/>
}</div>
<div> </div>
<div>3、ModelMbeanUtils这个类是要我们自己来实现的，也是写model Bean最麻烦的地方，它主要是返回一个RequiredModelMBean类，此类主要包括了一个ModelMBeanInfo类的信息。在ModelMBeanInfo中定义了所有对需要管理的属性和方法的描述。具体代码如下：</div>
<div>import javax.management.MBeanParameterInfo;<br clear="none"/>
import javax.management.modelmbean.ModelMBeanAttributeInfo;<br clear="none"/>
import javax.management.modelmbean.ModelMBeanInfo;<br clear="none"/>
import javax.management.modelmbean.ModelMBeanInfoSupport;<br clear="none"/>
import javax.management.modelmbean.ModelMBeanOperationInfo;&lt;b...</div></div>
    
    ]]></description> <pubDate>Mon, 21 Jul 2008 05:56:58 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#0f6aa1ba-844a-4526-aaa6-f0ec6b41b689</guid> 
  
  </item>

  
  <item> <title>[JMX一步步来]　5、用Apache的commons-modeler来辅助开发JMX - 子在川上曰 - BlogJava</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#d451569c-bdbf-4584-9c02-151b4eb5f9eb</link>
  <description><![CDATA[
    
    
    
        
        <div class="ennote">
<div>
<a href="http://www.blogjava.net/chengang/archive/2006/03/07/34086.html" shape="rect">[JMX一步步来]　5、用Apache的commons-modeler来辅助开发JMX</a>
<div>
<div align="center">文/陈刚  from <a href="http://www.chengang.com.cn/" shape="rect">www.chengang.com.cn</a> at 2005-12-13</div>
<div> </div>
<div>一、前言</div>
<div>　</div>
<div>　　每一个MBean都要有一个接口，比如前面的Hello要有一个HelloMBean接口。要多维护一个接口，的确是件麻烦的事。Apache的commons-modeler利用JMX中的动态MBean原理很好的解决了这一问题，commons-modeler使用得我们可以只写Hello，而不用写HelloMBean这个接口。不过这是有代价的，它要求我们写一个mbean的xml描述文件（唉，少了一件事，却又多出另一件事来）。但commons-modeler还是有优点的，就是它让mbean的装配更加灵活，把多个mbean的装配都集中在一个XML文件里来了。</div>
<div>　　开始实例之前，你需要先去apache网站下载commons-modeler，以及modeler的依赖项目commons-logging。下载网址为：<a href="http://jakarta.apache.org/site/downloads/downloads_commons.html" shape="rect">http://jakarta.apache.org/site/downloads/downloads_commons.html</a>，下载的文件是ZIP压缩包，解压后找到commons-logging.jar和commons-modeler.jar。如果在DOS下用命令行开发，则把这两个JAR包加入到classpath系统变量中。如果你用Eclipse开发，则把JAR包加入到项目属性的Libratries（库）引用中。<br clear="none"/></div>
<div> </div>
<div>二、HelloWorld实例</div>
<div> </div>
<div> 　我们以本系统的第一篇“1、JMX的Hello World”为例，来重新实现一次。</div>
<div>　</div>
<div>1、Hello.java的代码不变（注：为了在Eclipse上和原来的Hello文件放在不同的地方，我把新Hello放到了mbean.modelbean包），如下：</div>
<div>
<div>
<div><br clear="none"/>package mbean.modelbean;<br clear="none"/></div>

<div><br clear="none"/>import mbean.standard.HelloMBean;<br clear="none"/></div>

<div><br clear="none"/>public class Hello implements HelloMBean {<br clear="none"/>    private String name;<br clear="none"/>    public String getName() {<br clear="none"/>        return name;<br clear="none"/>    }<br clear="none"/>    public void setName(String name) {<br clear="none"/>        this.name = name;<br clear="none"/>    }<br clear="none"/>    public void printHello() {<br clear="none"/>        System.out.println(&quot;Hello World, &quot; + name);<br clear="none"/>    }<br clear="none"/>    public void printHello(String whoName) {<br clear="none"/>        System.out.println(&quot;Hello , &quot; + whoName);<br clear="none"/>    }<br clear="none"/>}<br clear="none"/></div>
</div>
</div>
<div> </div>
<div>2、MBean不用写了，但需要写一个XML描述文件。文件名任取，这里取名为：mbeans-descriptors</div>
<div>
<div>
<div><br clear="none"/>&lt;?xml version=&quot;1.0&quot;?&gt;<br clear="none"/>&lt;mbeans-descriptors&gt;<br clear="none"/> &lt;mbean name=&quot;Hello&quot; description=&quot;the hello bean&quot; domain=&quot;chengang&quot; group=&quot;helloGroup&quot; type=&quot;mbean.modelbean.Hello&quot;&gt;<br clear="none"/>  &lt;attribute name=&quot;name&quot; description=&quot;a name attribute&quot; type=&quot;java.lang.String&quot; writeable=&quot;true&quot;/&gt;<br clear="none"/>  &lt;operation name=&quot;printHello&quot; description=&quot;a operation to print hello&quot; impact=&quot;INFO&quot; returnType=&quot;String&quot;/&gt;<br clear="none"/> &lt;/mbean&gt;<br clear="none"/>&lt;/mbeans-descriptors&gt; <br clear="none"/></div>
</div>
</div>
<div>这里只对&lt;mbean&gt;标签做一下说明：</div>
<ul><li>name mbean在xml中的唯一标识，不一定要和类同名</li><li>description　mbean的注释说明信息</li><li>domain mbean所属域</li><li>group mbean所属组</li><li>type mbean的类全名（包名＋类名）</li><li>classname 指定实现代理功能的ModelMbean的全名，如果不指定则默认为BaseModelMBean </li></ul>
<div>3、接下来改写HelloAgent</div>
<div>
<div>
<div><br clear="none"/>package mbean.modelbean;<br clear="none"/></div>

<div><br clear="none"/>import java.io.InputStream;<br clear="none"/>import javax.management.MBeanServer;<br clear="none"/>import javax.management.ObjectName;<br clear="none"/>import javax.man...</div></div></div></div></div></div>
    
    ]]></description> <pubDate>Sat, 19 Jul 2008 02:10:03 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#d451569c-bdbf-4584-9c02-151b4eb5f9eb</guid> 
  
  </item>

  
  <item> <title>[JMX一步步来]　4、动态MBean：DynamicMBean</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#6c34203d-00e5-4c28-b4ba-c58bf0f9f0bc</link>
  <description><![CDATA[
    
    
    
        
        <div class="ennote">
<a href="http://www.blogjava.net/chengang/archive/2006/03/07/34084.html" shape="rect">[JMX一步步来]　4、动态MBean：DynamicMBean</a>
<div align="center">文/陈刚  from <a href="http://www.chengang.com.cn/" shape="rect">www.chengang.com.cn</a> at 2005-12-4</div>
<div align="center"> 　</div>
<div>一、前言</div>
<div>　</div>
<div>　　动态MBean是在运行期才定义它的属性和方法，也就是说它有什么属性和方法是可以动态改变的。动态MBean主要利用一些辅助类（构造函数类MBeanConstructorInfo、属性类MBeanAttributeInfo、方法类MBeanOperationInfo）来完成这个功能，所有的动态MBean必须实现DynamicMBean接口。DynamicMBean写好后，使用方法和第一篇文章中普通的MBean一样。</div>
<div>　</div>
<div>　　给出一个动态MBean的实例，这个实例最初动态构了一个Name属性及一个print方法，当我们执行它的print方法之后，又给此MBean新增了一个print1方法。实例的代码如下：</div>
<div>二、实例</div>
<div>1、HelloDynamic类</div>
<div><br clear="none"/>
import java.lang.reflect.Constructor;<br clear="none"/>
import java.util.Iterator;<br clear="none"/>
import javax.management.Attribute;<br clear="none"/>
import javax.management.AttributeList;<br clear="none"/>
import javax.management.DynamicMBean;<br clear="none"/>
import javax.management.MBeanAttributeInfo;<br clear="none"/>
import javax.management.MBeanConstructorInfo;<br clear="none"/>
import javax.management.MBeanException;<br clear="none"/>
import javax.management.MBeanInfo;<br clear="none"/>
import javax.management.MBeanNotificationInfo;<br clear="none"/>
import javax.management.MBeanOperationInfo;<br clear="none"/>
import javax.management.MBeanParameterInfo;<br clear="none"/>
import javax.management.ReflectionException;</div>
<div><br clear="none"/>
/**<br clear="none"/>
* @author Sunny Peng<br clear="none"/>
* @author change by Chen.Gang, add a feature for dynamic add operation<br clear="none"/>
* @version 1.0<br clear="none"/>
*/<br clear="none"/>
public class HelloDynamic implements DynamicMBean {<br clear="none"/>
   //这是我们的属性名称<br clear="none"/>
   private String name;<br clear="none"/>
   private MBeanInfo mBeanInfo = null;<br clear="none"/>
   private String className;<br clear="none"/>
   private String description;<br clear="none"/>
   private MBeanAttributeInfo[] attributes;<br clear="none"/>
   private MBeanConstructorInfo[] constructors;<br clear="none"/>
   private MBeanOperationInfo[] operations;<br clear="none"/>
   MBeanNotificationInfo[] mBeanNotificationInfoArray;</div>
<div><br clear="none"/>
   public HelloDynamic() {<br clear="none"/>
       init();<br clear="none"/>
       buildDynamicMBean();<br clear="none"/>
   }</div>
<div><br clear="none"/>
   private void init() {<br clear="none"/>
       className = this.getClass().getName();<br clear="none"/>
       description = &quot;Simple implementation of a dynamic MBean.&quot;;<br clear="none"/>
       attributes = new MBeanAttributeInfo[1];<br clear="none"/>
       constructors = new MBeanConstructorInfo[1];<br clear="none"/>
       operations = new MBeanOperationInfo[1];<br clear="none"/>
       mBeanNotificationInfoArray = new MBeanNotificationInfo[0];<br clear="none"/>
   }</div>
<div><br clear="none"/>
   private void buildDynamicMBean() {<br clear="none"/>
       //设定构造函数<br clear="none"/>
       Constructor[] thisconstructors = this.getClass().getConstructors();<br clear="none"/>
       constructors[0] = new MBeanConstructorInfo(&quot;Hel...</div></div>
    
    ]]></description> <pubDate>Sat, 19 Jul 2008 14:44:32 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#6c34203d-00e5-4c28-b4ba-c58bf0f9f0bc</guid> 
  
  </item>

  
  <item> <title>[JMX一步步来]　3、Notification的使用 - 子在川上曰 - BlogJava</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#29ddb171-a13e-4d7d-804e-d99480ed76db</link>
  <description><![CDATA[
    
    
    
        
        <div class="ennote">
<a href="http://www.blogjava.net/chengang/archive/2006/03/07/34083.html" shape="rect">[JMX一步步来]　3、Notification的使用</a>
<div align="center">文/陈刚 from <a href="http://www.chengang.com.cn/" shape="rect">www.chengang.com.cn</a> at 2005-12-4</div>
<div align="center">　</div>
<div>一、简介</div>
<div>　</div>
<div>　　Mbean之间的通信是必不可少的，Notification就起到了在Mbean之间沟通桥梁的作用。JMX notification 由四部分组成：</div>
<ul><li>
<div align="center">Notification 这个相当于一个信息包，封装了需要传递的信息</div>
</li><li>
<div align="center">Notification broadcaster　这相当于一个广播器，把消息广播出去</div>
</li><li>
<div align="center">Notification listerner　这是一个监听器，用于监听广播出来的Notification消息</div>
</li><li>
<div align="center">Notification filter　这是一个过滤器，过滤掉不需要的Notification消息</div>
</li></ul>
<div>　 Notification broadcaster不需要我们实现，JMX的内部已经有了。Notification filter一般也很少用。下面的例子主要用到了Notification、Notification listerner。</div>
<div> </div>
<div>二、实例</div>
<div>　</div>
<div>　　在第一篇的Hello中有一个printHello(String whoName)方法，意思根据碰到的是谁来打招呼，比如：</div>
<div> 　</div>
<div>　　Jack从对面走过来，说：“hi”</div>
<div>　　我们回之以礼，说：“Hello, jack”</div>
<div>　</div>
<div>　　首先这需要Jack先说一个hi（相应一个操作方法），然后他说的话封装成声波（相当Notification消息包）传递出去。然后我们还要给Jakc装上一个监听器（Hello的耳朵？？^_^），这个监听器将捕捉到Jack的声波语音包，并进行相应处理，即说“Hello, jack”。</div>
<div>　</div>
<div>　　好，我们看看如何实现的：</div>
<div>　</div>
<div>1、Jack类及其相应的MBean</div>
<div> </div>
<div>   我们把Jack写成一个MBean，如下：</div>
<div><br clear="none"/>
import javax.management.Notification;<br clear="none"/>
import javax.management.NotificationBroadcasterSupport;</div>
<div><br clear="none"/>
public class Jack extends NotificationBroadcasterSupport implements JackMBean {<br clear="none"/>
  private int seq = 0;<br clear="none"/>
  public void hi() {<br clear="none"/>
      Notification n = new Notification(//创建一个信息包<br clear="none"/>
              &quot;jack.hi&quot;,//给这个Notification起个名称<br clear="none"/>
              this, //由谁发出的Notification<br clear="none"/>
              ++seq,//一系列通知中的序列号,可以设任意数值<br clear="none"/>
              System.currentTimeMillis(),//发出时间<br clear="none"/>
              &quot;Jack&quot;);//发出的消息文本<br clear="none"/>
      //发出去<br clear="none"/>
      sendNotification(n);<br clear="none"/>
  }<br clear="none"/>
}</div>
<div> </div>
<div> 说明：</div>
<ul><li>
<div align="center">必需继承NotificationBroadcasterSupport</div>
</li><li>
<div align="center">此类只有一个hi方法，方法只有两句：创建一个Notification消息包，然后将包发出去</div>
</li><li>
<div align="center">如果你还要在消息包上附加其他数据，Notification还有一个setUserData方法可供使用</div>
</li></ul>
<div>2、接下来是他的MBean</div>
<div><br clear="none"/>
public interface JackMBean {<br clear="none"/>
  public void hi();<br clear="none"/>
}</div>
<div> </div>
<div>3、创建一个Listener，监听到的Notification消息包将由此类负责处理。</div>
<div> </div>
<div><br clear="none"/>
import javax.management.Notification;<br clear="none"/>
import javax.management.NotificationListener;<br clear="none"/>
public class HelloListener implements NotificationListener {<br clear="none"/>
  public void handleNotification(Notification n, Object handback) {<br clear="none"/>
      System.out.println(&quot;type=&quot; + n.getType());<br clear="none"/>
      System.out.println(&quot;source=&quot; + n.getSource());<br clear="none"/>
      System.out.println(&quot;seq=&quot; + n.getSequenceNumber());<br clear="none"/>
      System.out.println(&quot;send time=&quot; + n.getTimeStamp());<br clear="none"/>
      System.out.println(&quot;message=&quot; + n.getMes...</div></div>
    
    ]]></description> <pubDate>Sat, 19 Jul 2008 13:18:02 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#29ddb171-a13e-4d7d-804e-d99480ed76db</guid> 
  
  </item>

  
  <item> <title>[JMX一步步来]　2、JMX简介 - 子在川上曰 - BlogJava</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#e23f8925-256d-4b58-a7bd-774186fd6673</link>
  <description><![CDATA[
    
    
    
        <a href="http://www.evernote.com/pub/smartwgd/daydaystudy#e23f8925-256d-4b58-a7bd-774186fd6673"><img align="right" src="http://www.evernote.com/shard/s1/thumb/e23f8925-256d-4b58-a7bd-774186fd6673"/></a>
        <div class="ennote">
<div>
<a href="http://www.blogjava.net/chengang/archive/2006/03/07/34082.html" shape="rect">[JMX一步步来]　2、JMX简介</a>
<div>
<div align="center">文/陈刚 from <a href="http://www.chengang.com.cn/" shape="rect">www.chengang.com.cn</a> at 2005-12-4</div>
<p>一、JMX简介</p>
<p>　　JMX是一种JAVA的正式规范，它主要目的是让程序且有被管理的功能，那么怎么理解所谓的“被管理”呢？试想你开发了一个软件（如ＷＥＢ网站），它是在２４小时不简断运行的，那么你可能会想要“监控”这个软件的运行情况，比如收到了多少数据，有多少人登录等等。或者你又想“配置”这个软件，比如现在访问人数比较多，你想把数据连接池设置得大一些。</p>
<p>　　当然，你也许会专门为这些管理来开发软件，但如果你借助JMX，则会发现创建这样的管理程序是如此简单。因为你无需为管理程序来开发界面，已经有通用的JMX管理软件，如MC4J，或者是用一般都附带提供的HTML网页来管理，你要做的仅仅是将自己要被管理和监控类的按照JMX规范修改一下即可。</p>
<p>　　中间件软件WebLogic的管理页面就是基于JMX开发的，而JBoss则整个系统都基于JMX构架。下面将JMX的一些概念，从JMX规范转帖如下：</p>
<p>二、JMX构架中的各层及相关的组件</p>
<ol><li>工具层（Instrumentation Level）<br clear="none"/>
    (a) MBeans（标准的，动态的，开放的和模型MBeans）<br clear="none"/>
    (b) 通知模型：Notification、NotificationListener等类<br clear="none"/>
    (c) MBean元数据类：Attribute、Opreator等类</li><li>代理层（Agent Level）<br clear="none"/>
    (a) MBean Server<br clear="none"/>
    (b) 代理服务。如前一篇的HtmlAdaptorServer等。</li></ol>
<p>以下是从网上找到的两个图：</p>
<p>（图1）</p>
<p>（图2）</p>
<p/>
<p>　　MBean中有getter和setter的就是属性，如前一篇的Hello类中Name。如果只有getter则表示该属性只读。一共有四种MBean，如下：</p>
<ol><li>标准MBeans（Standard MBeans）设计和实现是最简单的，这类MBean使用自己的方法名作为管理接口；</li><li>动态MBeans（Dynamic MBeans）必须实现一个指定的接口，由于动态MBeans在运行期间暴露它们的管理接口，因此更为灵活；</li><li>开放MBeans（Open MBeans）属于动态MBeans，这类MBean依靠基础数据类型来实现通用管理，并为友情用户进行自我声明；</li><li>模型MBeans（Model MBeans）同样也是动态MBeans，这类MBeans是完全可配置的，在运行期间进行自我声明；它们为资源动态工具提供一个一般性的，有默认行为的MBeans类。</li></ol>
<div>　　在前一篇中的Hello、HelloMBean就是一个标准MBeans（Standard MBeans）。后面接下来的几篇，我们会继续介绍其他几种MBean。</div>
</div>
</div>

<div align="right"><a href="http://www.blogjava.net/chengang/archive/2006/03/07/34082.html" shape="rect">Go to source web page: [JMX一步步来]　2、JMX简介 - 子在川上曰 - BlogJava</a></div>
</div>
    
    ]]></description> <pubDate>Sat, 19 Jul 2008 01:38:23 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#e23f8925-256d-4b58-a7bd-774186fd6673</guid> 
  
    <enclosure url="http://www.evernote.com/shard/s1/thumb/e23f8925-256d-4b58-a7bd-774186fd6673"
               length="0" type="image/jpeg"/>
  
  </item>

  
  <item> <title>[JMX一步步来]　1、JMX的Hello World - 子在川上曰 - BlogJava</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#8d569215-2b8e-48e5-9d94-e5d92a838d44</link>
  <description><![CDATA[
    
    
    
        
        <div class="ennote">
<div>
<a href="http://www.blogjava.net/chengang/archive/2006/03/07/34061.html" shape="rect">[JMX一步步来]　1、JMX的Hello World</a>
<div>
<div>　　　　文/陈刚 from <a href="http://www.chengang.com.cn/" shape="rect">www.chengang.com.cn</a> at 2005-12-3<br clear="none"/></div>
<div><br clear="none"/>
一、JMX简介</div>
<div><br clear="none"/>
　　什么是JMX？在一篇网文中是这样说的：&quot;JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务，实际上，用户可以在任何Java应用程序中使用这些代理和服务实现管理&quot;，这句话我现在看着还是不知所云，云里雾里。</div>
<div><br clear="none"/>
　　我们还是从JMX能给我们提供什么好处入手来理解吧。举一个应用实例：在一个系统中常常会有一些配置信息，比如服务的IP地址，端口号什么的，那么如何来写这些代码呢？</div>
<ol><li>程序初哥一般是写死在程序里，到要改变时就去改程序，然后再编译发布；</li><li>程序熟手则一般把这些信息写在一个配置文件里（JAVA一般都是*.properties文件），到要改变时只要改配置文件，但还是重新启动系统，以便读取配置文件里的新值；</li><li>程序好手则会写一个段代码，把配置值缓存起来，系统在读值的时候，先看看配置文件有没有更动。如有更改则重读一遍，否则从缓存里读取值</li><li>程序高手则懂得取物为我所用，用JMX！把配置属性集中在一个类，然后写一个叫MBean的东东，再配置一下就轻松搞定了。而且JMX自动提供了一个WEB页面来给你来改变这些配置信息。</li></ol>
<p>二、准备工作</p>
<p><br clear="none"/>
　　JMX是一份规范，SUN依据这个规范在JDK（1.3、1.4、5.0）提供了JMX接口。而根据这个接口的实现则有很多种，比如Weblogic的JMX实现、MX4J、JBoss的JMX实现。在SUN自己也实现了一份，不过在JDK1.4之前，这件JMX实现（一些JAR包）是可选的，你得去它的网站上下载。JDK5.0则内嵌了进来，安装JDK5.0就可以开发基于JMX的代码了。</p>
<div>
<div>
<div>　　但JDK5.0并非包含所有SUN的关于JMX的代码，有一些工具类是排除在JDK5.0之外的。下面根据所使用的JDK版本情况，谈一谈开发环境的准备。</div>
<div>1、JDK1.3、1.4</div>
<div>　　去SUN网站下载SUN的JMX实现，共两个ZIP文件，下载网址：<a href="http://java.sun.com/products/JavaManagement/download.html" shape="rect">http://java.sun.com/products/JavaManagement/download.html</a>。</div>
<div>（1）jmx-1_2_1-ri.zip</div>
<div>　　　解压后的lib目录包含：jmxri.jar、jmxtools.jar</div>
<div>（2）jmx_remote-1_0_1_03-ri.zip</div>
<div>　　　解压后的lib目录包含：jmxremote.jar、jmxremote_optional.jar、rmissl.jar</div>
<div>　　如果在DOS下用命令行开发，则把这五个JAR包加入到classpath系统变量中。如果你用Eclipse开发，则把JAR包加入到项目属性的Libratries（库）引用中。</div>
<div>2、JDK5.0</div>
<div>　　JDK5.0的jre\lib\rt.jar已经包含了jmxri.jar、jmxremote.jar、rmissl.jar三个包的代码。如果你用到jmxtools.jar、jmxremote_optional.jar的类，则需要将这两个类加入到classpath或Eclipse的项目库引用中。</div>
<div>3、我使用的开发环境：JDK5.0 ＋ Eclipse3.2。</div>
<div>　　注：因为用到jmxtools.jar中的HtmlAdaptorServer类，所以将此包加入到项目库引用中。jmxremote_optional.jar暂时不用到，不管它。<br clear="none"/></div>
<div><br clear="none"/>
三、HelloWorld实例</div>
<div>1、Hello是一个需要被管理的类（普通类）<br clear="none"/></div>
<div>
<div>
<div><br clear="none"/>/**<br clear="none"/> * @author ChenGang 2005-12-3<br clear="none"/> */<br clear="none"/>public class Hello implements HelloMBean {<br clear="none"/>    private String name;<br clear="none"/>    public String getName() {<br clear="none"/>        return name;<br clear="none"/>    }<br clear="none"/>    public void setName(String name) {<br clear="none"/>        this.name = name;<br clear="none"/>    }<br clear="none"/>    public void printHello() {<br clear="none"/>        System.out.println(&quot;Hello World, &quot; + name);<br clear="none"/>    }<br clear="none"/>    public void printHello(String whoName) {<br clear="none"/>        System.out.println(&quot;Hello , &quot; + whoName);<br clear="none"/>    }<br clear="none"/>}<br clear="none"/></div>
</div>
</div>
<div>2、要管理Hello则必须创建一个相应MBean，如下：</div>
<div>
<div>
<div><br clear="none"/>/**<br clear="none"/> * @author ChenGang 2005-12-3<br clear="none"/> */<br clear="none"/>public interface HelloMBean {<br clear="none"/>    public String get...</div></div></div></div></div></div></div></div>
    
    ]]></description> <pubDate>Sat, 19 Jul 2008 01:37:13 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#8d569215-2b8e-48e5-9d94-e5d92a838d44</guid> 
  
  </item>

  
  <item> <title>java基础知识点for each循环-Java频道-中国IT实验室</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#70ee1a8e-e6cb-47f8-b154-f7eab4c6cde8</link>
  <description><![CDATA[
    
    
    
        
        <div class="ennote">
<div>
<p>for each是jdk5.0新增加的一个循环结构，可以用来以此处理数组中的每个元素（其他类型的元素集合也可以）而不用为指定下标而分心。</p>
<p>    格式如下</p>
<p>    for（variable：collection）statement</p>
<p>    定义一个变量用于暂存集合中的每一个元素，并执行相应的语句（当然，也可以是语句块）。集合表达式必须是一个数组或者是一个实现了lterable接口的类（例如ArrayList）对象。</p>
<p>    例如：public class ClsTest { public static void main（String[] args） { int[] a=new int[10]；for（int b：a）{ System.out.println（b）；}  }  }</p>
<p>    下面的for循环也可以获得同样的效果</p>
<p>    for（int i=0；i&lt;a.length；i++）{</p>
<p>    Sytem.out.println（a[i]）；</p>
<p>    }</p>
<p>    使用for each循环语句的优势在于更加简洁，更不容易出错，不必为下标的起始值河终止值而操心。</p>
</div>

<div align="right"><a href="http://java.chinaitlab.com/base/743715.html" shape="rect">Go to source web page: java基础知识点for each循环-Java频道-中国IT实验室</a></div>
</div>
    
    ]]></description> <pubDate>Sun, 22 Jun 2008 13:31:37 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#70ee1a8e-e6cb-47f8-b154-f7eab4c6cde8</guid> 
  
  </item>

  
  <item> <title>第五讲　AWT图形用户界面设计 - 心蓝 - CSDNBlog</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#a49b65ad-3193-43ee-ad01-8d5ddfe74659</link>
  <description><![CDATA[
    
    
    
        
        <div class="ennote">
<div><a href="http://blog.csdn.net/coolriver/archive/2004/09/12/102122.aspx" shape="rect"> 第五讲　AWT图形用户界面设计</a></div>
<p align="left"><a href="http://blog.csdn.net/java%20教程/JAVA-qinghua/text/ch05/se01/keqian.htm" target="_parent" shape="rect">课前索引</a></p>
<p align="left">【课前思考】<br clear="none"/>
　　1． java语言是跨平台的编程语言，那么图形用户界面如何做到跨平台？<br clear="none"/>
　　2． AWT有哪些组件和容器？它们各自的使用方法是什么？<br clear="none"/>
　　3． AWT的事件处理模型是什么？原理又如何？<br clear="none"/>
<a href="http://blog.csdn.net/java%20教程/JAVA-qinghua/text/ch05/se01/5_1_1.htm" target="_parent" shape="rect">5．1 用AWT生成图形化用户界面</a></p>
<p align="left">抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立图形用户界面GUI (Graphics User Interface)工具集，AWT可用于Java的applet和applications中。它支持图形用户界面编程的功能包括： 用户界面组件；事件处理模型；图形和图像工具，包括形状、颜色和字体类；布局管理器，可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率无关；数据传送类，可以通过本地平台的剪贴板来进行剪切和粘贴。</p>
<p align="left">5.1.1 java.awt包</p>
<p align="left">    java.awt包中提供了GUI设计所使用的类和接口，可从图5.1中看到主要类之间的关系。</p>
<p align="left">java.awt包提供了基本的java程序的GUI设计工具。主要包括下述三个概念：<br clear="none"/>
　　组件--Component<br clear="none"/>
　　容器--Container<br clear="none"/>
　　布局管理器--LayoutManager</p>
<p align="left">5.1.2 组件和容器</p>
<p align="left">Java的图形用户界面的最基本组成部分是组件（Component），组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象，例如一个按钮，一个标签等。组件不能独立地显示出来，必须将组件放在一定的容器中才可以显示出来。</p>
<p align="left">类java.awt.Component是许多组件类的父类，Component类中封装了组件通用的方法和属性，如图形的组件对象、大小、显示位置、前景色和背景色、边界、可见性等，因此许多组件类也就继承了Component类的成员方法和成员变量，相应的成员方法包括：<br clear="none"/>
　　　getComponentAt(int x, int y)<br clear="none"/>
　　　getFont()<br clear="none"/>
　　　getForeground()<br clear="none"/>
　　　getName()<br clear="none"/>
　　　getSize()<br clear="none"/>
　　　paint(Graphics g)<br clear="none"/>
　　　repaint()<br clear="none"/>
　　　update()<br clear="none"/>
　　　setVisible(boolean b)<br clear="none"/>
　　　setSize(Dimension d)<br clear="none"/>
　　　setName(String name)等<br clear="none"/>
　　　　容器(Container)也是一个类，实际上是Component的子类，因此容器本身也是一个组件，具有组件的所有性质，但是它的主要功能是容纳其它组件和容器。<br clear="none"/>
　　布局管理器（LayoutManager）：每个容器都有一个布局管理器，当容器需要对某个组件进行定位或判断其大小尺寸时，就会调用其对应的布局管理器。</p>
<p>为了使我们生成的图形用户界面具有良好的平台无关性，Java语言中，提供了布局管理器这个工具来管理组件在容器中的布局，而不使用直接设置组件位置和大小的方式。</p>
<p>　　在程序中安排组件的位置和大小时，应该注意以下两点：<br clear="none"/>
　　1．容器中的布局管理器负责各个组件的大小和位置，因此用户无法在这种情况下设置组件的这些属性。如果试图使用Java 语言提供的setLocation()，setSize()，setBounds() 等方法，则都会被布局管理器覆盖。</p>
<p align="left">　2．如果用户确实需要亲自设置组件大小或位置，则应取消该容器的布局管理器，方法为：<br clear="none"/>
　　　setLayout(null)；</p>
<p>5.1.3 常用容器</p>
<p>容器java.awt.Container是Component的子类，一个容器可以容纳多个组件，并使它们成为一个整体。容器可以简化图形化界面的设计，以整体结构来布置界面。所有的容器都可以通过add()方法向容器中添加组件。有三种类型的容器：Window、Panel、ScrollPane，常用的有Panel, Frame, Applet。</p>
<p>1．Frame</p>
<p><br clear="none"/>
   例：</p>
<p>import java.awt.*;<br clear="none"/>
　　public class MyFrame extends Frame{<br clear="none"/>
　　public static void main(String args[ ]){<br clear="none"/>
　　　　　　　　MyFrame fr = new MyFrame(&quot;Hello Out There!&quot;);<br clear="none"/>
　　　　　　　　　　　　　　　　　　　　　　　//构造方法<br clear="none"/>
　　　　　　　　fr.setSize(200,200);<br clear="none"/>
　　　　　　　　　　　　　　　　//设置Frame的大小，缺省为（0，0）<br clear="none"/>
　　　　　　　　fr.setBackground(Color.red);<br clear="none"/>
　　　　　　　　　　　　　　　　//设置Frame的背景，缺省为红色<br clear="none"/>
　　　　　　　　fr.setVisible(true);<br clear="none"/>
　　　　　　　　　　　　　　　　//设置Frame为可见，缺省为不可见<br clear="none"/>
　　}<br clear="none"/>
　　　...</p></div>
    
    ]]></description> <pubDate>Thu, 29 May 2008 11:40:33 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#a49b65ad-3193-43ee-ad01-8d5ddfe74659</guid> 
  
  </item>

  
  <item> <title>第四讲　Java的例外处理和I/O流 - 心蓝 - CSDNBlog</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#86f3ee85-82a1-48f9-92ce-8b078c1efb91</link>
  <description><![CDATA[
    
    
    
        
        <div class="ennote">
<div><br clear="none"/></div>
<div>
<div>
<div></div>
</div>
<div>
<div><a href="http://blog.csdn.net/coolriver/archive/2004/09/10/100692.aspx" shape="rect"> 第四讲　Java的例外处理和I/O流</a></div>
<div>
<p align="left">【课前思考】<br clear="none"/>　　1． 什么是例外？Java中有哪两种例外处理机制？<br clear="none"/>　　2． 字节流和字符流的基类各是什么？<br clear="none"/>　　3． 什么是对象的串行化？对象串行化的作用是什么？</p>
<p align="left">难点：<br clear="none"/>　　1．如何使用Java中两种例外处理机制，抛弃例外和声明抛弃例外的区别与联系。<br clear="none"/>　　2．处理字符流时，其构造方法的参数是一个字节流。<br clear="none"/>　　3．对象串行化的概念。<br clear="none"/><a href="http://blog.csdn.net/java%20教程/JAVA-qinghua/text/ch04/se01/4_1_1.htm" target="_parent" shape="rect"><b>4．1 什么是例外</b></a></p>
<p align="left">4．1．2 例外处理机制</p>
<p align="left"><b>抛弃（</b><b>throw</b><b>）例外</b>：<br clear="none"/>　　在Java程序的执行过程中，如果出现了异常事件，就会生成一个例外对象。生成的例外对象将传递给Java运行时系统，这一例外的产生和提交过程称为抛弃(throw)例外。</p>
<p align="left">两种处理例外的机制：<br clear="none"/>　　<b>◇</b> <b>捕获例外：</b><br clear="none"/>　　当Java运行时系统得到一个例外对象时，它将会沿着方法的调用栈逐层回溯，寻找处理这一例外的代码。找到能够处理这种类型的例外的方法后，运行时系统把当前例外对象交给这个方法进行处理，这一过程称为捕获(catch)例外。这是积极的例外处理机制。如果Java运行时系统找不到可以捕获例外的方法，则运行时系统将终止，相应的Java程序也将退出。<br clear="none"/>　　<b>◇</b> <b>声明抛弃例外：</b><br clear="none"/>　　如果一个方法并不知道如何处理所出现的例外，则可在方法声明时，声明抛弃（throws）例外。这是一种消极的例外处理机制。</p>
<p align="left">4．1．3 例外类的层次<br clear="none"/>　　在jdk中，每个包中都定义了例外类，而所有的例外类都直接或间接地继承于Throwable类。<a href="http://blog.csdn.net/java%20教程/JAVA-qinghua/text/ch04/se01/right4_1_3_1.htm" target="MyFrame" shape="rect">图4-1</a>为jdk中例外类的继承关系。</p>
<p align="left"><br clear="none"/>
java中的例外类可分为两大类：<br clear="none"/><b>Error</b><br clear="none"/>　　动态链接失败，虚拟机错误等，通常Java程序不应该捕获这类例外，也不会抛弃这种例外。<br clear="none"/>
<b>Exception</b><br clear="none"/>　1）运行时例外： <br clear="none"/>　　继承于RuntimeException的类都属于运行时例外，例如算术例外（除零错）、数组下标越界例外等等。由于这些例外产生的位置是未知的，Java 编译器允许程序员在程序中不对它们做出处理。 <br clear="none"/>　2）非运行时例外： <br clear="none"/>　　除了运行时例外之外的其他由Exception 继承来的例外类都是非运行时的例外，例如FileNotFoundException（文件未找到例外）。Java编译器要求在程序中必须处理这种例外，捕获例外或者声明抛弃例外。</p>
<p align="left"><a href="http://blog.csdn.net/java%20教程/JAVA-qinghua/text/ch04/se02/4_2_1.htm" target="_parent" shape="rect"><b>4．2 例外的处理</b></a><br clear="none"/>4．2．1 捕获例外<br clear="none"/>　　捕获例外是通过try-catch-finally语句实现的：</p>
<p>     try{<br clear="none"/>
　　......<br clear="none"/>
　　　}catch( ExceptionName1 e ){<br clear="none"/>
　　　......<br clear="none"/>
　　　}catch( ExceptionName2 e ){<br clear="none"/>
　　　......<br clear="none"/>
　　　}<br clear="none"/>
　　　......<br clear="none"/>
　　　}finally{<br clear="none"/>
　　　......<br clear="none"/>
　　}<br clear="none"/>
　　◇ try<br clear="none"/>
　　捕获例外的第一步是用try{…}选定捕获例外的范围，由try所限定的代码块中的语句在执行过程中可能会生成例外对象并抛弃。<br clear="none"/>
　　◇ catch<br clear="none"/>
　　每个try代码块可以伴随一个或多个catch语句，用于处理try代码块中所生成的例外事件。catch语句只需要一个形式参数指明它所能够捕获的例外类型,这个类必须是Throwable的子类,运行时系统通过参数值把被抛弃的例外对象传递给catch块。<br clear="none"/>
　　在catch块中是对例外对象进行处理的代码，与访问其它对象一样，可以访问一个例外对象的变量或调用它的方法。getMessage( )是类Throwable所提供的方法，用来得到有关异常事件的信息，类Throwable还提供了方法printStackTrace( )用来跟踪异常事件发生时执行堆栈的内容。例如：<br clear="none"/>
　　try{<br clear="none"/>
　　　　......<br clear="none"/>
　　　}catch( FileNotFoundException e ){<br clear="none"/>
　　　　System.out.println( e );<br clear="none"/>
　　　　System.out.println( &quot;message: &quot;+e.getMessage() );<br clear="none"/>
　　　　e.printStackTrace( System.out );<br clear="none"/>　　　}catch( IOException e ){<br clear="none"/>
　　　　System.out.println( e );<br clear="none"/>
　　　}<br clear="none"/>
　　catch 语句的顺序：<br clear="none"/>
　　捕获例外的顺序和catch语句的顺序有关，当捕获到一个例外时，剩下的catch语句就不再进行匹配。因此，在安排catch语句的顺序时，首先应该捕获最特殊的例外，然后再逐渐一般化。也就是一般先安排子类，再安排父类。<br clear="none"/>
　　◇ finally<br clear="none"/>
　　捕获例外的最后一步是通过finally语句为例外处理提供一个统一的出口，使得在控制流转到程序的其它部分以前，能够对程序的状态作统一的管理。不论在try代码块中是否发生了异常事件，finally块中的语句都会被执行。</p>
<p align="left">4．2．2 声明抛弃例外</p>
<p>1．声明抛弃例外<br clear="none"/>
　　如果在一个方法中生成了一个例外，但是这一方法并不确...</p></div></div></div></div>
    
    ]]></description> <pubDate>Wed, 21 May 2008 06:58:17 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#86f3ee85-82a1-48f9-92ce-8b078c1efb91</guid> 
  
  </item>

  
  <item> <title>第三讲　Java语言中的面向对象特性 - 心蓝 - CSDNBlog</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#3f9f28a2-c77b-49e1-9f9e-a32eadf2e158</link>
  <description><![CDATA[
    
    
    
        
        <div class="ennote">
<div><br clear="none"/></div>
<div>
<div>
<div></div>
</div>
<div>
<div><a href="http://blog.csdn.net/coolriver/archive/2004/09/10/100682.aspx" shape="rect"> 第三讲　Java语言中的面向对象特性</a></div>
<div>
<p align="left"><b><a href="http://blog.csdn.net/java%20教程/JAVA-qinghua/text/ch03/se01/keqian.htm" target="_parent" shape="rect">课前索引</a></b></p>
<p align="left">【课前思考】<br clear="none"/>　　1． 什么是对象？什么是类？什么是包？什么是接口？什么是内部类？<br clear="none"/>　　2． 面向对象编程的特性有哪三个？它们各自又有哪些特性？<br clear="none"/>　　3． 你知道java语言在面向对象编程方面有何独特的特点吗？</p>
<p align="left"><b>难点：</b><br clear="none"/>　　1． 理解方法重载和方法重写，不要混淆了两者的使用。<br clear="none"/>　　2． 类变量和类方法的使用。<br clear="none"/>　　3． 接口的使用。<b><br clear="none"/>
<a href="http://blog.csdn.net/java%20教程/JAVA-qinghua/text/ch03/se01/3_1_1.htm" target="_parent" shape="rect">3．1 面向对象技术基础</a></b></p>
<p align="left">3．1．1 面向对象的基本概念<br clear="none"/>　　<b>面向对象的基本思想</b><br clear="none"/>　　面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物（即对象）出发来构造软件系统，并且在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题，这些问题所涉及的业务范围称作该软件的问题域。其应用领域不仅仅是软件，还有计算机体系结构和人工智能等。</p>
<p align="left">1． 对象的基本概念<br clear="none"/>　　对象是系统中用来描述客观事物的一个实体，它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。</p>
<p align="left">主动对象是一组属性和一组服务的封装体，其中至少有一个服务不需要接收消息就能主动执行（称作主动服务）。<br clear="none"/>2． 类的基本概念<br clear="none"/>
    类是具有相同属性和服务的一组对象的集合，它为属于该类的所有对象提供了统一的抽象描述，其内部包括属性和服务两个主要部分。在面向对象的编程语言中，类是一个独立的程序单位，它应该有一个类名并包括属性说明和服务说明两个主要部分。</p>
<p align="left">3． 消息</p>
<p align="left">消息就是向对象发出的服务请求，它应该包含下述信息：提供服务的对象标识、服务标识、输入信息和回答信息。服务通常被称为方法或函数。</p>
<p align="left">3．1．2 面向对象的基本特征</p>
<p align="left">1．封装性<br clear="none"/>　　封装性就是把对象的属性和服务结合成一个独立的相同单位，并尽可能隐蔽对象的内部细节，包含两个含义：<br clear="none"/>　　◇ 把对象的全部属性和全部服务结合在一起，形成一个不可分割的独立单位（即对象）。<br clear="none"/>　　◇ 信息隐蔽，即尽可能隐蔽对象的内部细节，对外形成一个边界〔或者说形成一道屏障〕，只保留有限的对外接口使之与外部发生联系。<br clear="none"/>　　封装的原则在软件上的反映是：要求使对象以外的部分不能随意存取对象的内部数据（属性），从而有效的避免了外部错误对它的&quot;交叉感染&quot;，使软件错误能够局部化，大大减少查错和排错的难度。</p>
<p align="left">2．继承性<br clear="none"/>　　特殊类的对象拥有其一般类的全部属性与服务，称作特殊类对一般类的继承。</p>
<p align="left">一个类可以是多个一般类的特殊类，它从多个一般类中继承了属性与服务，这称为多继承。</p>
<p align="left">在java语言中，通常我们称一般类为父类（superclass,超类），特殊类为子类(subclass)。</p>
<p>3．多态性<br clear="none"/>　　对象的多态性是指在一般类中定义的属性或服务被特殊类继承之后，可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义。例如：&quot;几何图形&quot;的&quot;绘图&quot;方法，&quot;椭圆&quot;和&quot;多边形&quot;都是&quot;几何图&quot;的子类，其&quot;绘图&quot;方法功能不同。<br clear="none"/>3．1．3 面向对象程序设计方法<br clear="none"/>　　OOA－Object Oriented Analysis 　　　　面向对象的分析<br clear="none"/>　　OOD－Object Oriented Design 　　　　　面向对象的设计<br clear="none"/>　　OOI－Object Oriented Implementation 　面向对象的实现<br clear="none"/><b><a href="http://blog.csdn.net/java%20教程/JAVA-qinghua/text/ch03/se02/3_2_1.htm" target="_parent" shape="rect">3．2 Java语言的面向对象特性</a></b></p>
<p>3．2．1 类<br clear="none"/>　　类是java中的一种重要的复合数据类型，是组成java程序的基本要素。它封装了一类对象的状态和方法，是这一类对象的原形。一个类的实现包括两个部分：<b>类声明和类体</b></p>
<p align="left">1．类声明：<br clear="none"/>　　[public][abstract|final] class className [extends superclassName] [implements interfaceNameList]<br clear="none"/>　　{……}<br clear="none"/>　　其中，修饰符public,abstract,final 说明了类的属性，className为类名，superclassName为类的父类的名字，interfaceNameList为类所实现的接口列表。<br clear="none"/>　2．类体<br clear="none"/>　　类体定义如下：<br clear="none"/>　　class className<br clear="none"/>　　{[public | protected | private ] [static] <br clear="none"/>　　[final] [transient] [volatile] type<br clear="none"/>　　variableName;　　　　　　　　　　　　　　　　　//成员变量<br clear="none"/>　　[public | protected | private ] [static]<br clear="none"/>　　[final | abstract] [native] [synchronized]<br clear="none"/>　　returnType methodName([paramList]) [throws exceptionList...</p></div></div></div></div>
    
    ]]></description> <pubDate>Wed, 21 May 2008 04:17:34 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#3f9f28a2-c77b-49e1-9f9e-a32eadf2e158</guid> 
  
  </item>

  
  <item> <title>第二讲　Java语言基础知识 - 心蓝 - CSDNBlog</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#1d100452-231a-4641-afae-48121dddb7a0</link>
  <description><![CDATA[
    
    
    
        
        <div class="ennote">
<div><br clear="none"/></div>
<div>
<div>
<div></div>
</div>
<div>
<div><a href="http://blog.csdn.net/coolriver/archive/2004/09/10/100679.aspx" shape="rect"> 第二讲　Java语言基础知识</a></div>
<div>
<p><b>概述：</b></p>
<p>   【课前思考】<br clear="none"/>
　　1． Java中的标识符是由哪些字符组成的？<br clear="none"/>
　　2． Java中有哪些保留字？简单数据类型包含哪几种？各种数据类型变量的定义方法和常量的表示方法及取值范围。<br clear="none"/>
　　3． Java 中各简单数据类型间的优先次序和自动转换规则是什么？<br clear="none"/>
　　　　各数据类型间在什么情况下，进行自动转换，在什么情况下使用强制转换？<br clear="none"/>
　　4． Java中有哪些运算符？这些运算符的优先关系是怎样的？<br clear="none"/>
　　5． Java 中有哪些控制语句？你了解每一种控制语句的语法规则吗？<br clear="none"/>
　　6． Java 中的一维数组和多维数组在数组动态初始化和静态初始化时有何不同？<br clear="none"/>
　　7． Java中的字符串有两种表示方法，这两种表示方法有什么不同？<br clear="none"/>
　　8． 如何访问字符串？如何修改字符串？如何对两个字符串进行比较？</p>
<p>【难 重 点】 <br clear="none"/>
　<b>重点：</b><br clear="none"/>
　　1． 深刻理解各知识点的概念，并熟记java 的语法规范。<br clear="none"/>
　　2． 熟练使用各种数据类型的定义，表示和引用。<br clear="none"/>
　　3． 能熟练使用各种控制语句。<br clear="none"/>
　　4． 能熟练处理字符串。<br clear="none"/>
　<b>难点：</b><br clear="none"/>
　　1． 动态初始化复杂类型数组时，要先为数组中的元素开辟引用空间，再为每个元素开辟空间。<br clear="none"/>
　　2． 使用StringBuffer类表示和操作字符串时，要注意它可以处理可变字符串，即当在  StringBuffer类型的字符串中插入字符而超出已分配的缓冲区时，系统会自动地为它分配额外的空间。String类不可以。</p>
<p><b><a href="http://blog.csdn.net/java%20教程/JAVA-qinghua/text/ch02/se01/2_1_1.htm" target="_parent" shape="rect">2．1 简单数据类型</a></b></p>
<p>2．1．1 标识符和保留字<br clear="none"/>1．标识符<br clear="none"/>
　　程序员对程序中的各个元素加以命名时使用的命名记号称为标识符（identifier）。Java语言中，标识符是以字母，下划线（_）,美元符($)开始的一个字符序列，后面可以跟字母，下划线，美元符，数字。例如，identifier，userName，User_Name，_sys_val， $change为合法的标识符，而2mail room#，class 为非法的标识符。<br clear="none"/>
<br clear="none"/>　2．保留字<br clear="none"/>
　　具有专门的意义和用途，不能当作一般的标识符使用，这些标识符称为保留字(reserved word),也称为关键字，下面列出了java语言中的所有保留字：<br clear="none"/>
abstract，break，byte，boolean，catch，case，class，char，continue，default，double，do，else，extends，false，final，float，for，finally，if，import，implements，int，interface，instanceof，long，length，native，new，null，package，private，protected，public，return，switch，synchronized，short，static，super，try，true，this，throw，throws，threadsafe，transient，void，while 。<br clear="none"/>java语言中的保留字均用小写字母表示。</p>
<p>2．1．2 数据类型概述</p>
<p>    1． java中的数据类型划分<br clear="none"/>
　　java语言的数据类型有简单类型和复合类型：<br clear="none"/>
　　简单数据类型包括：<br clear="none"/>
　　　　　整数类型（Integer）：byte， short， int， long<br clear="none"/>
　　　　　浮点类型（Floating）：float，double<br clear="none"/>
　　　　　字符类型（Textual）：char<br clear="none"/>
　　　　　布尔类型（Logical）：boolean<br clear="none"/>
　　复合数据类型包括：<br clear="none"/>
　　　　　class<br clear="none"/>
　　　　　interface<br clear="none"/>
　　　　　数组<br clear="none"/>
　2．常量和变量<br clear="none"/>
　　常量：用保留字final来实现<br clear="none"/>　　　　　final typeSpecifier varName=value[,varName[=value]…]; <br clear="none"/>
　　　　　　　　　　　　　　　　　　　　　如：final int NUM=100;<br clear="none"/>
　　变量：是java 程序中的基本存储单元，它的定义包括变量名、变量类型和作用域几个部分。其定义格式如下：<br clear="none"/>
　　　　　typeSpecifier varName[=value[,varName[=value]…];<br clear="none"/>
　　　 　　　　　　　　　　　　　如：int count; char c='a';<br clear="none"/>
　　变量的作用域指明可访问该变量的一段代码，声明一个变量的同时也就指明了变量的作用域。按作用域来分，变量可以有下面几种：局部变量、类变量、方法参数和例外处理参数。在一个确定的域中，变量名应该是唯一的。局部变量在方法或方法的一个块代码中声明，它的作用域为它所在的代码块（整个方法或方法中的某块代码）。类变量在类中声明，而不是在类的某个方法中声明，它的作用域是整个类。方法参数传递给方法，它的作用域就是这个方法。例外处理参数传递给例外处理代码，它的作用域...</p></div></div></div></div>
    
    ]]></description> <pubDate>Wed, 21 May 2008 04:14:47 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#1d100452-231a-4641-afae-48121dddb7a0</guid> 
  
  </item>

  
  <item> <title>第一讲　Java语言概述 - 心蓝 - CSDNBlog</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#053288c4-4b95-4174-8a7b-675fd052fa28</link>
  <description><![CDATA[
    
    
    
        
        <div class="ennote">
<p align="left">★      <a href="http://blog.csdn.net/java%20教程/JAVA-qinghua/text/mulu/muluif.htm##" shape="rect">第一讲　Java语言概述</a></p>
<p align="left">【课前思考】<br clear="none"/>
　　1. 一门新的语言的产生是否需要借鉴以前的编程语言？<br clear="none"/>
　　2. 在java语言出现之前是否存在其它跨平台的语言？<br clear="none"/>
　　3. 有哪些编程语言是面向对象的？而哪些编程语言是面向过程的？从编程思路上存在着哪些本质差别？C＋＋语言是面向对象的还是面向过程的？<br clear="none"/>
　　4. 一段优秀的程序代码是否应该是可读性极强的？程序员之间是否应该遵循相同的编程规范？<br clear="none"/>
　　5. 一个程序员编好的代码如果需要让别的程序员使用，如何提供该代码的使用说明？</p>
<p align="left">1．1          <a href="http://blog.csdn.net/java%20教程/JAVA-qinghua/text/ch01/se01/1_1_1.htm" target="_parent" shape="rect">java语言的发展史</a></p>
<p>1.1.1 java语言在互联网时代获得巨大成功</p>
<p align="left">    java语言具有安全、跨平台、面向对象、简单、适用于网络等显著特点，java语言已经成为最流行的网络编程语言。</p>
<p align="left">    在经历了以大型机为代表的集中计算模式和以PC机为代表的分散计算模式之后，互联网的出现使得计算模式进入了网络计算时代。网络计算模式的一个特点是计算机是异构的，即计算机的类型和操作系统是不一样的，例如SUN工作站的硬件是SPARC体系，软件是UNIX中的Solaris操作系统，而PC机的硬件是INTEL体系，操作系统是windows或者是Linux。网络计算模式的另一个特点是代码可以通过网络在各种计算机上进行迁移，这就迫切需要一种跨平台的编程语言，使得用它编写的程序能够在网络中的各种计算机上能够正常运行，java就是在这种需求下应运而生的。</p>
<p>1.1.2 java语言的产生</p>
<p align="left">C语言是面向过程的语言，也是使用率非常高的语言；而面向对象的思想引入到编程语言之后，C语言就被改造成为面向对象的C＋＋语言，得到了广泛的应用。但是C＋＋语言必须兼容C语言，因此C＋＋语言是面向过程和面向对象混合的语言。</p>
<p align="left">java语言产生于C＋＋语言之后，是完全的面向对象的编程语言，充分吸取了C＋＋语言的优点，采用了程序员所熟悉的C和C＋＋语言的许多语法，同时又去掉了C语言中指针、内存申请和释放等影响程序健壮性的部分。</p>
<p align="left">java语言的一个目标是跨平台，因此采用了解释执行而不是编译执行的运行环境，在执行过程中根据所在的不同的硬件平台把程序解释为当前的机器码，实现跨平台运行。而动态下载程序代码的机制完全是为了适应网络计算的特点，程序可以根据需要把代码实时的从服务器中下载过来执行，在此之前还没有任何一种语言能够支持这一点。</p>
<p align="left">1．2          <a href="http://blog.csdn.net/java%20教程/JAVA-qinghua/text/ch01/se02/1_2_1.htm" target="_parent" shape="rect">java的工作原理</a></p>
<p>1.2.1 java虚拟机(1)</p>
<p align="left">    java虚拟机是软件模拟的计算机，可以在任何处理器上（无论是在计算机中还是在其它电子设备中）安全并且兼容的执行保存在.class文件中的字节码。java虚拟机的&quot;机器码&quot;保存在.class文件中，有时也可以称之为字节码文件。java程序的跨平台主要是指字节码文件可以在任何具有java虚拟机的计算机或者电子设备上运行，java虚拟机中的java解释器（java命令）负责将字节码文件解释成为特定的机器码进行运行。</p>
<p align="left"> </p>
<p><br clear="none"/>
1.2.1 java虚拟机(2)</p>
<p align="left">但是，java虚拟机的建立需要针对不同的软硬件平台做专门的实现，既要考虑处理器的型号，也要考虑操作系统的种类。如下图所示，目前在SPARC结构、X86结构、MIPS和PPC等嵌入式处理芯片上、在UNIX、Linux、windows和部分实时操作系统上都有java虚拟机的实现。、</p>
<p align="left"> </p>
<p>1.2.2 无用内存自动回收机制</p>
<p align="left">     在java运行环境中，始终存在着一个系统级的线程，专门跟踪内存的使用情况，定期检测出不再使用的内存，并进行自动回收，避免了内存的泄露，也减轻了程序员的工作量。</p>
<p align="left">1.2.3 代码安全性检查机制<br clear="none"/>
　　字节码的执行需要经过三个步骤，首先由类装载器（class loader）负责把类文件（.class文件）加载到java虚拟机中，在此过程需要检验该类文件是否符合类文件规范；其次字节码校验器（bytecode verifier）检查该类文件的代码中是否存在着某些非法操作，例如applet程序中写本机文件系统的操作；如果字节码校验器检验通过，由java解释器负责把该类文件解释成为机器码进行执行。java虚拟机采用的是&quot;沙箱&quot;运行模式，即把java程序的代码和数据都限制在一定内存空间里执行，不允许程序访问该内存空间外的内存，如果是applet程序，还不允许访问客户端机器的文件系统。</p>
<p align="left">1.2.4 Java语言的特点</p>
<p align="left">java与C/C++语言的比较：</p>
<p align="left">a． 全局变量<br clear="none"/>
　　java程序不能定义程序的全局变量，而类中的公共、静态变量就相当于这个类的全局变量。这样就使全局变量封装在类中，保证了安全性，而在C/C++语言中，由于不加封装的全局变量往往会由于使用不当而造成系统的崩溃。<br clear="none"/>
b． 条件转移指令<br clear="none"/>
　　C/C++语言中用goto语句实现无条件跳转，而java语言没有goto语言，通过例外处理语句try、catch...</p></div>
    
    ]]></description> <pubDate>Wed, 21 May 2008 04:14:21 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#053288c4-4b95-4174-8a7b-675fd052fa28</guid> 
  
  </item>

  
  <item> <title>对设计模式—strategy模式的认识</title> <link>http://www.evernote.com/pub/smartwgd/daydaystudy#e6abb3ed-50bb-45bf-b7c1-b0ae4156153c</link>
  <description><![CDATA[
    
    
    
        <a href="http://www.evernote.com/pub/smartwgd/daydaystudy#e6abb3ed-50bb-45bf-b7c1-b0ae4156153c"><img align="right" src="http://www.evernote.com/shard/s1/thumb/e6abb3ed-50bb-45bf-b7c1-b0ae4156153c"/></a>
        <div style="background-color:#ffffff;" class="ennote">
<a href="http://flysnail.javaeye.com/blog/175110" shape="rect">对设计模式—strategy模式的认识</a>
<div>最近学习一下设计模式中的strategy模式，下面是我对 strategy模式的认识。<br clear="none"/>
strategy是对象行为型模式,主要是定义一系列的算法,把这些算法一个<br clear="none"/>
个封装成单独的类.<br clear="none"/>
strategy的实现是由一个抽象类作为一个基类，在基类的基础上生成不同的类，这些类为我们在不同场景提供了不同的选择。<br clear="none"/>
比如说，最近台湾要公投，出现台海危机，我们应如何应付出现的危机那，这时我们提供的多种方案供我们在不同的危机做不同的处理。</div>
<div>Java代码 <a href="http://flysnail.javaeye.com/blog/175110#" shape="rect"></a></div>
<ol><li>public abstract class CrisisEvent  </li><li>{  </li><li>     public void happen();//发生危机  </li><li>      public abstract void dealEvent();//应对危机方案  </li><li>}  </li><li>      </li><li>public class CrisisEventSmallWar extends CrisisEvent  </li><li>{  </li><li>   public void dealEvent()  </li><li>   {  </li><li>         //小规模开战，没有美国等参与  </li><li>    }  </li><li>}  </li><li>     </li><li>public class CrisisEventBigWar extends CrisisEvent  </li><li>{  </li><li>    public void dealEvent()  </li><li>    {  </li><li>        //大规模开战，炸掉美国航母    </li><li>     }      </li><li>}  </li><li>     </li><li>public class CrisisEventExecute  </li><li>{  </li><li>   private CrisisEvent   _crisisEvent;  </li><li>       </li><li>   public CrisisEventExecute(CrisisEvent crisisEvent)  </li><li>   {  </li><li>      this._crisisEvent = crisisEvent;    </li><li>   }  </li><li>  </li><li>   public void dealEvent()  </li><li>   {  </li><li>      _crisisEvent.dealEvent();  </li><li>   }  </li><li>    </li><li>   public void changeCrisisEvent(CrisisEvent otherCrisisEvent)  </li><li>   {  </li><li>      _crisisEvent = otherCrisisEvent;  </li><li>   }  </li><li>}  </li><li>   </li><li>public class TestDealEvent()  </li><li>{    </li><li>   public static void main(String[]args)  </li><li>   {  </li><li>     CrisisEventExecute smallCrisisEvent = new CrisisEventExecute(new CrisisEventSmallWar);  </li><li>     smallCrisisEvent.dealEvent();  </li><li>     CrisisEventExecute bigCrisisEvent = new CrisisEventExecute(new CrisisEventBigWar);  </li><li>     bigCrisisEvent .dealEvent();  </li><li>   }  </li><li>}  </li><li>    </li></ol>

public abstract class CrisisEvent
{
     public void happen();//发生危机
      public abstract void dealEvent();//应对危机方案
}

public class CrisisEventSmallWar extends CrisisEvent
{
   public void dealEvent()
   {
         //小规模开战，没有美国等参与
    }
}

public class CrisisEventBigWar extends CrisisEvent
{
    public void dealEvent()
    {
        //大规模开战，炸掉美国航母
     }
}

public class CrisisEventExecute
{
   private CrisisEvent   _crisisEvent;

   public CrisisEventExecute(CrisisEvent crisisEvent)
   {
      this._crisisEvent = crisisEvent;
   }

   public void dealEvent()
   {
      _crisisEvent.dealEvent();
   }

   public void changeCrisisEvent(CrisisEvent otherCrisi...</div>
    
    ]]></description> <pubDate>Wed, 26 Mar 2008 14:38:16 GMT</pubDate> <guid>http://www.evernote.com/pub/smartwgd/daydaystudy#e6abb3ed-50bb-45bf-b7c1-b0ae4156153c</guid> 
  
    <enclosure url="http://www.evernote.com/shard/s1/thumb/e6abb3ed-50bb-45bf-b7c1-b0ae4156153c"
               length="0" type="image/jpeg"/>
  
  </item>
 </channel> </rss>