Javaの書式
Javaの書式をみてみましょう
書式
Javaのプログラム1つはクラス(class)といい、その中にメソッド(method)や変数(variables)を含みます。クラス、メソッド、変数
Javaのプログラムの基本は以下の形式です。package test.basic
import test.advance.Sample000;
public class Sample000 {
public int i;
// これはコメント
/* これもコメント */
public Sample000(){
}
public int calc(int i){
int j = 10;
return i+j;
}
}
クラスの定義
クラスは
修飾子 class クラス名 {
…
}
という形になっています。原則として1つのテキストファイルに1つのクラスを記述し、クラス名とファイル名は同名でなければいけません(大文字、小文字を区別するので注意してください)。
ソースコードを既述したテキストファイルの拡張子は「.java」、コンパイル後は「.class」になります。また、クラス名の最初は大文字とするのが普通です。
修飾子(modifier)などという難しそうな言葉がでてきましたが、これにはアクセス修飾子とそれ以外の役割を持つものがあります。
上の例でいうpublicはアクセス修飾子の1つです。アクセス修飾子は(例でもわかように)メンバー変数(i)、メソッドにも既述されますが、文字通りに「誰がこれをみてよいか」を意味しています。
種類としては、public/protected/privateがあり、それぞれ「誰もがこれを参照・操作できる」、「同じパッケージにあるクラス、もしくはサブクラスからなら参照・操作できる」、「このクラスからしか参照・操作できない」といった意味を持ちます。
たとえば、メンバー変数の定義「public int i;」を「private int i;」というように変更すると、このクラス外(つまり、他のクラス)からは、直接、この変数iにはアクセスできなくなります。また、アクセス修飾子以外の修飾子には、static/final/abstract/synchronized/nativeなどがありますが、それぞれ意味合いが違うのでここでは説明を省きます。(staticが宣言されたクラスをstaticクラスといい、それを使用するにあたってインスタンス化をする必要がないという特徴をもちます)
パッケージ
クラスを分類するため(というと語弊があるかもしれませんが)、Javaにはパッケージという考え方があります。先ほどの最初の例ではtest.basicというパッケージを作りましたが、これを(Windowsの)エクスプローラーで見ると、testというフォルダー下にbasicというフォルダーがあることが分かります。つまり、パッケージとは、物理的には「階層化されたフォルダーのこと」です。
クラスを既述する.javaファイルの先頭では、このパッケージ名を既述する必要があります。これが上の例で
package test.basic
と書かれている部分です。パッケージ名の慣例に「ドメイン名を逆さから使う」というものがあります。山田株式会社という会社が、「yamada.co.jp」というドメイン名をもっているとすれば、これを逆さから「jp.co.yamada.xxxx」というパッケージ名を使うという意味です。パッケージ名を含めたクラス名(test.basic.Sample001など)をクラスの完全修飾名(FQCN)といいます。対外的なドメイン名は全世界的にユニークであるため、このルールに従えば、「世界的にユニークな完全修飾名を持つクラス」を作ることができます。
インポート
Javaはいろいろたくさんのクラスを活用するというスタイルでプログラムを作ります。このとき同じパッケージ内にないクラスを参照する際には、import文で「これをつかいますよ」という宣言をしなくてはなりません(C言語でいうincludeに似ています)。
import test.advance.Sample000;
部分がそれです。import文では「test.advance.*」というようにワイルドカードでの指定ができますが、FQCNを指定することが望ましいとされています。eclipseを使用することでFQCN形式のimport文を簡単に作成できます。
メソッド
メソッドは、クラス内に修飾子 戻り値の型 メソッド名(引数の型 引数を意味する変数) {
…
}
の形式をとって定義されます。
例の
public Sample000(){
}
と
public int calc(int i){
int j = 10;
return i+j;
}
の部分がそうです。このうち、クラス名と同名の前者は特殊なメソッドで「コンストラクタ(Constructor)」と呼ばれます。これは文字通り、クラスをコンストラクトする、つまり、他のクラスからこのクラスが呼び出されたときに(初期設定をするために)呼び出されるメソッドです。コンストラクタにも引数をもたせることができますが、特に引数を持たないコンストラクタを「デフォルトのコンストラクタ」といいます。
また、メソッドはメソッド名+引数で一意に特定されます。つまり、メソッド名が同じで引数のタイプが違うメソッドを複数用意し、異なる挙動をさせることが可能です。これをメソッドの「オーバーロード」と呼びます。また、メソッド名の最初は小文字とするのが普通です。
メソッド内に含まれる式は必ず「;(セミコロン)」で終わらなくてはなりません。
変数
他の言語と同じように変数にはグローバルにしようできる(つまり、どのメソッドからも参照できる)変数と、そのメソッド内でしか使用できない変数があります。前者を「メンバー変数」といい、メソッドの外(一般には、先頭のメソッドの前)で宣言します。staticクラス内のメンバー変数は「クラス変数」、static宣言されていないクラスのメンバー変数を「インスタンス変数」と呼ぶことがあります。
また、メソッド内のみで使用する変数は「ローカル変数」といい、これについても型の宣言は必要ですが、宣言する箇所は任意です(つまり、メソッドの先頭に集めなくてはならないといったルールはありません)。また、JavaBeanではメンバー変数のことを「プロパティー(特性値)」と呼びます。
変数の宣言文も必ず「;(セミコロン)」で終わらなくてはなりません。
コメント行
コメントは1行をコメントアウトする際には、行の先頭に「//」と書きます。複数行をまとめてコメントアウトしたい場合には、「/*」と「*/」で囲みます。2007年02月22日(木) 16:51:28 Modified by wanderingse