倭マン's BLOG

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

[Java]翔泳社 SJC-P テキスト覚え書き : 第4章 Java 言語の基本 (修飾子)

この章で学ぶこと

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

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

アクセス修飾子の使用

  • アクセス修飾子」(可視性修飾子)・・・修飾の対象となる Java 要素のかしせいのスコープ(範囲)を決定する
  • ローカル変数にはアクセス修飾子を使うことはできない
  • Java のアクセス修飾子・・・public, protected, private, デフォルト
  • クラス宣言は public またはデフォルトのみ可能
  • private 指定されたメンバはクラス間に継承関係があっても自クラスからしかアクセスできない
  • protected は
    • クラスメンバに適用でき、クラス宣言には適用できない
    • 同じパッケージ内のクラスからアクセス可能
    • このメンバをもつクラスを継承したサブクラスからアクセス可能(他パッケージでもよい)
  • デフォルト修飾されたクラス、クラスメンバは同一パッケージ内のみからアクセス可能
  • メソッドをオーバーライドする際、アクセス制限を厳しくすることはできない
アクセス修飾子 クラスへの適用 コンストラクタへの適用 変数への適用 メソッドへの適用 説明
public どのクラスからでも利用可能
protected × このクラスを継承したサブクラス、もしくは同一パッケージ内のクラスから利用可能
デフォルト 同一パッケージ内のクラスからのみ利用可能
private × 同一クラス内からのみ利用可能

用法修飾子


final 修飾子

  • クラスに使用した場合・・・拡張(継承)できない(サブクラスを作ることができない)
  • 変数に使用した場合・・・変数の値を変更することができなくなる(定数となる)
  • メソッドに使用した場合・・・オーバーライドできなくなる
  • final 指定されたオブジェクト参照は再代入できないが、final 指定されたオブジェクトの参照先にある final でない変数の値は変更することができる

static 修飾子

  • クラス内で共有される変数、メソッドに使用する
  • static 変数は「参照変数名.static変数名」もしくは「クラス名.static変数名」という風にアクセスする
  • static メソッドは「クラス名.staticメソッド名()」で呼び出すことができる
  • static メソッドは定義元となっている非 static な変数やメソッドに直接アクセスすることはできない
  • static メソッドを非 static メソッドでオーバーライドすることはできない
  • static イニシャライザコンストラクタの実行前(クラスのロード時)に実行される
  • static イニシャライザは複数定義可能。 出現順に実行される
  • static 修飾子はクラス宣言やコンストラクタには適用できない

abstract 修飾子

  • 抽象クラスは、クラス宣言に abstract キーワードを指定する
  • 抽象クラスは、処理内容が定義されない abstract メソッドを持つことができる
  • あるクラスが1つ以上の abstract メソッドを持っている場合、そのクラスは abstract として宣言しなければならない
  • abstract メソッドを持っていないクラスも abstract として宣言することができる
  • abstract クラスはインスタンス化できない
  • abstract メソッドの宣言には本体( {...} の部分)を書かずに、セミコロン (;) で終了する
  • 抽象クラスをもとにサブクラスを作成する場合は、extends キーワードを使用し、サブクラスに全ての abstract メソッドをオーバーライドする
  • 抽象クラスをもとに抽象クラスを作成する場合はスーパークラスのメソッドをオーバーライドする必要はない(してもよい)*1

transient 修飾子*2

スレッド関連の修飾子

  • volatile 修飾子*3・・・インスタンス変数にのみ適用可能。 この変数が他スレッドから変更を受けても、値が適切に更新される
  • synchronized 修飾子・・・マルチスレッドプログラミングでアクセスを制御するために使用される

修飾子のまとめ

修飾子 クラス 変数 メソッド コンストラクタ イニシャライザ
final × ×
static × ×
abstract × × ×
transient × × × ×
volatile × × × ×
synchronized × × × ×

Javaガベージコレクション

  • ガベージコレクション・・・プログラム中のどこからも利用されていない(参照されていない)オブジェクトを探し、メモリを解放する機能
  • ガベージコレクタの実行は制御できない(促すことはできる)
  • ガベージコレクタの実行は次のいずれかの方法で促すことができる
    • System.gc();
    • Runtime.getRuntime().gc();
  • オブジェクトをガベージコレクションの対象とする(つまりオブジェクトの参照を取り除く)には
    • オブジェクトを指し示しているオブジェクト参照変数に null を代入する
    • オブジェクトの参照変数を、田野オブジェクトに割り当て直す
  • finalize() メソッドはガベージコレクタによってオブジェクトが破棄される寸前に JVM によって呼び指される
  • finalize() メソッドの呼び出しの厳密な実行タイミングは保証されない
  • プログラマが定義した独自の finalize() メソッドは、スーパークラスの finalize() メソッドを自動的に呼び出すことはない。 必要ならば明示的に呼び出さなければならない

Point

  • クラスへの完全パス名は、classpath をもとに作成され、そこにパッケージ名とクラス名が続く
  • static インポートは、クラスの static メンバをインポートし、クラス名を記述せずに static メンバを参照することができる
  • アクセス修飾子は、オブジェクトを安全に扱うために使用する
  • 用法修飾子のそれぞれの振る舞いを理解する
  • オブジェクトは、どこからも参照されないとガベージコレクションの対象となる。 ただし、ガベージコレクタの実行タイミングを制御することは不可能

*1:具象メソッドを抽象メソッドでオーバーライドすることもできる

*2:「transient」・・・(a)一時の、瞬間的な、つかの間の (b)はかない、無常の 【excite辞書】

*3:「volatile」・・・(a)揮発性の (b) (物事が〉変わりやすい、不安定な 【excite辞書】