??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲视频免费在线播放,亚洲ⅴ国产v天堂a无码二区,色偷偷亚洲男人天堂http://m.tkk7.com/llxiong/category/8430.html收藏?/description>zh-cnTue, 25 Dec 2007 16:49:29 GMTTue, 25 Dec 2007 16:49:29 GMT60调整Eclipse启动参数http://m.tkk7.com/llxiong/archive/2007/12/25/170252.htmlxnabxxnabxTue, 25 Dec 2007 02:55:00 GMThttp://m.tkk7.com/llxiong/archive/2007/12/25/170252.htmlhttp://m.tkk7.com/llxiong/comments/170252.htmlhttp://m.tkk7.com/llxiong/archive/2007/12/25/170252.html#Feedback0http://m.tkk7.com/llxiong/comments/commentRss/170252.htmlhttp://m.tkk7.com/llxiong/services/trackbacks/170252.html如果你觉得你的Eclipse在启动的时候很慢(比如说超q?0U钟Q,也许你要调整一下你的Eclipse启动参数了,以下是一些``脓?':

1. 查启动Eclipse的JVM讄?在Help\About Eclipse SDK\Configuration Detail里面Q你可以看到启动Eclipse的JVM?q个JVM和你在Eclipse中设|的Installed JDK是两回事情?如果启动Eclipse的JVMq是JDK 1.4的话Q那最好改为JDK 5Q因为JDK 5的性能?.4更好?/p>

C:\eclipse\eclipse.exe -vm "C:\Program Files\Java\jdk1.5.0_08\ bin\javaw.exe"

2. 查Eclipse所使用的heap的大?在C:\eclipse目录下有一个配|文件eclipse.iniQ其中配|了Eclipse启动的默认heap大小

-vmargs
-Xms40M
-Xmx256M

所以你可以把默认值改?

-vmargs
-Xms256M
-Xmx512M

当然Q也可以q样做,把堆的大改?56 - 512?/p>

C:\eclipse\eclipse.exe -vm "C:\Program Files\Java\jdk1.5.0_08\ bin\javaw.exe" -vmargs -Xms256M -Xmx512M

3. 其他的启动参数?如果你有一个双核的CPUQ也许可以尝试这个参?

-XX:+UseParallelGC

让GC可以更快的执行。(只是JDK 5里对GC新增加的参数Q?/p>

xnabx 2007-12-25 10:55 发表评论
]]>
转:Java同步机制谈――synchronized对代码作何媄响?http://m.tkk7.com/llxiong/archive/2007/10/11/152027.htmlxnabxxnabxThu, 11 Oct 2007 06:19:00 GMThttp://m.tkk7.com/llxiong/archive/2007/10/11/152027.htmlhttp://m.tkk7.com/llxiong/comments/152027.htmlhttp://m.tkk7.com/llxiong/archive/2007/10/11/152027.html#Feedback0http://m.tkk7.com/llxiong/comments/commentRss/152027.htmlhttp://m.tkk7.com/llxiong/services/trackbacks/152027.html 

Java对多U程的支持与同步机制深受大家的喜爱,g看v来用了synchronized关键字就可以L地解军_U程׃n数据同步问题。到底如何?――还得对synchronized关键字的作用q行深入了解才可定论?/span>

ȝ说来Q?/span>synchronized关键字可以作为函数的修饰W,也可作ؓ函数内的语句Q也是qx说的同步Ҏ和同步语句块。如果再l的分类Q?/span>synchronized可作用于instance变量?/span>object referenceQ对象引用)?/span>static函数?/span>class literals(cdU字面常?/span>)w上?/span>

在进一步阐qC前,我们需要明几点:

AQ无?/span>synchronized关键字加在方法上q是对象上,它取得的锁都是对象,而不是把一D代码或函数当作锁――而且同步Ҏ很可能还会被其他U程的对象访问?/span>

BQ每个对象只有一个锁Q?/span>lockQ与之相兌?/span>

CQ实现同步是要很大的pȝ开销作ؓ代h的,甚至可能造成死锁Q所以尽量避免无谓的同步控制?/span>

接着来讨?/span>synchronized用到不同地方对代码生的影响Q?/span>

假设P1?/span>P2是同一个类的不同对象,q个cM定义了以下几U情늚同步块或同步ҎQ?/span>P1?/span>P2都可以调用它们?/span>

1Q?/font> ?/span>synchronized当作函数修饰W时Q示例代码如下:

Public synchronized void methodAAA()

{

//….

}

q也是同步ҎQ那q时synchronized锁定的是哪个对象呢?它锁定的是调用这个同步方法对象。也是_当一个对?/span>P1在不同的U程中执行这个同步方法时Q它们之间会形成互斥Q达到同步的效果。但是这个对象所属的Class所产生的另一对象P2却可以Q意调用这个被加了synchronized关键字的Ҏ?/span>

上边的示例代码等同于如下代码Q?/font>

public void methodAAA()

{

synchronized (this)      // (1)

{

       //…..

}

}

 (1)处的this指的是什么呢Q它指的是调用q个Ҏ的对象,?/span>P1。可见同步方法实质是?/span>synchronized作用?/span>object reference。――那个拿CP1对象锁的U程Q才可以调用P1的同步方法,而对P2而言Q?/span>P1q个锁与它毫不相qԌE序也可能在q种情Ş下摆脱同步机制的控制Q造成数据混ؕQ(

2Q同步块Q示例代码如下:

           public void method3(SomeObject so)

              {

                     synchronized(so)

{

       //…..

}

}

q时Q锁是soq个对象Q谁拿到q个锁谁可以运行它所控制的那D代码。当有一个明的对象作ؓ锁时Q就可以q样写程序,但当没有明确的对象作为锁Q只是想让一D代码同步时Q可以创Z个特D的instance变量Q它得是一个对象)来充当锁Q?/span>

class Foo implements Runnable

{

       private byte[] lock = new byte[0]; // Ҏ?/span>instance变量

    Public void methodA()

{

       synchronized(lock) { //… }

}

//…..

}

注:雉度的byte数组对象创徏h比M对象都经――查看编译后的字节码Q生成零长度?/span>byte[]对象只需3条操作码Q?/span>Object lock = new Object()则需?/span>7行操作码?/span>

3Q将synchronized作用?/span>static 函数Q示例代码如下:

      Class Foo

{

public synchronized static void methodAAA()   // 同步?/span>static 函数

{

//….

}

public void methodBBB()

{

       synchronized(Foo.class)   // class literal(cdU字面常?/span>)

}

       }

