Java SE7 Gold 取得を目指して (3)


Java SE7 Gold をとりたい…!

本日は第3回目です。

今日のこぼれ話

そういえばなぜこの時期にGold勉強を始めたのかといいますと、今リテイク無料キャンペーン中なのです! (2016/1/22~2016/5/31)
http://www.oracle.com/jp/education/campaign-1898205-ja.html#20160122
つまり、5月31日までに対象の試験を受けて、万が一落ちてしまっても、同一の試験をもう一度無料で受けられるのです。(再受験は2016/7/31まで)
僕はOracleの回し者ではないですが(なれるものならなってみたいですが)、もし試験を受けてみたいと考えている方がいらっしゃいましたらいい機会なのではと思います。

本日知ったこと(3章)

  • ネストクラス

    • 非staticなネストクラスをインナークラスと呼ぶ
    • ネストクラスはアウタークラスのメンバの一部(特にアクセス修飾子を考えるときにこれを念頭におくと良さそう)
    • なのでこんなアクセスも可能
    class Outer
    {
      private int num1 = 10;
    
      class Inner {
        private int num2 = num1 + 1;
      }
    
      public static void main (String[] args) throws java.lang.Exception
      {
        System.out.print(new Outer().new Inner().num2);
      }
    }
    
    • staticなインナークラスをstaticクラスとか呼ぶらしいが、C#とは違うので new して使う。 Outer.StaticInner obj = new Outer().StaticInner()
    • this キーワードでの参照は内外クラスのスコープ通りで直感的。ネストクラスから外側クラスのthisに触りたい場合は Outer.this.val
  • ローカルクラス・匿名クラス

    • メソッド内で定義されたクラス
    • 外側クラスのメンバへのアクセスはJava8でLambda使うときと同じ
    ルール ローカルクラス 匿名クラス
    abstract, final 修飾子 ×
    コンストラクタ ×
    • 匿名クラスのインスタンス化は、Anony obj = new Annoy() { ... }; 最後のセミコロン必須。
    • インスタンス化後すぐメソッド使うなら new Anony() { ... }.method();

あまり見かけない構文を、なんでわざわざ章立てたんだろうと思いましたが(ページ数も少なめ)、Java8でのLambdaと結びついてくるからですかね。それとも見かけないのは僕の周りだけなんですかね。