ポイントというか心にとまったことのアウトプットです。
※個人的な重要度のバイアスがかかっているので、「べつにいいかー」と思ってたりすることはメモしてません。
※手を動かして理解したことなど、間違いを含む可能性があります。
※手元の環境は断りがなければ基本はjava 7 をIntelliJ IDEA Ultimate on OSX で動かしてます。
「Javaプログラムの実行と制御構文」
- stack trace 出力、Threadクラスを使って自作ができる。Throwable使ってもとれる
- if 文はブロック({})書くことを推奨
- 条件演算子(三項演算子)は、変数初期化時にのみ利用を推奨
- ???
- if-else と、switch-case の使い分け
SwitchTest st1 = new SwitchTest();
SwitchTest st2 = new SwitchTest();
//下記はコンパイルエラー
//switch(st1) {
//
// case st2:
// System.out.println("match");
// default:
// System.out.println("not match");
//
//}
if (st1 == st2) {
System.out.println("operator match");
} else if(st1.equals(st2)){
System.out.println("method match");
} else {
System.out.println("not match"); //こいつが出力される
}
- 上の例で、switch-caseは基本intで分岐、Stringが使えるのはJava7から
- あと、ifでの比較のほう、equals()に引っかからなかったのは、equalsメソッドをオーバーライドしてないから
- p.307 のリスト10.7のswitch判定用の変数がiになってるけどこれはxの間違いかな
- switch文でbreak書かないときは、
//fall through
とコメントを書く 読みやすさでswitchを選ぶ
話はそれるけどScalaのパターンマッチがJavaに比べていかに強力かというのが改めてよくわかる。。。
for文、省略可能部分があるので、無限ループもできる
ラベルを利用して、入れ子のループを一気に抜ける
jump:
while(true){
while (true){
for(;;){
System.out.println("looooop");
break jump;
}
}
}
- 上記の例では、一度だけ、looooopの文字列が出力される