   代码中的methodBBB()Ҏ是把class literal作ؓ锁的情况Q它和同步的static函数产生的效果是一LQ取得的锁很特别Q是当前调用q个Ҏ的对象所属的c(ClassQ而不再是p?/span>Class产生的某个具体对象了Q?/span>

记得在?/span>Effective Java》一书中看到q将 Foo.class?/span> P1.getClass()用于作同步锁q不一P不能?/span>P1.getClass()来达到锁q个Class的目的?/span>P1指的是由FoocM生的对象?/span>

可以推断Q如果一个类中定义了一?/span>synchronized?/span>static函数AQ也定义了一?/span>synchronized ?/span>instance函数BQ那么这个类的同一对象Obj在多U程中分别访?/span>A?/span>B两个ҎӞ不会构成同步Q因为它们的锁都不一栗?/span>AҎ的锁?/span>Objq个对象Q?/span>B的锁?/span>Obj所属的那个Class?/span>

结如下Q?/font>

搞清?/span>synchronized锁定的是哪个对象Q就能帮助我们设计更安全的多U程E序?/span>

 

q有一些技巧可以让我们对共享资源的同步讉K更加安全Q?/font>

1Q?/font> 定义private ?/span>instance变量+它的 getҎQ而不要定?/span>public/protected?/span>instance变量。如果将变量定义?/span>publicQ对象在外界可以l过同步Ҏ的控制而直接取得它Qƈ改动它。这也是JavaBean的标准实现方式之一?/span>

2Q?/font> 如果instance变量是一个对象,如数l或ArrayList什么的Q那上述Ҏ仍然不安全,因ؓ当外界对象通过getҎ拿到q个instance对象的引用后Q又其指向另一个对象,那么q个private变量也就变了Q岂不是很危险?/span>q个时候就需要将getҎ也加?/span>synchronized同步Qƈ且,只返回这?/span>private对象?/span>clone()――这P调用端得到的是对象副本的引用了?/span>




xnabx 2007-10-11 14:19 发表评论
]]>
转:DWR实践Ajaxhttp://m.tkk7.com/llxiong/archive/2007/07/29/133082.htmlxnabxxnabxSun, 29 Jul 2007 01:17:00 GMThttp://m.tkk7.com/llxiong/archive/2007/07/29/133082.htmlhttp://m.tkk7.com/llxiong/comments/133082.htmlhttp://m.tkk7.com/llxiong/archive/2007/07/29/133082.html#Feedback0http://m.tkk7.com/llxiong/comments/commentRss/133082.htmlhttp://m.tkk7.com/llxiong/services/trackbacks/133082.html阅读全文

xnabx 2007-07-29 09:17 发表评论
]]>
对象与实例区?/title><link>http://m.tkk7.com/llxiong/archive/2007/07/05/128231.html</link><dc:creator>xnabx</dc:creator><author>xnabx</author><pubDate>Thu, 05 Jul 2007 00:47:00 GMT</pubDate><guid>http://m.tkk7.com/llxiong/archive/2007/07/05/128231.html</guid><wfw:comment>http://m.tkk7.com/llxiong/comments/128231.html</wfw:comment><comments>http://m.tkk7.com/llxiong/archive/2007/07/05/128231.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/llxiong/comments/commentRss/128231.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/llxiong/services/trackbacks/128231.html</trackback:ping><description><![CDATA[<br><br>c?->对象-->实例<br><br>人类是类<br>某个人是对象<br>你是实例<br>实例本n也是对象?br><br>表现出来是这L<br>String c?br>String str   str是对?br>String str = "abc";  "abc"是实例,也是对象.<br>q样也能解释instance of objectq种说法  str的实例是"abc" <img src ="http://m.tkk7.com/llxiong/aggbug/128231.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/llxiong/" target="_blank">xnabx</a> 2007-07-05 08:47 <a href="http://m.tkk7.com/llxiong/archive/2007/07/05/128231.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于ResultSet的关闭问?/title><link>http://m.tkk7.com/llxiong/archive/2006/03/23/37098.html</link><dc:creator>xnabx</dc:creator><author>xnabx</author><pubDate>Thu, 23 Mar 2006 14:27:00 GMT</pubDate><guid>http://m.tkk7.com/llxiong/archive/2006/03/23/37098.html</guid><wfw:comment>http://m.tkk7.com/llxiong/comments/37098.html</wfw:comment><comments>http://m.tkk7.com/llxiong/archive/2006/03/23/37098.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/llxiong/comments/commentRss/37098.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/llxiong/services/trackbacks/37098.html</trackback:ping><description><![CDATA[ <p>在Connection上调用closeҎ会关闭Statement和ResultSet吗?</p> <p>U联的关闭这听v来好像很有道理,而且在很多地方这样做也是正确的,通常q样?br />Connection con = getConnection();//getConnection is your method<br />PreparedStatement ps = con.prepareStatement(sql);<br />ResultSet rs = ps.executeQuery();<br />…?br />///rs.close();<br />///ps.close();<br />con.close();  // NO!<br />q样做的问题在于Connection是个接口Q它的close实现可能是多U多L。在普通情况下Q你?DriverManager.getConnection()得到一个Connection实例Q调用它的closeҎ会关闭Statement?ResultSet。但是在很多时候,你需要用数据库q接池,在连接池中的得到的Connection上调用closeҎ的时候,Connection可能q没有被释放Q而是回到了连接池中。它以后可能被其它代码取出来用。如果没有释放Statement和ResultSetQ那么在Connection上没有关闭的Statement和ResultSet可能会越来越多,那么…?br />相反Q我看到q这L说法Q有人把Connection关闭了,却l用ResultSetQ认h可以的,引发了激烈的讨论Q到底是怎么回事׃用我多说了吧?/p> <p>所以我们必d心的释放数据库资源Q下面的代码片断展示了这个过E?/p> <p>Connection con = null;<br />PreparedStatement ps = null;<br />ResultSet rs = null;</p> <p>try {<br />    con = getConnection();//getConnection is your method<br />    ps = con.prepareStatement(sql);<br />    rs = ps.executeQuery();<br />    ///...........<br />}<br />catch (SQLException ex) {<br />    ///错误处理<br />}<br />finally{<br />    try {<br />        if(ps!=null)<br />            ps.close();<br />    }<br />    catch (SQLException ex) {<br />        ///错误处理<br />    }<br />    try{<br />        if(con!=null)<br />            con.close();<br />    }<br />    catch (SQLException ex) {<br />        ///错误处理<br />    }<br />}</p> <p> </p> <img src ="http://m.tkk7.com/llxiong/aggbug/37098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/llxiong/" target="_blank">xnabx</a> 2006-03-23 22:27 <a href="http://m.tkk7.com/llxiong/archive/2006/03/23/37098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>q代模式Iterator http://m.tkk7.com/llxiong/archive/2006/03/22/36931.htmlxnabxxnabxWed, 22 Mar 2006 14:35:00 GMThttp://m.tkk7.com/llxiong/archive/2006/03/22/36931.htmlhttp://m.tkk7.com/llxiong/comments/36931.htmlhttp://m.tkk7.com/llxiong/archive/2006/03/22/36931.html#Feedback0http://m.tkk7.com/llxiong/comments/commentRss/36931.htmlhttp://m.tkk7.com/llxiong/services/trackbacks/36931.html问题Q?/p>

在ArrayList 应用中有q样的代码:

ArrayList a=new ArrayList();

a.add(...);

Iterator i=a.iterator();

理解QIterator i=a.iterator();

Iterator 是一个接口,在上面a.iterator()Ҏ的作用是q回一个接?br />hasmoreQ)QnextQ)是怎么被实现的Q?br />
处理Q?br />q代模式
ArrayList内部有一个实CIterator 接口的类Qa.iterator是q回它内部类的一个实例,卌回一个实C的iterator接口的类?br />
接口是一个类型,相当于一个父cdQsupertypeQ,可以用一个接口引用一个实C此接口的cȝ实例。这样只能用接口提供的方法来讉K此对象,可以限制讉KQ隐藏具体实现?br />



