??xml version="1.0" encoding="utf-8" standalone="yes"?>av影片免费在线观看,国产一区在线不卡,精品欧美视频http://www.aygfsteel.com/ashutc/category/42984.html沈阳求职Qjava3q以上经验)Qashutc@126.comzh-cnFri, 17 Jun 2011 21:23:33 GMTFri, 17 Jun 2011 21:23:33 GMT60标准的策略模?/title><link>http://www.aygfsteel.com/ashutc/archive/2011/06/17/352524.html</link><dc:creator>西瓜</dc:creator><author>西瓜</author><pubDate>Fri, 17 Jun 2011 07:29:00 GMT</pubDate><guid>http://www.aygfsteel.com/ashutc/archive/2011/06/17/352524.html</guid><wfw:comment>http://www.aygfsteel.com/ashutc/comments/352524.html</wfw:comment><comments>http://www.aygfsteel.com/ashutc/archive/2011/06/17/352524.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ashutc/comments/commentRss/352524.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ashutc/services/trackbacks/352524.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">定义:定义了算法族Q分别封装v来,让它们之间可以互相替换,此模式让法的变化独立于使用法的客戗?br />适用?br />许多相关的类仅仅是行为有异?#8220;{略”提供了一U用多个行ؓ中的一个行为来配置一个类的算法?br />需要用一个算法的不同变体。例如,你可能会定义一些反映不容的I间</span><span style="color: #000000; ">/</span><span style="color: #000000; ">旉权衡的算法。当q些变体实现了一个算法的cdơ时[H087],可以使用{略模式?br />法使用客户不应该知道的数据。可以用策略模式以避免暴露复杂的、与法相关的数据结构?br />一个类定义了多U行为,q且q些行ؓ在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的StrategycM以代替这些条件语句?br /> 例子:以下的例子取自一个动作冒险游戏。你看C表游戏角色的cd角色可以使用的武器行为的cR每个角色一ơ只能只用一U武器,但是可以在游戏的q程中切换武器?br /></span><span style="color: #000000; ">1</span><span style="color: #000000; ">Q定义武器接口及实现c?br /></span><span style="color: #0000FF; ">package</span><span style="color: #000000; "> strategy;<br /></span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br /> * 定义武器行ؓ接口<br /> * </span><span style="color: #808080; ">@author</span><span style="color: #008000; "> User<br /> *<br /> </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">interface</span><span style="color: #000000; "> WeaponBehavior {<br />    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> userWeapon();</span><span style="color: #008000; ">//</span><span style="color: #008000; ">选择所使用的武?/span><span style="color: #008000; "><br /></span><span style="color: #000000; ">}<br /></span><span style="color: #0000FF; ">package</span><span style="color: #000000; "> strategy;<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> BowAndArrorBehavior </span><span style="color: #0000FF; ">implements</span><span style="color: #000000; "> WeaponBehavior {<br />    </span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />     * 实现用弓射?br />     </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> userWeapon() {<br />        System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">用弓射?/span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />    }<br />}<br /></span><span style="color: #0000FF; ">package</span><span style="color: #000000; "> strategy;<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> SwordBehavior </span><span style="color: #0000FF; ">implements</span><span style="color: #000000; "> WeaponBehavior {<br />    </span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />     * 实现用宝剑攻击行?br />     </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> userWeapon() {<br />        System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">用宝剑攻?!</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />    }<br />}<br /></span><span style="color: #0000FF; ">package</span><span style="color: #000000; "> strategy;<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> KnightBehavior </span><span style="color: #0000FF; ">implements</span><span style="color: #000000; "> WeaponBehavior {<br />    </span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />     * 实现用匕首刺杀的行?br />     </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> userWeapon() {<br />        System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">用匕首刺杀!!</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />    }<br />}<br /></span><span style="color: #000000; ">2</span><span style="color: #000000; ">Q定义角?br /></span><span style="color: #0000FF; ">package</span><span style="color: #000000; "> strategy;<br /></span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br /> * 角色的抽象父c?nbsp;定义抽象fightҎ以及{略属?br /> * </span><span style="color: #808080; ">@author</span><span style="color: #008000; "> User<br /> *<br /> </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">abstract</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> Character {<br />    </span><span style="color: #0000FF; ">protected</span><span style="color: #000000; "> WeaponBehavior weapon;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">{略调用  武器</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">abstract</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> fight();<br />    </span><span style="color: #0000FF; ">protected</span><span style="color: #000000; "> String name;<br />    </span><span style="color: #008000; ">//</span><span style="color: #008000; ">委托l行为类</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> performFight(){<br />        System.out.print(name</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />        weapon.userWeapon();<br />    }<br />    </span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />     * 改变所使用的武?br />     * </span><span style="color: #808080; ">@param</span><span style="color: #008000; "> weapon<br />     </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> setWeapon(WeaponBehavior weapon) {<br />        </span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.weapon </span><span style="color: #000000; ">=</span><span style="color: #000000; "> weapon;<br />    }<br />   <br />}<br /></span><span style="color: #0000FF; ">package</span><span style="color: #000000; "> strategy;<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> King </span><span style="color: #0000FF; ">extends</span><span style="color: #000000; "> Character {<br />   <br />    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> King(){<br />        </span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.weapon</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> SwordBehavior();</span><span style="color: #008000; ">//</span><span style="color: #008000; ">用宝?/span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        </span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">King</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />    }<br />   <br />    @Override<br />    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> fight() {<br />        System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">King fight</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />    }<br />}<br /></span><span style="color: #0000FF; ">package</span><span style="color: #000000; "> strategy;<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> Queen </span><span style="color: #0000FF; ">extends</span><span style="color: #000000; "> Character {<br />   <br />    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> Queen(){<br />        </span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.weapon</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> KnightBehavior();<br />        </span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">queen</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />    }<br />   <br />    @Override<br />    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> fight() {<br />        System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">queen fight</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />    }   <br />}<br /></span><span style="color: #000000; ">3</span><span style="color: #000000; ">Q测试类<br /></span><span style="color: #0000FF; ">package</span><span style="color: #000000; "> strategy;<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> Test {<br />    </span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />     * </span><span style="color: #808080; ">@param</span><span style="color: #008000; "> args<br />     </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> main(String[] args) {<br />        </span><span style="color: #008000; ">//</span><span style="color: #008000; ">定义能够使用的武?/span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        SwordBehavior swordBehavior</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> SwordBehavior();<br />        KnightBehavior knightBehavior</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> KnightBehavior();<br />        BowAndArrorBehavior bowAndArrorBehavior</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> BowAndArrorBehavior();<br />       <br />        </span><span style="color: #008000; ">//</span><span style="color: #008000; ">定义角色</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        Character king</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> King();<br />        Character queen</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> Queen();<br />       <br />        </span><span style="color: #008000; ">//</span><span style="color: #008000; ">使用默认的武?/span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">**************使用默认武器****************</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />        king.performFight();<br />        queen.performFight();<br />       <br />        </span><span style="color: #008000; ">//</span><span style="color: #008000; ">切换武器</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        king.setWeapon(knightBehavior);<br />        queen.setWeapon(swordBehavior);<br />       <br />        System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">**************更换武器?***************</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />        king.performFight();<br />        queen.performFight();<br />    }<br />}<br /></span><span style="color: #000000; ">4</span><span style="color: #000000; ">Q结?br /></span><span style="color: #000000; ">**************</span><span style="color: #000000; ">使用默认武器</span><span style="color: #000000; ">****************</span><span style="color: #000000; "><br />King:用宝剑攻?/span><span style="color: #000000; ">!!</span><span style="color: #000000; "><br />queen:用匕首刺杀</span><span style="color: #000000; ">!!</span><span style="color: #000000; "><br /></span><span style="color: #000000; ">**************</span><span style="color: #000000; ">更换武器?/span><span style="color: #000000; ">****************</span><span style="color: #000000; "><br />King:用匕首刺杀</span><span style="color: #000000; ">!!</span><span style="color: #000000; "><br />queen:用宝剑攻?/span><span style="color: #000000; ">!!</span></div><br /><br /><br /><br /><br /><br /><br /><br /><img src ="http://www.aygfsteel.com/ashutc/aggbug/352524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ashutc/" target="_blank">西瓜</a> 2011-06-17 15:29 <a href="http://www.aygfsteel.com/ashutc/archive/2011/06/17/352524.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jar 命o说明http://www.aygfsteel.com/ashutc/archive/2011/06/13/352195.html西瓜西瓜Mon, 13 Jun 2011 07:52:00 GMThttp://www.aygfsteel.com/ashutc/archive/2011/06/13/352195.htmlhttp://www.aygfsteel.com/ashutc/comments/352195.htmlhttp://www.aygfsteel.com/ashutc/archive/2011/06/13/352195.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/352195.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/352195.html

jar cf myJarFile.jar *.class

它会创徏了一个名为myJarFile.jar的JAR"卷宗"。这个卷宗会包括当前目录下的所有class文gQƈ且自动生成manifest文g?/p>

jar cmf myJarFile.jar myManifestFile.mf *.*

把当前目录的所有文?/strong>都打包,增加个用戯定义的,名ؓmyManifestFile.mf的manifest文g?/p>

jar tf myJarFile.jar

q回myJarFile.jar所含文件的列表?/p>

jar tvf myJarFile.jar

?verbose(详细)"标志Q给出更详细的,关于myJarFile.jar当中的文件的信息?/p>

jar cvf myApp.jar audio classes image

假设audioQclassesQimage都是子目录。这个命令会把这些子目录全都收进myApp.jar?/p>


