倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

翔泳社 SJC-P テキスト覚え書き : 第3章 クラス、メソッド、インターフェース (メソッド・クラスの定義)

この章で学ぶこと

SUN教科書 Javaプログラマ(SJC-P) 5.0・6.0両対応(試験番号310-055、310-065)

SUN教科書 Javaプログラマ(SJC-P) 5.0・6.0両対応(試験番号310-055、310-065)

メソッドの使用

  • メソッド・・・あるロジックを使用してデータ処理を実行する自己完結型のコードブロック
  • メソッド宣言・・・プログラム内でメソッドを定義すること

メソッドの宣言


《修飾子》 《戻り値の型》 《メソッド名》(《引数リスト》){
《メソッドの本体》
}

  • 戻り値の型、メソッド名は必須
  • 修飾子、引数のリストは使用してもしなくても良い
  • 修飾子を指定しないと、デフォルトの修飾子が指定されたと見なされる
  • static 変数、static メソッド・・・そのクラスが共有して使用する変数、メソッド。 static 修飾子を使用して宣言する。
  • static 修飾子・・・変数、メソッド、メソッド外のコードブロックに適用できる
  • static 変数
    • static 変数はクラスがロードされるときに初期化される
    • static 変数は「参照変数名.static変数」もしくは「クラス名.static変数」の形で呼び出す
  • static メソッド
  • static イニシャライザ
    • static イニシャライザはクラスのロード時に1回だけ呼び出される(main() メソッドなどよりも前に呼び出される)

可変長メソッド

  • JDK 5以降
  • メソッド定義時に1つだけ指定可(複数指定するとコンパイルエラー)
  • メソッド引数の最後にのみ指定可(それ以外の箇所に宣言するとコンパイルエラー
  • 「《変数の型》... 《変数名》」の形で宣言

メソッドの JavaBeans 命名標準

public class ScoreBean{
    // プロパティ
    private double meanScore;

    // プロパティ meanScore のゲッターメソッド
    public double getMeanScore(){
        return this.meanScore;
    }

    // プロパティ meanScore の値を設定するセッターメソッド
    public void setMeanScore(double score){
        this.meanScore = score;
    }
}

クラスとオブジェクト


クラスの定義

《修飾子》 class 《クラス名》{
《クラス定義本体》
}

  • class キーワード、クラス名は必須
  • アクセス修飾子は「public」か「アクセス修飾子なし」かのいずれか。 修飾子がない場合はデフォルトのアクセス修飾子が指定されたものとみなされる
  • その他の修飾子 abstract , final, strictfp

オブジェクトの作成

ネストクラス

  • ネストクラス・・・トップレベルクラス(外部クラス)の内部に定義されたクラス
  • ネストクラスと外部クラスに同じ名前を付けることはできない
  • 任意のコードブロック内で宣言できる
  • メソッドのコードブロック内で宣言されたネストクラスはローカルクラスとも呼ばれる。 ブロックスコープ内の final なローカル変数にアクセスできる
  • ネストクラスは外部クラスのメンバに制限なくアクセスできる。 特に private メンバにもアクセス可
  • static なネストクラスのスコープはクラス
  • static なネストクラスは static メンバ、static イニシャライザを持てるが、ローカルクラスは持てない
  • ネストクラスは abstract, final として宣言できる
  • ネストクラスは public, protected, privete のアクセス修飾子を持てる(指定なしも可)

外部クラスからネストクラスをインスタンス化する方法

// 外部クラス
class MyTopLevel{
    // ネストクラス
    class MyInner{}

    // static ネストクラス
    static class StaticInner{}
}

// このとき
MyTopLevel tl = new MyTopLevel();
MyTopLevel.MyInner inner = mt.new MyInner();

// もしくは
MyTopLevel.MyInner inner = new MyTopLevel().new MyInner();

// static ネストクラス
MyTopLevel.StaticInner sinner = new MyTopLevel.StaticInner();

ローカルクラス

  • ローカルクラス・・・あるメソッド内に定義したネストクラス
  • メソッド内でのみ有効
  • アクセス修飾子, static キーワードは付けられない
  • 外部クラスの任意の変数にアクセス可(private 変数も可)
  • メソッド内の final 変数にアクセス可(そうでない変数にアクセス使用とするとコンパイルエラーになる)

匿名クラス

  • 匿名クラス・・・名前を持たないネストクラス
  • 既存のクラスのサブクラスかインターフェースを実装するクラスとして定義する
  • 明示的なコンストラクタ定義はできない


new 《クラス名》(){...}
new 《インターフェース名》(){...}