前言:
Android寫久了,你會發現雖然自己在用java寫Android,但是會Android不代表會Java。所以我找了猛虎出柙雙劍合璧版來拜讀。
還沒買,網路上的電子書有試讀版的,大改只給你試讀187頁。
我還沒買正式版,看完試讀版後整理一些我之前忽略的Java基礎。
https://play.google.com/store/books/details?id=EElBCgAAQBAJ
上面是連結,有興趣可以看看他的試讀版內容。
正文開始:
1、&和&&差別
同樣都是 AND 但差別在哪呢?
用一個陣列和if判斷式做簡單說明
ArrayList<String> arrayTest = null;
if(ArrayTest != null && ArrayTest.size() == 1){
}
if(ArrayTest != null & ArrayTest.size() == 1){
}
做個很簡單的判斷,其實公用一樣,差別就在於&如果第一個為false,他還是會往下一個做判斷。
&&如果第一個是false,就直接離開if判斷式了
把上面的例子開程式去跑,if判斷式使用&會崩潰,因為根本是null判斷不了。
&&很順利地跑完判斷式。
2、for迴圈的命名斷點
label_name: label_outLoop: for (int i = 0; i < 10; i++) { label_InnerLoop: for (int j = 0; j < 7; j++) { if (j == 5) break label_outLoop; } }
可做到goto的效果
3、for-each的用法
假設你有個陣列內有很多String,這時候我們可以使用for-each把它全部列出來
for-each ArrayList<String> TestList = new ArrayList<>(); TestList.add("hello1"); TestList.add("hello2"); TestList.add("hello3"); TestList.add("hello4"); for (String string : TestList) { System.out.println(string); }for(要顯示的單體string : 要顯示的陣列)
此時看Log就會很漂亮的全部顯示出來。
4、方法內變數int...用法
我們要先了解方法超載overloading這件事情
有時候我們會需要使用到同個名稱,但方法參數有變。
ex:
public void calc(int a){...} public void calc(int a, int b){...}如果要寫很多這種的就很累人。
所以可以用int...的方式代表很多參數,這時候就可以取用這些參數做事。
如下例子:
public int newCalc(int... c) { int sum = 0; for (int i : c) { sum += i; } return sum; }
這就變成一個加法計算的方法。
System.out.println("加總:”+newCalc(5,5,10,8)); //加總:28
5、繼承的一些技巧
class Animal { public void move() { System.out.println("animal move..."); } } class Cat extends Animal { @Override public void move() { System.out.println("cat小貓跳動!!!"); } public void skill() { System.out.println("cat小貓亂抓!!!"); } } class Bird extends Animal { public void move() { System.out.println("鳥拳跳動!!!"); } } class Tiger extends Cat { public void skill() { System.out.println("狩獵!!!"); } }
看看圖片有助於幫助了解這邊在幹嘛
這時候
Tiger tiger = new Tiger(); //這行我們稱做用Tiger的觀點來看Tiger Cat tiger=new Tiger();//用貓科動物的觀點來看Tiger Animal tiger=new Tiger();//用動物的觀點來看Tiger Animal tiger = new Tiger(); ((Bird) tiger).move();
編譯是可以過的,但是會Crash
利用Bird的觀點來操作new Tiger();的實體基本上是不合邏輯的,但卻可以過關,因為Bird和Tiger都同為Animal的子類別。
此時可以使用instanceof來做判斷
if(tiger instanceof Bird){ ((Bird) tiger).move(); }else{ Log.d(“checkpoint”,"根本不是Bird!!"); }
後記
然後....
就沒有然後了。
如果我有買這本書在做分享。
沒有留言:
張貼留言