一个JAR"卷宗"只有一个文Ӟ"卷宗"包含两个文gQ一个是Zip文gQ另一个是描述Zip文g所包含的文件的"manifest(清单)"?/p> 用法Qjar {ctxu}[vfm0Mi] [文g.jar[manifest-文g] [-C 目录] 文g?/em> ...
选项Q?br />     -c  创徏新的存档
    -t  列出存档内容的列?br />     -x  展开存档中的命名的(或所有的〕文?br />     -u  更新已存在的存档
    -v  生成详细输出到标准输Z
    -f  指定存档文g?br />     -m  包含来自标明文g的标明信?br />     -0  只存储方式;未用ZIP压羃格式
    -M  不生所有项的清单(manifest〕文?br />     -i  为指定的jar文g产生索引信息
    -C  改变到指定的目录

    文g名,包含的文?如果一个文件名是一个目录,它将被递归处理?br />     清单Qmanifest〕文件名和存档文件名都需要被指定Q按'm' ?nbsp;'f'标志指定的相同顺序?/div>



西瓜 2011-06-13 15:52 发表评论
]]>自动代码规范CheckStylehttp://www.aygfsteel.com/ashutc/archive/2011/06/03/351690.html西瓜西瓜Fri, 03 Jun 2011 07:56:00 GMThttp://www.aygfsteel.com/ashutc/archive/2011/06/03/351690.htmlhttp://www.aygfsteel.com/ashutc/comments/351690.htmlhttp://www.aygfsteel.com/ashutc/archive/2011/06/03/351690.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/351690.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/351690.html

CheckStyle是什么?

  CheckStyle是SourceForge下的一个项目,提供了一个帮?a target="_self">JAVA开发h员遵守某些编码规范的工具。它能够自动化代码规范检查过E,从而得开发h员从q项重要Q但是枯燥的d中解脱出来[1]?/p>

  2.2. CheckStyle验的主要内容

  CheckStyle默认提供一下主要检查内容:

  ·Javadoc注释

  ·命名U定

  ·标题

  ·Import语句

  ·体积大小

  ·I白

  ·修饰W?/p>

  ·?/p>

  ·代码问题

  ·c设?/p>

  ·混合查(包活一些有用的比如非必ȝSystem.out和printstackTraceQ?/p>

  从上面可以看出,CheckStyle提供了大部分功能都是对于代码规范的检查,而没有提供象PMD和Jalopy那么多的增强代码质量和修改代码的功能。但是,对于团队开发,其是强调代码规范的公司来说Q它的功能已l够强大?/p>

  2.3. CheckStyle的主要运行方?/p>

  目前QCheckStyle的版本是3.0Q与以前的版本不同,它的配置文g是基于XML而非Properties文g?/p>

  它的3.0版本提供了两U运行的方式Q?/p>

  ·命o行工?/p>

  ·ANTd

  同时QCheckStyle目前有很多针Ҏ行IDE的插Ӟ例如Eclipse、IntelliJ IDEA、JBuilder{。但是,大部分都是基?.4的版本,新版本的Ҏ不支持Q同旉|也较ؓ复杂?/p>

  因ؓ一般情况下Q如果与开发过E与环境集成hQ编码规范的查会更加有效Q因此,作ؓANTd的运行方式用的更加普遍?/p>

  在ANT的build.xml文g中添加CheckStyled的步骤如下:

  1. checkstyle-all-3.1.jar拯到项目的LIB目录Q?/p>

  2. 建立配置文gQ?/p>

  3. 声明CheckStyledQ?/p>

Qtaskdef resource="checkstyletask.properties" classpath="${lib}/checkstyle-all-3.1.jar"/Q?/p>

  4. 建立CheckStyledQ?/p>

Qtarget name="checkstyle"Q?br />Qcheckstyle cQ?br />Qfileset dir="${src}" includes=" **/*.java" /Q?br />Q?checkstyleQ?br />Q?targetQ?/p>

  2.4. 定制CheckStyle

  CheckStyle的执行基于XML配置文gQ它的主要组成部分是Q?/p>

  ·ModuleQ整个配|文件就是一Module树。根节点是Checker Module?/p>

  ·PropertiesQ它来决定一个Module如何q行查。每个Module都有一个默认|如果不满_发需求,可以讑֮其它的倹{?/p>

  下面是一个示例:

Qmodule name="MethodLength"Q?br />Qproperty name="max" value="60"/Q?br />Q?moduleQ?/p>

  它表C,如果Ҏ或者构造函数的长度过60行,CheckStyle׃报错。而默认值是150行?/p>

  以下是一DCheckStyle对于Maven目源文件的查报告:

Method 'createExpression' is not designed for extension - needs to be abstract, final or empty. 91
Unable to get class information for JellyException. 91
Line has trailing spaces. 93
Line has trailing spaces. 104
Method 'evaluate' is not designed for extension - needs to be abstract, final or empty. 113
Parameter context should be final. 113
Line has trailing spaces. 130
Method 'getExpressionText' is not designed for extension - needs to be abstract, final or empty. 131
Line has trailing spaces. 134
Line has trailing spaces. 135
Method 'toString' is not designed for extension - needs to be abstract, final or empty. 137
Method 'isSupportAntVariables' is not designed for extension - needs to be abstract, final or empty. 156
Method 'setSupportAntVariables' is not designed for extension - needs to be abstract, final or empty. 168
Parameter supportAntVariables should be final. 168
'supportAntVariables' hides a field. 168
Method 'isValidAntVariableName' is not designed for extension - needs to be abstract, final or empty. 183
Parameter text should be final. 183

  一般情况下Q与IDE集成在一起用的时候,点击出错的条目,可以跌{到相应的代码?br />本脓来自ZDNetChina中文C֌http://bbs.zdnet.com.cn,本脓地址Q?a >http://bbs.zdnet.com.cn/viewthread.php?tid=178617

 


三、CheckStyle的最佛_?/p>

  3.1. Sun’s Code Conventions的修?/p>

  在CheckStyle的最新发布版本中Q有一个对于Sun的Java~码规范的配|文件信息。但是,其中有很多条目ƈ不一定符合项目开发的需要。就是对于很多优秀的开源项目,按照q个规范来进行检查,也会出现成千上万的错误?/p>

  下面提出的一些修Ҏ见,是从实际目执行q程中ȝ出来的,可以作ؓ大家的参考。我们以CheckStyle3.0配置文g的顺序来介绍Q?/p>

  1. 去除对于每个包都有一个package.html文g的限Ӟ

Q?--Qmodule name="PackageHtml"/Q?-Q?br />  
  2. 修改对于JavaDoc Comments的限定:对于很多使用Code Generator的项目来_需要将手写代码与生成代码?a target="_self">单元试代码的检查分开q行Q?/p>

   3. 修改对于体积大小的限Ӟ目前Q很多显C器都是17寸,而且打印斚w的限制也比以前有所改善Q同Ӟ׃代码中Factory{模式的q用Q以及有意义? Ҏ名称{约定,默认每行代码的长度(80Q是q远不能满要求Q对于方法长度等{,也应该根据项目情况自行决定:

Qmodule name="FileLength"/Q?br />Qmodule name="LineLength"Q?br />Qproperty name="max" value="120"/Q?br />Q?moduleQ?br />Qmodule name="MethodLength"Q?br />Qproperty name="max" value="300"/Q?br />Q?moduleQ?br />Qmodule name="ParameterNumber"/Q?/p>

  4. 修改对于Throws的的限制Q允许Throws Unchecked Exception以及Throws Subclass Of Another Declared Exception?/p>

Qmodule name="RedundantThrows"Q?br />Qproperty name="allowUnchecked" value="true"/Q?br />Qproperty name="allowSubclasses" value="true"/Q?br />Q?moduleQ?/p>

  5. 修改成员变量的可视性:一般情况下Q应该允许Protected Members以及Package Visible Members?/p>

Qmodule name="VisibilityModifier"Q?br />Qproperty name="protectedAllowed" value="true"/Q?br />Qproperty name="packageAllowed" value="true"/Q?br />Q?moduleQ?/p>

  3.2. CheckStyle应用的最佛_?/p>

  采用CheckStyle以后Q编码规范的查就变得及其单,可以作ؓ一切实可行的实践加以执行?/p>

  一般情况下Q在目组中引入CheckStyle可以按照下面的步骤进行:

  1Q?Code Review与Code Conventions的重要作用;

  2Q?介绍CheckStyleQ?/p>

  3Q?初步应用CheckStyleQ参照CheckStyle附带的配|文Ӟ酌情加以剪裁Q在目的Ant配置文g中,dCheckStyledQ可以单独执行;

  4Q?修改、定型CheckStyle的配|文Ӟ按照基本配置文g执行一D|_2?周)Q听取开发h员的反馈意见Q修攚w|信息;

   5Q? 作ؓ开发过E的日常实践Q强制执行CheckStyleQ稳定CheckStyle的配|信息,同时CheckStyled作ؓBuild的依赖Q? 或者配|源码控制系l(目前QCheckStyle可以与CVS有效集成Q,使得代码在加入系l之前必通过查?/p>

  同时需要指出的是,CheckStyle的有效执行需要依赖两个条Ӟ

  ·Ant的广泛应用:CheckStyleZAnt执行的方式比较容易,而且可以在项目内容Ş成一致的执行环境。同Ӟ也比较容易与其它dQ例如Build{发生关联?/p>

   ·IDE Format Code的强大功能:׃CheckStyle本nq没有提供很强大的Code Format{功能,因此Q需要借助IDE的帮助,从而得在发生错误的时候,可以很容易的q行修复。目前,L的Java IDE都提供了q方面的功能QIDEA在这斚w其H出。它提供的统一、可定义的Code Format TemplateQ项目小l内部可以用统一模板Q以及方便的快捷键功?Ctrl+Alt+TQFormat Code, Ctrl+Alt+OQOptimize Import{??/p>

  四、结?/p>

  利用CheckStyle可以方便的对于编码的Code Conventionsq行查,同时Q也有效地减了Code Review?a target="_self">工作Q得Reviw人员的精力更多的集中到逻辑和性能查?br />

Checkstyle的结果输?/p>

序号      输出内容意义

1 Type is missing a javadoc commentClass  ~少cd说明

2“{” should be on the previous line “{” 应该位于前一?/p>

3Methos is missing a javadoc commentҎ前面~少javadoc注释

4Expected @throws tag for “Exception”在注释中希望有@throws的说?/p>

5“.” Is preceeded with whitespace “.” 前面不能有空?/p>

6“.” Is followed by whitespace“.” 后面不能有空?/p>

7“=” is not preceeded with whitespace“=” 前面~少I格

8“=” is not followed with whitespace“=” 后面~少I格

9“}” should be on the same line“}” 应该与下条语句位于同一?/p>

10Unused @param tag for “unused”没有参数“unused”Q不需注释

11Variable “CA” missing javadoc变量“CA”~少javadoc注释

12Line longer than 80characters行长度超q?0

13Line contains a tab character行含?#8221;tab” 字符

14Redundant “Public” modifier冗余?#8220;public” modifier

15Final modifier out of order with the JSL suggestionFinal modifier的顺序错?/p>

16Avoid using the “.*” form of importImport格式避免使用“.*”

17Redundant import from the same package从同一个包中Import内容

18Unused import-java.util.listImportq来的java.util.list没有被?/p>

19Duplicate import to line 13重复Import同一个内?/p>

20Import from illegal package从非法包?Import内容

21“while” construct must use “{}”“while” 语句~少“{}”

22Variable “sTest1” must be private and have accessor method变量“sTest1”应该是private的,q且有调用它的方?/p>

23Variable “ABC” must match pattern “^[a-z][a-zA-Z0-9]*$”变量“ABC”不符合命名规?#8220;^[a-z][a-zA-Z0-9]*$”

24“(” is followed by whitespace“(” 后面不能有空?25“)” is proceeded by whitespace“)” 前面不能有空?/p>

 

不太明白的错误解{?/p>

1.  'X' hides a field.

public class Foo
{
    private int bar;

    public Foo(int bar)
    {
        this.bar = bar;
    }

    public final int getBar()
    {
        return bar;
    }
}

解释Q全局private int bar;和局部public Foo(int bar)的bar变量名字重复?br />此错误,可以忽略不检查?/p>


2. Parameter X should be final.


public class Foo
{
    private int bar;

    public Foo(int bar)
    {
        this.bar = bar;
    }

    public final int getBar()
    {
        return bar;
    }
}

解释Qpublic Foo(int bar)的局部变量,被认为是不可改变的,查需要加上final关键字定义public Foo(final int bar)
此错误,可以忽略不检查?/p>

3. Redundant 'X' modifier.

public interface CacheHRTreeService extends Manager {

 /**
  * Organization Tree
  *
  * @param orgDto
  * @return
  * @throws Exception
  */
 public void setOrganization(OrganizationDTO orgDto) throws Exception;

 /**
  * Organization Tree
  *
  * @return
  * @throws Exception
  */
 public OrganizationDTO getOrganization() throws Exception;
......
}

解释Q多余的字段。public OrganizationDTO getOrganization() throws Exception;此时public为多余的字段Q因为interface定义的时候,是public的?/p>

需要检查?/p>

4. - Class X should be declared as final.

解释Q对于单例设计模式,要求q回唯一的类对象。但是HRFactory和ContextFactoryZ化的两个c,不需求检查?br />其他的单例类Q依焉要进行检查?/p>


5.  Utility classes should not have a public or default constructor.

解释Q工L不必提供默认的构造方法?br />需要检查,仅仅为提C?/p>

6. File does not end with a newline.
解释Q虽然JAVAE序不要求结要用新行,但是习惯上应该要IZ行?br />需要检查,仅仅为提C?/p>

7. - Method 'addChildrenId' is not designed for extension - needs to be
  abstract, final or empty.

解释Q通过父类l承的,此类有点Ҏ
可以忽略此类?/p>

8. Variable 'id' must be private and have accessor methods.
解释QBaseHRDTOc,为父c,属性给子类l承Q比较特D?br />但是其他的类Q声名需要加上范?private'关键?br />需要检查?/p>

9. -Array brackets at illegal position.
解释Q代码写法,习惯不一栗?br />需要检查,仅仅提示?/p>






西瓜 2011-06-03 15:56 发表评论
]]>
数据库设?/title><link>http://www.aygfsteel.com/ashutc/archive/2011/05/09/349855.html</link><dc:creator>西瓜</dc:creator><author>西瓜</author><pubDate>Mon, 09 May 2011 09:13:00 GMT</pubDate><guid>http://www.aygfsteel.com/ashutc/archive/2011/05/09/349855.html</guid><wfw:comment>http://www.aygfsteel.com/ashutc/comments/349855.html</wfw:comment><comments>http://www.aygfsteel.com/ashutc/archive/2011/05/09/349855.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ashutc/comments/commentRss/349855.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ashutc/services/trackbacks/349855.html</trackback:ping><description><![CDATA[<br /> <br /> <ol class="article"> <li>原始单据与实体之间的关系</li> <p class="contentNew">可以是一对一、一对多、多对多的关pR在一般情况下Q它们是一对一的关p:即一张原始单据对应且? 对应一个实体。在Ҏ情况下,它们可能是一对多或多对一的关p,即一张原始单证对应多个实体,或多张原始单证对应一个实体。这里的实体可以理解为基本表? 明确q种对应关系后,Ҏ们设计录入界面大有好处?/p> <p class="contentNew">比如Q一份员工历资料,在h力资源信息系l中Q就对应三个基本表:员工基本情况表、社会关p表、工作简历表。这是“一张原始单证对应多个实?#8221;的典型例子?/p> <li>主键与外?/li> <p class="contentNew">一般而言Q一个实体不能既无主键又无外键。在E—R 图中, 处于叶子部位的实? 可以定义主键Q也可以不定义主键(因ؓ它无子孙Q? 但必要有外键(因ؓ它有父亲Q? 主键与外键的设计Q在全局数据库的设计中,占有重要C。当全局数据库的设计完成以后Q有个美国数据库设计专家_“键,到处都是键,除了键之外,什么也 没有”Q这是他的数据库设计经验之谈,也反映了他对信息pȝ核心Q数据模型)的高度抽象思想。因为:主键是实体的高度抽象Q主键与外键的配对,表示实体 之间的连接?/p> <li>基本表的性质</li> <p class="contentNew">基本表与中间表、时表不同Q因为它h如下四个Ҏ:</p> <ul class="article"> <li>原子性。基本表中的字段是不可再分解的?/li> <li>原始性。基本表中的记录是原始数据(基础数据Q的记录?/li> <li>演绎性。由基本表与代码表中的数据,可以z出所有的输出数据?/li> <li>E_性。基本表的结构是相对E_的,表中的记录是要长期保存的?/li> </ul> <p class="contentNew">理解基本表的性质后,在设计数据库Ӟp基本表与中间表、时表区分开来?/p> <li>范式标准</li> <p class="contentNew">基本表及其字D之间的关系, 应尽量满第三范式。但是,满W三范式的数据库设计Q往往不是最好的设计。ؓ了提高数据库的运行效率,常常需要降低范式标准:适当增加冗余Q达CI间换时间的目的?/p> <p class="contentNew">比如有一张存攑֕品的基本表,如表1所C?#8220;金额”q个字段的存在,表明该表的设计不满W三范式Q因?#8220;金额”可以?#8220;单h”乘以“数量”得到Q说?#8220;金额”是冗余字Dc但是,增加“金额”q个冗余字段Q可以提高查询统计的速度Q这是以空间换旉的作法?/p> <p class="contentNew">在Rose 2002中,规定列有两种cdQ数据列和计列?#8220;金额”q样的列被称?#8220;计算?#8221;Q?#8220;单h”?#8220;数量”q样的列被称?#8220;数据?#8221;?/p> <table style="line-height: 150%;" align="center" border="1" cellspacing="0" width="600"> <tbody> <tr> <td>商品名称</td> <td>商品型号</td> <td>单h</td> <td>数量</td> <td>金额</td> </tr> <tr> <td>电视?/td> <td>29?/td> <td>2,500</td> <td>40</td> <td>100,000</td> </tr> </tbody> </table> <p align="center">? 商品表的表结?/p> <li>通俗地理解三个范?/li> <p class="contentNew">通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中Qؓ了更好地应用三个范式Q就必须通俗地理解三个范式(通俗地理解是够用的理解,q不是最U学最准确的理解)Q?/p> <ul class="article"> <li>W一范式Q?NF是对属性的原子性约束,要求属性具有原子性,不可再分解;</li> <li>W二范式Q?NF是对记录的惟一性约束,要求记录有惟一标识Q即实体的惟一性;</li> <li>W三范式Q?NF是对字段冗余性的U束Q即M字段不能由其他字D|生出来,它要求字D|有冗余?/li> </ul> <p class="contentNew">没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时Z提高q行效率Q就必须降低范式标准Q适当保留冗余数据。具体做法是Q在概念数据模型设计旉守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字D,允许冗余?/p> <li>要善于识别与正确处理多对多的关系</li> <p class="contentNew">若两个实体之间存在多对多的关p,则应消除q种关系。消除的办法是,在两者之间增加第三个实体。这 P原来一个多对多的关p,现在变ؓ两个一对多的关pR要原来两个实体的属性合理地分配C个实体中厅R这里的W三个实体,实质上是一个较复杂的关p, 它对应一张基本表。一般来Ԍ数据库设计工具不能识别多对多的关p,但能处理多对多的关系?/p> <p class="contentNew">比如?#8220;图书馆信息系l?#8221;中,“图书”是一个实体,“读?#8221;也是一个实体。这两个实体之间的关p, 是一个典型的多对多关p:一本图书在不同旉可以被多个读者借阅Q一个读者又可以借多本图书。ؓ此,要在二者之间增加第三个实体Q该实体取名?#8220;借还 ?#8221;Q它的属性ؓQ借还旉、借还标志Q?表示借书Q?表示q书Q,另外Q它q应该有两个外键Q?#8220;图书”的主键,“读?#8221;的主键)Q它能?#8220;图书”? “读?#8221;q接?/p> <li>主键PK的取值方?/li> <p class="contentNew">PK是供E序员用的表间q接工具Q可以是一无物理意义的数字? q序自动加1来实现。也可以是有物理意义的字D名或字D名的组合。不q前者比后者好。当PK是字D名的组合时Q徏议字D늚个数不要太多Q多了不但烦引占用空间大Q而且速度也慢?/p> <li>正确认识数据冗余</li> <p class="contentNew">主键与外键在多表中的重复出现Q不属于数据冗余Q这个概念必L楚,事实上有许多不清楚。非键字D늚重复出现Q才是数据冗余!而且是一U低U冗余,即重复性的冗余。高U冗余不是字D늚重复出现Q而是字段的派生出现?/p> <p class="contentNew">比如商品中的“单h、数量、金?#8221;三个字段Q?#8220;金额”是?#8220;单h”乘以“数量”z出来的,它就 是冗余,而且是一U高U冗余。冗余的目的是ؓ了提高处理速度。只有低U冗余才会增加数据的不一致性,因ؓ同一数据Q可能从不同旉、地炏V角色上多次? 入。因此,我们提倡高U冗余(z性冗余)Q反对低U冗余(重复性冗余)?/p> <li>E-R图没有标准答?/li> <p class="contentNew">信息pȝ的E-R图没有标准答案,因ؓ它的设计与画法不是惟一的,只要它覆盖了pȝ需求的业务范围 和功能内容,是可行的。反之要修改E-R图。尽它没有惟一的标准答案,q不意味着可以随意设计。好的E—R囄标准是:l构清晰、关联简z、实体个? 适中、属性分配合理、没有低U冗余?/p> <li>视图技术在数据库设计中很有?/li> <p class="contentNew">与基本表、代码表、中间表不同Q视图是一U虚表,它依赖数据源的实表而存在。视图是供程序员使用? 据库的一个窗口,是基表数据综合的一UŞ? 是数据处理的一U方法,是用h据保密的一U手Dcؓ了进行复杂处理、提高运速度和节省存储空? 视图的定义深度一般不得超q三层?若三层视图仍不够? 则应在视图上定义临时? 在时表上再定义视图。这样反复交q定? 视图的深度就不受限制了?/p> <p class="contentNew">对于某些与国家政沅R经、技术、军事和安全利益有关的信息系l,视图的作用更加重要。这些系l的 基本表完成物理设计之后,立即在基本表上徏立第一层视图,q层视图的个数和l构Q与基本表的个数和结构是完全相同。ƈ且规定,所有的E序员,一律只准在? 图上操作。只有数据库理员,带着多个人员共同掌握?#8220;安全钥匙”Q才能直接在基本表上操作。请读者想惻Iq是Z么?</p> <li>中间表、报表和临时?/li> <p class="contentNew">中间表是存放l计数据的表Q它是ؓ数据仓库、输出报表或查询l果而设计的Q有时它没有主键与外键(数据仓库除外Q。时表是程序员个h设计的,存放临时记录Qؓ个h所用。基表和中间表由DBAl护Q时表q序员自己用程序自动维护?/p> <li>完整性约束表现在三个斚w</li> <p class="contentNew">域的完整性:用Check来实现约束,在数据库设计工具中,对字D늚取D围进行定义时Q有一个Check按钮Q通过它定义字D늚值城?/p> <p class="contentNew">参照完整性:用PK、FK、表U触发器来实现?/p> <p class="contentNew">用户定义完整性:它是一些业务规则,用存储过E和触发器来实现?/p> <li>防止数据库设计打补丁的方法是“三少原则”</li> <ul class="article"> <li>一个数据库中表的个数越越好。只有表的个数少了,才能说明pȝ的E--R囑ְ而精Q去掉了重复的多余的实体QŞ成了对客观世界的高度抽象Q进行了pȝ的数据集成,防止了打补丁式的设计Q?/li> <li>一个表中组合主键的字段个数少好。因Z键的作用Q一是徏主键索引Q二是做为子表的外键Q所以组合主键的字段个数了Q不仅节省了q行旉Q而且节省了烦引存储空_</li> <li>一个表中的字段个数少好。只有字D늚个数了Q才能说明在pȝ中不存在数据重复Q且很少有数据冗余,更重要的是督? 读者学?#8220;列变?#8221;Q这样就防止了将子表中的字段拉入C表中去,在主表中留下许多IZ的字Dc所?#8220;列变?#8221;Q就是将主表中的一部分内容拉出去,另外? 独徏一个子表。这个方法很单,有的人就是不习惯、不采纳、不执行?/li> </ul> <p class="contentNew">数据库设计的实用原则是:在数据冗余和处理速度之间扑ֈ合适的q炏V?#8220;三少”是一个整体概念,l? 合观点,不能孤立某一个原则。该原则是相对的Q不是绝对的?#8220;三多”原则肯定是错误的。试惻I若覆盖系l同L功能Q一百个实体Q共一千个属性) 的E-R图,肯定比二百个实体Q共二千个属性) 的E--R图,要好得多?/p> <p class="contentNew">提?#8220;三少”原则Q是叫读者学会利用数据库设计技术进行系l的数据集成。数据集成的步骤是将文gp? l集成ؓ应用数据库,应用数据库集成Z题数据库Q将主题数据库集成ؓ全局l合数据库。集成的E度高Q数据共享性就强Q信息孤岛现象就少Q整个企 业信息系l的全局E—R图中实体的个数、主键的个数、属性的个数׃少?/p> <p class="contentNew">提?#8220;三少”原则的目的,是防止读者利用打补丁技术,不断地对数据库进行增删改Q企业数据库变成了随意设计数据库表?#8220;垃圾?#8221;Q或数据库表?#8220;大杂?#8221;Q最后造成数据库中的基本表、代码表、中间表、时表杂ؕ无章Q不计其敎ͼD企事业单位的信息pȝ无法l护而瘫痪?/p> <p class="contentNew">“三多”原则M人都可以做到Q该原则?#8220;打补丁方?#8221;设计数据库的歪理学说?#8220;三少”原则是少而精的原则,它要求有较高的数据库设计技巧与艺术Q不是Q何h都能做到的,因ؓ该原则是杜绝?#8220;打补丁方?#8221;设计数据库的理论依据?/p> <li>提高数据库运行效率的办法</li> <p class="contentNew">在给定的pȝg和系lY件条件下Q提高数据库pȝ的运行效率的办法是:</p> <ul class="article"> <li>在数据库物理设计Ӟ降低范式Q增加冗余,用触发? 多用存储q程?/li> <li>当计非常复杂、而且记录条数非常巨大Ӟ例如一千万条)Q复杂计要先在数据库外面,以文件系l方式用C++语言计算处理完成之后Q最后才入库q加到表中去。这是电信计费系l设计的l验?/li> <li>发现某个表的记录太多Q例如超q一千万条,则要对该表进行水q_剌Ӏ水q_割的做法是,以该表主键PK的某个gؓ界线Q将该表的记录水q_割ؓ两个表。若发现某个表的字段太多Q例如超q八十个Q则垂直分割该表Q将原来的一个表分解Z个表?/li> <li>Ҏ据库理pȝDBMSq行pȝ优化Q即优化各种pȝ参数Q如~冲Z数?/li> <li>在用面向数据的SQL语言q行E序设计Ӟ量采取优化法?/li> </ul> <p class="contentNew">MQ要提高数据库的q行效率Q必M数据库系l优化、数据库设计U优化、程序实现优化Q这三个层次上同时下功夫?/p> </ol> <p class="contentNew">上述十四个技巧,是许多h在大量的数据库分析与设计实践中,逐步ȝ出来的。对于这些经验的q用Q读者不能生帮硬套,死记背Q而要消化理解Q实事求是,灉|掌握。ƈ逐步做到Q在应用中发展,在发展中应用?</p> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <img src ="http://www.aygfsteel.com/ashutc/aggbug/349855.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ashutc/" target="_blank">西瓜</a> 2011-05-09 17:13 <a href="http://www.aygfsteel.com/ashutc/archive/2011/05/09/349855.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hashmap的遍历方?/title><link>http://www.aygfsteel.com/ashutc/archive/2011/04/14/348299.html</link><dc:creator>西瓜</dc:creator><author>西瓜</author><pubDate>Thu, 14 Apr 2011 07:43:00 GMT</pubDate><guid>http://www.aygfsteel.com/ashutc/archive/2011/04/14/348299.html</guid><wfw:comment>http://www.aygfsteel.com/ashutc/comments/348299.html</wfw:comment><comments>http://www.aygfsteel.com/ashutc/archive/2011/04/14/348299.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ashutc/comments/commentRss/348299.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ashutc/services/trackbacks/348299.html</trackback:ping><description><![CDATA[<br /> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">package</span><span style="color: #000000; "> cn.yu.hashmap;<br /> <br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.util.HashMap;<br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.util.Iterator;<br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.util.Map;<br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.util.Map.Entry;<br /> <br /> </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> hashmap {<br />     </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> main(String[] args) {<br />         HashMap</span><span style="color: #000000; "><</span><span style="color: #000000; ">String, String</span><span style="color: #000000; ">></span><span style="color: #000000; "> map </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> HashMap</span><span style="color: #000000; "><</span><span style="color: #000000; ">String, String</span><span style="color: #000000; ">></span><span style="color: #000000; ">();<br />         map.put(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">1</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">aaa</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />         map.put(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">2</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">bbb</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />         map.put(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">3</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">ccc</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />         map.put(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">4</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">ddd</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />         map.put(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">5</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">eee</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />         map.put(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">6</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">fff</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />         map.put(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">7</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">ggg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />         map.put(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">8</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">hhh</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />         map.put(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">9</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">iii</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /> <br />         </span><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />          * 遍历hashmap<br />          </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />         hashmap1(map);<br />         line();<br />         </span><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />          * 用keySet遍历<br />          </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />         hashmap2(map);<br />         line();<br />         </span><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />          * 用entrySet遍历 速度?br />          </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />         hashmap3(map);<br />         line();<br />     }<br /> <br />     </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> hashmap1(HashMap</span><span style="color: #000000; "><</span><span style="color: #000000; ">String, String</span><span style="color: #000000; ">></span><span style="color: #000000; "> map) {<br />         </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (Map.Entry</span><span style="color: #000000; "><</span><span style="color: #000000; ">String, String</span><span style="color: #000000; ">></span><span style="color: #000000; "> entry : map.entrySet()) {<br />             System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Key:</span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; ">+</span><span style="color: #000000; "> entry.getKey() </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">   value:</span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; ">+</span><span style="color: #000000; "> entry.getValue().toString());<br />         }<br /> <br />     }<br /> <br />     </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> hashmap2(HashMap</span><span style="color: #000000; "><</span><span style="color: #000000; ">String, String</span><span style="color: #000000; ">></span><span style="color: #000000; "> map) {<br />         Iterator</span><span style="color: #000000; "><</span><span style="color: #000000; ">String</span><span style="color: #000000; ">></span><span style="color: #000000; "> it</span><span style="color: #000000; ">=</span><span style="color: #000000; ">map.keySet().iterator();</span><span style="color: #008000; ">//</span><span style="color: #008000; ">q是取得键对?nbsp;  </span><span style="color: #008000; "><br /> </span><span style="color: #000000; ">        </span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(it.hasNext())   {   <br />            System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">value: </span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">map.get(it.next()));   </span><span style="color: #008000; ">//</span><span style="color: #008000; ">获得键所对应的倹{?nbsp;  </span><span style="color: #008000; "><br /> </span><span style="color: #000000; ">        } <br />     }<br /> <br />     </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> hashmap3(HashMap</span><span style="color: #000000; "><</span><span style="color: #000000; ">String, String</span><span style="color: #000000; ">></span><span style="color: #000000; "> map) {<br />         Iterator</span><span style="color: #000000; "><</span><span style="color: #000000; ">Entry</span><span style="color: #000000; "><</span><span style="color: #000000; ">String, String</span><span style="color: #000000; ">>></span><span style="color: #000000; "> it </span><span style="color: #000000; ">=</span><span style="color: #000000; "> map.entrySet().iterator();  <br />         </span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(it.hasNext()){  <br />             Entry</span><span style="color: #000000; "><</span><span style="color: #000000; ">String, String</span><span style="color: #000000; ">></span><span style="color: #000000; ">  entry</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(Entry</span><span style="color: #000000; "><</span><span style="color: #000000; ">String, String</span><span style="color: #000000; ">></span><span style="color: #000000; ">)it.next();  <br />             System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">key:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">entry.getKey()</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">   value:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">entry.getValue());<br />             <br />         }  <br />     }<br />     </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> line(){<br />         System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">========================华丽的分割线===============================</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />     }<br /> }<br /> </span></div> <br /> <br />   Hashmap实际上是一个数l和链表的结合体Q利用数l来模拟一个个ӞcM于Bucket SortQ以快速存取不同hashCode的keyQ对于相同hashCode的不同keyQ再调用其equalsҎ从List中提取出和key所相对应的value<br /> <br /> <br /> <img src ="http://www.aygfsteel.com/ashutc/aggbug/348299.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ashutc/" target="_blank">西瓜</a> 2011-04-14 15:43 <a href="http://www.aygfsteel.com/ashutc/archive/2011/04/14/348299.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python模块学习 --- urllibhttp://www.aygfsteel.com/ashutc/archive/2011/03/21/346695.html西瓜西瓜Mon, 21 Mar 2011 10:11:00 GMThttp://www.aygfsteel.com/ashutc/archive/2011/03/21/346695.htmlhttp://www.aygfsteel.com/ashutc/comments/346695.htmlhttp://www.aygfsteel.com/ashutc/archive/2011/03/21/346695.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/346695.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/346695.htmlurllib模块提供的上层接口,使我们可以像d本地文g一栯取www和ftp上的数据。每当用这个模块的时候,老是会想起公品的客户端,同事用C++下蝲Web上的囄Q那U?#8220;痛苦”的表情。我以前译qlibcurl教程Q这是在C/C++环境下比较方便实用的|络操作库,相比?nbsp;libcurlQPython的urllib模块的用门槛则低多了。可能有些h又会用效率来批评PythonQ其实在操作|络Q或者在集群交互的时候, 语言的执行效率绝不是瓉。这U情况下Q一个比较好的方法是Q将python嵌入到C/C++中,让Python来完成一些不是核心的逻辑处理。又扯远了,废话说Q开始urllib之旅?/span>~~ Q前几天我用q个模块写了个蜘蛛,感兴的同学可以在以前的博客中找C码)
    先看一个例子,q个例子把Google首页的html抓取下来q显C在控制CQ?br /> view plaincopy to clipboardprint
?

   
1. # 别惊Ӟ整个E序实只用了两行代?nbsp; 
   
2import urllib  
   
3. print urllib.urlopen('http://www.google.com').read()  

# 别惊Ӟ整个E序实只用了两行代?br />
import urllib
print urllib.urlopen(
'http://www.google.com').read()

urllib.urlopen(url[, data[, proxies]]) :

    创徏一个表CEurl的类文g对象Q然后像本地文g一h作这个类文g对象来获取远E数据。参数url表示q程数据的\径,一般是|址Q参数data表示以post方式提交到url的数?玩过web的h应该知道提交数据的两U方式:post与get。如果你不清楚,也不必太在意Q一般情况下很少用到q个参数)Q参数proxies用于讄代理Q这里不详细讲怎么使用代理Q感兴趣的看客可以去阅Python手册urllib模块Q。urlopenq回 一个类文g对象Q他提供了如下方法:

    
*     read() , readline() , readlines() , fileno() , close() Q这些方法的使用方式与文件对象完全一?
    
*     info()Q返回一个httplib.HTTPMessage 对象Q表CE服务器q回的头信息Q?br />     *     getcode()Q返回Http状态码。如果是httphQ?00表示h成功完成;404表示|址未找刎ͼ
    
*     geturl()Q返回请求的urlQ?br />
    下面来扩充一下上面的例子Q看官可以运行一下这个例子,加深对urllib的印象:
view plaincopy to clipboardprint
?

   
1. google = urllib.urlopen('http://www.google.com')  
   
2. print 'http header:\n', google.info()  
   
3. print 'http status:', google.getcode()  
   
4. print 'url:', google.geturl()  
   
5for line in google: # 像在操作本地文?nbsp; 
   
6.     print line,  
   
7. google.close()  

google 
= urllib.urlopen('http://www.google.com')
print 
'http header:\n', google.info()
print 
'http status:', google.getcode()
print 
'url:', google.geturl()
for line in google: # 像在操作本地文?br />     print line,
google.close()

urllib.urlretrieve(url[, filename[, reporthook[, data]]])Q?br />
    urlretrieveҎ直接远E数据下载到本地。参数filename指定了保存到本地的\径(如果未指定该参数Qurllib会生成一个时文件来保存数据Q;参数reporthook是一个回调函敎ͼ当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。我们可以利用这个回调函 数来昄当前的下载进度,下面的例子会展示。参数data指post到服务器的数据。该Ҏq回一个包含两个元素的元组(filename, headers)Qfilename表示保存到本地的路径Qheader表示服务器的响应头。下面通过例子来演CZ下这个方法的使用Q这个例子将新浪首页的html抓取到本圎ͼ保存在D:\sina.html文g中,同时昄下蝲的进度?br /> view plaincopy to clipboardprint
?

   
1. def cbk(a, b, c):  
   
2.     '''''回调函数 
   3.     @a: 已经下蝲的数据块 
   
4.     @b: 数据块的大小 
   
5.     @c: q程文g的大?nbsp;
   
6.     '''  
   7.     per = 100.0 * a * b / c  
   
8.     if per > 100:  
   
9.         per = 100  
  
10.     print '%.2f%%' % per  
  
11.   
  
12. url = 'http://www.sina.com.cn'  
  
13. local = 'd:\\sina.html'  
  
14. urllib.urlretrieve(url, local, cbk)  

def cbk(a, b, c):
    
'''回调函数
    @a: 已经下蝲的数据块
    @b: 数据块的大小
    @c: q程文g的大?br />     
'''
    per = 100.0 * a * b / c
    
if per > 100:
        per 
= 100
    print 
'%.2f%%' % per

url 
= 'http://www.sina.com.cn'
local 
= 'd:\\sina.html'
urllib.urlretrieve(url, local, cbk)

    上面介绍的两个方法是urllib中最常用的方法,q些Ҏ在获取远E数据的时候,内部会用URLopener或?nbsp;FancyURLOpenercR作为urllib的用者,我们很少会用到这两个c,q里我不惛_讌Ӏ如果对urllib的实现感兴趣Q?nbsp;或者希望urllib支持更多的协议,可以研究q两个类。在Python手册中,urllib的作者还列出了这个模块的~陷和不I感兴的同学可以打开 Python手册了解一下?br />
    urllib中还提供了一些辅助方法,用于对urlq行~码、解码。url中是不能出现一些特D的W号的,有些W号有特D的用途。我们知道以get方式提交数据的时候,会在url中添加key
=valueq样的字W串Q所以在value中是不允许有'='Q因此要对其q行~码Q与此同时服务器接收到这些参数的时候,要进行解码,q原成原始的数据。这个时候,q些辅助Ҏ会很有用Q?br />
    
* urllib.quote(string[, safe])Q对字符串进行编码。参数safe指定了不需要编码的字符;
    
* urllib.unquote(string) Q对字符串进行解码;
    
* urllib.quote_plus(string [ , safe ] ) Q与urllib.quotecMQ但q个Ҏ?/span>'+'来替?/span>' 'Q而quote?/span>'%20'来代?/span>' '
    
* urllib.unquote_plus(string ) Q对字符串进行解码;
    
* urllib.urlencode(query[, doseq])Q将dict或者包含两个元素的元组列表转换成url参数。例?nbsp;字典{'name''dark-bull''age'200}被转换?/span>"name=dark-bull&age=200"
    
* urllib.pathname2url(path)Q将本地路径转换成url路径Q?br />     * urllib.url2pathname(path)Q将url路径转换成本地\径;

    用一个例子来体验一下这些方法吧
~~Q?br /> view plaincopy to clipboardprint?

   
1. data = 'name = ~a+3'  
   
2.   
   
3. data1 = urllib.quote(data)  
   
4. print data1 # result: name%20%3D%20%7Ea%2B3  
   
5. print urllib.unquote(data1) # result: name = ~a+3  
   
6.   
   
7. data2 = urllib.quote_plus(data)  
   
8. print data2 # result: name+%3D+%7Ea%2B3  
   
9. print urllib.unquote_plus(data2)    # result: name = ~a+3  
  
10.   
  
11. data3 = urllib.urlencode({ 'name''dark-bull''age'200 })  
  
12. print data3 # result: age=200&name=dark-bull  
  
13.   
  
14. data4 = urllib.pathname2url(r'd:\a\b\c\23.php')  
  
15. print data4 # result: ///D|/a/b/c/23.php  
  16. print urllib.url2pathname(data4)    # result: D:\a\b\c\23.php  

data 
= 'name = ~a+3'

data1 
= urllib.quote(data)
print data1 # result: name
%20%3D%20%7Ea%2B3
print urllib.unquote(data1) # result: name 
= ~a+3

data2 
= urllib.quote_plus(data)
print data2 # result: name
+%3D+%7Ea%2B3
print urllib.unquote_plus(data2)    # result: name 
= ~a+3

data3 
= urllib.urlencode({ 'name''dark-bull''age'200 })
print data3 # result: age
=200&name=dark-bull

data4 
= urllib.pathname2url(r'd:\a\b\c\23.php')
print data4 # result: 
///D|/a/b/c/23.php
print urllib.url2pathname(data4)    # result: D:\a\b\c\23.php

   















西瓜 2011-03-21 18:11 发表评论
]]>
apache 部分配置http://www.aygfsteel.com/ashutc/archive/2010/10/21/335780.html西瓜西瓜Thu, 21 Oct 2010 05:56:00 GMThttp://www.aygfsteel.com/ashutc/archive/2010/10/21/335780.html阅读全文

西瓜 2010-10-21 13:56 发表评论
]]>
apache与tomcat整合时参Cؕ码的解决http://www.aygfsteel.com/ashutc/archive/2010/09/06/331235.html西瓜西瓜Mon, 06 Sep 2010 10:33:00 GMThttp://www.aygfsteel.com/ashutc/archive/2010/09/06/331235.htmlhttp://www.aygfsteel.com/ashutc/comments/331235.htmlhttp://www.aygfsteel.com/ashutc/archive/2010/09/06/331235.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/331235.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/331235.html把Apache2.2与Tomcat6q行整合之后Q当提交带有中文参数的请求时Q经常出现奇怪的现象。在直接讉KTomcatӞ可以正常q回l果的请求,一旦经qApache的代理,出现问题?/p>

通过Debug发现QTomcat在经q和不经qApache代理的两U情况下Q得到的中文参数是不同的Q而后者是q?/p>

从网上查了一下资料,发现Apache在用AJP13模式代理到TomcatӞ也应该ؓTomcat的AJP13讑֮一些参数?/p>

具体说来Q应该在Tomcat的server.xml中设|ؓQ?


<Connector port="8085" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
               
<!-- 防止中文q -->
               useBodyEncodingForURI
="true" URIEncoding="UTF8" />
               
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"
                            
<!-- 防止中文q -->
                            useBodyEncodingForURI
="true" URIEncoding="UTF8" />






西瓜 2010-09-06 18:33 发表评论
]]>
MyEclipse启动和运行速度优化http://www.aygfsteel.com/ashutc/archive/2010/08/01/327682.html西瓜西瓜Sun, 01 Aug 2010 02:40:00 GMThttp://www.aygfsteel.com/ashutc/archive/2010/08/01/327682.htmlhttp://www.aygfsteel.com/ashutc/comments/327682.htmlhttp://www.aygfsteel.com/ashutc/archive/2010/08/01/327682.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/327682.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/327682.htmlMyEclipse优化如下Q?br /> 1、去除不需要加载的模块
Windows – Preferences - General - Startup and ShutdownQ这个时候在右侧显C出了Eclipse启动时加载的模块Q可以根据自q实际情况去除一些模块?/p>

x没用的启动项Q?/p>

Q?QWTP Q一个跟myeclipse差不多的东西Q主要差别是 WTP 是免费的Q如果用myeclipseQ这个可以取?/p>

Q?QMylynQ组队Q务管理工PcM?CVS Q以d为单位管理项目进度,没用到的可以取消

Q?QDerbyQ一U保存成 jar 形式的数据库Q我没用刎ͼ取消

Q?Q一大排?MyEclipse EASIE 打头的启动项Qmyeclipse 支持的服务器Q只选自q的,其他取消

2、取消MyEclipse在启动时自动验证目配置文g
默认情况下MyEclipse在启动的时候会自动验证每个目的配|文Ӟq是一个非常耗时的过E,可以在PreferencesH口依次选择 MyEclipse Enterprise Workbench - ValidationQ然后在右侧的Validator列表中只保留 Manual 就可以?Manual全部N,Bulid只留下W一??/p>

如果需要验证的时候只需要选中文gQ然后右键选择 MyEclipse - Run Validation可以了?/p>

3、去掉拼写检查(如果你觉的有用可以不去)
拼写查会l我们带来不的ȝQ我们的Ҏ命名都会是单词的~写Q他也会提示有错Q所以最好去掉,没有多大的用处:

windows–>perferences–>general–>editors->Text Editors->spelling

4、关闭自动更?/strong>
如果是myeclipse7.5Q?/p>

Q?Q关掉maven自动更新Q?/strong>

window-preferences-MyEclipse Enterprise Workbench-Maven4MyEclipse-Maven,

关闭所有Download和Update开头的选项Q共四项Q去掉前面的勾)

Q?Q关闭更新调度:window –> preferences –> General –> Startup and Shutdown –> Automatic Updates SchedulerQ去掉前面的勾)

Q?Qwindow –> preferences –>Myeclipse Dashboard,关闭Show Myeclipse Dashboard on startup

5、加大JVM的非堆内?/strong>
打开 myeclipse.ini

-Xmx384m

-XX:MaxPermSize=384m

-XX:ReservedCodeCacheSize=96m

可以修改-XmxQ?XX:MaxPermSizeQ?XX:ReservedCodeCacheSizeQ?/p>

这三项的D大,但ƈ不是大好Q曾l在相同的条件下做过试Q内?GBQ,-XmxQ?XX:MaxPermSize的gؓ384m时比512m时要快(视具体的计算定Q,

-XmxQ?XX:MaxPermSize的D为同样大且两者之和不能超Z的计机本n的内存大?/p>

6、window-preferences-MyEclipse Enterprise Workbench-Maven4MyEclipse-MavenQ将Maven JDK改ؓ电脑上安装的JDKQ即不用myeclipse提供的JDK
登记add按钮Q选择你的电脑上的JDK卛_Q注意:不是JREQ?/strong>

7、window-preferences-MyEclipse Enterprise Workbench-Matisse4Myeclipse/Swing,Design-time information(dt.jar) location 改用电脑安装的JDK的dt.jar
Q即不用myeclipse提供的dt.jarQ?/strong>



西瓜 2010-08-01 10:40 发表评论
]]>
pl/sql ~码修改 gbk和iso-8859-1http://www.aygfsteel.com/ashutc/archive/2010/07/08/325563.html西瓜西瓜Thu, 08 Jul 2010 07:43:00 GMThttp://www.aygfsteel.com/ashutc/archive/2010/07/08/325563.htmlhttp://www.aygfsteel.com/ashutc/comments/325563.htmlhttp://www.aygfsteel.com/ashutc/archive/2010/07/08/325563.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/325563.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/325563.html SOFTWARE/ORACLE/KEY_QRACLIENT10G_HOME1/NLS_LANG

iso8859-1 :  SIMPLIFIED CHINESE_CHINA.we8iso8859p1

gbk:   SIMPLIFIED CHINESE_CHINA.ZHS16GBK


西瓜 2010-07-08 15:43 发表评论
]]>
try中的return语句Q在finally前执行还是在finally后执?/title><link>http://www.aygfsteel.com/ashutc/archive/2010/01/16/309798.html</link><dc:creator>西瓜</dc:creator><author>西瓜</author><pubDate>Sat, 16 Jan 2010 14:09:00 GMT</pubDate><guid>http://www.aygfsteel.com/ashutc/archive/2010/01/16/309798.html</guid><wfw:comment>http://www.aygfsteel.com/ashutc/comments/309798.html</wfw:comment><comments>http://www.aygfsteel.com/ashutc/archive/2010/01/16/309798.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ashutc/comments/commentRss/309798.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ashutc/services/trackbacks/309798.html</trackback:ping><description><![CDATA[查询了很多解释,但网上都是{载别人的Q好像也没有ql节问题?br /> <br /> 代码如下Q?br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> test002 {<br /> </span><span style="color: #008080;"> 2</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> test() {<br /> </span><span style="color: #008080;"> 3</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">try</span><span style="color: #000000;"> {<br /> </span><span style="color: #008080;"> 4</span> <span style="color: #000000;">            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> fun1();<br /> </span><span style="color: #008080;"> 5</span> <span style="color: #000000;">        } </span><span style="color: #0000ff;">finally</span><span style="color: #000000;"> {<br /> </span><span style="color: #008080;"> 6</span> <span style="color: #000000;">            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> fun2();<br /> </span><span style="color: #008080;"> 7</span> <span style="color: #000000;">        }<br /> </span><span style="color: #008080;"> 8</span> <span style="color: #000000;">    }<br /> </span><span style="color: #008080;"> 9</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> fun1() {<br /> </span><span style="color: #008080;">10</span> <span style="color: #000000;">        System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">fun1被执行了</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">11</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #000000;">1</span><span style="color: #000000;">;<br /> </span><span style="color: #008080;">12</span> <span style="color: #000000;">    }<br /> </span><span style="color: #008080;">13</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> fun2() {<br /> </span><span style="color: #008080;">14</span> <span style="color: #000000;">        System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">funQ被执行?/span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">15</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #000000;">2</span><span style="color: #000000;">;<br /> </span><span style="color: #008080;">16</span> <span style="color: #000000;">    }<br /> </span><span style="color: #008080;">17</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args) {<br /> </span><span style="color: #008080;">18</span> <span style="color: #000000;">        System.out.println(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> test002().test());<br /> </span><span style="color: #008080;">19</span> <span style="color: #000000;">    }<br /> </span><span style="color: #008080;">20</span> <span style="color: #000000;">}<br /> </span></div> 执行l果Q?br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;">fun1被执行了<br /> funQ被执行?br /> </span><span style="color: #000000;">2</span><span style="color: #000000;"><br /> </span></div> 代码反映的情冉|return首先被执行,finally后被执行Qreturnq不是让l果马上q回Q而是先把l果攑ֈ函数中,然后必须{待finallyl果出来后在真正的返回,此时q回的结果就是finally当中的那个结?br /> <img src ="http://www.aygfsteel.com/ashutc/aggbug/309798.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ashutc/" target="_blank">西瓜</a> 2010-01-16 22:09 <a href="http://www.aygfsteel.com/ashutc/archive/2010/01/16/309798.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>完成Testcȝsort()Ҏ,Ҏla升序排序?/title><link>http://www.aygfsteel.com/ashutc/archive/2009/12/05/304834.html</link><dc:creator>西瓜</dc:creator><author>西瓜</author><pubDate>Fri, 04 Dec 2009 16:07:00 GMT</pubDate><guid>http://www.aygfsteel.com/ashutc/archive/2009/12/05/304834.html</guid><description><![CDATA[Q?Q完成Testcȝsort()Ҏ,Ҏla升序排序?br /> public class Test {<br />  public int[] sort(int[] a){<br />   //排序代码<br />   return a;<br />  }<br /> }<br /> Q?Q新Z个类ReflectionQReflection中不能有对Testcȝ引用Q,通过反射调用Testcȝsort()? 法,打印输出排序前和排序后的数组?br /> public class Reflection {<br />  private static int[] a = {3,2,8,11,20,5,6,18,7,12};<br /> //………………<br /> }<br /> <br /> <br /> public class test002 {<br /> <br />     public int[] sort(int[] a) {<br />         int b;<br />         for (int i = 0; i < a.length - 1; i++) {<br />             for (int j = i + 1; j < a.length; j++) {<br />                 if (a[i] > a[j]) {<br />                     b = a[i];<br />                     a[i] = a[j];<br />                     a[j] = b;// q个数不能变?br />                 }<br />             }<br />         }<br />         for (int i = 0; i < a.length; i++) {<br />             System.out.println(a[i]);<br />         }<br />         return a;<br />     }<br /> }<br /> public class test003 {<br /> <br />     /**<br />      * @param args<br />      */<br />     public static test002 t(String t){<br />         test002 test=null;<br />         try {<br />             test=(test002) Class.forName("cn.yu.test."+t).newInstance();<br />         } catch (InstantiationException e) {<br />             // TODO Auto-generated catch block<br />             e.printStackTrace();<br />         } catch (IllegalAccessException e) {<br />             // TODO Auto-generated catch block<br />             e.printStackTrace();<br />         } catch (ClassNotFoundException e) {<br />             // TODO Auto-generated catch block<br />             e.printStackTrace();<br />         }<br />         return test;<br />     }<br />     public static void main(String[] args) {<br /> <br />        test002 t02=t("test002");<br />        int[] t=new int[]{1,2,3,4,8,5};<br />        System.out.println(t02.sort(t));<br />        <br />        <br />     }<br /> <br /> }<br /> <img src ="http://www.aygfsteel.com/ashutc/aggbug/304834.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ashutc/" target="_blank">西瓜</a> 2009-12-05 00:07 <a href="http://www.aygfsteel.com/ashutc/archive/2009/12/05/304834.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用程序创Z个xml文gc:/test.xmlhttp://www.aygfsteel.com/ashutc/archive/2009/12/04/304827.html西瓜西瓜Fri, 04 Dec 2009 14:43:00 GMThttp://www.aygfsteel.com/ashutc/archive/2009/12/04/304827.htmlimport org.dom4j.*;
import org.dom4j.io.*;
import java.io.*;
import java.util.*;
public class test {
 
//写入
 public void cXML(){
  
try {
 Document document 
= DocumentHelper.createDocument();
 Element friendsElement 
= document.addElement("scores");
 Element friends1Element 
= friendsElement.addElement("JAVA");
 Element friends2Element 
= friendsElement.addElement("C");
 Element friends3Element 
= friendsElement.addElement("JS");
 friends1Element.setText(
"85");
 friends2Element.setText(
"80");
 friends3Element.setText(
"90");
 XMLWriter writer 
= new XMLWriter(new FileWriter(new File("c:/test.xml")));
 writer.write(document);
 writer.close();
 System.out.println(
"创徏XML成功");
}
catch (Exception err) {
 err.printStackTrace();
}
 }
 
 
//d
 public void read(){
  
try{
   File f 
= new File("c:/test.xml"); 
   SAXReader reader 
= new SAXReader(); 
   Document doc 
= reader.read(f); 
   Element root 
= doc.getRootElement(); 
      System.out.println(
"已找到XML");
   System.out.println(
"节点JAVA下的gؓQ?/span>"+root.elementText("JAVA"));
   System.out.println(
"节点C下的gؓQ?/span>"+root.elementText("C"));
   System.out.println(
"节点JS下的gؓQ?/span>"+root.elementText("JS"));
  }
  
catch(Exception err){
   err.printStackTrace();
  }
 }
 
public static void main(String[] args){
  test a
=new test();
  a.cXML();
//写入
  a.read();//d
 }
}
Q?Q用E序创徏一个xml文gc:/test.xml, 文g增加学生成W节点内容如下Q?br />