xnabx 2006-03-22 22:35 发表评论
]]>
DecimalFormathttp://m.tkk7.com/llxiong/archive/2006/03/22/36866.htmlxnabxxnabxWed, 22 Mar 2006 07:53:00 GMThttp://m.tkk7.com/llxiong/archive/2006/03/22/36866.htmlhttp://m.tkk7.com/llxiong/comments/36866.htmlhttp://m.tkk7.com/llxiong/archive/2006/03/22/36866.html#Feedback1http://m.tkk7.com/llxiong/comments/commentRss/36866.htmlhttp://m.tkk7.com/llxiong/services/trackbacks/36866.html  有int型数字如下,123Q?234Q?2345Q?23456Q?234567Q?2345678Q?23456789
  求一个方法,输出123 1,234 12,345 123,456 1,234,567 12,345,678 123,456,789

  处理Q?br />  public void testPrint(int num) {
    DecimalFormat format = new DecimalFormat("#,###");
    System.out.println(format.format(num));
  }


 问题二?br />doublecd如何正确的{换ؓ字符串类?br />
处理Q?br /> double d = 0.001;
    DecimalFormat df1 = new DecimalFormat("#.####");
    String result = df1.format(d);
    System.out.println(result);

xnabx 2006-03-22 15:53 发表评论
]]>
Singleton模式http://m.tkk7.com/llxiong/archive/2006/03/22/36852.htmlxnabxxnabxWed, 22 Mar 2006 06:19:00 GMThttp://m.tkk7.com/llxiong/archive/2006/03/22/36852.htmlhttp://m.tkk7.com/llxiong/comments/36852.htmlhttp://m.tkk7.com/llxiong/archive/2006/03/22/36852.html#Feedback0http://m.tkk7.com/llxiong/comments/commentRss/36852.htmlhttp://m.tkk7.com/llxiong/services/trackbacks/36852.htmlSingleton模式主要作用是保证在Java应用E序中,一个类只有一个实例存在。解释下面的代码是怎么保证只有一个实例的Q?/p>

public class Singleton {
  private Singleton(){}
  private static Singleton instance = new Singleton();
  public static Singleton getInstance() {
  return instance;
  }
  }

处理Q?br />

因ؓ构造函数是U有的,用户不能自己实例对象 private Singleton(){}
而且指向q个唯一的对象的引用也是U有Q只能通过getInstanceҎq回对象的引?br />getInstanceҎ正实C保证唯一对象的功?/p>

