<address id="xpjh9"><listing id="xpjh9"><meter id="xpjh9"></meter></listing></address>

<address id="xpjh9"><address id="xpjh9"><listing id="xpjh9"></listing></address></address>
<noframes id="xpjh9">
<noframes id="xpjh9">

<address id="xpjh9"><address id="xpjh9"><listing id="xpjh9"></listing></address></address>
    <form id="xpjh9"></form><address id="xpjh9"><listing id="xpjh9"><menuitem id="xpjh9"></menuitem></listing></address>

      <noframes id="xpjh9">
      VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
      SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
      當前位置:
      首頁 > 編程開發 > Java教程 >
      • java教程之Java 異常處理的應用實例

      • 2015-01-24 09:33 來源:未知

      1、  Java 異常處理的應用實例(相關java教程)
      在定義銀行類時,若取錢數大于余額時需要做異常處理。

      定義一個異常類 insufficientFundsException。取錢(withdrawal)方法中可能產生異常,條件是余額小于取額。
      處理異常在調用 withdrawal 的時候,因此 withdrawal 方法要聲明拋出異常,由上一級方法調用。
      異常類:
      class InsufficientFundsExceptionextends Exception{
         private Bank  excepbank;      // 銀行對象
         private double excepAmount;   // 要取的錢
         InsufficientFundsException(Bank ba, double  dAmount)
          {  excepbank=ba;
             excepAmount=dAmount;
         }
         public String excepMessage(){
                 String  str="The balance is"+excepbank.balance
             + "\n"+"The withdrawal was"+excepAmount;
                 return str;   
         }
      }// 異常類
      銀行類:
      class Bank{
         double balance;// 存款數
         Bank(double  balance){this.balance=balance;}
         public void deposite(double dAmount){
                if(dAmount>0.0) balance+=dAmount;
         }
         public void withdrawal(double dAmount)
                     throws  InsufficientFundsException{
                if (balance<dAmount)     throw new
                InsufficientFundsException(this, dAmount);
            balance=balance-dAmount;
         }
         public void showBalance(){
            System.out.println("The balance is "+(int)balance);
         }
      }
      前端調用:
      public class ExceptionDemo{
         public static void main(String args[]){
                try{
                   Bank ba=new Bank(50);
                ba.withdrawal(100);
                System.out.println("Withdrawal successful!");
            }catch(InsufficientFundsException e) {
                System.out.println(e.toString());
                System.out.println(e.excepMessage());
            }
         }
      }

      關于 JVM 命令行標志您不知道的 5 件事

      1、  DisableExplicitGC

      我已記不清有多少次用戶要求我就應用程序性能問題提供咨詢了,其實只要跨代碼快速運行 grep,就會發現清單 1 所示的問題 — 原始 java 性能反模式:
      清單 1. System.gc();
      // We just released a bunch of objects, so tell the stupid
      // garbage collector to collect them already!
      System.gc();
      顯式垃圾收集是一個非常糟糕的主意 — 就像將您和一個瘋狂的斗牛犬鎖在一個電話亭里。盡管調用的語法是依賴實現的,但如果您的 JVM 正在運行一個分代的垃圾回收器(大多數是)System.gc(); 強迫 VM 執行一個堆的 “全部清掃”,雖然有的沒有必要。全部清掃比一個常規 GC 操作要昂貴好幾個數量級,這只是個簡單數學問題。
      您可以不把我的話放在心上 — Sun 的工程師為這個特殊的人工錯誤提供一個 JVM 標志; -XX:+DisableExplicitGC 標志自動將 System.gc() 調用轉換成一個空操作,為您提供運行代碼的機會,您自己看看 System.gc() 對于整個 JVM 執行有害還是有利。

      2、  HeapDumpOnOutOfMemoryError

      您有沒有經歷過這樣的情況:JVM 不能使用,不斷拋出 OutOfMemoryError,而您又不能為自己創建調試器來捕獲它或查看出現了什么問題?像這類偶發和/或不確定的問題,通常使開發人員發瘋。
      買者自負
      并不是任何 VM 都支持所有命令行標志,Sun/Oracle 的 VM 除外。查明一個標志是否被支持的最好方法是試用它,看它是否正常工作。倘若這些標志在技術上是不支持的,那么,使用它們您要承擔全部責任。如果這些標志中的任何一個使您的代碼、您的數據、您的服務器或您的一切消失得無影無蹤,我、Sun/Oracle 和 IBM® 都將不負責任。為以防萬一,建議先在虛擬(非常生產)環境中實驗。
      在這個時刻您想要的是,在 JVM 消亡之際捕獲堆的一個快照 — 正好 -XX:+HeapDumpOnOutOfMemoryError 命令可以完成這一操作。
      運行該命令通知 JVM 拍攝一個 “堆轉儲快照”,并將其保存在一個文件中以便處理,通常使用 jhat 實用工具(我在 上一篇文章 中介紹過)。您可以使用相應的 -XX:HeapDumpPath 標志指定到保存文件的實際路徑。(不管文件保存在哪,務必確保文件系統和/或 Java 流程必須要有權限配置,可以在其中寫入。)

      3、  bootclasspath

      定期將一個類放入類路徑是很有幫助的,這類路徑與庫存 JRE 附帶的類路徑或者以某種方式擴展的 JRE 類路徑略有不同。(新 Java Crypto API 提供商就是一個例子)。如果您想要擴展 JRE ,那么您定制的實現必須可以使用引導程序 ClassLoader,該引導程序可以加載 rt.jar 中的 java.lang.Object 及其所有相關文件。
      盡管您可以 非法打開 rt.jar 并將您的定制實現或新數據包移入其中,但從技術上您就違反了您下載 JDK 時同意的協議了。
      相反,使用 JVM 自己的 -Xbootclasspath 選項,以及皮膚 -Xbootclasspath/p 和 -Xbootclasspath/a。
      -Xbootclasspath 使您可以設置完整的引導類路徑(這通常包括一個對 rt.jar 的引用),以及一些其他 JDK 附帶的(不是 rt.jar 的一部分)JAR 文件。-Xbootclasspath/p 將值前置到現有 bootclasspath 中,并將 -Xbootclasspath/a 附加到其中。
      例如,如果您修改了庫中的 java.lang.Integer,并將修改放在一個子路徑 mods 下,那么 -Xbootclasspath/a mods 參數將新 Integer 放在默認的參數前面。

      4、  verbose

      對于虛擬的或任何類型的 Java 應用程序,-verbose 是一個很有用的一級診斷使用程序。該標志有三個子標志:gc、class 和 jni。
      開發人員嘗試尋找是否 JVM 垃圾收集器發生故障或者導致性能低下,通常首先要做的就是執行 gc。不幸的是,解釋 gc 輸出很麻煩 — 足夠寫一本書。更糟糕的是,在命令行中打印的輸出在不同的 Java 版本中或者不在不同的 JVM 中會發生改變,這使得正確解釋變得更難。
      一般來說,如果垃圾收集器是一個分代收集器(多數 “企業級” VMs 都是)。某種虛擬標志將會出現,來指出一個全部清掃 GC 通路;在 Sun JVM 中,標志在 GC 輸出行的開始以 “[Full GC ...]” 形式出現。
      想要診斷 ClassLoader 和/或不匹配的類沖突,class 可以幫上大忙。它不僅報告類何時加載,還報告類從何處加載,包括到 JAR 的路徑(如果來自 JAR)。
      jni 很少使用,除了使用 JNI 或本地庫時。打開時,它將報告各種 JNI 事件,比如,本地庫何時加載,方法何時彈回;再一次強調,在不同 JVM 版本中,輸出會發生變化。

      5、  Command-line -X

      我列出了 JVM 中提供的我喜歡的命令行選項,但是還有一些更多的需要您自己發現,運行命令行參數 -X,列出 JVM 提供的所有非標準(但大部分都是安全的)參數 — 例如:
      l  -Xint,在解釋模式下運行 JVM(對于測試 JIT 編譯器實際上是否對您的代碼起作用或者驗證是否 JIT 編譯器中有一個 bug,這都很有用)。
      l  -Xloggc:,和 -verbose:gc 做同樣的事,但是記錄一個文件而不輸出到命令行窗口。
      JVM 命令行選項時常發生變化,因此,定期查看是一個好主意。甚至,您深夜盯著監控器和下午 5 點回家和妻子孩子吃頓晚飯,(或者在 Mass Effect 2 中消滅您的敵人,根據您的喜好),它們都是不一樣的。
      相關教程
      江苏快3 驻马店 | 德宏 | 嘉峪关 | 安岳 | 毕节 | 长治 | 如东 | 常德 | 泸州 | 霍邱 | 安阳 | 锡林郭勒 | 昌都 | 无锡 | 喀什 | 湘西 | 陕西西安 | 大理 | 文山 | 三沙 | 汝州 | 十堰 | 海西 | 邹城 | 新乡 | 赤峰 | 文山 | 神农架 | 玉环 | 广饶 | 佳木斯 | 聊城 | 柳州 | 文昌 | 来宾 | 湖州 | 酒泉 | 韶关 | 中卫 | 荆州 | 信阳 | 绥化 | 烟台 | 乐山 | 遵义 | 焦作 | 阳泉 | 自贡 | 淮北 | 任丘 | 石河子 | 遂宁 | 阳泉 | 四川成都 | 包头 | 许昌 | 宜都 | 滨州 | 周口 | 芜湖 | 南平 | 东台 | 海南海口 | 营口 | 澄迈 | 江苏苏州 | 海北 | 公主岭 | 江西南昌 | 珠海 | 安庆 | 连云港 | 福建福州 | 哈密 | 临汾 | 海宁 | 衡水 | 巢湖 | 库尔勒 | 新沂 | 南平 | 淮北 | 宜都 | 自贡 | 安康 | 赤峰 | 临海 | 莒县 | 诸城 | 内蒙古呼和浩特 | 日喀则 | 兴化 | 莱芜 | 南阳 | 中山 | 那曲 | 淮南 | 库尔勒 | 白沙 | 基隆 | 天水 | 香港香港 | 吉林长春 | 保定 | 临沂 | 厦门 | 武夷山 | 运城 | 东海 | 丽江 | 鄢陵 | 巴中 | 兴安盟 |