<scores>
<Java>85</Java>
<C++>80</C++>
<JS>90</JS>
</scores>



西瓜 2009-12-04 22:43 发表评论
]]>
XSL入门指导http://www.aygfsteel.com/ashutc/archive/2009/11/20/303001.html西瓜西瓜Thu, 19 Nov 2009 17:38:00 GMThttp://www.aygfsteel.com/ashutc/archive/2009/11/20/303001.htmlhttp://www.aygfsteel.com/ashutc/comments/303001.htmlhttp://www.aygfsteel.com/ashutc/archive/2009/11/20/303001.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/303001.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/303001.htmlXSL(EXtensible Stylesheet Language)它是指可扩展样式表语a?XSL之于 XML 像 CSS 之于 HTML。说白了是XML中的数据用指定的昄格式输出QXML不像HTML,它不包含M昄格式的信息. XSL 包含两个部分Q?br />

  • XSLT – 用于转换 XML 文档的语a. XSLT 是指 XSL 转换 (XSL Transformation)
  • XPath – 用于?XML 文档中导航的语言

XSL 语法

M XSL 文档的第一行实际上都是 XML 声明Q?br />

<?xml version="1.0" encoding="GB2312"?>

XSL ?XML Q遵循相同的语法规则
?XML 声明之后Q就?XSL 声明Q例如:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
......
</xsl:stylesheet>