xnabx 2006-03-22 14:19 发表评论
]]>
转:java的异常处?/title><link>http://m.tkk7.com/llxiong/archive/2006/03/19/36113.html</link><dc:creator>xnabx</dc:creator><author>xnabx</author><pubDate>Sun, 19 Mar 2006 14:56:00 GMT</pubDate><guid>http://m.tkk7.com/llxiong/archive/2006/03/19/36113.html</guid><wfw:comment>http://m.tkk7.com/llxiong/comments/36113.html</wfw:comment><comments>http://m.tkk7.com/llxiong/archive/2006/03/19/36113.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/llxiong/comments/commentRss/36113.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/llxiong/services/trackbacks/36113.html</trackback:ping><description><![CDATA[ <table bordercolor="#cbe1ef" cellspacing="0" cellpadding="4" width="98%" align="center" border="0"> <tbody> <tr> <td> <span id="vrlhtdv" class="zhengwen">5.1.1·介绍 <br /><br />什么是异常Q在Java~程语言中,异常cd义程序中可能遇到的轻?<br />的错误条件。可以写代码来处理异常ƈl箋E序执行Q而不是让E序 <br />中断。在E序执行中,M中断正常E序程的异常条件就是错误或 <br />]异常。例如,发生下列情况Ӟ会出现异常: <br />- x开的文件不存在 <br />- |络q接中断 <br />- 受控操作数超出预定范?<br />- 非常感兴地正在装蝲的类文g丢失 <br /><br />在Java~程语言中,错误cd义被认ؓ是不能恢复的严重错误条g。在 <br />大多数情况下Q当遇到q样的错误时Q徏议让E序中断。Java~程语言 <br />实现C++异常来帮助徏立弹性代码。在E序中发生错误时Q发现错误的 <br />Ҏ能抛Z个异常到其调用程序,发出已经发生问题的信受然后, <br />调用Ҏ捕获抛出的异常,在可能时Q再恢复回来。这个方案给E序?<br />一个写处理E序的选择Q来处理异常。通过览APIQ可以决定方法抛?<br />的是什么样的异常?<br /><br />5.1.2·实例 <br /><br />考虑一下HelloWorld.javaE序版本的简单扩展,它通过信息来@环: <br />1. public class HelloWorld { <br />2. public static void main (String args[]) { <br />3. int i = 0; <br />4. <br />5. String greetings [] = { <br />6. "Hello world!", <br />7. "No, I mean it!", <br />8. "HELLO WORLD!!" <br />9. }; <br />10. <br />11. while (i < 4) { <br />12. System.out.println (greetings[i]); <br />13. i++; <br />14. } <br />15. } <br />16. } <br /><br />正常情况下,当异常被抛出Ӟ在其循环被执行四ơ之后,E序l止Qƈ带有 <br />错误信息Q就象前面所C的E序那样?<br />1. c:\student\> java HelloWorld <br />2. Hello world! <br />3. No, I mean it! <br />4. HELLO WORLD!! <br />5. java.lang.ArrayIndexOutOfBoundsException: 3 <br />6. at HelloWorld.main(HelloWorld.java:12) <br /><br />异常处理允许E序捕获异常Q处理它们,然后l箋E序执行。它是分层把养I <br />因此Q错误情况不会介入到E序的正常流E中。特D情况发生时Q在与正?<br />执行的代码分ȝ代码块中被处理。这׃生了更易识别和管理的代码?<br /><br />5.2·异常处理 <br /><br />Java~程语言提供了一个来考虑哪个异常被抛Z及如何来恢复它的机制?<br /><br />·try和catch语句 <br /><br />要处理特D的异常Q将能够抛出异常的代码放入try块中Q然后创建相应的 <br />catch块的列表Q每个可以被抛出异常都有一个。如果生成的异常与catch <br />中提到的相匹配,那么catch条g的块语句p执行。在try块之后,可能 <br />有许多catch块,每一个都处理不同的异常?<br />1. try { <br />2. // code that might throw a particular exception <br />3. } catch (MyExceptionType e) { <br />4. // code to execute if a MyExceptionType exception is thrown <br />5. } catch (Exception e) { <br />6. // code to execute if a general Exception exception is thrown <br />7. } <br /><br />5.2.1·调用栈机?<br /><br />如果Ҏ中的一个语句抛Z个没有在相应的try/catch块中处理的异常, <br />那么q个异常p抛出到调用方法中。如果异怹没有在调用方法中被处理, <br />它就被抛出到该方法的调用E序。这个过E要一直gl到异常被处理?<br />如果异常到这时还没被处理Q它便回到main()Q而且Q即使main()不处理它Q?<br />那么Q该异常异常地中断E序。考虑q样一U情况,在该情况中main() <br />Ҏ调用另一个方法(比如Qfirst()Q,然后它调用另一?<br />Q比如,second()Q。如果在second()中发生异常,那么必须做一个检?<br />来看看该异常是否有一个catchQ如果没有,那么对调用栈Qfirst()Q中?<br />下一个方法进行检查,然后查下一个(main()Q。如果这个异常在?<br />调用栈上没有被最后一个方法处理,那么׃发生一个运行时错误Q?<br />E序l止执行?<br /><br />5.2.2·finally语句 <br /><br />finally语句定义一个L执行的代码块Q而不考虑异常是否被捕莗?<br />下述h代码来自Frank Yellin弗兰克叶林的白皮书《Java中的低安全》: <br />1. try { <br />2. startFaucet(); <br />3. waterLawn(); <br />4. } <br />5. finally { <br />6. stopFaucet(); <br />7. } <br /><br />在前面的例子中,即异常在打开开xl草地浇水时发生Q开关也能被x?<br />try 后面的括号中的代码被U做保护码。如果终止程序的System.exit() <br />Ҏ在保护码内被执行Q那么,q是finally语句不被执行的唯一情况?<br />q就暗示Q控制流E能偏离正常执行序Q比如,如果一个return语句 <br />被嵌入try块内的代码中Q那么,finally块中的代码应在return前执行?<br /><br />5.2.3·重访前例 <br /><br />下面的例子是W?69main()Ҏ的重写。本E序以前的版本中产生?<br />异常被捕P数组索引重新讑֮Q下述E序l箋q行?<br />1. public static void main (String args[]) { <br />2. int i = 0; <br />3. String greetings [] = { <br />4. "Hello world!", <br />5. "No, I mean it!", <br />6. "HELLO WORLD!!" <br />7. }; <br />8. while (i < 4) { <br />9. try { <br />10. System.out.println (greetings[i]); <br />11. } catch (ArrayIndexOutOfBoundsException e){ <br />12. System.out.println( "Re-setting Index Value"); <br />13. i = -1; <br />14. } finally { <br />15. System.out.println("This is always printed"); <br />16. } <br />17. i++; <br />18. } // end while() <br />19. } // end main() <br /><br />当@环被执行Ӟ下述在屏q上出现的信息将改变?<br /><br />1. Hello world! <br />2. This is always printed <br />3. No, I mean it! <br />4. This is always printed <br />5. HELLO WORLD!! <br />6. This is always printed <br />7. Re-setting Index Value <br />8. This is always printed <br /><br />5.3·异常分类 <br /><br />在Java~程语言中,异常有三U分cRJava.lang.Throwablecd当所?<br />对象的父c,可以使用异常处理机制这些对象抛出ƈ捕获。在Throwable <br />cM定义Ҏ来检索与异常相关的错误信息,q打印显C异常发生的?<br />跟踪信息。它有Error和Exception两个基本子类. <br />ThrowablecM能用,而用子cd怸的一个来描述MҎ异常?<br />每个异常的目的描q如下: <br />- Error表示恢复不是不可能但很困隄情况下的一U严重问题。比如说 <br />内存溢出。不可能指望E序能处理这L情况?<br />- RuntimeException表示一U设计或实现问题。也是_它表C如?<br />E序q行正常Q从不会发生的情c比如,如果数组索引扩展不超?<br />数组界限Q那么,ArrayIndexOutOfBoundsException异常从不会抛出?<br />比如Q这也适用于取消引用一个空值对象变量。因Z个正设计和 <br />实现的程序从不出现这U异常,通常对它不做处理。这会导致一?<br />q行时信息,应确保能采取措施更正问题Q而不是将它藏到谁也不 <br />注意的地斏V?<br />- 其它异常表示一U运行时的困难,它通常q境效果引P可以q行 <br />处理。例子包括文件未扑ֈ或无效URL异常Q用h了一个错误的URLQ, <br />如果用户误打了什么东西,两者都Ҏ出现。这两者都可能因ؓ用户 <br />错误而出玎ͼq就鼓励E序员去处理它们?<br /><br />5.4·共同异常 <br /><br />Java~程语言提供几种预定义的异常。下面是可能遇到的更具共同性的 <br />异常中的几种Q?<br /><br />- ArithmeticException—整数被0除,q算得出的结果?<br />- int I =12 / 0Q?<br />- NullPointerException—当对象没被实例化时Q访问对象的属性或 <br />Ҏ的尝试: <br />- Date d= null; <br />- System.out.println(d.toString()); <br />- NegativeArraySizeException—创建带负维数大的数组的尝试?<br />- ArrayIndexoutofBoundsException—访问超q数l大范围的一个元 <br />素的试?<br />- SecurityException—典型地被抛出到览器中QSecurityManagercd <br />抛出applets的一个异常,该异怼囑ց下述工作Q除非明昑֜得到允许Q: <br />- 讉K一个本地文?<br />- 打开L的一个socketQ这个主Z服务于applet的主Z是同一个?<br />- 在运行时环境中执行另一个程?<br /><br />5.5·处理或声明规?<br /><br />Z写出健壮的代码,Java~程语言要求Q当一个方法在栈(卻I它已l被 <br />调用Q上发生ExceptionQ它与Error或RuntimeException不同Q时Q那么, <br />该方法必d定如果出现问题该采取什么措施。程序员可以做满要求 <br />的两件事Q?<br /><br />W一Q通过Try{}catchQ){}块纳入其代码中,在这里捕L?<br />命名为属于某个超cȝ异常Qƈ调用Ҏ处理它。即使catch块是I的Q?<br />q也是处理情况?<br />W二Q让被调用的Ҏ表示它将不处理异常,而且该异常将被抛回到它所 <br />遇到的调用方法中。它是按如下所C通过用throws子句标记的该调用Ҏ <br />的声明来实现的: public void troublesome() throws IOException <br />关键字throws之后是所有异常的列表Q方法可以抛回到它的调用E序中?<br />管q里只显CZ一个异常,如果有成倍的可能的异常可以通过该方?<br />被抛出,那么Q可以用逗号分开的列表?<br /><br />是选择处理q是选择声明一个异常取决于是否l你自己或你的调用程序一?<br />更合适的候选的办法来处理异常。注—由于异常类象其它类一栯l编?<br />层次中,而且׃无论何时惌使用类都必M用子c, 因此Q可?<br />捕获异常“组”ƈ以相同的捕获代码来处理它们。例如,管 <br />IOExceptionsQEOFException,FileNotFoundException{等Q?<br />有几U不同的cdQ通过俘获IOExceptionQ也可以捕获 <br />IOExceptionM子类的实例?<br /><br />5.6·创徏自己的异?<br /><br />5.6.1·介绍 <br /><br />用户定义异常是通过扩展ExceptioncL创徏的。这U异常类可以包含 <br />一个“普通”类所包含的Q何东ѝ下面就是一个用户定义异常类例子Q?<br />它包含一个构造函数、几个变量以及方法: <br /><br />1. public class ServerTimedOutException extends Exception { <br />2. private String reason; <br />3. private int port; <br />4. public ServerTimedOutException (String reason,int port){ <br />5. this.reason = reason; <br />6. this.port = port; <br />7. } <br />8. public String getReason() { <br />9. return reason; <br />10. } <br />11. public int getPort() { <br />12. return port; <br />13. } <br />14. } <br /><br />使用语句来抛出已l创建的异常Q?<br />throw new ServerTimedOutException <br />("Could not connect", 80); <br /><br />5.6.2·实例 <br /><br />考虑一个客h务器E序。在客户代码中,要与服务器连接,q希?<br />服务器在5U钟内响应。如果服务器没有响应Q那么,代码如下所q?<br />抛出一个异常(如一个用户定义的ServerTimedOutExceptionQ?<br /><br />1. public void connectMe(String serverName) throws <br />ServerTimedOutException { <br />2. int success; <br />3. int portToConnect = 80; <br />4. success = open(serverName, portToConnect); <br />5. if (success == -1) { <br />6. throw new ServerTimedOutException( <br />7. "Could not connect", 80); <br />8. } <br />9. } <br /><br />要捕获异常,使用try语句Q?<br />1. public void findServer() { <br />2. . . . <br />3. try { <br />4. connectMe(defaultServer); <br />5. } catch(ServerTimedOutException e) { <br />6. System.out.println("Server timed out, trying alternate"); <br />7. try { <br />8. connectMe(alternateServer); <br />9. } catch (ServerTimedOutException e1) { <br />10. System.out.println("No server currently available"); <br />11. } <br />12. } <br />13. .. . <br />注—try和catch块可以如前例所q那栯嵌套?<br /><br />也可能部分地处理一个异常然后也它抛出。如Q?<br />try { <br />..... <br />..... <br />} catch (ServerTimedOutException e) { <br />System.out.println("Error caught "); <br />throw e; <br />} </span> </td> </tr> </tbody> </table> <img src ="http://m.tkk7.com/llxiong/aggbug/36113.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/llxiong/" target="_blank">xnabx</a> 2006-03-19 22:56 <a href="http://m.tkk7.com/llxiong/archive/2006/03/19/36113.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>抽象cM接口http://m.tkk7.com/llxiong/archive/2006/03/19/36071.htmlxnabxxnabxSun, 19 Mar 2006 07:41:00 GMThttp://m.tkk7.com/llxiong/archive/2006/03/19/36071.htmlhttp://m.tkk7.com/llxiong/comments/36071.htmlhttp://m.tkk7.com/llxiong/archive/2006/03/19/36071.html#Feedback0http://m.tkk7.com/llxiong/comments/commentRss/36071.htmlhttp://m.tkk7.com/llxiong/services/trackbacks/36071.htmlabstract class和interface是Java语言中对于抽象类定义q行支持的两U机Ӟ正是׃q两U机制的存在Q才赋予了Java强大的面向对象能力?br />接口Q没有提供Q何具体实玎ͼ可以说是一个极度抽象的c,他允怽创徏一个能够被向上转型Z止一U基cd的类Q以此来实现多重l承?br />抽象c:包含一U或多种抽象Ҏ的类Q且可以提供具体的实现。定义抽象类后,其他cd以对他进行扩充ƈ且通过实现其中的抽象方法,使用抽象cd体话?br />Java中的接口和抽象类的区别:接口中没有属性,而且所有的Ҏ都是抽象的,而抽象类可以有属性,而且可以有抽象方法,也可以有实现的方法。但两者都不能被实例话?br />使用的时候,一个类可以l承多个接口Q但只能l承一个抽象类?br />一、理解抽象类
abstract class和interface在Java语言中都是用来进行抽象类Q本文中的抽象类q从abstract class译而来Q它表示的是一个抽象体Q而abstract class为Java语言中用于定义抽象类的一U方法,误者注意区分)定义的,那么什么是抽象c,使用抽象c能为我们带来什么好处呢Q?br />在面向对象的概念中,我们知道所有的对象都是通过cL描绘的,但是反过来却不是q样。ƈ不是所有的c都是用来描l对象的Q如果一个类中没有包含够的信息来描l一个具体的对象Q这Lcd是抽象类。抽象类往往用来表征我们在对问题领域q行分析、设计中得出的抽象概念,是对一pd看上M同,但是本质上相同的具体概念的抽象?br />比如Q如果我们进行一个图形编辑Y件的开发,׃发现问题领域存在着圆、三角Şq样一些具体概念,它们是不同的Q但是它们又都属于Ş状这样一个概念,形状q个概念在问题领域是不存在的Q它是一个抽象概c正是因为抽象的概念在问题领域没有对应的具体概念Q所以用以表征抽象概늚抽象cL不能够实例化的?br />在面向对象领域,抽象cM要用来进行类型隐藏。我们可以构造出一个固定的一l行为的抽象描述Q但是这l行为却能够有Q意个可能的具体实现方式。这个抽象描q就是抽象类Q而这一lQ意个可能的具体实现则表现为所有可能的zcR模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允怿改的Q同Ӟ通过从这个抽象体zQ也可扩展此模块的行为功能。熟悉OCP的读者一定知道,Z能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle)Q抽象类是其中的关键所在?br />二、从语法定义层面看abstract class和interface
在语法层面,Java语言对于abstract class和interfacel出了不同的定义方式Q下面以定义一个名为Demo的抽象类Z来说明这U不同。用abstract class的方式定义Demo抽象cȝ方式如下Q?/p>

