置頂隨筆

          SELECT UPPER(F.TABLESPACE_NAME) "表空間名",
          D.TOT_GROOTTE_MB "表空間大小(M)",
          D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空間(M)",
          TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,
          2),
          '990.99') "使用比",
          F.TOTAL_BYTES "空閑空間(M)",
          F.MAX_BYTES "最大塊(M)"
          FROM (SELECT TABLESPACE_NAME,
          ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
          ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
          FROM SYS.DBA_FREE_SPACE
          GROUP BY TABLESPACE_NAME) F,
          (SELECT DD.TABLESPACE_NAME,
          ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
          FROM SYS.DBA_DATA_FILES DD
          GROUP BY DD.TABLESPACE_NAME) D
          WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
          ORDER BY 4 DESC
          --order by F.TABLESPACE_NAME


          select OSUSER,PROGRAM,USERNAME,SCHEMANAME,B.Cpu_Time,STATUS,B.SQL_TEXT
          from V$SESSION A LEFT JOIN V$SQL B ON A.SQL_ADDRESS=B.ADDRESS AND A.SQL_HASH_VALUE=B.HASH_VALUE order by b.cpu_time desc

          posted @ 2008-07-10 15:44 sdl 閱讀(640) | 評(píng)論 (0)編輯 收藏


          2008年7月10日

          1:The food is delicious!  好吃
          2:your son/daughter is so cute 你的孩子很可愛(ài)
          3:your chinese is really surprising  你的中文令人驚訝
          4:can you speak slowly? 請(qǐng)您說(shuō)得慢些好嗎?
          5:come with me. 跟我來(lái)
          6: congratulations. 恭喜恭喜
          7: After you
          8:Slow down! 慢點(diǎn)
          9:Watch out! 當(dāng)心
          10:I beg your pardon?
          11: I am a football fan

          posted @ 2008-07-10 16:53 sdl 閱讀(368) | 評(píng)論 (0)編輯 收藏

          SELECT UPPER(F.TABLESPACE_NAME) "表空間名",
          D.TOT_GROOTTE_MB "表空間大小(M)",
          D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空間(M)",
          TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,
          2),
          '990.99') "使用比",
          F.TOTAL_BYTES "空閑空間(M)",
          F.MAX_BYTES "最大塊(M)"
          FROM (SELECT TABLESPACE_NAME,
          ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
          ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
          FROM SYS.DBA_FREE_SPACE
          GROUP BY TABLESPACE_NAME) F,
          (SELECT DD.TABLESPACE_NAME,
          ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
          FROM SYS.DBA_DATA_FILES DD
          GROUP BY DD.TABLESPACE_NAME) D
          WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
          ORDER BY 4 DESC
          --order by F.TABLESPACE_NAME


          select OSUSER,PROGRAM,USERNAME,SCHEMANAME,B.Cpu_Time,STATUS,B.SQL_TEXT
          from V$SESSION A LEFT JOIN V$SQL B ON A.SQL_ADDRESS=B.ADDRESS AND A.SQL_HASH_VALUE=B.HASH_VALUE order by b.cpu_time desc

          posted @ 2008-07-10 15:44 sdl 閱讀(640) | 評(píng)論 (0)編輯 收藏


          2008年6月3日

          1 08/06  A組 瑞士 00:00 捷克 巴塞爾               0:1
          2 08/06  A組 葡萄牙 02:45 土耳其 日內(nèi)瓦           2:0
          3 09/06  B組 奧地利 00:00 克羅地亞 維也納         0:1
          4 09/06  B組 德國(guó) 02:45 波蘭 克拉根佛特           2:0
          5 10/06  C組 羅馬尼亞 00:00 法國(guó) 蘇黎世           0:0
          6 10/06  C組 荷蘭 02:45 意大利 伯爾尼             3:0
          7 11/06  D組 西班牙 00:00 俄羅斯 因斯布魯克       4:1
          8 11/06  D組 希臘 02:45 瑞典 薩爾茨堡             0:2
          9 12/06  A組 捷克 00:00 葡萄牙 日內(nèi)瓦     3:1
          10 12/06 A組 瑞士 02:45 土耳其 巴塞爾
          11 13/06 B組 克羅地亞 00:00 德國(guó) 克拉根佛特
          12 13/06 B組 奧地利 02:45 波蘭 維也納
          13 14/06 C組 意大利 00:00 羅馬尼亞 蘇黎世
          14 14/06 C組 荷蘭 02:45 法國(guó) 伯爾尼
          15 15/06 D組 瑞典 00:00 西班牙 因斯布魯克
          16 15/06 D組 希臘 02:45 俄羅斯 薩爾茨堡
          17 16/06 A組 瑞士 02:45 葡萄牙 巴塞爾
          18 16/06 A組 土耳其 02:45 捷克 日內(nèi)瓦
          19 17/06 B組 奧地利 02:45 德國(guó) 維也納
          20 17/06 B組 波蘭 02:45 克羅地亞 克拉根佛特
          21 18/06 C組 荷蘭 02:45 羅馬尼亞 伯爾尼
          22 18/06 C組 法國(guó) 02:45 意大利 蘇黎世
          23 19/06 D組 希臘 02:45 西班牙 薩爾茨堡
          24 19/06 D組 俄羅斯 02:45 瑞典 因斯布魯克
          25 20/06 1/4決賽 A組第1 02:45 B組第2 巴塞爾
          26 21/06 1/4決賽 B組第1 02:45 A組第2 維也納
          27 22/06 1/4決賽 C組第1 02:45 D組第2 巴塞爾
          28 23/06 1/4決賽 D組第1 02:45 C組第2 維也納
          29 26/06 半決賽 第25場(chǎng)勝者 02:45 第26場(chǎng)勝者 巴塞爾
          30 27/06 半決賽 第27場(chǎng)勝者 02:45 第28場(chǎng)勝者 維也納
          31 30/06 決賽 第29場(chǎng)勝者 02:45 第30場(chǎng)勝者 維也納

          本人比較看好西班牙

           

           

          posted @ 2008-06-03 12:02 sdl 閱讀(260) | 評(píng)論 (0)編輯 收藏

              在開(kāi)發(fā)過(guò)程中遇到這樣一個(gè)問(wèn)題:
              2008-06-02 16:29:23,262 WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: 30036, SQLState: 99999
          2008-06-02 16:29:23,263 ERROR [org.hibernate.util.JDBCExceptionReporter] ORA-30036: unable to extend segment by 1024 in undo tablespace 'UNDOTBS2'
          后來(lái)查資料才發(fā)現(xiàn)是Undo表空間的問(wèn)題。查看了一下Undo表空間剩的空間已經(jīng)很少了。這種問(wèn)題解決方法如下:

              


          UNDO表空間用于存放UNDO數(shù)據(jù),當(dāng)執(zhí)行DML操作(INSERT,UPDATE和DELETE)時(shí),oracle會(huì)將這些操作執(zhí)行前的舊數(shù)據(jù)寫(xiě)入到UNDO段,在oracle9i之前,管理UNDO數(shù)據(jù)時(shí)使用(Rollback Segment)完成的.從oracle9i開(kāi)始,管理UNDO數(shù)據(jù)不僅可以使用回滾段,還可以使用UNDO表空間.因?yàn)橐?guī)劃和管理回滾段比較復(fù)雜,所有oracle database 10g已經(jīng)完全丟棄用回滾段.并且使用UNDO表空間來(lái)管理UNDO數(shù)據(jù).

          1:查看所有的Undo表空間

          SELECT * FROM dba_tablespaces where contents='UNDO'


          2:Undo大小計(jì)算公式:

          SELECT ((UR * (UPS * DBS)) + (DBS * 24))/1048576 AS "MB"
          FROM (SELECT value AS UR
          FROM v$parameter
          WHERE name = 'undo_retention'),
          (SELECT (SUM(undoblks)/SUM
          (((end_time-begin_time)*86400))) AS UPS
          FROM v$undostat),
          (SELECT value AS DBS
          FROM v$parameter
          WHERE name = 'db_block_size');
          3:修改Undo表空間大小

           先刪除原來(lái)的表空間:
           drop tablespace UNDOTBS2 including contents and datafiles
           再建立一個(gè)和原來(lái)名稱一樣的表空間
           create undo tablespace UNDOTBS2 datafile '/home/oracle/oradata/depsight/undotbs2.dbf' size 50m

          posted @ 2008-06-03 11:56 sdl 閱讀(2075) | 評(píng)論 (2)編輯 收藏


          2008年6月1日


              想象一下,把所有的失望和希望都強(qiáng)加在一個(gè)人身上,留下的是什么那,那得把大地壓得顫抖。 

              沿著鴿子的哨音,我尋找著你,高高的森林擋住了天空,小路上一顆迷途的蒲公英,把我引向藍(lán)灰色的湖泊,在微微搖晃的倒影中。我找到了你。

              這詩(shī)歌怎么樣啊,《迷途》。猜猜誰(shuí)寫(xiě)的。

              如果說(shuō)弗羅斯特的選擇是無(wú)法改變而且使它變得偉大,那么普通人的選擇又能算什么那。

              我靜靜回想你的眼神,但我永遠(yuǎn)無(wú)法讀懂那里含有什么,是期盼還是討厭。

              高考。意味著什么那,解脫、或是一段歷史的結(jié)束,都一樣吧。

              還記得史鐵生說(shuō)得好?。号藢?duì)于你才是一個(gè)必然,而我對(duì)于你只是一個(gè)偶然。改編一下:

              高考對(duì)于我們來(lái)說(shuō)是一個(gè)必然,考上了才是一個(gè)偶然。

              你對(duì)于我來(lái)說(shuō)就跟其他的一樣,其他的也跟你一樣。當(dāng)我看到他們我就想起你,而我看到你是就會(huì)忘記他們。

              多么美好的生活,就這樣過(guò)去啦,不會(huì)回來(lái)了,在這里消逝,溶釋在不知道的地方。

          posted @ 2008-06-01 20:23 sdl 閱讀(248) | 評(píng)論 (0)編輯 收藏

          距離高考就剩下四十天了,從來(lái)沒(méi)有象現(xiàn)在這樣的考慮過(guò)一些事情。

          每當(dāng)我想到在這兒度過(guò)的一天,就想起一句話: 復(fù)課一年的生活將是你一生的財(cái)富--純屬放屁的一句話不知道害了多少像我一樣的學(xué)生,如果將來(lái)的一天再有人跟我說(shuō)這句話,我會(huì)吃了他。

          在這兒受盡了窩囊氣,老師不象老師象畜生,女生比男人還男人,男生比女人還女人。這些可以忍受而且必須忍受。

          在這兒不知為什么從沒(méi)想起過(guò)以前的跟高中同學(xué)在一起的歲月,就像一個(gè)世外的人,跟著果子每天吃飯睡覺(jué)上課跑操,突然間變得淡然了,一切都不重要了。

          從沒(méi)想過(guò)自己有一天會(huì)考上家人期望的大學(xué),只是自己一個(gè)人在這兒思考一些問(wèn)題,有時(shí)候去喝點(diǎn)酒或者打打臺(tái)球什么的。

          蒼涼的生活再有四十天就要結(jié)束了--徹底的結(jié)束。在這兒得一切都將成為過(guò)去,可能存在我的記憶中,也可能被我遺忘生活跟我開(kāi)了一個(gè)玩笑,呵呵,勇氣,責(zé)任,挫折,汗水,成績(jī),理想,情感,憂郁,都他媽的將要去啦。

          曾想過(guò)寫(xiě)一篇長(zhǎng)一點(diǎn)得東西記錄這一年的心路歷程,后來(lái)放棄了,自己根本就不會(huì)寫(xiě)什么東西,經(jīng)歷就像一杯水你喝了它,它就消失,你倒了它它也是沒(méi)有了,結(jié)果都一樣,被子終將空的。留下的只是一些零碎的片段,希望它是完整的,但它永遠(yuǎn)不會(huì)。

          在正確的時(shí)間遇上錯(cuò)誤的人,注定是一聲嘆息;在錯(cuò)誤的時(shí)間遇到對(duì)的人,注定是一場(chǎng)悲傷。這話說(shuō)的太好了,每聽(tīng)一遍都是眼淚模糊。

          幻想,是美好的,生活在自己想象的世界里是完美的。憧憬,悵惘,期待,虛偽,流氓,拳擊,讀書(shū),音樂(lè),電影,每天充斥著我,生活就是這個(gè)樣子的嗎?幸福在哪里?

          天空,晴朗,云彩,時(shí)光,流水,塵土,星空,黎明,這是幸福。

          孤獨(dú),寂寞,惆悵,失落,燦爛,憂傷,浮躁,平淡,這也是幸福。

          理想,信念,執(zhí)著,信仰,支撐,拼搏,努力,堅(jiān)持,就像平凡的偉大的土地在我們心里生長(zhǎng),這同樣是幸福。

          萎靡,沉醉,瘋狂,墮落,枯萎,這不是幸福,這是什么那?

          生活是肥皂,生活是牙膏,生活是大寶,人生必落俗。

          平靜,煩惱,壓力,浪潮,激動(dòng),憤怒,沒(méi)什么可以阻擋的。真的嗎?

          白云蒼狗,過(guò)眼云煙,花開(kāi)花落,云卷云舒。

          就像阿Q一樣有時(shí)候也想一下這個(gè)東西,就是“女......”我們要繼續(xù)想下去的。

          現(xiàn)在老覺(jué)得女孩魅惑迷離的眼神是那么的可愛(ài),值得留戀。那就是烙印打在心上了。

          男人在夜深人靜的時(shí)候才會(huì)留下眼淚撫摸自己的傷口,生活跟我們開(kāi)了一個(gè)玩笑,希望這一切能讓我在以后想起來(lái)的時(shí)候會(huì)有多點(diǎn)的釋然,少一點(diǎn)的無(wú)奈,少一點(diǎn)傷感。

          可能所有的人都能理解我的心情??催^(guò)這篇日志的人啊,愿上帝保佑你們,愿我的忠誠(chéng)助你們一臂之力。

          posted @ 2008-06-01 20:21 sdl 閱讀(342) | 評(píng)論 (0)編輯 收藏


          2008年5月27日

          HashMap輸出排序,以前寫(xiě)的接口沒(méi)有考慮這個(gè)問(wèn)題,現(xiàn)在輸出要求排序,可以在得到Map結(jié)果后進(jìn)行如下操作對(duì)數(shù)據(jù)進(jìn)行排序:

          Object[] key =   map.keySet().toArray();
          //升序排序
                  Arrays.sort(key);
                 
                  for(int i=0;i<key.length;++i)
                  {
                   System.out.println("Key_Id=="+key[i]+"Key_Value===="+map.get(key[i]));;
                  }

          posted @ 2008-05-27 17:52 sdl 閱讀(640) | 評(píng)論 (0)編輯 收藏


          2008年5月23日

          我對(duì)以前對(duì)漢龍集團(tuán)根本不了解,可今天看了一個(gè)貼子說(shuō)是漢龍集團(tuán)捐助的5所希望小學(xué)在地震中屹立不倒,
          師生的生命得以挽救,心里特別震撼,當(dāng)時(shí)的集團(tuán)一個(gè)主任負(fù)責(zé)監(jiān)管建設(shè)這五所希望小學(xué),非常嚴(yán)格,
          10年之前,10年之后,想起這,人的感動(dòng)不由心生,好人有好報(bào)!但是就是這樣嚴(yán)格按照工程質(zhì)量建造的學(xué)校,因?yàn)樵诘卣鹬袥](méi)有倒,而被人稱做“奇跡”,為何?我不說(shuō)大家也明白。其它的建設(shè)的都是垃圾工程。
          好人有好報(bào),良心被狼吃了的人也必遭天遣!

          posted @ 2008-05-23 11:52 sdl 閱讀(256) | 評(píng)論 (0)編輯 收藏


          2008年5月21日

          距高考80天的感想

          1.每天生活都是一個(gè)樣子,教室-廁所-食堂-宿舍,看見(jiàn)的人也是一樣,男生-女生-老師-還有畜生,這樣的生活太他媽的爽了.

          2.每天有固定的時(shí)間看書(shū)\睡覺(jué)\吃飯\跑操.連上個(gè)廁所的時(shí)間每天都是一樣的,這樣的生活其實(shí)一天就可以了,沒(méi)有必要每天都這樣.

          3.每當(dāng)我看都畜生的時(shí)候我就想自己真是個(gè)幸運(yùn)的孩子啊,在這個(gè)時(shí)候才遇見(jiàn)他,而不是整個(gè)高中,真他嗎的是幸福啊.

          4.并不是每天都能看到的人,但為什么總是在尷尬的時(shí)候出現(xiàn)了,就象是一個(gè)雷鋒在發(fā)揚(yáng)釘子般的鉆的精神,突然就鉆出來(lái)拉.

          5.我要在地上畫(huà)滿窗子,讓所有習(xí)慣黑暗的眼睛都習(xí)慣光明,高三的學(xué)子們,掰著你們的爪子算一算你們就剩下幾十天了,我在這里給你們祝福了.

          6.我們不要嫉恨畜生,他們也是很好的呀,他們吃飯睡覺(jué)喝水撒尿跟我們一樣,不過(guò)他們的思想跟我們不大一樣,他們是牲畜的思想--僅此而已.

          7.這里上學(xué)的有十種人.1.上學(xué)遲到的,2.上課睡覺(jué)的,3.上課看課外書(shū)的,4.上課說(shuō)話的,5.老師不講課睡不著覺(jué)的,6.吃飯把漱口水吐你鞋上的,7.再你吃飯的時(shí)候突然把你的饅頭撞掉的而且還很橫的,8.你在睡覺(jué)的時(shí)候突然闖入什么都不說(shuō)的,9.半夜三更在樓道唱歌的,10沒(méi)有女朋友跟你說(shuō)他有的.

          8.要原諒他們啊,并且要為他們祈禱啊----滾你娘的吧.老子不在乎.

          同志們,革命尚未成功同志仍需努力,我們要好好學(xué)習(xí)天天向上啊,為什么那?

          posted @ 2008-05-21 15:50 sdl 閱讀(249) | 評(píng)論 (0)編輯 收藏

          轉(zhuǎn)自別處:
              1:抽象類:
                              有時(shí)候,我們可能想要構(gòu)造一個(gè)很抽象的父類對(duì)象,它可能僅僅代表一個(gè)分類或抽象概念,它的實(shí)例沒(méi)有任何意義,因此不希望它能被實(shí)例化。例如:有一個(gè)父類“水果(Fruit)”,它有幾個(gè)子類“蘋(píng)果(Apple)”、“橘子(Orange)”、“香蕉(Banana)”等。水果在這里僅僅只是作為一個(gè)分類,顯然水果的實(shí)例沒(méi)有什么意義(就好像一個(gè)人如果告訴你他買了一些水果但是卻不告訴你是蘋(píng)果還是橘子,你很難想象他到底買的是什么。) 。而水果類又要能被子類化,這就要求我們使用抽象類(abstract class)來(lái)解決這個(gè)問(wèn)題。
          在java中,通過(guò)在class關(guān)鍵字前增加abstract修飾符,就可以將一個(gè)類定義成抽象類。抽象類不能被實(shí)例化。例如:
                    定義抽象類水果(Fruit)
                    public abstract class Fruit {
                            ……
                    }
                     如果我們?cè)噲D用以下語(yǔ)句來(lái)獲得一個(gè)實(shí)例,將無(wú)法編譯成功。
                     Fruit fruit = new Fruit();
          而我們?nèi)匀豢梢詷?gòu)造水果類的子類,如:
                    子類“蘋(píng)果(Apple)”
                     public class Apple extends Fruit {
                             ……
                     }
                    子類“橘子(Orange)”
                     public class Orange extends Fruit {
                             ……
                     }
          這樣就達(dá)到我們的目的了。
          抽象類除了能象普通類一樣可以擁有一般的屬性和方法,也可以擁有抽象方法(abstract method)。例如:
                     抽象類“形狀(Shape)”擁有抽象方法draw()。
                     public abstract class Shape {
                            ……
                            public abstract void draw();
                            ……
                     }
          抽象方法與抽象的行為相對(duì)應(yīng),通常是這個(gè)行為對(duì)父對(duì)象沒(méi)有意義,而子對(duì)象有具體動(dòng)作。例如方法draw()對(duì)于類Shape沒(méi)有意義,而類Shape的子類矩形(Rectangle)的方法draw()可以有實(shí)際的動(dòng)作(根據(jù)矩形的四個(gè)頂點(diǎn)畫(huà)出矩形的四個(gè)邊),子類圓(Circle)的方法draw()也可以有實(shí)際的動(dòng)作(根據(jù)圓心和半徑畫(huà)出圓周)。
          抽象類可以有抽象方法也可以沒(méi)有抽象方法;但是如果一個(gè)類有抽象方法,那這個(gè)類只能定義為抽象類。
                     如果按照以下代碼類“形狀(Shape)”仍然擁有抽象方法draw(),但沒(méi)有定義為抽象類,將會(huì)編譯失敗。
                     public class Shape {
                            ……
                            public abstract void draw();
                            ……
                     }
          抽象方法還有一個(gè)特點(diǎn)是,它強(qiáng)迫子類要么仍然保持抽象性(即不具體實(shí)現(xiàn)該方法并仍然定義為抽象類),要么具體表現(xiàn)出這個(gè)方法的行為(實(shí)現(xiàn)具體的動(dòng)作或者通過(guò)拋出UnsupportedOperationException異常來(lái)表明不支持該行為)。這樣也可以強(qiáng)化多態(tài)性。

          2:接口(interface)
          java語(yǔ)言使用關(guān)鍵字interface定義一個(gè)接口。接口也是抽象對(duì)象,它甚至比抽象類更抽象。接口中的方法都是抽象方法。
              一個(gè)接口可以繼承其他接口;一個(gè)類通過(guò)關(guān)鍵字implements聲明要實(shí)現(xiàn)一個(gè)接口,并具體實(shí)現(xiàn)接口的方法。
                     例如:有一個(gè)接口InterfaceA,
                     public interface InterfaceA {
                             void methodA();
                     }
                     類ClassA實(shí)現(xiàn)接口InterfaceA。
                     public class ClassA {
                             public void methodA() {
                                     System.out.println("methodA of ClassA implements InterfaceA");
                             }
                     }
          如果是抽象類實(shí)現(xiàn)一個(gè)接口,那么抽象類中可以不具體實(shí)現(xiàn)接口的方法(保持其抽象性),而由其子類去實(shí)現(xiàn)。
                     抽象類ClassB實(shí)現(xiàn)接口InterfaceA,但是沒(méi)有具體實(shí)現(xiàn)方法methodA(),
                     public abstract class ClassB {
                     }
                     子類ClassBSub實(shí)現(xiàn)接口InterfaceA,但是沒(méi)有具體實(shí)現(xiàn)方法methodA(),
                     public class ClassBSub {
                             public void methodA() {
                                     System.out.println("methodA of ClassBSub the subclass of ClassB");
                             }
                     }
          接口和抽象類顯著的共同點(diǎn)是接口和抽象類都可以有抽象方法。
          接口和抽象類的不同點(diǎn)有:
                     (1)抽象類可以有實(shí)例變量,而接口不能擁有實(shí)例變量,接口中的變量都是靜態(tài)(static)的常量(final)。
                     (2)抽象類可以有非抽象方法,而接口只能有抽象方法。
          java中,類與類之間是不能多繼承的。java之所以禁止類與類之間的多繼承是因?yàn)槎嗬^承有很大的缺點(diǎn)。
          多繼承雖然能使子類同時(shí)擁有多個(gè)父類的特征,但是其缺點(diǎn)也是很顯著的,主要有兩方面:
          (1)如果在一個(gè)子類繼承的多個(gè)父類中擁有相同名字的實(shí)例變量,子類在引用該變量時(shí)將產(chǎn)生歧義,無(wú)法判斷應(yīng)該使用哪個(gè)父類的變量。例如:
                     類ClassA:
                     public class ClassA {
                             protected int varSame = 0;
                     }
                     類ClassB:
                     public class ClassB {
                             protected int varSame = 1;
                     }
                     子類ClassC:(假設(shè)允許類與類之間多繼承)
                     public class ClassC extends ClassA, ClassB {
                             public void printOut() {
                                     System.out.println(super.varSame);
                             }
                             public static void main(String[] args) {
                                     ClassC classC = new ClassC();
                                     classC.printOut();
                             }
                     }
                     上面程序的運(yùn)行結(jié)果會(huì)是什么呢?輸出0還是1?
          (2)如果在一個(gè)子類繼承的多個(gè)父類中擁有相同方法,子類中有沒(méi)有覆蓋該方法,那么調(diào)用該方法時(shí)將產(chǎn)生歧義,無(wú)法判斷應(yīng)該調(diào)用哪個(gè)父類的方法。例如:
                     類ClassA:
                     public class ClassA {
                             public void printOut() {
                                     System.out.println(0);
                             }
                     }
                     類ClassB:
                     public class ClassB {
                             public void printOut() {
                                     System.out.println(1);
                             }
                     }
                     子類ClassC:(假設(shè)允許類與類之間多繼承)
                     public class ClassC extends ClassA, ClassB {
                             public static void main(String[] args) {
                                     ClassA classA = new ClassC();
                                     classA.printOut();       -------------------------  A行
                                     ClassB classB = new ClassC();
                                     classB.printOut();       -------------------------  B行
                                     ClassC classC = new ClassC();
                                     classC.printOut();       -------------------------  C行
                             }
                     }
                     上面程序的運(yùn)行結(jié)果會(huì)是什么呢?A、B、C三行的輸出是0還是1?
          正因?yàn)橛幸陨系闹旅秉c(diǎn),所以java中禁止一個(gè)類繼承多個(gè)父類;但是幸運(yùn)的是java提供了接口,并能通過(guò)接口的功能獲得多繼承的許多優(yōu)點(diǎn)而又摒棄了類與類多繼承的缺點(diǎn)。
          java允許一個(gè)接口繼承多個(gè)父接口,也允許一個(gè)類實(shí)現(xiàn)多個(gè)接口,而這樣的多繼承有上面提到的缺點(diǎn)馬?
          答案是沒(méi)有,這是由接口的抽象性決定的。
          正如前面介紹的,在接口中不能有實(shí)例變量,只能有靜態(tài)的常量,不能有具體的方法(包含方法體),只能有抽象方法,因此也就摒棄了多繼承的缺點(diǎn)。
          對(duì)于一個(gè)類實(shí)現(xiàn)多個(gè)接口的情況,因?yàn)榻涌谥挥谐橄蠓椒?,具體方法只能由實(shí)現(xiàn)接口的類實(shí)現(xiàn),在調(diào)用的時(shí)候始終只會(huì)調(diào)用實(shí)現(xiàn)類的方法(不存在歧義),因此不存在多繼承的第二個(gè)缺點(diǎn);而又因?yàn)榻涌谥挥徐o態(tài)的常量,但是由于靜態(tài)變量是在編譯期決定調(diào)用關(guān)系的,即使存在一定的沖突也會(huì)在編譯時(shí)提示出錯(cuò);而引用靜態(tài)變量一般直接使用類名或接口名,從而避免產(chǎn)生歧義,因此也不存在多繼承的第一個(gè)缺點(diǎn)。
          對(duì)于一個(gè)接口繼承多個(gè)父接口的情況也一樣不存在這些缺點(diǎn)。
          請(qǐng)看以下示例。
                      接口A:
                      public interface InterfaceA {
                              int len = 1;
                              void output();
                      }
                      接口B:
                      public interface InterfaceB {
                              int len = 2;
                              void output();
                      }
                      接口Sub繼承接口A和接口B:
                      public interface InterfaceSub extends InterfaceA, interfaceB {
                      }
                      類Xyz實(shí)現(xiàn)接口Sub:
                      public class Xyz implements InterfaceSub {
                              public void output() {
                                      System.out.println("output in class Xyz.");
                              }
                               public void outputLen(int type) {
                                       switch(type) {
                                               case InterfaceA.len:
                                                       System.out.println("len of InterfaceA=."+type);
                                                       break;
                                               case InterfaceB.len:
                                                       System.out.println("len of InterfaceB=."+type);
                                                       break;
                                       }
                              }
                             public static void main(String[] args) {
                                     Xyz xyz= new Xyz ();
                                     xyz .output();
                                     xyz .outputLen();
                             }
                     }
                     以上代碼不存在什么問(wèn)題,但是如果試圖編寫(xiě)以下存在沖突的代碼,則會(huì)編譯失敗。
                     Xyz xyz = new Xyz();
                     int len = xyz.len;
                     System.out.println(len);
          由于引入了接口,java顯得非常靈活,也使得java中的多態(tài)性更加富有魔力。

          posted @ 2008-05-21 11:44 sdl 閱讀(235) | 評(píng)論 (0)編輯 收藏


          僅列出標(biāo)題  下一頁(yè)

          posts - 12, comments - 2, trackbacks - 0, articles - 0

          Copyright © sdl

          主站蜘蛛池模板: 桐柏县| 洪泽县| 左贡县| 丹江口市| 克什克腾旗| 赫章县| 多伦县| 綦江县| 金塔县| 清远市| 吴旗县| 甘德县| 方正县| 汶上县| 唐河县| 博罗县| 桐柏县| 钟祥市| 扶沟县| 谷城县| 巴林左旗| 镇巴县| 永修县| 偏关县| 青铜峡市| 四会市| 怀安县| 平利县| 邹城市| 丹东市| 施秉县| 新野县| 舟曲县| 西乌珠穆沁旗| 扶风县| 宁波市| 商河县| 乡城县| 昌宁县| 宣汉县| 漯河市|