XSL声明必须要有l束标签Q上面的声明中还包含命名I间?XSL 规范的版本?br />
什么是命名I间

? 指定一l可以在特定文档中用的元素名称和属性名U。命名空间的作用是避免命名冲H。由?XML 和其它与 XML 相关的语a都是用户定义的,所以可能出现命名冲H?lt;table>可能是指一个布局或是一个位。由于大多数应用E序同时处理多个 XML 文档Q因此经怼有不?XML 文档相؜合的情况Q而在q些文档中某个元素可能代表不同的含义。几个文档用相同的命名I间可以保元素在每个文档中代表相同含义。否则,应该用不? 的命名空间确保元素代表不同的含义?br />
命名I间由文档声明中?xmlns 属性指?实际上就是网站的地址Q例?http://www.w3.org/1999/XSL/TransformQ。其基本原理?URI h唯一性,因此相应的命名空间也是唯一的。文档声明中?URI 仅用作名U?br />
模板或规?/strong>
XSL 文档是由模板或规则构?每个模板定义应用于特?XML 节点的规则。XSL 模板如下所C:

<xsl:template match="/">......</xsl:template>

模板的作用是用来承蝲XML文档中的数据?像一个模P如果q个模具是方形的Q那么用q个模具做出来的模型也一定是方Ş的,而XML文档中的数据是用来真充模具的原料。实际上在模板中可以嵌套子模板,但最上层模板必须match设ؓ"/"?br /> happyold.xml