abstract class Demo ?
abstract void method1();
abstract void method2();
?
?/p>


使用interface的方式定义Demo抽象cȝ方式如下Q?

interface Demo {
void method1();
void method2();
?
}


在abstract class方式中,Demo可以有自q数据成员Q也可以有非abstarct的成员方法,而在interface方式的实CQDemo只能够有静态的不能被修改的数据成员Q也是必须是static final的,不过在interface中一般不定义数据成员Q,所有的成员Ҏ都是abstract的。从某种意义上说Qinterface是一U特DŞ式的abstract class?
从编E的角度来看Qabstract class和interface都可以用来实?design by contract"的思想。但是在具体的用上面还是有一些区别的?
首先Qabstract class在Java语言中表C的是一U承关p,一个类只能使用一ơ承关pR但是,一个类却可以实现多个interface。也许,q是Java语言的设计者在考虑Java对于多重l承的支持方面的一U折中考虑吧?
其次Q在abstract class的定义中Q我们可以赋予方法的默认行ؓ。但是在interface的定义中Q方法却不能拥有默认行ؓQؓ了绕q这个限Ӟ必须使用委托Q但是这?增加一些复杂性,有时会造成很大的麻烦?
在抽象类中不能定义默认行存在另一个比较严重的问题Q那是可能会造成l护上的ȝ。因为如果后来想修改cȝ界面Q一般通过abstract class或者interface来表C)以适应新的情况Q比如,d新的Ҏ或者给已用的方法中d新的参数Q时Q就会非常的ȝQ可能要p很多的时_对于zcd多的情况Q尤为如此)。但是如果界面是通过abstract class来实现的Q那么可能就只需要修改定义在abstract class中的默认行ؓ可以了?
同样Q如果不能在抽象cM定义默认行ؓQ就会导致同LҎ实现出现在该抽象cȝ每一个派生类中,q反?one ruleQone place"原则Q造成代码重复Q同样不利于以后的维护。因此,在abstract class和interface间进行选择时要非常的小心?br />三、从设计理念层面看abstract class和interface
上面主要从语法定义和~程的角度论qCabstract class和interface的区别,q些层面的区别是比较低层ơ的、非本质的。本文将从另一个层面:abstract class和interface所反映出的设计理念Q来分析一下二者的区别。作者认为,从这个层面进行分析才能理解二者概늚本质所在?
前面已经提到q,abstarct class在Java语言中体C一U承关p,要想使得l承关系合理Q父cdzcM间必d?is a"关系Q即父类和派生类在概忉|质上应该是相同的。对于interface 来说则不Ӟq不要求interface的实现者和interface定义在概忉|质上是一致的Q仅仅是实现了interface定义的契U而已。ؓ了便于理解Q下面将通过一个简单的实例q行说明?
考虑q样一个例子,假设在我们的问题领域中有一个关于Door的抽象概念,该Doorh执行两个动作open和closeQ此时我们可以通过abstract class或者interface来定义一个表C抽象概念的类型,定义方式分别如下所C:

使用abstract class方式定义DoorQ?

abstract class Door {
abstract void open();
abstract void close()Q?
}

使用interface方式定义DoorQ?

interface Door {
void open();
void close();
}


其他具体的Doorcd可以extends使用abstract class方式定义的Door或者implements使用interface方式定义的Door。看h好像使用abstract class和interface没有大的区别?br />如果现在要求Doorq要h报警的功能。我们该如何设计针对该例子的cȝ构呢Q在本例中,主要是ؓ了展Cabstract class和interface反映在设计理念上的区别,其他斚w无关的问题都做了化或者忽略)下面罗列出可能的解x案,q从设计理念层面对这些不同的Ҏq行分析?br />解决Ҏ一Q?br />单的在Door的定义中增加一个alarmҎQ如下:

abstract class Door {
abstract void open();
abstract void close()Q?
abstract void alarm();
}


或?

interface Door {
void open();
void close();
void alarm();
}


那么h报警功能的AlarmDoor的定义方式如下:

class AlarmDoor extends Door {
void open() { ?}
void close() { ?}
void alarm() { ?}
}


或?

