<?xml version="1.0" encoding="gb2312"?>

<!-- RSS generated by oioj.net on 4/16/2004 ; 感谢LeXRus提供 RSS 2.0 文档; 此文件可自由使用，但请保留此行信息 --> 
<!-- Source download URL: http://blogger.org.cn/blog/rss2.asp       -->
<rss version="2.0">

<channel>
<title>siberian的博客</title>
<link>http://blogger.org.cn/blog/blog.asp?name=siberian</link>
<description>siberian的博客</description>
<copyright>blogger.org.cn</copyright>
<generator>W3CHINA Blog</generator>
<webMaster>webmaster@blogger.org.cn</webMaster>
<item>
<title><![CDATA[关于面向对象的新想法1]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=siberian&amp;id=7110</link>
<author>siberian</author>
<pubDate>2005/7/11 11:36:18</pubDate>
<description><![CDATA[&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 前几日说了要增加约束说明。其实我们来看看现在c#,和java中的注解，就会发现是语言设计者们发现了部分问题，而提出来的解决方法。 可是这样打补丁能否彻底解决这些问题，拭目以待。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;那么我们就利用注解机制，来构思。添加这个数据间规则。那么数据填充时就要做必要的检验以确定是否合适，这个验证交给语言平台来完成（省力气），属于运行时异常，就叫验证异常ValidateException吧！当然也可以自己另行添加程序来完成这个机制。不过感觉很浪费，并且这应该是一个标准机制。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 有了这个约束间的说明，那么我认为对于多重继承也有助益。明天再写了。&lt;/P&gt;]]></description>
</item><item>
<title><![CDATA[论oo中隐蔽的继承关系错误。]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=siberian&amp;id=6914</link>
<author>siberian</author>
<pubDate>2005/7/1 14:51:43</pubDate>
<description><![CDATA[<P>&nbsp;很多很有名的人说，正方形不是长方形的子类，因为有父类的方法(如setSide(int,int))不能使用。我不知道这些人是出于傲慢还是鸵鸟心理，而坚持这样说。</P>
<P>&nbsp;&nbsp; &nbsp;否认权威是要慎重的。那么我们就来看看。他对于长方形和正方形关系的解决方法。一说给他们来一个共同的父类多边形。那么这个里面很明显很多适用于多边型的方法无法使用。比如设置角度的方法。可以很明显的看到所有的父类都能找到其子类无法使用的方法。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;前辈们为了保证替换原则的通畅，简单而违背现实世界中分类原则，说长方形不是正方形的子类，可是这样并不能解决存在的问题,&nbsp; 那么替换原则并不能永远的有效，那么就应该在语言中予以规范。每个类别都有添加自己有效的数据输入规则，和数据有效规则相违背的父类方法，都应该在编译器中予以标志, 上面那段话也就意味着每个类都会有了严格的定义。不再是很随意，空泛的定义。空灵的接口是空泛的类的替代品.</P>
<P>&nbsp;&nbsp;&nbsp; <FONT face=Verdana>在设计中，仅仅因为为了替换原则而回避这种继承关系，后果很严重，严重扭曲了从需求分析得来的结构。需要附加很多东西才能维持系统。使设计变得艰涩难懂。对象中缺少非功能性约束，是罪魁祸首。<BR>&nbsp;&nbsp;&nbsp;实际的设计中替换原则是有条件成立的。那么就让条件正大光明得表现出来。至于说现实世界和虚拟世界的不同。抱歉，请看一下面向对象的目的：和现实世界进行有效的映射。这个不同严重违反了这个目的。为设计添了很多麻烦。<BR>&nbsp;&nbsp;&nbsp;那么就让我们为对象加上有效的非功能性约束吧！这是我要说的。</FONT></P>]]></description>
</item><item>
<title><![CDATA[关于在web中使用velocity的感想]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=siberian&amp;id=4005</link>
<author>siberian</author>
<pubDate>2000/1/1 11:17:02</pubDate>
<description><![CDATA[<P>怎么说呢？曾经感觉不错。但是一旦突破模板语言的能力的时候，别扭非常多。我考虑了一下，最终实现仍然用jsp，利用里面强大的java语法来完成复杂的动态页面。</P>
<P>&nbsp;&nbsp; 只要让mvc思想沁入其中，jsp页面保持模板的简单风格，那么用jsp也没有什么不好。可以有效的减少view相关变化，造成复杂的model的敷衍代码。</P>]]></description>
</item><item>
<title><![CDATA[自己的错误。]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=siberian&amp;id=2394</link>
<author>siberian</author>
<pubDate>2005/1/27 9:51:14</pubDate>
<description><![CDATA[<P>&nbsp; 即想着完成自己新的工作流构思，又想重构自己的web框架，还想弄出一个现在管理系统新的架构。还有自己的工作压力。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; 拳头打得太散了，那个也没有按计划完成，好好检讨一下吧！不能太急功近利，虽然有好多想法，就用纸记下来吧！</P>]]></description>
</item><item>
<title><![CDATA[我是僵尸]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=siberian&amp;id=1888</link>
<author>siberian</author>
<pubDate>2005/1/14 8:46:29</pubDate>
<description><![CDATA[
<P>&nbsp;&nbsp; 半夜梦惊醒，浑然见自己是一个僵尸，脑浆迸裂，内脏腐烂，游逛在阳光下，素位尸餐，却无一人惊奇。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 随无数的人被顶天的灰色巨人吸入肚中， 这时巨大的胃壁挤碎了人的身体，红的白的。顺流而下，惨不忍睹。霍然，看见他们又神奇复活，依然衣冠楚楚。诧异间嗅见僵尸的味道。难道他们也都是僵尸？为何看不出来？靠壁倚立，听到心脏跳动。自己的心还在跳动！我莫名惊喜。却也明白了为何无人理我。我的别的都破碎了，却还有一颗跳动的心。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我想应该逃出去，却不知道途径。</P>]]></description>
</item><item>
<title><![CDATA[爱情长征]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=siberian&amp;id=1580</link>
<author>siberian</author>
<pubDate>2005/1/5 20:46:54</pubDate>
<description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 日子片片段段，如火车的轮子般节奏地翻过。没有爱情，没有激情，只有工作陪伴我。<BR>&nbsp;&nbsp;&nbsp; 网上的小说无聊的翻动着，吞噬了生命，希望也能吞噬孤独。却暗暗的增长着内心深处的寂寞。爱情，我执著地等待地这晴天霹雳，却总是错失了在平淡中的感情。不知错也，对也。<BR>&nbsp;&nbsp;&nbsp; 风和雪是我所喜欢，站在西伯利亚，站在风雪中等待瑰丽的极光！等待着它洒满我仰起的脸，融入我执著的眼，沁润我寂寞的心灵，让这一切永恒。</P>]]></description>
</item><item>
<title><![CDATA[Pico、JMX、微容器以及对象的易管理性]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=siberian&amp;id=1236</link>
<author>siberian</author>
<pubDate>2004/12/22 17:24:43</pubDate>
<description><![CDATA[转载自: <A href="http://www.jdon.com/artichect/micocontainer.htm" target=_blank>http://www.jdon.com/artichect/micocontainer.htm</A><BR><BR>
<H3 align=center>Pico、JMX、微容器以及对象的易管理性</H3>
<P align=center><A href="http://www.jdon.com/aboutme.htm">板桥里人</A> http://www.jdon.com 2004/12/14（转载请保留）</P>
<P>　　一个新概念正在暗流涌动：PicoContainer/NanoContainer（以下简称pico）这样微容器正日益受到关注和广泛应用；J2SE5.0将JMX作为JDK基本API，这些技术都表明对象的易管理性（application/object manageability）呼之欲出。</P>
<P>　　本文试图比较Pico、JMX这两种基于组件的容器管理技术，探讨对象易管理性方面的一些实践<BR>问题和模式。</P>
<P>　　对象易管理性中首先是被管理的对象，也称为容器的基本模型单元，在JMX中它是Mbean；而在pico中则是普通Java对象，后者比前者更加广泛，也说明两者可结合使用。</P>
<P><STRONG>JMX和Pico</STRONG></P>
<P>　　我们进一步看看JMX的MBean特性和pico：<BR>　　1. 在JMX中，业务对象只要继承MBean接口就能够被纳入被管理范围。这些接口包括<BR>Standard MBean, DynamicMBean 或者 ModelMBean ，不同的MBean有不同的规则。而业务对象只要是Object，就可纳入Pico的容器管理范围，因此，pico可以做JMX最外层的套子。</P>
<P>　　2.在JMX中，MBean只能通过MBean server访问；同样，在pico中，外界只能通过容器访问其中的Object。</P>
<P>　　3.MBeans能向MBean Server注册，以一个唯一的字符串名，而在pico中也是如此，并且，pico不要求直接实例注册，而是推荐以Class注册，并且能够自动寻找Class需要的构造参数，可见，pico在这里增强了组件注册功能。</P>
<P>　　4.调用Mbean的方法也很特别，只需MBean名称和方法名称组合的字符串就可以，最后通过invoke调即可； 在pico中，从容器中调用对象也是以String型的key实现调用，pico是以字符串调用对象；jmx是以字符串调用对象的方法； 两者可结合使用，关于字符串调用，pico增强容器NanoContainer甚至可以通过任何语言编制的字符串脚本都可以（smell like LOP面向语言编程?或者称为面向容器编程？）.</P>
<P>　　JMX和pico结合比较调用实例如下：</P>
<TABLE cellSpacing=0 cellPadding=1 width="90%" bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD>
<P>Reader script = new StringReader("" +<BR>"import org.nanocontainer.script.groovy.NanoContainerBuilder\n" +<BR>"import org.microcontainer.jmx.JmxDecorationDelegate\n" +<BR>"\n" +<BR>"builder = new NanoContainerBuilder(new JmxDecorationDelegate())\n" +<BR>"pico = builder.container() {\n" +<BR>" component(key:javax.management.MBeanServer, instance:javax.management.MBeanServerFactory.createMBeanServer())\n" +<BR>" component(key:org.nanocontainer.testmodel.Wilma, class:org.nanocontainer.testmodel.WilmaImpl) {\n" +<BR>" jmx(key:'domain:wilma=default', operations:['helloCalled'], description:'jmx description text')\n" +<BR>" }\n" +<BR>"}");</P></TD></TR></TBODY></TABLE>
<P>　　script是一段Groovy脚本，这段脚本是向Pico注册一个MBeanServer，并且向MBeanServer中注册一个MBean：接口是org.nanocontainer.testmodel.Wilma；实现是org.nanocontainer.testmodel.WilmaImpl，代码如下：<BR></P>
<TABLE cellSpacing=0 cellPadding=1 width="90%" bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD>
<P>public interface Wilma {<BR>　　void hello();<BR>}<BR></P>
<P>public class WilmaImpl implements Wilma {</P>
<P>　　private boolean helloCalled;</P>
<P>　　public boolean helloCalled() {<BR>　　　　return helloCalled;<BR>　　}</P>
<P>　　public void hello() {<BR>　　　　helloCalled = true;<BR>　　}<BR>}<BR></P></TD></TR></TBODY></TABLE>
<P>&nbsp;</P>
<P>NanoContainer可以运行装载这个脚本：</P>
<TABLE cellSpacing=0 cellPadding=1 width="100%" bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD>
<P>PicoContainer pico = buildContainer(new GroovyContainerBuilder(script, getClass().getClassLoader()), null, "SOME_SCOPE");<BR>//从pico中获得MBeanServer，pico是最外层容器，负责管理MbeanServer和MBeans的关系。<BR>MBeanServer mBeanServer = (MBeanServer)pico.getComponentInstance(MBeanServer.class);</P>
<P>//JMX以字符串可以获得对象Wilma的属性和动作<BR>ObjectName objectName = new ObjectName("domain:wilma=default");<BR>MBeanInfo mBeanInfo = mBeanServer.getMBeanInfo(objectName);<BR></P>
<P>//pico以字符串为key实现调用对象的<BR>Wilma wilma = (Wilma)pico.getComponentInstance(Wilma.class);<BR>wilma.hello();//调用WilmaImpl的hello方法</P>
<P>//jmx以字符串实现对象方法的调用，监察上句执行结果<BR>Boolean called = (Boolean)mBeanServer.invoke(objectName, "helloCalled", null, null);<BR>//called结果为true，也就是WilmaImpl的属性helloCalled结果为true，因为hello方法被调用。<BR>assertTrue(called.booleanValue());</P></TD></TR></TBODY></TABLE>
<P>&nbsp;</P>
<P>　　从以上看出，JMX和Pico互相结合，可以起到互相结合的强大威力，</P>
<P>　　从上面代码中，我们可以发现，对于容器中的对象，可以有两种不同的切入角度或是关注角度，也是所谓分散关注：一个是by pico的调用，如wilma.hello();另外一种是JMX提供的另外一种角度，通过JMX提供 的这种角度，我们可以发现或跟踪对象内容的状态，如WilmaImpl的属性helloCalled结果被发现改变。</P>
<P>　　这非常类似现代的一些手术，无需开刀（不打开人体这个容器），通过激光或探头手段监察手术效果。</P>
<P>　　既然被监察、跟踪，那么就意味着可以被管理了，JMX提供的这种角度被认为是可以将对象纳入被管理范围。</P>
<P>　　以上这段代码构架是Pico和JMX的一个综合体，可以说启动了一个新的Java编程架构，称为什么合适呢？微容器 microcontainer!</P>
<P><STRONG>微容器与编程模式</STRONG></P>
<P>　　面向微容器编程目前是一种激动人心新的编程模式，总结上面这段代码，我们发现有一些面向微容器编程的规律或者称为模式。</P>
<P>　　首先需要定义一个容器解读的配置，它是字符串的：</P>
<P><EM>　　一. 启动配置模式</EM>（JMX中称为MBeanForAppConfig pattern，见下面参考文录）<BR><EM>　　</EM>目的：定义容器启动时需要装载的JavaBeans/MBeans信息。<BR><EM>　　</EM>动机：容器启动时需要一些初始化配置，这样，容器启动可以装载这些对象。</P>
<P>　　例如上面的Groovy脚本就是一段启动配置模式，在笔者的JdonSD 2.5框架中，是通过XML实现启动配置的，如：</P>
<TABLE cellSpacing=0 cellPadding=1 width="90%" bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD>
<P><MODEL class=com.jdon.controller.test.model.UserTest key="userId"><BR>　　<ACTIONFORM name="userActionForm" /><BR>　　<HANDLER class=com.jdon.controller.test.web.UserHandler /><BR>　　<SERVICE ref="mappingManagerEJB"><BR>　　　　<GETMETHOD name="getUser" /><BR>　　　　<CREATEMETHOD name="create" /><BR>　　　　<UPDATEMETHOD name="update" /><BR>　　　　<DELETEMETHOD name="delete" /><BR>　　</SERVICE><BR></MODEL></P>
<P><MODEL class=com.jdon.controller.test.model.AddressTest key="addressId"><BR>　　<ACTIONFORM name="addressActionForm" /><BR>　　<SERVICE ref="mappingManagerEJB"><BR>　　　　<GETMETHOD name="getAddress" /><BR>　　　　<CREATEMETHOD name="createAddress" /><BR>　　　　<UPDATEMETHOD name="updateAddress" /><BR>　　　　<DELETEMETHOD name="deleteAddress" /><BR>　　</SERVICE><BR></MODEL><BR><BR></P></TD></TR></TBODY></TABLE>
<P><EM>　　二. 记录跟踪模式</EM>（JMX中称为MBeanWritesToLog pattern，见下面参考文录）<BR><EM>　　</EM>目的：容器中的一些数据和状态需要拷贝到外部，如文件或图形输出等，以便跟踪。<BR><EM>　　</EM>动机：Log日志记录是非常准确和常用的程序跟踪调试手段，通过Log4j等之类工具实现输出，可以对容器中状态掌握了解非常清楚。如上面代码中可以记录获得WilmaImpl的属性helloCalled结果为true，如果将其输出即可实现记录跟踪。</P>
<P><EM>　　二. 生命周期模式</EM><BR><EM>　　</EM>目的：微容器有创建和消亡时刻，因此必须处理好容器中每个对象生命周期。<BR><EM>　　</EM>动机：生命周期是微容器的本质特征，处理好对象的生命周期，可以从设计上根本预防memory leak内存溢出或性能缓慢的基础缺陷，JMX在生命周期控制上非常深入，降低了编程复杂度。在Jdon论坛和2004年中国软件技术大会上我都反复强调生命周期的重要性，如果编程者考虑这点，说明对象在他的脑子里活起来了，而不是僵死的，这点也是全局工厂模式所不能替代的。</P>
<P><STRONG>微容器和全局工厂模式</STRONG></P>
<P><EM>　　</EM>对于客户端来说，微容器和工厂模式性质是一致的，客户端不在乎你是微容器和工厂模式，都是获得创建对象，但是对于服务端来说就不一样了，工厂模式可能有很多类，这些类都没有被约束或被管理的，因此移植起来很麻烦；而微容器有自己的疆界，可以实现服务端的对象约束和管理，移植方便：提起容器就走，:)，如下图：</P>
<P><IMG height=272 src="http://www.jdon.com/artichect/images/mico.jpg" width=339></P>
<P><A href="http://www.jdon.com/jive/thread.jsp?forum=91&amp;thread=18221" target=_blank><STRONG>发表讨论</STRONG></A></P>
<P>&nbsp;</P>
<P>参考文献：</P>
<P><A href="http://www.jdon.com/concurrent/jmx.htm" target=_blank>JMX架构的了解</A></P>
<P><A href="http://www.jdon.com/concurrent/jmx_dynamicbean.htm" target=_blank>JMX架构的了解 (MBean部分)</A></P>
<P><A href="http://www.jdon.com/jive/thread.jsp?forum=91&amp;thread=15460" target=_blank>PicoContainer解剖之一：PicoContainer是如何获得实例</A><BR><BR><A href="http://www.picocontainer.org/" target=_blank>http://www.picocontainer.org/</A></P>
<P><A href="http://www.nanocontainer.org/" target=_blank>http://www.nanocontainer.org/</A></P>
<P><A href="http://devresource.hp.com/drc/resources/jmxds/index.jsp" target=_blank>http://devresource.hp.com/drc/resources/jmxds/index.jsp</A> </P>
<P><A href="http://builds.codehaus.org/damagecontrol/public/root/PicoBook/checkout/nanocontainer-jmx.t2t" target=_blank>http://builds.codehaus.org/damagecontrol/public/root/PicoBook/checkout/nanocontainer-jmx.t2t</A></P>
<P>文中完整程序从<A href="http://www.nanocontainer.org/Source+Repositories" target=_blank>http://www.nanocontainer.org/Source+Repositories</A>下载，部分程序:<A href="http://www.jdon.com/artichect/mico.rar" target=_blank>mico.rar</A></P>
<P>&nbsp;</P>]]></description>
</item><item>
<title><![CDATA[太遥远了，现在的oo发展]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=siberian&amp;id=1215</link>
<author>siberian</author>
<pubDate>2004/12/22 11:36:55</pubDate>
<description><![CDATA[
<P>&nbsp;&nbsp; 看看现在什么这个建模，那个建模。头都晕。现在我还坚持实体建模。oo思想是对现实世界的一个描述，可以把现实世界映射到计算机中。</P>
<P>&nbsp;&nbsp;&nbsp; 按照万事万物皆是对象的思路，现在的那些什么领域建模,什么mda,什么用例设计都是大缪特缪的。在把简单的东西搞复杂。</P>
<P>&nbsp;&nbsp;&nbsp; 现在oo语言有不足，才有那些乱七八糟的权宜之计。垃圾都是垃圾！简单的对象关系，却出现了那么多层，抽象再抽象。复杂再复杂。不能清晰的表现现实世界的常见的分类和关系。不能自动衍生所可能的情况和约束。</P>
<P>&nbsp;&nbsp;&nbsp; 我记得有前辈说过程序就是程序员看着一个种子发芽到长成书的过程。人力无所加。那么我们就为这个种子而努力吧!</P>]]></description>
</item><item>
<title><![CDATA[验证过的eclipse热键]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=siberian&amp;id=1209</link>
<author>siberian</author>
<pubDate>2004/12/22 9:01:31</pubDate>
<description><![CDATA[转载自: <A href="http://blog.yesky.com/Blog/javafoot/archive/2004/12/16/51024.html" target=_blank>http://blog.yesky.com/Blog/javafoot/archive/2004/12/16/51024.html</A><BR>
<H2><FONT size=1>Ctrl + space : Code assistant<BR>Ctrl + o : 在编辑器中打开类结构,适用在编辑框最大化的时候,跳转函数用...<BR>Ctrl + t : 也是在编辑器中使用,打开选择的元素的继承树,可以迅速定位父类的方法在子类中的覆盖位置<BR>Ctrl + shift + R : 查找XML,JSP等非JAVA文件<BR>Ctrl + shift + H : 打开制定类的类树,适用在对于没有源代码的类的层次结构的了解,用F4是无法实现的<BR>Ctrl + H : 搜索所有文件中,包含的关键字,我用来搜索XML等配置文件....<BR>Ctrl + F6 : 切换编辑编辑器,我改成了Table+ctrl<BR>Ctrl + m : 编辑框最大化...<BR>Ctrl + d : 删除一行<BR>Insert : 点击insert可以切换几种光标的形状，每一种形状都代表一种insert方式，默认的是smart insert吧<BR>ctrl+/:注释及取消注释<BR>Ctrl + space : Code assistant 最好不要用这个快捷键做code assistant, 容易和输入法冲突。我一般设置成Ctrl+J,同JBuilder的一样。<BR>我自定义的其它的设置还有:<BR>Ctrl+Tab : Code Format<BR>Ctrl+I : 组织导入<BR>ctrl＋shift＋m 自动搜索鼠标所在的类所属的包并自动导入，加入import语句中。 ctrl+shift+O吧,把import *这种方式改为，import确定的类或接口<BR>ctrl+1 smart fix (常用)<BR>按住ctrl，用鼠标点method或类，自动跳到该类或方法。</FONT> </H2>]]></description>
</item><item>
<title><![CDATA[Eclipse快捷键指南]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=siberian&amp;id=1208</link>
<author>siberian</author>
<pubDate>2004/12/22 8:55:26</pubDate>
<description><![CDATA[转载自: <A href="http://dev.csdn.net/article/26/26998.shtm" target=_blank>http://dev.csdn.net/article/26/26998.shtm</A><BR><BR><TR><TD height="19">
<TABLE cellSpacing=3 cellPadding=3 width="100%" border=0>
<TBODY>
<TR>
<TD><A href="http://www.csdn.net/">CSDN</A> - <A href="http://dev.csdn.net/">文档中心</A> - <FONT color=#003399><A id=ArticleTitle1_ArticleTitle1_hlClass href="http://dev.csdn.net/articlelist.aspx?c=6">Java</A></FONT> </TD>
<TD align=right>阅读：<SPAN id=ArticleTitle1_ArticleTitle1_lblReadCount>2654</SPAN> &nbsp;&nbsp;评论： <SPAN id=ArticleTitle1_ArticleTitle1_lblCommentCount>3</SPAN> &nbsp;&nbsp; <A href="http://dev.csdn.net/article/26/26998.shtm#Comment">参与评论</A> </TD></TR></TBODY></TABLE></TD></TR><TR><TD width="10"></TD><TD><SPAN id=ArticleContent1_ArticleContent1_lblContent>
<DIV><B>Eclipse</B><B>快捷键指南</B><B></B></DIV>
<DIV><FONT size=3></FONT></DIV>
<DIV><FONT size=3>本文档从Eclipse软件上整理，是列出了标准的快捷键，未列出Emacs快捷键。</FONT></DIV>
<DIV><FONT size=3>转贴请注明作者和出处。</FONT></DIV>
<DIV><FONT size=3></FONT>&nbsp;</DIV>
<DIV><FONT size=3>编辑</FONT></DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=115>
<DIV>作用域</DIV></TD>
<TD vAlign=top width=312>
<DIV>功能</DIV></TD>
<TD vAlign=top width=132>
<DIV>快捷键</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>查找并替换</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+F</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>文本编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>查找上一个</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+K</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>文本编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>查找下一个</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+K</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>撤销</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Z</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>复制</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+C</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>恢复上一个选择</DIV></TD>
<TD vAlign=top width=132>
<DIV>Alt+Shift+↓</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>剪切</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+X</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>快速修正</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl1+1</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>内容辅助</DIV></TD>
<TD vAlign=top width=132>
<DIV>Alt+/</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>全部选中</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+A</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>删除</DIV></TD>
<TD vAlign=top width=132>
<DIV>Delete</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>上下文信息</DIV></TD>
<TD vAlign=top width=132>
<DIV>Alt+？</DIV>
<DIV>Alt+Shift+?</DIV>
<DIV>Ctrl+Shift+Space</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>Java编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>显示工具提示描述</DIV></TD>
<TD vAlign=top width=132>
<DIV>F2</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>Java编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>选择封装元素</DIV></TD>
<TD vAlign=top width=132>
<DIV>Alt+Shift+↑</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>Java编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>选择上一个元素</DIV></TD>
<TD vAlign=top width=132>
<DIV>Alt+Shift+←</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>Java编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>选择下一个元素</DIV></TD>
<TD vAlign=top width=132>
<DIV>Alt+Shift+→</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>文本编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>增量查找</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+J</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>文本编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>增量逆向查找</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+J</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>粘贴</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+V</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>重做</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Y</DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=3></FONT>&nbsp;</DIV>
<DIV><FONT size=3>查看</FONT></DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=115>
<DIV>作用域</DIV></TD>
<TD vAlign=top width=312>
<DIV>功能</DIV></TD>
<TD vAlign=top width=132>
<DIV>快捷键</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>放大</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+=</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>缩小</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+-</DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=3></FONT>&nbsp;</DIV>
<DIV><FONT size=3>窗口</FONT></DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=115>
<DIV>作用域</DIV></TD>
<TD vAlign=top width=312>
<DIV>功能</DIV></TD>
<TD vAlign=top width=132>
<DIV>快捷键</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>激活编辑器</DIV></TD>
<TD vAlign=top width=132>
<DIV>F12</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>切换编辑器</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+W</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>上一个编辑器</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+F6</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>上一个视图</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+F7</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>上一个透视图</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+F8</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>下一个编辑器</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+F6</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>下一个视图</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+F7</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>下一个透视图</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+F8</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>文本编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>显示标尺上下文菜单</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+W</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>显示视图菜单</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+F10</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>显示系统菜单</DIV></TD>
<TD vAlign=top width=132>
<DIV>Alt+-</DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=3></FONT>&nbsp;</DIV>
<DIV><FONT size=3>导航</FONT></DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=115>
<DIV>作用域</DIV></TD>
<TD vAlign=top width=312>
<DIV>功能</DIV></TD>
<TD vAlign=top width=132>
<DIV>快捷键</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>Java编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>打开结构</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+F3</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>打开类型</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+T</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>打开类型层次结构</DIV></TD>
<TD vAlign=top width=132>
<DIV>F4</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>打开声明</DIV></TD>
<TD vAlign=top width=132>
<DIV>F3</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>打开外部javadoc</DIV></TD>
<TD vAlign=top width=132>
<DIV>Shift+F2</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>打开资源</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+R</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>后退历史记录</DIV></TD>
<TD vAlign=top width=132>
<DIV>Alt+←</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>前进历史记录</DIV></TD>
<TD vAlign=top width=132>
<DIV>Alt+→</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>上一个</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+,</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>下一个</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+.</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>Java编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>显示大纲</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+O</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>在层次结构中打开类型</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+H</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>转至匹配的括号</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+P</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>转至上一个编辑位置</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Q</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>Java编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>转至上一个成员</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+↑</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>Java编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>转至下一个成员</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+↓</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>文本编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>转至行</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+L</DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=3></FONT>&nbsp;</DIV>
<DIV><FONT size=3>搜索</FONT></DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=115>
<DIV>作用域</DIV></TD>
<TD vAlign=top width=312>
<DIV>功能</DIV></TD>
<TD vAlign=top width=132>
<DIV>快捷键</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>出现在文件中</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+U</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>打开搜索对话框</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+H</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>工作区中的声明</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+G</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>工作区中的引用</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+G</DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=3></FONT>&nbsp;</DIV>
<DIV><FONT size=3>文本编辑</FONT></DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=115>
<DIV>作用域</DIV></TD>
<TD vAlign=top width=312>
<DIV>功能</DIV></TD>
<TD vAlign=top width=132>
<DIV>快捷键</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>文本编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>改写切换</DIV></TD>
<TD vAlign=top width=132>
<DIV>Insert</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>文本编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>上滚行</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+↑</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>文本编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>下滚行</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+↓</DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=3></FONT>&nbsp;</DIV>
<DIV><FONT size=3>文件</FONT></DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=115>
<DIV>作用域</DIV></TD>
<TD vAlign=top width=312>
<DIV>功能</DIV></TD>
<TD vAlign=top width=132>
<DIV>快捷键</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>保存</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+X </DIV>
<DIV>Ctrl+S</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>打印</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+P</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>关闭</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+F4</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>全部保存</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+S</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>全部关闭</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+F4</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>属性</DIV></TD>
<TD vAlign=top width=132>
<DIV>Alt+Enter</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>新建</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+N</DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=3></FONT>&nbsp;</DIV>
<DIV><FONT size=3>项目</FONT></DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=115>
<DIV>作用域</DIV></TD>
<TD vAlign=top width=312>
<DIV>功能</DIV></TD>
<TD vAlign=top width=132>
<DIV>快捷键</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>全部构建</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+B</DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=3></FONT>&nbsp;</DIV>
<DIV><FONT size=3>源代码</FONT></DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=115>
<DIV>作用域</DIV></TD>
<TD vAlign=top width=312>
<DIV>功能</DIV></TD>
<TD vAlign=top width=132>
<DIV>快捷键</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>Java编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>格式化</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+F</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>Java编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>取消注释</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+\</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>Java编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>注释</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+/</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>Java编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>添加导入</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+M</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>Java编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>组织导入</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+O</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>Java编辑器</DIV></TD>
<TD vAlign=top width=312>
<DIV>使用try/catch块来包围</DIV></TD>
<TD vAlign=top width=132>
<DIV>未设置，太常用了，所以在这里列出,建议自己设置。<BR>也可以使用Ctrl+1自动修正。</DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=3></FONT>&nbsp;</DIV>
<DIV><FONT size=3>运行</FONT></DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=115>
<DIV>作用域</DIV></TD>
<TD vAlign=top width=312>
<DIV>功能</DIV></TD>
<TD vAlign=top width=132>
<DIV>快捷键</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>单步返回</DIV></TD>
<TD vAlign=top width=132>
<DIV>F7</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>单步跳过</DIV></TD>
<TD vAlign=top width=132>
<DIV>F6</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>单步跳入</DIV></TD>
<TD vAlign=top width=132>
<DIV>F5</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>单步跳入选择</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+F5</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>调试上次启动</DIV></TD>
<TD vAlign=top width=132>
<DIV>F11</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>继续</DIV></TD>
<TD vAlign=top width=132>
<DIV>F8</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>使用过滤器单步执行</DIV></TD>
<TD vAlign=top width=132>
<DIV>Shift+F5</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>添加/去除断点</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+Shift+B</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>显示</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+D</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>运行上次启动</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+F11</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>运行至行</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+R</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>执行</DIV></TD>
<TD vAlign=top width=132>
<DIV>Ctrl+U</DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=3></FONT>&nbsp;</DIV>
<DIV><FONT size=3>重构</FONT></DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=115>
<DIV>作用域</DIV></TD>
<TD vAlign=top width=312>
<DIV>功能</DIV></TD>
<TD vAlign=top width=132>
<DIV>快捷键</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>撤销重构</DIV></TD>
<TD vAlign=top width=132>
<DIV>Alt+Shift+Z</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>抽取方法</DIV></TD>
<TD vAlign=top width=132>
<DIV>Alt+Shift+M</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>抽取局部变量</DIV></TD>
<TD vAlign=top width=132>
<DIV>Alt+Shift+L</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>内联</DIV></TD>
<TD vAlign=top width=132>
<DIV>Alt+Shift+I</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>移动</DIV></TD>
<TD vAlign=top width=132>
<DIV>Alt+Shift+V</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>重命名</DIV></TD>
<TD vAlign=top width=132>
<DIV>Alt+Shift+R</DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV>全局</DIV></TD>
<TD vAlign=top width=312>
<DIV>重做</DIV></TD></TR></TBODY></TABLE></SPAN></TD></TR>]]></description>
</item><item>
<title><![CDATA[老掉牙的问题，分页的思考]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=siberian&amp;id=671</link>
<author>siberian</author>
<pubDate>2004/12/2 11:23:07</pubDate>
<description><![CDATA[<P>分页问题由来已久，可是碰到多种数据来源复杂的情况下，这个问题还是很挠头。</P>
<P>&nbsp;&nbsp;&nbsp; 迫于时间只是完成了一个ResultSet的装饰。还是没有达到统一解决所有数据分页的目的。</P>
<P>&nbsp;&nbsp;&nbsp; 现在考虑即便是这个实现也有问题。重复了大量的转发。考虑使用代理技术来解决。代码将在略有形状后贴出。</P>]]></description>
</item><item>
<title><![CDATA[Log4J 最佳实践之全能配置文件(独家提供)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=siberian&amp;id=589</link>
<author>siberian</author>
<pubDate>2004/11/29 15:52:59</pubDate>
<description><![CDATA[转载自: <A href="http://www.cybercorlin.net/article.php?story=20040510110725869" target=_blank>http://www.cybercorlin.net/article.php?story=20040510110725869</A><BR><BR>
<TABLE class=fullbox cellSpacing=0 cellPadding=3 width="100%" border=0>
<TBODY>
<TR>
<TD class=featureheader align=left><B>Log4J 最佳实践之全能配置文件(独家提供)</B></TD>
<TD class=featureheader align=right>&nbsp;&nbsp;</TD></TR></TBODY></TABLE>
<TABLE class=midbox cellSpacing=0 cellPadding=2 width="100%" border=0>
<TBODY>
<TR>
<TD class=content align=right width=60>&nbsp;作者:&nbsp;</TD>
<TD class=content colSpan=2><A class=storybyline href="http://www.cybercorlin.net/users.php?mode=profile&amp;uid=4">corlin</A></TD></TR>
<TR>
<TD class=content align=right width=60>&nbsp;日期:&nbsp;</TD>
<TD class=content colSpan=2>04-05-10 11:07</TD></TR>
<TR>
<TD class=content align=right width=60>&nbsp;点击数:&nbsp;</TD>
<TD class=content>4862 </TD>
<TD align=right>&nbsp;</TD></TR></TBODY></TABLE>
<TABLE class=fullbox cellSpacing=0 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD class=content colSpan=2><A href="http://www.cybercorlin.net/index.php?topic=bestpractices"><IMG title=最佳实践 alt=最佳实践 src="http://www.cybercorlin.net/images/icons/best.gif" align=right border=0></A>下面给出得Log4J配置文件实现了输出到控制台，文件，回滚文件，发送日志邮件，输出到数据库日志表，自定义标签等全套功能。<BR><BR>log4j.rootLogger=DEBUG,CONSOLE,A1,im<BR>#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE<BR><BR>log4j.addivity.org.apache=true<BR><BR><BR>###################<BR># Console Appender<BR>###################<BR>log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender<BR>log4j.appender.Threshold=DEBUG<BR>log4j.appender.CONSOLE.Target=System.out<BR>log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout<BR>log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<BR>#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n<BR><BR><BR>#####################<BR># File Appender<BR>#####################<BR>log4j.appender.FILE=org.apache.log4j.FileAppender<BR>log4j.appender.FILE.File=file.log<BR>log4j.appender.FILE.Append=false<BR>log4j.appender.FILE.layout=org.apache.log4j.PatternLayout<BR>log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<BR># Use this layout for LogFactor 5 analysis<BR><BR><BR><BR>########################<BR># Rolling File<BR>########################<BR>log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender<BR>log4j.appender.ROLLING_FILE.Threshold=ERROR<BR>log4j.appender.ROLLING_FILE.File=rolling.log<BR>log4j.appender.ROLLING_FILE.Append=true<BR>log4j.appender.ROLLING_FILE.MaxFileSize=10KB<BR>log4j.appender.ROLLING_FILE.MaxBackupIndex=1<BR>log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout<BR>log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<BR><BR><BR>####################<BR># Socket Appender<BR>####################<BR>log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender<BR>log4j.appender.SOCKET.RemoteHost=localhost<BR>log4j.appender.SOCKET.Port=5001<BR>log4j.appender.SOCKET.LocationInfo=true<BR># Set up for Log Facter 5<BR>log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout<BR>log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n<BR><BR><BR>########################<BR># Log Factor 5 Appender<BR>########################<BR>log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender<BR>log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000<BR><BR><BR>########################<BR># SMTP Appender<BR>#######################<BR>log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender<BR>log4j.appender.MAIL.Threshold=FATAL<BR>log4j.appender.MAIL.BufferSize=10<BR>log4j.appender.MAIL.From=chenyl@hollycrm.com<BR>log4j.appender.MAIL.SMTPHost=mail.hollycrm.com<BR>log4j.appender.MAIL.Subject=Log4J Message<BR>log4j.appender.MAIL.To=chenyl@hollycrm.com<BR>log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout<BR>log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<BR><BR><BR>########################<BR># JDBC Appender<BR>#######################<BR>log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender<BR>log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test<BR>log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver<BR>log4j.appender.DATABASE.user=root<BR>log4j.appender.DATABASE.password=<BR>log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')<BR>log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout<BR>log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<BR><BR><BR>log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender<BR>log4j.appender.A1.File=SampleMessages.log4j<BR>log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'<BR>log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout<BR><BR>###################<BR>#自定义Appender<BR>###################<BR>log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender<BR><BR>log4j.appender.im.host = mail.cybercorlin.net<BR>log4j.appender.im.username = username<BR>log4j.appender.im.password = password<BR>log4j.appender.im.recipient = corlin@cybercorlin.net<BR><BR>log4j.appender.im.layout=org.apache.log4j.PatternLayout<BR>log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<BR><BR></TD></TR></TBODY></TABLE>]]></description>
</item><item>
<title><![CDATA[IQ问题]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=siberian&amp;id=372</link>
<author>siberian</author>
<pubDate>2004/11/18 11:41:26</pubDate>
<description><![CDATA[爱因斯坦在20世纪初出的这个谜语。他说世界上有98％的人答不出来。某家公司在面试应聘者时借用了爱因斯坦的这个IQ题，考查应聘者的IQ，现在我们暂且不去讨论这个公司用这样的题目来考查应聘者的IQ有多“变态”，如果是你，拿到了这样的笔试题目，你能做得出来吗？<BR><BR>
<SCRIPT id=ad_text_pcjob src="http://www.pconline.com.cn/script/ad_text_pcjob.js" defer></SCRIPT>
　　1、在一条街上，有5座房子，喷了5种颜色。<BR>　　2、每个房里住着不同国籍的人<BR>　　3、每个人喝不同的饮料，抽不同品牌的香烟，养不同的宠物<BR>　　问题是：谁养鱼？<BR><BR>　　提示：<BR>　　1、英国人住红色房子<BR>　　2、瑞典人养狗<BR>　　3、丹麦人喝茶<BR>　　4、绿色房子在白色房子左面<BR>　　5、绿色房子主人喝咖啡<BR>　　6、抽Pall Mall 香烟的人养鸟<BR>　　7、黄色房子主人抽Dunhill 香烟<BR>　　8、住在中间房子的人喝牛奶<BR>　　9、 挪威人住第一间房<BR>　　10、抽Blends香烟的人住在养猫的人隔壁<BR>　　11、养马的人住抽Dunhill 香烟的人隔壁<BR>　　12、抽Blue Master的人喝啤酒<BR>　　13、德国人抽Prince香烟<BR>　　14、挪威人住蓝色房子隔壁<BR>　　15、抽Blends香烟的人有一个喝水的邻居<BR>　　以上是爱因斯坦在20世纪初出的这个谜语。他说世界上有98％的人答不出来。]]></description>
</item><item>
<title><![CDATA[Windows自启动程序十大藏身之所]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=siberian&amp;id=335</link>
<author>siberian</author>
<pubDate>2004/11/17 9:50:03</pubDate>
<description><![CDATA[From: <A href="http://forum.javaeye.com/allbloglist.php" target=_blank>http://forum.javaeye.com/allbloglist.php</A><BR><BR><TR><TD class=row1 height="26" colSpan="2" align="left" noWrap><SPAN class=postdetails><A href="" target=_blank>Windows自启动程序十大藏身之所</A></SPAN></TD></TR> <TR><TD class=row1 width="100%" vAlign="top"><SPAN class=postdetails>一、当前用户专有的启动文件夹 <BR><BR>这是许多应用软件自动启动的常用位置，Windows自动启动放入该文件夹的所有快捷方式。用户启动文件夹一般在：\Documents and Settings\&lt;用户名字&gt;\「开始」菜单\程序\启动，其中“&lt;用户名字&gt;”是当前登录的用户帐户名称。 <BR><BR>二、对所有用户有效的启动文件夹 <BR><BR>这是寻找自动启动程序的第二个重要位置，不管用户用什么身份登录系统，放入该文件夹的快捷方式总是自动启动——这是它与用户专有的启动文件夹的区别所在。该文件夹一般在：\Documents and Settings\All Users\「开始」菜单\程序\启动。 <BR><BR>三、Load注册键 <BR><BR>介绍该注册键的资料不多，实际上它也能够自动启动程序。位置：HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows\load。 <BR><BR>四、Userinit注册键 <BR><BR>位置：HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit。这里也能够使系统启动时自动初始化程序。通常该注册键下面有一个userinit.exe，如图，但这个键允许指定用逗号分隔的多个程序，例如“userinit.exe,OSA.exe”（不含引号）。 <BR><BR>五、Explorer\Run注册键 <BR><BR>和load、Userinit不同，Explorer\Run键在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下都有，具体位置是：HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run，和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run。 <BR><BR>六、RunServicesOnce注册键 <BR><BR>RunServicesOnce注册键用来启动服务程序，启动时间在用户登录之前，而且先于其他通过注册键启动的程序。RunServicesOnce注册键的位置是：HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce，和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce。 <BR><BR>七、RunServices注册键 <BR><BR>RunServices注册键指定的程序紧接RunServicesOnce指定的程序之后运行，但两者都在用户登录之前。RunServices的位置是：HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices，和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices。 <BR><BR>八、RunOnce\Setup注册键 <BR><BR>RunOnce\Setup指定了用户登录之后运行的程序，它的位置是：HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup，和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\Setup。 <BR><BR>九、RunOnce注册键 <BR><BR>安装程序通常用RunOnce键自动运行程序，它的位置在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce和HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce。HKEY_LOCAL_MACHINE下面的RunOnce键会在用户登录之后立即运行程序，运行时机在其他Run键指定的程序之前。HKEY_CURRENT_USER下面的RunOnce键在操作系统处理其他Run键以及“启动”文件夹的内容之后运行。如果是XP，你还需要检查一下HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx。 <BR><BR>十、Run注册键 <BR><BR>Run是自动运行程序最常用的注册键，位置在：HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run，和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run。HKEY_CURRENT_USER下面的Run键紧接HKEY_LOCAL_MACHINE下面的Run键运行，但两者都在处理“启动”文件夹之前。</SPAN> </TD></TR>]]></description>
</item><item>
<title><![CDATA[头一贴]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=siberian&amp;id=334</link>
<author>siberian</author>
<pubDate>2004/11/17 9:33:46</pubDate>
<description><![CDATA[<A>　试验</A>
<P>&nbsp;&nbsp;&nbsp; &nbsp;就仿佛一个人在西伯利亚的苔原上欣赏瑰丽的极光，固然美丽。却挡不住那孤独的寒冷。<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp; 大学的记忆在你来说，还触手可及。可以和同学轻易的说起。对我则是遥远的不能再遥远了，里面<BR>包含了太多的内容。我承担不起其中太重的东西，只能选择遗忘。<BR>&nbsp;&nbsp; 其中偶尔人影的晃动，也仿佛河中沙石冲刷着我的心，粒粒的痛苦。<BR>&nbsp;&nbsp; 看你的闯荡。那想起那会儿被迫住在圆明园的时候了。那回失业了，又不愿意向家里求援。自己靠着<BR>最后的工资，住在圆明园。冬天那里没有像样的暖气，只不过有两条普通水管流过热水，象征着一点<BR>温暖。自己也在碰壁后，垂头丧气的倒在床上。还好的是把自己的电脑也搬到这里了。虽然屏幕已经<BR>极破烂，每次开着总是放出不太安稳的声音。但是这也算是一种消遣了。网当然是没得上的。还好又<BR>多认识了几个同样穷困潦倒的朋友。相互争论着游戏如何才能过关，日子也就不知不觉的在其中过了<BR>。闷的时候拿上几瓶啤酒，到圆明园的湖边去吼两嗓子，还学了两首地道的维族歌曲。<BR>&nbsp;&nbsp; 现在回想起来也觉得颇逍遥。不过最后穷到抽屉里再也找不到钢崩，而不得不灰灰的回家了。</P>
<P>&nbsp;</P>]]></description>
</item>
</channel>
</rss>