<?xml version="1.0" encoding="GB2312"?>
<׃?gt;
<会员>    
<姓名>cnbruce </姓名>
<q龄>10 </q龄>
<性别>?</性别>
<描述>他是一个糟p的家伙Q?lt;/描述>
</会员>
<会员>
<姓名>yufuzi</姓名>
<q龄>80 </q龄>
<性别>?</性别>
<描述>他是一个优U的男人!</描述>
</会员>
<会员>
<姓名>xiaojin</姓名>
<q龄>20 </q龄>
<性别>?</性别>
<描述>他h品有问题Q?lt;/描述>
</会员>
</׃?gt;


循环构?br />

<xsl:for-each select="...">......</xsl:for-each>

与典型的 for 循环作用相同?br /> old.xsl

<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<table border="1">
<tr>
<th>姓名</th>
<th>q龄</th>
<th>性别</th>
<th>描述</th>
</tr>
<xsl:for-each select="׃?会员">
<tr>
<!--表达式ؓ何不需要包括父节点或从文档根开始。这是因些元素的路径是根?<xsl:for-each> 构造中?XPath 表达式来计算?->
<td><xsl:value-of select="姓名"/></td>
<td><xsl:value-of select="q龄"/></td>
<td><xsl:value-of select="性别"/></td>
<td><xsl:value-of select="描述"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>