class AlarmDoor implements Door ?
void open() { ?}
void close() { ?}
void alarm() { ?}
?/p>


q种Ҏq反了面向对象设计中的一个核心原则ISPQInterface Segregation PricipleQ,在Door的定义中把Door概念本n固有的行为方法和另外一个概?报警?的行为方法؜在了一赗这样引L一个问题是那些仅仅依赖于Doorq个概念的模块会因ؓ"报警?q个概念的改变(比如Q修改alarmҎ的参敎ͼ而改变,反之依然?
解决Ҏ二:
既然open、close和alarm属于两个不同的概念,ҎISP原则应该把它们分别定义在代表q两个概늚抽象cM。定义方式有Q这两个概念都用abstract class方式定义Q两个概念都使用interface方式定义Q一个概念用abstract class方式定义Q另一个概念用interface方式定义?
昄Q由于Java语言不支持多重承,所以两个概念都使用abstract class方式定义是不可行的。后面两U方式都是可行的Q但是对于它们的选择却反映出对于问题领域中的概念本质的理解、对于设计意囄反映是否正确、合理。我们一一来分析、说明?
如果两个概念都用interface方式来定义,那么反映出两个问题Q?
1、我们可能没有理解清楚问题领域,AlarmDoor在概忉|质上到底是Doorq是报警器?
2、如果我们对于问题领域的理解没有问题Q比如:我们通过对于问题领域的分析发现AlarmDoor在概忉|质上和Door是一致的Q那么我们在实现时就没有能够正确的揭C我们的设计意图Q因为在q两个概늚定义上(均用interface方式定义Q反映不Zq含义?
如果我们对于问题领域的理解是QAlarmDoor在概忉|质上是DoorQ同时它有具有报警的功能。我们该如何来设计、实现来明确的反映出我们的意思呢Q前面已l说q,abstract class在Java语言中表CZU承关p,而承关pd本质上是"is a"关系。所以对于Doorq个概念Q我们应该用abstarct class方式来定义。另外,AlarmDoor又具有报警功能,说明它又能够完成报警概念中定义的行ؓQ所以报警概念可以通过interface方式定义。如下所C:

abstract class Door {
abstract void open();
abstract void close()Q?
}
interface Alarm {
void alarm();
}
class AlarmDoor extends Door implements Alarm {
void open() { ?}
void close() { ?}
void alarm() { ?}
}


q种实现方式基本上能够明的反映出我们对于问题领域的理解Q正的揭示我们的设计意图。其实abstract class表示的是"is a"关系Qinterface表示的是"like a"关系Q大家在选择时可以作Z个依据,当然q是建立在对问题领域的理解上的,比如Q如果我们认为AlarmDoor在概忉|质上是报警器Q同时又hDoor的功能,那么上述的定义方式就要反q来了?
abstract class和interface是Java语言中的两种定义抽象cȝ方式Q它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概忉|质的理解、对于设计意囄反映是否正确、合理,因ؓ它们表现了概念间的不同的关系Q虽焉能够实现需求的功能Q。这其实也是语言的一U的惯用法,希望读者朋友能够细l体?br />



xnabx 2006-03-19 15:41 发表评论
]]>
WebServices概念http://m.tkk7.com/llxiong/archive/2006/03/19/36027.htmlxnabxxnabxSun, 19 Mar 2006 04:05:00 GMThttp://m.tkk7.com/llxiong/archive/2006/03/19/36027.htmlhttp://m.tkk7.com/llxiong/comments/36027.htmlhttp://m.tkk7.com/llxiong/archive/2006/03/19/36027.html#Feedback0http://m.tkk7.com/llxiong/comments/commentRss/36027.htmlhttp://m.tkk7.com/llxiong/services/trackbacks/36027.html  它具有以下几点特?
   1. 高度的耦合?是UL性还不错,怺依赖不强 .
   2. 高度的集成?
   3. 完好的封状? 是我们只可以看C惌你看到的东西 呵呵!
   4. 使用标准协议规范.

