【Java】Java中日期獲取、數值精度、異常處理
阿新 • • 發佈:2020-09-08
日期處理和精度處理
日期處理:long time = System.currentTimeMillis(); //取1970-1-1-零點 到 現在的毫秒數 Calendar = Calendar.getInstance(); (java.util.Calendar) c.setTimeInMillis(time); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); int weekday = c.get(Calendar.DAY_OF_WEEK); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); int second = c.get(Calendar.SECOND); System.out.println(year + " 年 "+(month+1) +" 月 "+day+" 日 星期"+((weekday>1)?(weekday-1):"日")+" "+hour+":"+minute+":"+second); } 精度處理: System.out.println(2.0 – 1.1); //執行結果為0.89999999 利用BigDecimal來處理精度丟失問題: BigDecimal b1 = new BigDecimal(“2.0”); //不要直接傳2.0,不然又預設為double型別 BigDecimal b2 = new BigDecimal(“1.1”); BigDecimal b3 = B1.substract(b2); //呼叫相減的方法
異常處理
異常:程式執行過程中不正常的情況(切記:程式中99%的異常是你無法處理的,無法解決的異常不要捕獲;若為了列印日誌而不解決,儘量不要這樣做,否則要及時丟擲)
異常的傳遞方式: ① 傳遞狀態碼方式(例如,丟擲1 , -1): a)包含的資訊有限; b)可能和正常結果衝突; c)不強制要求處理。 ② 傳遞異常物件的方式:通過throw手動丟擲異常,相當於return方法丟擲異常後,呼叫者如果不能處理該異常,則繼續上拋,知道異常被處理,或直接拋給JVM,當JNM獲得異常後會終止程式執行,並將異常方法呼叫棧資訊輸出 Throwable (所有異常的超類) 有兩種常見方法: String getMessage():返回詳細訊息字串 printStackTrace():將此throwable的詳細方法呼叫棧資訊輸出到控制檯 兩種子類: ---Error 錯誤,嚴重的底層錯誤,無法完全避免,可以不用處理 ---Exception 異常,可以處理 1. RuntimeException:執行時異常,可以完全避免,可以處理也可以不處理,優先選擇避免;編譯器對於程式執行時可能產生的執行時異常,不強制要求提供處理方案 2. 非RuntimeException:非執行時異常(編譯時異常,已檢查異常),不可完全避免,必須處理;編譯器對於程式執行時可能產生的編譯時異常強制要求必須提供處理方案 自定義異常:①自定義編譯時異常,需要繼承Exception ②自定義執行時異常,需要繼承RuntimeException;③需要提供至少兩個構造方法,有一個無參構造 異常處理:兩種方法 1.異常的宣告:當一個方法無法處理可能產生的異常時,可以在方法宣告處宣告可能丟擲的異常型別,當前的方法不在負責處理該異常,交由呼叫者處理 2.try {可能出現異常的程式碼塊} catch(異常型別 e){異常出現後處理程式碼塊}:捕獲異常,並處理(當異常處理後,程式會繼續向下執行,可能跳過一些程式碼塊) 注:try-with-source語法格式(jdk7.0): try(此處放入實現了AtoCloseable介面的物件,以可以自動釋放資源,例如InputStream is = new FileInputStream(“路徑”);){ //其他的程式碼塊 }catch() {} 說明:try(xxx; xxx;)內放的是需要釋放資源的語句,即實現了AutoCloseable介面的物件構造語句,釋放順序是從後到前。此種語法可自動釋放或關閉資源,不寫finally 案例: try {①;②;③;} catch(異常型別1 e) {④} catch(異常型別2 e) {⑤} 若②處可能出現異常型別1、異常型別2、異常型別3 若是異常型別1、執行的程式碼塊有①②④; 若是異常型別2、執行的程式碼塊有①②⑤; 若是異常型別3、執行①②後catch無法捕獲,向上丟擲 結論:當try塊中的程式碼產生異常時,會通過catch自上而下的嘗試匹配,一旦匹配成功,澤後續的catch不知嘗試執行;當catch的異常型別有繼承關係,優先捕獲子類異常 finally :該程式碼塊中的程式碼表示無論 如何都一定要執行(通常會將關閉流、連線等程式碼現在此處) ``