old.xsl与happyold.xml攑ֈ同一文g夹下Q然后在happyold.xmlW二行插队入

<?xml-stylesheet type="text/xsl" href="old.xsl"?>

然后在浏览器中预览一下显C结果?br />
使用循环构造,q可以根据条件过滤输出。假讑֏xCZ员中q龄大于30的会员?br /> old30.xsl

<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<table border="1">
<tr>
<th>姓名</th>
<th>q龄</th>
<th>性别</th>
<th>描述</th>
</tr>
<xsl:for-each select="׃?会员[q龄>30]">
<tr>
<td><xsl:value-of select="姓名"/></td>
<td><xsl:value-of select="q龄"/></td>
<td><xsl:value-of select="性别"/></td>
<td><xsl:value-of select="描述"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>

要定?XML 节点的条Ӟ可以使用下列Mq算W:

{于 (=)
不等?(!=)
于 (<)
于或等?(<=)
大于 (>)
大于或等?(>=)


使用<xsl:sort / >构造输出的结果按指定的节点进行排序,<xsl:sort /> 元素必须嵌套? <xsl:for-each > 元素中,以确保应用程序可以@环通过所有的目。sort 元素没有相应的结束标{?所以在其结֊?/"使其自结束?br /> old_sort.xsl

<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<table border="1">
<tr>
<th>姓名</th>
<th>q龄</th>
<th>性别</th>
<th>描述</th>
</tr>
<xsl:for-each select="׃?会员">
<xsl:sort select="q龄" order="descending"/>
<tr>
<td><xsl:value-of select="姓名"/></td>
<td><xsl:value-of select="q龄"/></td>
<td><xsl:value-of select="性别"/></td>
<td><xsl:value-of select="描述"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>

Lorder="descending"再看看显C结果?br />
条g构造:

<xsl:choose>
<xsl:when test="表达?>

</xsl:when>
<xsl:otherwise>

</xsl:otherwise>
</xsl:choose>

条g构造中可以有多个when,但只能有一个otherwise,用于处理未包括在初始试条g中的所有其它情?
old_choose.xsl
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<table border="1">
<tr>
<th>姓名</th>
<th>q龄</th>
<th>性别</th>
<th>描述</th>
</tr>
<xsl:for-each select="׃?会员">
<xsl:choose>
<xsl:when test="q龄 > 70">
<tr bgcolor="#66CCFF">
<td><xsl:value-of select="姓名"/></td>
<td><xsl:value-of select="q龄"/></td>
<td><xsl:value-of select="性别"/></td>
<td><xsl:value-of select="描述"/></td>
</tr>
</xsl:when>
<xsl:when test="q龄=10">
<tr bgcolor="blue">
<td><xsl:value-of select="姓名"/></td>
<td><xsl:value-of select="q龄"/></td>
<td><xsl:value-of select="性别"/></td>
<td><xsl:value-of select="描述"/></td>
</tr>
</xsl:when>
<xsl:otherwise>
<tr bgcolor="red">
<td><xsl:value-of select="姓名"/></td>
<td><xsl:value-of select="q龄"/></td>
<td><xsl:value-of select="性别"/></td>
<td><xsl:value-of select="描述"/></td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
注:以上有部分代码在firefox览器中需要加<html></html>否则昄异常
《本文来源于互联|?br />

西瓜 2009-11-20 01:38 发表评论
]]>
log4j.propertieshttp://www.aygfsteel.com/ashutc/archive/2009/10/11/297781.html西瓜西瓜Sun, 11 Oct 2009 07:35:00 GMThttp://www.aygfsteel.com/ashutc/archive/2009/10/11/297781.htmlhttp://www.aygfsteel.com/ashutc/comments/297781.htmlhttp://www.aygfsteel.com/ashutc/archive/2009/10/11/297781.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/297781.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/297781.htmllog4j.rootLogger=error, A2,ccfile,DATABASE