xnabx 2006-03-19 12:05 发表评论
]]>
对synchronized(this)的一些理?/title><link>http://m.tkk7.com/llxiong/archive/2006/03/18/35901.html</link><dc:creator>xnabx</dc:creator><author>xnabx</author><pubDate>Fri, 17 Mar 2006 16:32:00 GMT</pubDate><guid>http://m.tkk7.com/llxiong/archive/2006/03/18/35901.html</guid><wfw:comment>http://m.tkk7.com/llxiong/comments/35901.html</wfw:comment><comments>http://m.tkk7.com/llxiong/archive/2006/03/18/35901.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/llxiong/comments/commentRss/35901.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/llxiong/services/trackbacks/35901.html</trackback:ping><description><![CDATA[ <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td style="BORDER-BOTTOM: #ff99ff 1px dashed" align="middle" height="50"> <strong class="f16">对synchronized(this)的一些理?/strong> </td> </tr> <tr> <td align="middle" height="40"> </td> <td style="BORDER-RIGHT: #ff99ff 1px solid" valign="top" rowspan="6"> </td> </tr> <tr> <td height="40"> </td> </tr> <tr> <td> <table class="pagefont" cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td> <p align="left">一、当两个q发U程讉K同一个对象object中的q个synchronized(this)同步代码块时Q一个时间内只能有一个线E得到执行。另一个线E必ȝ待当前线E执行完q个代码块以后才能执行该代码块?<br /><br />二、然而,当一个线E访问object的一个synchronized(this)同步代码块时Q另一个线E仍然可以访问该object中的非synchronized(this)同步代码块?<br /><br />三、尤其关键的是,当一个线E访问object的一个synchronized(this)同步代码块时Q其他线E对object中所有其它synchronized(this)同步代码块的讉K被d?<br /><br />四、第三个例子同样适用其它同步代码块。也是_当一个线E访问object的一个synchronized(this)同步代码块时Q它p得了q个object的对象锁。结果,其它U程对该object对象所有同步代码部分的讉K都被暂时d?<br /><br />五、以上规则对其它对象锁同样适用. </p> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <img src ="http://m.tkk7.com/llxiong/aggbug/35901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/llxiong/" target="_blank">xnabx</a> 2006-03-18 00:32 <a href="http://m.tkk7.com/llxiong/archive/2006/03/18/35901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java学习q程的一些重?/title><link>http://m.tkk7.com/llxiong/archive/2006/03/18/35898.html</link><dc:creator>xnabx</dc:creator><author>xnabx</author><pubDate>Fri, 17 Mar 2006 16:26:00 GMT</pubDate><guid>http://m.tkk7.com/llxiong/archive/2006/03/18/35898.html</guid><wfw:comment>http://m.tkk7.com/llxiong/comments/35898.html</wfw:comment><comments>http://m.tkk7.com/llxiong/archive/2006/03/18/35898.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/llxiong/comments/commentRss/35898.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/llxiong/services/trackbacks/35898.html</trackback:ping><description><![CDATA[ <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td style="BORDER-BOTTOM: #ff99ff 1px dashed" align="middle" height="50"> <strong class="f16">Java学习q程的一些重?/strong> </td> </tr> <tr> <td align="middle" height="40"> </td> <td style="BORDER-RIGHT: #ff99ff 1px solid" valign="top" rowspan="6"> </td> </tr> <tr> <td height="40"> </td> </tr> <tr> <td> <table class="pagefont" cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td>Java学习q程的一些重?<br /><br />  主要说说Java的几大块吧,无法说得很细Q因为其实每一块拿出来都能说很多,我就说一下这几块学习的时候的重点或者应该注意的东西?<br /><br /><br /><br />数值类型: <br /><br />  虽然是面向对象的语言Q但是在使用上数值类型还是必不可的Q如果在C的学习中已经掌握了C的数D和转换规则Q那我想q里应该没有什么问题,只有两点需要注意:1?4.0q样的Q点常量被认ؓ是double型,只有加上f后缀才是float型的Q?、整数常量说h被认为是int型,但是在编译时Q可以认为编译器其看作能表C数的最数|因此byte b = 100;不会报错?<br /><br /><br /><br />引用cdQ?<br /><br />  我也是从C/C++转过来的Q其实所谓引用类型在C++中已有体玎ͼ是传参的时候有一U引用类型,从C来考虑Q它是一个指针,只不q,我们不能对它q行指针上的操作。所以这里的重点是:1、Java里所有的对象都是在堆中生成的Q所以需要类似指针的东西指向它,那就是引用;2、我们通过引用操作的是引用所指向的对象,除了赋值操作外Q应该就没有什么操作是针对引用本n的了Q这一ҎC的指针与Java的引用区别所在?<br /><br /><br /><br />cd对象Q?<br /><br />  q是一个大块,有很多东西,不展开讲了Q就说几个重点:1、类Ҏ、类属性与成员Ҏ、成员属性在加蝲、初始化、用上的异同;2、在构造函CQthis()和super()的用法;3、子cȝ加蝲q程、初始化q程和构造过E;4、方法的重蝲和覆写;5、覆写所引出的多态问题?注意Q多态之应用在方法上Q对属性没有作? <br /><br />函数调用的参C递: <br /><br />  如果把引用类型所记录的地址|q作是引用cd变量的值的话,那么QJava的所有方法调用的时候,都是采用的g??数值类型传数|引用cd传地址?<br /><br /><br /><br />IO: <br /><br />  与C比v来,Java的输入输出,其是输入是非常ȝ的,也许是因为出于面向对象的考虑吧?不知道。Java提供了很多的IO,但是我们q不必将各种IO都搞清楚Q我们只需要了解字节流与字W流各有什么功能,字符是如何在字节流之上构造的Q几乎所有的字符构造的时候都是徏立在一个已有的字节的基础上的Qƈ且它的这U设计得我们可以像套管子一PIO一节一节套hQ直到得到我们想使用的IO对象(例:BufferedReader的?。在我们以后使用的时候,我们可以再去查APIQ我觉得主要要看的几个类是:FileReader、FileWriter、BufferedReaderQ再配合上System.out对象Q对于文本的输入、输出来_p够用了,至于其他的,我觉得不考试的话Q没有必要看那么多,用的时候再看了?我用Java一q半来,基本上就在用BufferedReader和System.out) <br /><br /><br /><br />容器Q?<br /><br />  个h认ؓQ这是Java~程的一大利器,我最q的类是:ArrayList(List)作ؓ可变长数l、HashMap(Map)用来建立查找表,Set我很用Q只在HashMap的用中q带用过一些。通过对这两个cȝ熟悉Q能够将List、Set和Map三大cȝ基本用法掌握。另外它的几个辅助类要掌握:Iterator和Collections。CollectionscL供容器的一些通用工具Q比如排序。而说到排序,q扯出了比较器QComparator。能够熟l用Comparatorc,可以让你q需求和自己的类定制排序Ҏ?<br /><br /><br /><br />AWT和SWINGQ?<br /><br />  个h认ؓQJava在图形界面的制作上有着非常好的装性,我以前曾l试囑֭qMFCQMFC在生成图形界面的时候会帮助你生成一些代码,然后让你在这些代码的指定位置d代码以实现功能,我这个h有个习惯Q如果让我看C一些东西,那么我不搞清除ؓ什么这么写Q就不会往下走Q看到那许多代码Q自然就惛_清楚那些是什么,l果引出来好多知识,后来我才知道其中有些是调用WinAPIQ结果我到现在还是不会用MFC。这里ƈ不是贬低MFCQ我怿MFC有其qh之处Q只不过个h认ؓ它的装性做得不好,暴露Z太多东西Q也许能够提高灵zL,不过Q可能我跟它无缘:(。在q方面Java做得不错,l你一个类Q你用就是了Q它图形界面的低层实现隐藏的很好,其作ؓ一个对象给你,而你只需要在q个对象上修修改改,挺方便的?<br /><br />  作ؓ初学者,我觉得AWT的重点在于它的几个Listener的用法,q有布局格式Q然后就是那许多的Component的用处和用法?不过Q我觉得Q等到用的时候再L合适的Componentq行学习应该也不太q?^_^) <br /><br />  不过Q因为我个h使用的原因,所以至今AWT和SWING都用得很,所以这斚w也就不便多说了,抱歉。写q些q不是告诉大家怎么解决问题Q因为每一个都有很多可写,只是希望能给初学者一点参考,希望能够帮助初学者们有的攄地看书?/td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <img src ="http://m.tkk7.com/llxiong/aggbug/35898.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/llxiong/" target="_blank">xnabx</a> 2006-03-18 00:26 <a href="http://m.tkk7.com/llxiong/archive/2006/03/18/35898.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JBuilder 9 常见快捷?/title><link>http://m.tkk7.com/llxiong/archive/2006/03/18/35895.html</link><dc:creator>xnabx</dc:creator><author>xnabx</author><pubDate>Fri, 17 Mar 2006 16:23:00 GMT</pubDate><guid>http://m.tkk7.com/llxiong/archive/2006/03/18/35895.html</guid><wfw:comment>http://m.tkk7.com/llxiong/comments/35895.html</wfw:comment><comments>http://m.tkk7.com/llxiong/archive/2006/03/18/35895.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/llxiong/comments/commentRss/35895.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/llxiong/services/trackbacks/35895.html</trackback:ping><description><![CDATA[ <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td style="BORDER-BOTTOM: #ff99ff 1px dashed" align="middle" height="50"> <strong class="f16">JBuilder 9 常见快捷?/strong> </td> </tr> <tr> <td align="middle" height="40"> </td> <td style="BORDER-RIGHT: #ff99ff 1px solid" valign="top" rowspan="6"> </td> </tr> <tr> <td height="40"> </td> </tr> <tr> <td> <table class="pagefont" cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td> <p align="left">1.工作? (N) <br /><br />目面板Qctrl + Alt + p (Project) <br />设计面板: ctrl + Alt + c (content) <br />l构面板: ctrl + Alt + s (Structure) <br />信息面板: ctrl + Alt + M (Message) <br />状态面? ctrl + Alt + Z <br /><br /><br />2.主面?(代码面板和设计面? <br /><br />ȀzM码模? ctrl + J (@1) <br />参数提示信息的激z? ctrl + shift + H <br />打开查询、替换窗? ctrl + F <br />cȝ查询: ctrl + - <br /><br /><br />3.F 键的用法 <br /><br />F1: 帮助快捷 <br />F4: q行多行 <br />F5: 加入断点 <br />F7: 当遇到方法时会运行方法内的代?<br />F8: 逐步q行代码 <br />F12: 代码面板和设计面板切?<br /><br /><br />4. Shift 键的用法 <br /><br />d多个相同lgQ?按shift键在选项上选取lgQ把lgd到窗口即?<br />调整lg间间隔和寚wQ?假设有组件JPanel 1/2/3;(要达?个组件宽度相同,lg间隔相等Qƈ且都是依据JPanel1左对?,按shift键,用鼠标选中需要调整的lgQ?W一个选中的组件是其他的基?然后右键?<br /><br /><br />5: codeInsight ?Codetemplates <br />MemberInsight -- Ҏ当前的代码提C可用的cL员或Ҏ(说明) <br />ParameterInsight -- 提示当前的方法需要用的参数 <br />SymbolInsigh -- 查看当前的变量、方法或者类的愿代码?<br /><br />MemberInsight: ctrl + space ?ctrl + H <br />ParameterInsight: ctrl + shift + space ?ctrl + shift + H <br />SymbolInsight: ctrl + Enter ?Alt + shift + H <br />ClassInsight : ctrl + alt + space ?ctrl + alt + H <br /><br /><br /><br /><br />注: (@1)Q用代码功能:(ctrl + J) <br />1?在想要输入代码的位置输入代码摸板名,然后?ctrl + J(开发h员可以用主菜单上的Tools/Editor/Templates命o来查看代码摸板的名字) <br />2、把光标定位于想要输入代码的位置Q然后按ctrl + J</p> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <img src ="http://m.tkk7.com/llxiong/aggbug/35895.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/llxiong/" target="_blank">xnabx</a> 2006-03-18 00:23 <a href="http://m.tkk7.com/llxiong/archive/2006/03/18/35895.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>E序文g的绝对\?/title><link>http://m.tkk7.com/llxiong/archive/2006/03/17/35891.html</link><dc:creator>xnabx</dc:creator><author>xnabx</author><pubDate>Fri, 17 Mar 2006 15:59:00 GMT</pubDate><guid>http://m.tkk7.com/llxiong/archive/2006/03/17/35891.html</guid><wfw:comment>http://m.tkk7.com/llxiong/comments/35891.html</wfw:comment><comments>http://m.tkk7.com/llxiong/archive/2006/03/17/35891.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/llxiong/comments/commentRss/35891.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/llxiong/services/trackbacks/35891.html</trackback:ping><description><![CDATA[1.得到当前E序文g的绝对\径:this.getClass().getResource(this.getClass().getName()+".java").getPath()<img src ="http://m.tkk7.com/llxiong/aggbug/35891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/llxiong/" target="_blank">xnabx</a> 2006-03-17 23:59 <a href="http://m.tkk7.com/llxiong/archive/2006/03/17/35891.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软g优化,g升http://m.tkk7.com/llxiong/archive/2006/03/17/35884.htmlxnabxxnabxFri, 17 Mar 2006 15:29:00 GMThttp://m.tkk7.com/llxiong/archive/2006/03/17/35884.htmlhttp://m.tkk7.com/llxiong/comments/35884.htmlhttp://m.tkk7.com/llxiong/archive/2006/03/17/35884.html#Feedback0http://m.tkk7.com/llxiong/comments/commentRss/35884.htmlhttp://m.tkk7.com/llxiong/services/trackbacks/35884.html关于软g优化,g升斚w?

