Java執行順序優先級 部分總結

執行順序,優先級

finally

demo1 : try catch finally

  • 求以下代碼打印結果 :
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            String tag = "onCreate";
            Log.e(tag, getNum(0) + "");
            Log.e(tag, getNum(1) + "");
            Log.e(tag, getNum(2) + "");
            Log.e(tag, getNum(4) + "");
        }
    
        private int getNum(int num) {
            String tag = "getNum";
            try {
                Log.e(tag, "執行 try ---");
                int result = 2 / num;
                return result;
            } catch (Exception e) {
                Log.e(tag, "執行 catch, e :" + e.getMessage());
                return 0;
            } finally {
                Log.e(tag, "執行 finally ---");
                if (num == 0) {
                    return -1;
                }
                if (num == 1) {
                    return 1;
                }
            }
        }
    }
    
    
  • 控制檯打印 :
    2019-09-04 16:53:33.267 10963-10963/com.example.demo0904 E/getNum: 執行 try ---
    2019-09-04 16:53:33.268 10963-10963/com.example.demo0904 E/getNum: 執行 catch, e :divide by zero
    2019-09-04 16:53:33.268 10963-10963/com.example.demo0904 E/getNum: 執行 finally ---
    2019-09-04 16:53:33.268 10963-10963/com.example.demo0904 E/onCreate: -1
    2019-09-04 16:53:33.268 10963-10963/com.example.demo0904 E/getNum: 執行 try ---
    2019-09-04 16:53:33.268 10963-10963/com.example.demo0904 E/getNum: 執行 finally ---
    2019-09-04 16:53:33.268 10963-10963/com.example.demo0904 E/onCreate: 1
    2019-09-04 16:53:33.268 10963-10963/com.example.demo0904 E/getNum: 執行 try ---
    2019-09-04 16:53:33.268 10963-10963/com.example.demo0904 E/getNum: 執行 finally ---
    2019-09-04 16:53:33.268 10963-10963/com.example.demo0904 E/onCreate: 1
    2019-09-04 16:53:33.268 10963-10963/com.example.demo0904 E/getNum: 執行 try ---
    2019-09-04 16:53:33.268 10963-10963/com.example.demo0904 E/getNum: 執行 finally ---
    2019-09-04 16:53:33.268 10963-10963/com.example.demo0904 E/onCreate: 0
    
    • 上題中需要注意:當傳入的 num 爲 0 時,會報錯除數不能爲 0。

demo2 : try throw catch finally

  • 求以下代碼打印結果 :
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            String tag = "onCreate";
    
            try {
                Log.e(tag, "執行 try --- ");
                throw new Exception();
            } catch (Exception e) {
                Log.e(tag, "執行 catch, e :" + e.getMessage());
            } finally {
                Log.e(tag, "執行 finally --- ");
            }
        }
    }
    
  • 控制檯打印:
    2019-09-04 17:11:50.290 11194-11194/? E/onCreate: 執行 try --- 
    2019-09-04 17:11:50.290 11194-11194/? E/onCreate: 執行 catch, e :null
    2019-09-04 17:11:50.290 11194-11194/? E/onCreate: 執行 finally --- 
    

finally 總結:

  • finally 一定會在 return 之前執行,但是如果 finally 是用了 return 或者 throw 語句,將會使 try-catch 中的 return 或者 throw 失效。(demo1)。

throw 總結

  • throws:(demo2)
    • 寫在方法聲明之後,表示方法可能拋出異常;
    • 寫在方法體中,表示方法一定會拋出一個異常,要麼 try-catch 處理,要麼 throws 拋出。

運算

三目運算

demo1 : 三目運算,“==”

  • 求打印結果
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            boolean b = true ? false : true == true ? false : true;
            System.out.println(b);
        }
    }
    
  • 打印結果爲:
    false
    

三目運算 總結

  • == 優先級高於三目運算符
    • 所以 demo1 中的 true ? false : ++true == true++ ? false : true,
      • 先判斷 true==true,爲 true,這時表達式爲:true ? false : ++true ? false : true++,
      • 然後三目運算++從右往左++執行,變爲 true ? false : true,
      • 返回false

繼承

父類子類 執行順序

  • 父類靜態域
  • 子類靜態域
  • 父類成員初始化
  • 父類構造塊
  • 父類構造方法
  • 子類成員初始化
  • 子類構造塊
  • 子類構造方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章