log4j.appender.A2=org.apache.log4j.ConsoleAppender
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d [%t] %-5p %c - %m%n


#for file
log4j.appender.ccfile.layout=org.apache.log4j.PatternLayout
log4j.appender.ccfile.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.ccfile=org.apache.log4j.RollingFileAppender
log4j.appender.ccfile.File=ccexample.log
log4j.appender.ccfile.MaxFileSize=10000KB


log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.DATABASE.BufferSize=10
log4j.appender.DATABASE.URL=jdbc:oracle:thin:@127.0.0.1:1521:orcl2
log4j.appender.DATABASE.driver=oracle.jdbc.driver.OracleDriver
log4j.appender.DATABASE.user=qp
log4j.appender.DATABASE.password=qp
log4j.appender.DATABASE.sql=INSERT INTO tbl_log  VALUES ('%m')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout


#log4j.category.cn.javass.crm=error
#log4j.category.cn.javass.wf=debug



西瓜 2009-10-11 15:35 发表评论
]]>
POJO和JavaBean的区别和联系http://www.aygfsteel.com/ashutc/archive/2009/05/20/271720.html西瓜西瓜Wed, 20 May 2009 07:01:00 GMThttp://www.aygfsteel.com/ashutc/archive/2009/05/20/271720.htmlhttp://www.aygfsteel.com/ashutc/comments/271720.htmlhttp://www.aygfsteel.com/ashutc/archive/2009/05/20/271720.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/271720.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/271720.html 很显然POJO也是JavaBean的一U。一般在web应用E序中徏立一个数据库的映对象时Q我们只能称它ؓPOJO?

