漂泊的年華
          北飄一族
          posts - 5,comments - 0,trackbacks - 0
          需要的請抓緊時(shí)間,服務(wù)器不穩(wěn)定不能太長時(shí)間提供資源,如有需要請趕快.

          資源下載地址:http://board.verycd.com/t389438.html
          posted @ 2007-01-10 15:33 迪藍(lán) 閱讀(208) | 評論 (0)編輯 收藏
               摘要: JAVA 程序員面試 32 問 第一,談?wù)? final , ...  閱讀全文
          posted @ 2007-01-10 14:28 迪藍(lán) 閱讀(182) | 評論 (0)編輯 收藏
          下面這個(gè)可憐的小程序并不能干脆的做決定。它的decisive方法將返回true。但是它也返回false。那么,它到底打印的是什么呢?甚至,合法嗎?

          class Indecisive
          {
          ?public static void main(String[] args)
          ?{
          ??System.out.println(decisive());
          ?}
          ?static boolean decisive()
          ?{
          ??try
          ??{
          ???return true;
          ??}
          ??finally
          ??{
          ???return false;
          ??}
          ?}
          }
          ???你可能認(rèn)為這個(gè)程序不合法。畢竟,decisive方法不能同時(shí)返回true和false。如果你嘗試一下,就會發(fā)現(xiàn)它
          編譯時(shí)沒有任何錯(cuò)誤,并且它打印的是false。為什么呢?
          ??? 原因在于就是在:在一個(gè)try-finally語句中,finally語句塊總是在控制權(quán)離開try語句塊時(shí)執(zhí)行。無論try
          語句塊是正常結(jié)束的,還是意外結(jié)束,情況都是如此。在一條語句或一個(gè)語句塊拋出一個(gè)異常,或者對某個(gè)封閉類型語句執(zhí)行了一個(gè)break或continue,或是像這個(gè)程序一樣執(zhí)行了一個(gè)return時(shí),將發(fā)生意外結(jié)束。之所以稱為意外結(jié)束,是因?yàn)樗鼈冏柚钩绦虬错樞驁?zhí)行下面的語句。
          ??? 當(dāng)try語句塊和finally語句塊都意外結(jié)束時(shí),在try語句塊中引發(fā)意外結(jié)束的原因?qū)⒈粊G棄,而整個(gè)try-finally
          語句意外結(jié)束的原因?qū)⑴cfinally語句塊意外結(jié)束的原因相同。在這個(gè)程序中,在try語句塊中的return語句所
          引發(fā)的意外結(jié)束將被丟棄,而try-finally語句意外結(jié)束是由finally語句塊中的return造成的。簡單的講,程序
          嘗試著(try)返回(return)true,但是它最終(finally)返回(return)的是false。
          ??? 總之,每一個(gè)finally語句塊都應(yīng)該正常結(jié)束,除非拋出不受檢查的異常。千萬不要用return,break,continue或throw來退出finally語句塊,并且千萬不要允許讓受檢查的異常傳播到finally語句塊之外。

          posted @ 2007-01-10 14:20 迪藍(lán) 閱讀(151) | 評論 (0)編輯 收藏
          ?轉(zhuǎn)型用于將一種類型轉(zhuǎn)換到另一種類型.看看下面的code運(yùn)行后你猜會打印什么?
          ?public class Multicast
          {
          ?public static void main(String[] args)
          ?{
          ??System.out.println((int)(char)(byte)-1);
          ?}
          }
          ?轉(zhuǎn),轉(zhuǎn),轉(zhuǎn),我給轉(zhuǎn)暈了,從int數(shù)值-1開始,然后從int轉(zhuǎn)換為byte,之后轉(zhuǎn)為char,最后轉(zhuǎn)型回int.第一個(gè)轉(zhuǎn)型將數(shù)值從32為窄化到8位,第二個(gè)轉(zhuǎn)型從8位拓寬為16位,最后從16位拓寬到32位.這個(gè)數(shù)值最終回到起點(diǎn)了嗎?運(yùn)行一看不就知道了嗎?
          Print:
          F:\Java Develop>javac Multicast.java

          F:\Java Develop>java Multicast
          65535
          啊,這么會是65535?
          oh,my god!有條規(guī)則: 如果最初的數(shù)值類型是有符號的,那么就執(zhí)行符號擴(kuò)展;如果他是char,那么不管它將要被轉(zhuǎn)換成什么類型,都執(zhí)行另擴(kuò)展.
          ??
          用這條規(guī)則來44看.因?yàn)閎yte是有符號的,所以在將byte數(shù)值-1轉(zhuǎn)換成char時(shí).會發(fā)生符號擴(kuò)展.作為結(jié)果的char數(shù)值16位就都被置位了,因此它等于2^16-1(2的16次方減1),就是65535.從char到int的轉(zhuǎn)型也是一個(gè)擴(kuò)展,
          用規(guī)則來說它將執(zhí)行另擴(kuò)展,而不是符號擴(kuò)展.作為int的結(jié)果數(shù)值就是65535和打印的一樣.
          ?? 從這個(gè)例子我們得到一個(gè)教訓(xùn):
          如果通過觀察不能確定程序?qū)⒁鍪裁?那么它做的就很有可能不是你想要的.

          posted @ 2007-01-10 14:19 迪藍(lán) 閱讀(166) | 評論 (0)編輯 收藏

          ?Bill.Gate在一家小超級市場購買一個(gè)1.10元棒棒糖,但是他的錢報(bào)中都是兩塊一張的鈔票.如果他用一張兩塊的鈔票買這個(gè)棒棒糖,那么應(yīng)該找給他多少零錢呢?
          ???? 編寫一個(gè)程序解決這個(gè)問題.
          code:
          class Change
          {
          ?public static void main(String[] args)
          ?{
          ??System.out.println(2.00-1.10);
          ?}
          }

          ?????? Bill.Gate寫下這段代碼我們期望得到應(yīng)該找回的零鈔0.90,但是當(dāng)運(yùn)行后他發(fā)現(xiàn)數(shù)據(jù)不兌,運(yùn)行結(jié)果為:0.8999999999999999,與預(yù)期的0.90不一樣。為什么呢?搞了半天原因在于1.1這個(gè)數(shù)不能被精確的表示為一個(gè)double,因此被表示為最接近它的double值.該程序從2中減去這個(gè)值得.遺憾的是,這個(gè)結(jié)果打印出來并不是接近0.9的double值.這說明: 并不是所有的小數(shù)都可以用二進(jìn)制浮點(diǎn)數(shù)精確表示.二進(jìn)制浮點(diǎn)對于貨幣計(jì)算是非常不適合的.
          ????? 要解決這個(gè)問題有兩個(gè)辦法:一是使用某種整數(shù)類型,例如int或long,并且分單位來計(jì)算.如下:
          System.out.println((200-110)+"fen");
          結(jié)果為90分.二是使用執(zhí)行小數(shù)運(yùn)算的BigDecimal.它還可以通過JDBC與SQL DECIMAL類型進(jìn)行互操作.這里需要注意的是: 一定要用BigDecimal(String)構(gòu)造器,而千萬不要用BigDecimal(double).后一個(gè)構(gòu)造器將用它的參數(shù)值來創(chuàng)建一個(gè)實(shí)例.例如new BigDecimal(.1),它將返回一個(gè)BigDecimal,也即0.10000000000000000555111512312578270211815834041015625.正確使用我們就可以得到期望的結(jié)果0.90:
          code:
          import java.math.BigDecimal;
          class Change
          {
          ?public static void main(String[] args)
          ?{
          ??System.out.println(new BigDecimal("2.00").
          ???????????????????? subtract(new BigDecimal("1.10")));
          ?}
          }
          Print:
          F:\Java Develop>java Change
          0.90

          posted @ 2007-01-10 14:17 迪藍(lán) 閱讀(142) | 評論 (0)編輯 收藏
          僅列出標(biāo)題  
          主站蜘蛛池模板: 紫云| 九台市| 周口市| 达孜县| 通州市| 股票| 台北市| 博爱县| 克什克腾旗| 丹巴县| 锡林浩特市| 庆城县| 河北区| 揭阳市| 惠州市| 苍梧县| 清新县| 南城县| 博兴县| 连云港市| 北海市| 浏阳市| 龙泉市| 依安县| 灵武市| 通海县| 南康市| 仪征市| 台南市| 保康县| 牡丹江市| 杂多县| 荥经县| 望奎县| 息烽县| 龙井市| 平果县| 出国| 鄂伦春自治旗| 鄂托克旗| 察雅县|