このエントリーをはてなブックマークに追加

ポイントというか心にとまったことのアウトプットです。

※個人的な重要度のバイアスがかかっているので、「べつにいいかー」と思ってたりすることはメモしてません。

※手を動かして理解したことなど、間違いを含む可能性があります。

※手元の環境は断りがなければ基本は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の文字列が出力される