臛_64位双CPU
2G内存 DDR2 533

tomcat5.5默认配置
java5.0默认配置
mysql5.0默认配置

带宽?0M独n.
如何改变软g斚w的配|要求。优化方面的资料。硬件方面要升哪些Q?以达到支持大U在U用户ؓ最?000人?br />
处理Q?br />       2000 人在U,每秒钟请求数应该在几百次或者更低些的程度,q发C会超q?00(q_10妙请求一?Q用普通的 PC 机,每秒钟也能够处理上百ơ的hQ?br />       ~存优化Q解x能问题首先惛_的就是缓存,?Web 应用中有很多~存的方式,可以~存?Web 层的 servletContext 中,也可以缓存到业务层中Q甚臛_以在数据库中建立冗余。而生成静态页面是一U极端的做法Q一般来说会增加复杂性,同时可能会对灉|性和可维护性造成很大伤害。缓存的要点在于命中率,命中率低的东西不应该~存Q除非对内存的hg做考虑。ȝh设计上就两句话,使用 N 层结构,合理~存。根据程序的需要,适当是用缓存机Ӟ
       E序q行优化ҎQ比如:每次查找部分记录Q而不是全部查出来Q这h可以减轻服务器的负担Q也可以减少|络传输量; 对于pȝ中的数据库连接一定要q行妥善的处理; 寚w要用 scrchrnozied 的地方要用,但是有些地方可以不用同步化的Q这个对速度影响也很大;从代码入手,优化E序Q在数据持久化上q行改进Q采用成熟的库访问对象(Data Access ObjectQ设计模式也会节省你的服务器开销?br />       g升Q硬件方面还不行Q硬盘最好搞阵列Q还可以再来一个服务器Q弄个负载均衡,׃个服务器来处理用LhQapache必然是要用到的,他将挡在tomcat前处理httph?br />       注意Q在g_强大的时候,?web ?db 分两台服务器来做Q只会降低效率,因ؓ|络~组的成本要比本地内存中的复刉几个数量U。同样道理,负蝲均衡也只会导致更复杂的结构,会引h多的问题Qƈ产生更低于下的效率。将一个应用分布于多台机器的唯一理由Q就是由于一台机器根本顶不住Q不得不分?br />       环境优化Q调Tomcat、JVM的Heap大小{参数做一些优化, Tomcat的虚拟内存管理有最大值限Ӟ可以q发q行多个Tomcat来均衡负载,tomcat5.5默认配置  ==>改了JAVA_OPTS没有Q开大内?既java_opts= -Xms1024m -Xmx1024m Q?java5.0默认配置    ==>升一下到最大的版?.0 升处理
      pȝ内存试Q?br />     Q?Q自己测试:参考tomcat,jvm,mysql优化斚w的资料。测试如下操作出错:
C:\>java -Xms536870932 -Xmx536870912
Error occurred during initialization of VM
Incompatible initial and maximum heap sizes specified臛_64位双CPUQ原则上面来?4位的CPU应当可以用到无限大的内存了,也还是理Z的了。可以java -Xmx2000M -versionq样一路加上去试试看你的可以加到多大?br />     Q?Q工h试:  压力试Q对应用pȝq行性能采样于监控,QWily有一套品可以在q行期进行调优,但我没有用过Q,我用的P6SpyQ加MS的那个压力测试工P也有D用LoadRunner来跑一跑,在SQL语句q个地方有太多的名堂可做了?br />       软g斚wQ?br />       a、Y仉|?Apache2.2.0 + mod_ajp + jrockit-R26.0.0-jdk1.5.0_04+  Tomcat5.5.15 (启多?+apr1.2.2 .
       b、内存徏?g以上 ?tomcat的内存参C?set JAVA_OPTS=%JAVA_OPTS%-Xms1024m -Xmx1024m  (内存2g的话Q徏议set JAVA_OPTS=%JAVA_OPTS%-Xms512m -Xmx512m).
      c、tomcat5.5版本的性能已经大幅度提高了?/p>


     
   



xnabx 2006-03-17 23:29 发表评论
]]>
վ֩ģ壺 ҹѸվ| lƷ߹ۿ| ëƬ쿴| Ļ| 91Ʒվ| ŷպƵ| ҹþþþüŮӰԺ | 88avѹۿ| Ļav| Ļ| 114ëƬѹۿ| ޾Ʒŷ߹ۿ| AVþþƷݺݰ˳| һƵ| ɫһ վ| þþù޾Ʒ| Ļ| ɫavѹۿ| պӰ߹ۿĻ| ŷһ| ۺɫ¶| Ů˿ƬƵ| Ļ߿Ӱȫ| ۺĻ| ҹþþþüŮӰԺ | 91ѹԲ2021| ձһѹۿ| vaһ| þ޹ŷ޾Ʒһ| ѹۿëƬƵ| Ѹ弤| ðѾƷƵ | ˾Ʒ| ޾Ʒ| ߲Ƶ| þWWWɫѹۿ| 91Ƶѹۿ| avڹƬ| ޾޴hdѿ| ɫ͵͵޵һۺ| ɫվwwwͬ|