2、簡単な「最低限の Java の基礎知識」
技術情報 TOP へ


ここでは Java に関する基礎知識の少ない方のために、Java に関連する最低限のキーワードの意味を簡単に説明しています。




クラス

クラス ( class ) というのは、Java を含むオブジェクト指向では重要な概念となります。
オブジェクト指向ではプログラムはオブジェクト ( 物 ) とオブジェクト( 物 ) の関連、連携、通信、 といった関係で動作します。 プログラムの単位はオブジェクトとなり、オブジェクトはクラスが基になります。 クラスとはオブジェクトを定義したものになります。 クラスはフィールド ( メンバ変数 ) とメソッドをもっており、それらの実装によって、 そのクラスの性格が決まります。

Java では例えば Hello クラスは、プログラムソースでは Hello.java となり、バイトコードでは Hello.class となります。

基本的にクラス名とファイル名は同じでなければなりません。
例:Hello クラスは Hello.java というファイル名とします。 ( インナークラスを除く。 )




コンストラクタ

コンストラクタとは、クラスのインスタンス ( 実体 ) を生成する際に呼び出す処理となります。 インスタンス生成時に呼び出されるため、オブジェクトの初期化処理などに利用します。
コンストラクタはクラスと同じ名前となります。メソッドによく似た記述ですが戻り値はありません。 引数は自由に定義できます。
また、引数が相違していれば一つのクラスに複数のコンストラクタを定義することができます。
( これを「オーバーロード」といいます。 引数を持たないコンストラクタをデフォルトコンストラクタ とも言います。)




アクセスレベル修飾子

対象: クラス、メソッド、メンバ変数

アクセスレベル修飾子をつけることで、クラス変数 や インスタンス変数、メソッドに アクセス制限を掛けることができます。

具体的には下記のルールが適用されます。

private ・・・他のクラスからはアクセスできない。自クラスのみアクセス可能。
public ・・・他のクラスもアクセス可能
protected ・・・自クラスと自クラスを継承したクラスのみアクセス可能。




static キーワード

対象: メソッド、メンバ変数

public static **** や private static **** といった static キーワードが付くメンバ変数を「静的変数」、メソッドを「静的メソッド」と言います。
これらは Java ( JVM ) 実行時にメモリ上に実体が一つしか存在しないことを表します。

プログラムが実行している間、有効となる変数や利用できるメソッドとなります。
( その間、メモリは使用された状態となります。 )

static キーワードを持つ、変数やメソッドにアクセスするには、クラスをインスタンス化する必要はありません。
( メモリ上に実体が一つしか存在しないので )

利用する際の注意点として、他のオブジェクトやスレッドから参照や変更が発生する可能性があることに留意します。




final キーワード

対象: クラス、メソッド、メンバ変数

・クラス
final キーワードがついたクラスは、サブクラスを作成できなくなります。

・メソッド
final キーワードがついたメソッドはサブクラスでオーバーライドすることができなくなります。

・メンバ変数
final キーワードがついたメンバ変数は定数となり、一度値を代入するとその変数の値を変更することができなくなります。

また、final キーワードがついたメンバ変数はコンパイル時にインライン化されます。
つまり、以下のような final キーワードがついた変数 item を宣言した場合、その変数を参照する別のクラス A があった場合、 コンパイル時に A クラスの A.class ファイルには変数を参照箇所に直接 "value" と記述された状態で class ファイルが生成されます。

これは final キーワードがついた変数しているシステムでは、修正箇所の反映などで一部の class ファイルの入れ替えを行う場合、 留意しなければならない点です。
つまり、 final キーワードがついた変数の値の変更などを行い、 その class ファイルだけの入れ替えを行うことで不整合がおきます。その変数を参照しているクラスも コンパイルし直す必要があります。

static final String item = "value";




abstract キーワード

対象: クラス、メソッド

abstract キーワードがついたクラスやメソッドは抽象クラス及び抽象メソッドとなります。 抽象クラスはインスタンスを生成することができません。
抽象クラスは抽象メソッドを持ちますが、抽象メソッドは 抽象クラスを継承したサブクラスでオーバーライドして使用します。




変数の種類

Java では、変数は次の 3 つに分けられます。

・クラス変数
pvivate static String text ; のように static キーワードを持つ 変数。
マルチスレッド環境 ( サーブレットなど ) では、使用する状況によってはスレッドアンセーフとなります。

・インスタンス変数
pvivate String text ; のように static キーワードを持たない そのクラス内で使用できる変数。他のクラスからはクラスのインスタンス から使用できる。
使用方法によってはマルチスレッド環境 ( サーブレットなど ) では、使用する状況によってはスレッドアンセーフとなります。

* 上記の 2 つをフィールド ( メンバ変数 ) と呼びます。

・ローカル変数
メソッド内の String tex ; のようにそのメソッド内だけで使用できる変数。 スレッドごとにスタック領域と呼ばれるメモリ領域が確保されるのでマルチスレッド環境 ( サーブレットなど ) でもスレッドセーフとなります。




継承

継承を利用すると既に存在するクラスを基にしてクラスを作成することが可能と なります。

たとえば、A クラスを継承した B クラスは、A クラスのメソッドやフィールドを自クラスに 存在しているかのように使用することが可能となります。( private 以外のメソッドやフィールド )


    ・図 1 :簡単なイメージ図 
      

    ・図 2 :UML のクラス図などでは以下のように表します。
      

継承を使用するには、extends キーワードを使用します。

public class B extends A { }

上記の場合、A クラスは B クラスの「スーパークラス」、B クラスは A クラスの「サブクラス」 となります。

継承はオブジェクト指向に備わる概念の一つですが、非常に便利な機能です。
他の言語などでは、多重継承 ( 複数のクラスを継承 ) が可能なものもありますが、 Java では多重継承はできず、単一継承( 一つのクラスを継承 ) となります。




オーバーライドとオーバーロード

・オーバーライド
スーパークラスで定義されたメソッドをサブクラスで、同じメソッド名、同じ引数の型、 同じ引数の数、同じ引数の順、同じ返却値で定義することです。( サブクラスでのスーパークラスのメソッドの上書き )

・オーバーロード
一つのクラス内で、同じメソッド ( もしくはコンストラクタ ) 名を使用して、引数の型、 引数の数、引数の順に相違があるメソッドを作成することです。




技術情報 TOP へ


Google
WWW を検索 whitemark.co.jp を検索
[ 株式会社ホワイトマーク TOP ]   [ 免責事項 ]

Copyright © 2006 by WhiteMark, All rights Reserved. Last Modified: 2007/06