西瓜 2009-05-20 15:01 发表评论
]]>
Aptana的字?/title><link>http://www.aygfsteel.com/ashutc/archive/2009/03/12/259319.html</link><dc:creator>西瓜</dc:creator><author>西瓜</author><pubDate>Thu, 12 Mar 2009 05:33:00 GMT</pubDate><guid>http://www.aygfsteel.com/ashutc/archive/2009/03/12/259319.html</guid><wfw:comment>http://www.aygfsteel.com/ashutc/comments/259319.html</wfw:comment><comments>http://www.aygfsteel.com/ashutc/archive/2009/03/12/259319.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ashutc/comments/commentRss/259319.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ashutc/services/trackbacks/259319.html</trackback:ping><description><![CDATA[<p>Aptana的字体选择不正的话,I格的宽度会H于字符的宽度,也就是说两个I格的宽度看h和一个字W的宽度差不多,q给代码~进带来了很大的ȝ?br /> <br /> 解决办法Q?br /> Window -> Preferences -> General -> Appearance -> Colors and Fonts -> Basic -> Text Font -> Change<br /> 选择 BitStream Vera Sans Mono Q其他几个BitStream的字体应该也可以)</p> <img src ="http://www.aygfsteel.com/ashutc/aggbug/259319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ashutc/" target="_blank">西瓜</a> 2009-03-12 13:33 <a href="http://www.aygfsteel.com/ashutc/archive/2009/03/12/259319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">Ľ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͷ</a>| <a href="http://" target="_blank">ڻ</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank">Ͱ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">°Ͷ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ͭϿ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">غ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">㶫ʡ</a>| <a href="http://" target="_blank">ͼ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">֬</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽȪ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>