1. 程式人生 > 其它 >【Kotlin-Java】異常處理,synchronized

【Kotlin-Java】異常處理,synchronized

技術標籤:Kotlin-Java

受這篇文章啟發很大

一:個人經驗

相比於java的程式碼,個人更喜歡Kotlin的簡潔程式碼。

1. 異常處理

  1. 初學小白的情況下,對異常根本沒有處理的能力,基本上只是丟擲異常,然後執行 finally。但由於CE的嚴格機制,導致很多地方不得不寫這種丟擲型異常,為了編譯器。對程式設計大佬可能更友好,更安全。
  2. Kotlin的異常是可選擇的,你可以選擇在必要的地方處理異常。

2. Kotlin減少異常做了什麼

  1. 為防止最常見的空指標異常,其定義了變數宣告必要初始化,如果你願意接受空指標的情況,也可宣告為可空型別
  2. 一個類預設不可被繼承,想被繼承得開放類 open

3. 樣例

  1. 該demo為Kotlin對資料庫的操作
  2. mLock 是一個物件,在synchronized中鎖住實現資料庫的互斥訪問
  3. 事務:
    1)開啟事務。
    2)執行endTransaction() 方法時會檢查事務是否為成功
    3)程式執行到endTransaction()之前呼叫了setTransactionSuccessful() 方法設定事務的標誌為成功則提交事務,如果沒有呼叫則回滾事務。
  4. 注意finally中的處理
    public void addHistory(AudioBean itembean) {

        synchronized(mLock) {
            SQLiteDatabase db =
null; boolean isSuccess = false; try { db = mDbHelper.getWritableDatabase(); //先去刪除 解決重複問題 int deleteresult=db.delete(Constants.HISTORY_TB_NAME,Constants.HISTORY_TITLE + "=?",new String[]{itembean.getTitle() + ""
}); /* System.out.println("1111111111"+deleteresult);*/ //刪除以後再新增 //1.手動設定開始事務 db.beginTransaction(); ContentValues values = new ContentValues(); //封裝資料 values.put(Constants.HISTORY_Album_ID,itembean.getAlbumid()); values.put(Constants.HISTORY_TITLE,itembean.getTitle()); values.put(Constants.HISTORY_ARTIST,itembean.getArtist()); values.put(Constants.HISTORY_DURATION,itembean.getDuration()); values.put(Constants.HISTORY_Size,itembean.getSize()); values.put(Constants.HISTORY_Album,itembean.getAlbum()); values.put(Constants.HISTORY_DATA,itembean.getData()); //插入資料 db.insert(Constants.HISTORY_TB_NAME,null,values); //2.資料操作完成 db.setTransactionSuccessful(); isSuccess = true; } catch(Exception e) { isSuccess = false; e.printStackTrace();//日誌輸出 } finally { if(db != null) { //3. 處理完成 檢查並提交事務 db.endTransaction(); db.close(); } if(mCallback != null) { mCallback.onHistoryAdd(isSuccess); } } } }