牛牛組合

          春風(fēng)不相識(shí),何事入羅幃?

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            5 隨筆 :: 2 文章 :: 1 評(píng)論 :: 0 Trackbacks

          2009年7月9日 #

          來(lái)自網(wǎng)絡(luò),原作者已不可考,謝謝原作者!

          • 方法一:
          打開(kāi)記事本,復(fù)制以下內(nèi)容,并保存為(*.reg)格式,然后雙擊導(dǎo)入到注冊(cè)表

          Windows Registry Editor Version 5.00

          [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\Shell Icons]
          "29"="C:\\Windows\\System32\\shell32.dll,50"

          [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons]
          "29"="C:\\Windows\\System32\\shell32.dll,50"

          [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]
          "link"=hex:00,00,00,00


          • 方法二:
          同樣打開(kāi)記事本,復(fù)制以下內(nèi)容,并保存為(*.reg)格式,然后雙擊導(dǎo)入到注冊(cè)表

          Windows Registry Editor Version 5.00

          [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\lnkfile]
          "isshortcut"=""

          最后重啟系統(tǒng),大功告成!本人親測(cè),有效。
          posted @ 2009-09-15 02:57 電子牛 閱讀(424) | 評(píng)論 (0)編輯 收藏

          在google上搜到的,原帖已不可考,感謝原帖作者。

          用Eclipse進(jìn)行Java程序的開(kāi)發(fā),需要了解總代碼的行數(shù),如果不需要精確的數(shù)字,可以不用安裝統(tǒng)計(jì)代碼的插件。方法如下:
          1) 菜單欄,選擇Search -> File... 打開(kāi)File Search對(duì)話(huà)框(或者快捷鍵Ctrl + H,然后選擇File Search標(biāo)簽)
          2) 選中“正則表達(dá)式”(Regular expression),在搜索文本框輸入 \n
          3) 文件名稱(chēng)輸入 *.java
          4) 在范圍里選中Enclosing projects
          5) 點(diǎn)“Search”進(jìn)行搜索。然后就可以統(tǒng)計(jì)出整個(gè)項(xiàng)目的代碼行數(shù)。

          如圖:
          imgFileSearch

          轉(zhuǎn)圖請(qǐng)注明。
          posted @ 2009-07-29 03:15 電子牛 閱讀(4386) | 評(píng)論 (1)編輯 收藏

          今天在javaeye論壇里看到的帖子,認(rèn)真地從頭看到尾,對(duì)閉包有了進(jìn)一步的認(rèn)識(shí)。感謝原帖樓主和所有回帖的朋友。

          原帖地址:http://www.javaeye.com/topic/412451
          主題:再論閉包
          作者:步行者
          對(duì)閉包感興趣的朋友可以移步去看看。

          首先,給出閉包的定義(定義說(shuō)法比較多,本人偷懶,就直接從原帖里摘取了。):

          閉包   是可以包含自由(未綁定)變量 的代碼塊;這些變量不是在這個(gè)代碼塊或者任何全局上下文中定義的,而是在定義代碼塊的環(huán)境中定義。“閉包” 一詞來(lái)源于以下兩者的結(jié)合:要執(zhí)行的代碼塊(由于自由變量的存在,相關(guān)變量引用沒(méi)有釋放)和為自由變量提供綁定的計(jì)算環(huán)境(作用域)。


              可能上面的定義有點(diǎn)晦澀,下面看一下《Python 核心編程》 對(duì) 閉包 的解釋。


              如果在一個(gè)內(nèi)部函數(shù)里,對(duì)在外部作用域(但不是在全局作用域)的變量進(jìn)行引用,那么內(nèi)部函數(shù)就被定義為閉包 。定義在外部函數(shù)內(nèi)的但由內(nèi)部函數(shù)引用或者使用的變量被稱(chēng)為自由變量 。

           

          原帖中“liusong1111”回帖值得思考:
          [closure作為一等公民,可以被一個(gè)普通的變量引用、傳遞。在ruby里意味著它是Proc的一個(gè)對(duì)象(實(shí)例),自然可以調(diào)用Proc的方法(比如 call)。以java的視角,類(lèi)是用來(lái)組織數(shù)據(jù)的,不是描述行為。而對(duì)于ruby,行為也是數(shù)據(jù),也可以用類(lèi)描述,類(lèi)也是對(duì)象,類(lèi)的類(lèi)還是對(duì)象,這才是 真正的Everything is Object。樓主受java和java所謂的OO的影響太深,評(píng)判這些問(wèn)題時(shí),應(yīng)該眼光往外多看看,避免思維定勢(shì)。尤其應(yīng)該深入學(xué)習(xí)一門(mén)帶閉包的語(yǔ)言, 看看它到底是怎么用的。]

          首先,我同意可以用OO模擬閉包的觀點(diǎn),這已經(jīng)由原帖作者“步行者”給出詳細(xì)的例子了。但是這勢(shì)必在一定程度上會(huì)增加代碼的復(fù)雜度和臃腫度。我想,大部分時(shí)候大家更希望用更簡(jiǎn)潔的方法去完成同樣的功能吧。

          另外,對(duì)于閉包會(huì)破壞OO的結(jié)構(gòu)的爭(zhēng)論,我更愿意從廣義的角度來(lái)理解OO的定義。正如上面引用中所說(shuō),“以java的視角,類(lèi)是用來(lái)組織數(shù)據(jù)的,不是描述行為。而對(duì)于ruby,行為也是數(shù)據(jù),也可以用類(lèi)描述,類(lèi)也是對(duì)象,類(lèi)的類(lèi)還是對(duì)象”。如果采用閉包,那么這個(gè)內(nèi)部函數(shù)中可以定義局部變量,同時(shí)它本身就是行為,此時(shí)具有屬性和行為的閉包,何嘗不可以看做是OO的呢?
          個(gè)人的觀點(diǎn)是如果能達(dá)到以下兩條,那么我支持Java中引入閉包:

          1)引入閉包能夠在保證程序的可讀性的基礎(chǔ)上,簡(jiǎn)化程序編寫(xiě)的復(fù)雜度,降低代碼的臃腫度。
          2)引入閉包至少能夠保證在大部分情況下,程序的性能能夠保持或者得到提升。(這里排除了極限情況)

          本人對(duì)閉包的了解還遠(yuǎn)遠(yuǎn)不夠,計(jì)劃有空閑的時(shí)候,認(rèn)真地學(xué)習(xí)下閉包的知識(shí)和相關(guān)的應(yīng)用。

          歡迎討論。

          posted @ 2009-07-29 02:33 電子牛 閱讀(287) | 評(píng)論 (0)編輯 收藏

          原作者thinkGhoster,鏈接http://blog.csdn.net/thinkGhoster/archive/2008/04/19/2307001.aspx
          對(duì)原文進(jìn)行了適當(dāng)?shù)恼{(diào)整,更適合閱讀。

          注:本人讀后的一點(diǎn)思考在文章最后。

          (一)相關(guān)類(lèi)

          class A {
                   
          public String show(D obj){
                          
          return ("A and D");
                   }
           
                   
          public String show(A obj){
                          
          return ("A and A");
                   }
           
          }
           
          class B extends A{
                   
          public String show(B obj){
                          
          return ("B and B");
                   }

                   
          public String show(A obj){
                          
          return ("B and A");
                   }
           
          }

          class C extends B{} 
          class D extends B{} 

          (二)問(wèn)題:以下輸出結(jié)果是什么?

                  A a1 = new A();
                  A a2 
          = new B();
                  B b =
          new B();
                  C c 
          = new C(); 
                  D d 
          = new D(); 
                  
          System.out.println(a1.show(b));   ①
                  System.out.println(a1.show(c));   ②
                  System.out.println(a1.show(d));   ③
                  System.out.println(a2.show(b));   ④
                  System.out.println(a2.show(c));   ⑤
                  System.out.println(a2.show(d));   ⑥
                  System.out.println(b.show(b));     ⑦
                  System.out.println(b.show(c));     ⑧
                  System.out.println(b.show(d));     ⑨    

          (三)答案

                        ①   A and A
                        ②   A and A
                        ③   A and D
                        ④   B and A
                        ⑤   B and A
                        ⑥   A and D
                        ⑦   B and B
                        ⑧   B and B
                        ⑨   A and D

          (四)分析

                  ①②③比較好理解,一般不會(huì)出錯(cuò)。④⑤就有點(diǎn)糊涂了,為什么輸出的不是"B and B”呢?!!先來(lái)回顧一下多態(tài)性。

                  運(yùn)行時(shí)多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)代碼重用的一個(gè)最強(qiáng)大機(jī)制,動(dòng)態(tài)性的概念也可以被說(shuō)成“一個(gè)接口,多個(gè)方法”。Java實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)性的基礎(chǔ)是動(dòng)態(tài)方法調(diào)度,它是一種在運(yùn)行時(shí)而不是在編譯期調(diào)用重載方法的機(jī)制。

                  方法的重寫(xiě)Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。

                 - 重寫(xiě)(Overriding) 是父類(lèi)與子類(lèi)之間多態(tài)性的一種表現(xiàn)。如果在子類(lèi)中定義某方法與其父類(lèi)有相同的名稱(chēng)和參數(shù),我們說(shuō)該方法被重寫(xiě) (Overriding)。子類(lèi)的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類(lèi)中的定義,對(duì)它而言,父類(lèi)中的定義如同被“屏蔽”了。

                 - 重載(Overloading) 是一個(gè)類(lèi)中多態(tài)性的一種表現(xiàn)。如果在一個(gè)類(lèi)中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類(lèi)型,則稱(chēng)為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類(lèi)型。

                  當(dāng)超類(lèi)對(duì)象引用變量引用子類(lèi)對(duì)象時(shí),被引用對(duì)象的類(lèi)型而不是引用變量的類(lèi)型決定了調(diào)用誰(shuí)的成員方法,但是這個(gè)被調(diào)用的方法必須是在超類(lèi)中定義過(guò)的,也就是說(shuō)被子類(lèi)覆蓋的方法。 (但是如果強(qiáng)制把超類(lèi)轉(zhuǎn)換成子類(lèi)的話(huà),就可以調(diào)用子類(lèi)中新添加而超類(lèi)沒(méi)有的方法了。)

                  好了,先溫習(xí)到這里,言歸正傳!實(shí)際上這里涉及方法調(diào)用的優(yōu)先問(wèn)題 ,優(yōu)先級(jí)由高到低依次為:

                 this.show(O),

                 super.show(O),

                 this.show((super)O),

                 super.show((super)O)。讓我們來(lái)看看它是怎么工作的。

                  比如④,a2.show(b),a2是一個(gè)引用變量,類(lèi)型為A,則this為a2,b是B的一個(gè)實(shí)例,于是它到類(lèi)A里面找show(B obj)方法,沒(méi)有找到,于是到A的super(超類(lèi))找,而A沒(méi)有超類(lèi),因此轉(zhuǎn)到第三優(yōu)先級(jí)this.show((super)O),this仍然是 a2,這里O為B,(super)O即(super)B即A,因此它到類(lèi)A里面找show(A obj)的方法,類(lèi)A有這個(gè)方法,但是由于a2引用的是類(lèi)B的一個(gè)對(duì)象,B覆蓋了A的show(A obj)方法,因此最終鎖定到類(lèi)B的show(A obj),輸出為"B and A”。

                  再比如⑧,b.show(c),b是一個(gè)引用變量,類(lèi)型為B,則this為b,c是C的一個(gè)實(shí)例,于是它到類(lèi)B找show(C obj)方法,沒(méi)有找到,轉(zhuǎn)而到B的超類(lèi)A里面找,A里面也沒(méi)有,因此也轉(zhuǎn)到第三優(yōu)先級(jí)this.show((super)O),this為b,O為C, (super)O即(super)C即B,因此它到B里面找show(B obj)方法,找到了,由于b引用的是類(lèi)B的一個(gè)對(duì)象,因此直接鎖定到類(lèi)B的show(B obj),輸出為"B and B”。

                  按照上面的方法,可以正確得到其他的結(jié)果。

                  問(wèn)題還要繼續(xù),現(xiàn)在我們?cè)賮?lái)看上面的分析過(guò)程是怎么體現(xiàn)出藍(lán)色字體那句話(huà)的內(nèi)涵的。它說(shuō):當(dāng)超類(lèi)對(duì)象引用變量引用子類(lèi)對(duì)象時(shí),被引用對(duì)象的類(lèi)型而不是引用 變量的類(lèi)型決定了調(diào)用誰(shuí)的成員方法,但是這個(gè)被調(diào)用的方法必須是在超類(lèi)中定義過(guò)的,也就是說(shuō)被子類(lèi)覆蓋的方法。還是拿a2.show(b)來(lái)說(shuō)吧。

                  a2是一個(gè)引用變量,類(lèi)型為A,它引用的是B的一個(gè)對(duì)象,因此這句話(huà)的意思是由B來(lái)決定調(diào)用的是哪個(gè)方法。因此應(yīng)該調(diào)用B的show(B obj)從而輸出"B and B”才對(duì)。但是為什么跟前面的分析得到的結(jié)果不相符呢?問(wèn)題在于我們不要忽略了藍(lán)色字體的后半部分,那里特別指明:這個(gè)被調(diào)用的方法必須是在超類(lèi)中定義過(guò)的,也就是被子類(lèi)覆蓋的方法。B里面的show(B obj)在超類(lèi)A中有定義嗎?沒(méi)有!那就更談不上被覆蓋了。實(shí)際上這句話(huà)隱藏了一條信息:它仍然是按照方法調(diào)用的優(yōu)先級(jí)來(lái)確定的。它在類(lèi)A中找到了 show(A obj),如果子類(lèi)B沒(méi)有覆蓋show(A obj)方法,那么它就調(diào)用A的show(A obj)(由于B繼承A,雖然沒(méi)有覆蓋這個(gè)方法,但從超類(lèi)A那里繼承了這個(gè)方法,從某種意義上說(shuō),還是由B確定調(diào)用的方法,只是方法是在A中實(shí)現(xiàn)而已); 現(xiàn)在子類(lèi)B覆蓋了show(A obj),因此它最終鎖定到B的show(A obj)。這就是那句話(huà)的意義所在。


          個(gè)人讀后的一點(diǎn)思考:

          第5個(gè)問(wèn)題值得思考,輸出 a2.show(c) ,答案是 B and A

          分析:

          a2是類(lèi)A的引用變量,引用的是類(lèi)B的一個(gè)實(shí)例對(duì)象。c是類(lèi)C的一個(gè)實(shí)例。

          1)this.show(c),在A中找show(C obj)的方法,沒(méi)有找到,進(jìn)行第二步。

          2)super.show(c),A沒(méi)有超類(lèi),進(jìn)行第三步。

          3)this.show(super(c)), super(c)是B,A中是沒(méi)有show(B obj)方法的,但是這時(shí)候會(huì)繼續(xù)往上找,找B的父類(lèi),super(B)是A,在A中找show(A obj), 找到了。

          4)a2引用的是類(lèi)B的一個(gè)對(duì)象,由B來(lái)決定調(diào)用哪個(gè)方法,因?yàn)轭?lèi)B中覆蓋了A的show(A obj)方法,因此最終用類(lèi)B中的show(A obj)方法。 

          所以結(jié)論是這里super(O)是采用了逐層往上尋找的方式,具體來(lái)說(shuō),父類(lèi)找不到對(duì)應(yīng)的show方法,就找父類(lèi)的父類(lèi),如果還沒(méi)有,繼續(xù)往上找,直到找到根基類(lèi)。

          為了驗(yàn)證作者原文中藍(lán)色字體段文字的正確性,我測(cè)試了輸出a1.show(c),結(jié)果和預(yù)想的一樣,是A and A.

          這里,a1.show(c)和a2.show(c)的區(qū)別在于持有的引用對(duì)象的不同,a1是持有了A類(lèi)的一個(gè)實(shí)例對(duì)象,而a2是持有了B類(lèi)的一個(gè)實(shí)例對(duì)象,所以當(dāng)都找到了A類(lèi)中的show(A obj)時(shí),引用的對(duì)象的類(lèi)型決定了該調(diào)用哪個(gè)成員的方法,前提是這個(gè)被調(diào)用的方法必須被子類(lèi)覆蓋了。所以a1.show(c)輸出的是A and A,而 a2.show(c)輸出的是 B and A.

          posted @ 2009-07-11 06:39 電子牛 閱讀(203) | 評(píng)論 (0)編輯 收藏

          原鏈接 http://gostar.bokee.com/3885062.html

          原作者: gostar

          1.原理

          Property文件中,使用的編碼方式根據(jù)機(jī)器本身的設(shè)置可能是GBK或者UTF-8。而在Java程序中讀取Property文件的時(shí)候使用的是Unicode編碼方式,這種編碼方式不同會(huì)導(dǎo)致中文亂碼。因此需要將Property文件中的中文字符轉(zhuǎn)化成Unicode編碼方式才能正常顯示中文。

          2.解決辦法

          Java提供了專(zhuān)門(mén)的工具對(duì)Property文件進(jìn)行Unicode轉(zhuǎn)化,這種工具就是native2ascii,它在JDK安裝環(huán)境的bin目錄下。

          native2ascii 工具將帶有本機(jī)編碼字符(非拉丁 1 和非單一碼字符)的文件轉(zhuǎn)換成帶有Unicode編碼字符的文件。

          假設(shè)需要轉(zhuǎn)化的屬性文件為:D:\src\resources.properties(含有中文字符)

          轉(zhuǎn)化后的屬性文件為:D:\classes\resources.properties(中文字符統(tǒng)一轉(zhuǎn)化為Unicode)

          那么使用如下命令
          JAVA_HOME\bin\native2ascii -encoding GBK D:\src\resources.properties D:\classes\resources.properties

          就能將含有中文字符的屬性文件轉(zhuǎn)化成單一Unicode編碼方式的屬性文件。中文亂碼自然會(huì)被解決。

          posted @ 2009-07-09 03:42 電子牛 閱讀(267) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 松桃| 香河县| 铁岭县| 南召县| 英德市| 历史| 瑞金市| 手游| 大埔县| 山西省| 阿拉善盟| 陆丰市| 崇阳县| 湄潭县| 开阳县| 毕节市| 仪陇县| 雅江县| 大荔县| 比如县| 泸西县| 金溪县| 西乌珠穆沁旗| 孝感市| 家居| 大足县| 扬州市| 黎城县| 百色市| 河曲县| 阆中市| 东光县| 连平县| 迭部县| 榆树市| 醴陵市| 开阳县| 马鞍山市| 兴安县| 东港市| 临桂县|