この項目ではJava言語における予約語(よやくご)に関して説明する。
この項目は、プログラムの細かい説明には立ち入らず、他の言語の予約語と比較できるような説明を目的としている。
なお、文中のメンバとは、フィールド(クラス内のグローバル変数に相当する)、メソッド(手続き、関数に相当する)、コンストラクタ(オブジェクト指向言語に備わるオブジェクトを生成するときの手続き)のことを指す。
目次 |
Javaでは、原始型(プリミティブ型)を表す予約語にC言語と共通の予約語を使用している。
C言語と共通の予約語を使用している。
例1 public class クラス名 { ... }
例2 public class クラス名 extends 親クラス名 { ... }
例3 public class クラス名 implements インタフェース名1,インタフェース名2, ... { ... }
例4 public class クラス名 extends 親クラス名 implements インタフェース名1, ... { ... }
例1 public interface インタフェース名 { ... }
例2 public interface インタフェース名 extends スーパーインタフェース名1,スーパーインタフェース名12, ... { ... }
例: Sample s = new Sample()
クラス、メンバの宣言に付けられる修飾子である。
例1 final int constantvalue = 5;
例2
final int constantvalue; //初期化なし
...
public Sample(){ //コンストラクタ
constantvalue = 5; //1回 け代入できる。
}
記述例: static final String STR = "constant";
例 public class Sample1 {
public static void method{...} //static なメソッド
}
public class Sample2 {
void proc(){
...
Sample1.method(); //インスタンスを生成せず直接実行できる。
...
}
}
Collectionオブジェクトの初期化などに利用される。データベースにアクセスするためにJDBCドライバを呼び出すClass.forName("ドライバ名")もこのスタティックイニシャライザを呼び出している。
例 public class StaticSample {
private static final List<String> list;
static{
List<String> tempList = new ArrayList<String>();
tempList = new ArrayList<String>();
tempList.add("Hello,");
tempList.add("World.");
StaticSample.list = Collections.unmodifiableList(tempList);
}
}
記述例:
public abstract class Sample {
public void method1(){
//実装のある記述
}
public abstract void method2(); //実装がないメソッド
}
記述例:1
public synchronized void method(){...}
記述例:2
public void method(){
...
synchronized(this){ //自クラスのインスタンスに対して排他制御
//排他制御されるブロック
}
...
}
記述例:3
public void method(Object o){
...
synchronized(o){ //Object o に対して排他制御
//排他制御されるブロック
}
...
}
例
public class Sample {
volatile SyncSample s;
...
}
例外処理はC言語にはない。C++ではほぼ共通の予約語が使用されている。 但しfinallyはC++には存在せず、throwsもC#には存在しない。
try{と}との間)で例外が発生しうるコードを囲み、catchブロック(catch(Throwableのサブクラス 例外オブジェクト){と}との間)に例外発生後の処理を書く。finallyブロック(finally{と}との間)には、ファイルのクローズ、データベースセッションの切断、ログアウトなど、例外発生の有無にかかわらずtry/catchブロック内の処理を終了する前に必ず実行しておきたいコードを書く。catchを記述した場合finallyは省略可能であり、finallyを記述した場合catchは省略可能である。try/catchブロックとfinallyブロックの両方にreturn文がある場合、後者が優先される。catchブロックにはif-else-if文のように連続して捕捉したい例外を記述することができる。ただし、例外記述順序は最初に具象例外クラスを記述し、徐々に抽象化してゆき、最後にExceptionクラスを記述するようにすべきである。先に抽象的な例外クラスを記述すると、そのサブクラスもそこで捕捉されてしまうからである。
記述例:
public void method() throws Exception{ // 例外をスローすることを宣言
try {
...
if (err)
throw new IOException(); //例外を発生させる。
//1) 正常終了
//このtryブロックにはreturn文を記述することもできる。
//但し、finallyブロックにすでにreturn文があるときは
//ここにreturn文を書いてもfinallyブロックのreturnが優先される。
}
catch(IOException e) { // IOException は Java の例外クラスの1つ
//2) エラー処理
//このcatchブロックにはreturn文を記述することもできる。
//但し、finallyブロックにすでにreturn文があるときは
//ここにreturn文を書いてもfinallyブロックのreturnが優先される。
}
catch(Exception e) { //IOException よりも上位(親)の例外クラス
//3) 例外をさらに外のブロックにスローする。
throw e;
}
finally {
//例外発生の有無にかかわらず、1) 2) 3) どの 合でもこのブロックは
//必ず処理される。ここにreturn文があるときはtry/catchブロックにも
//return文があろうともこちらのreturn文が優先される。
...
}
}
J2SE 1.4でassertが追加され、J2SE 5.0でenumが追加された。
const, goto が予約されているが、Javaでは使用できない。使用するとコンパイルエラーになる。 StrictMathクラスにも使われている、浮動小数点演算の精度を高めるstrictfpも予約語である。現在ではJavaの浮動小数点演算ではこのstrictfp修飾子を使わなくもほぼ高い精度を得ることができるが、strictfpを付与した場合は相異なるプラットフォーム同士の間でも演算結果が一致することが保証される。
|
|
|
|---|---|
| 主要技術 | プログラミング言語Java - Javaプラットフォーム - Java Development Kit - Java仮想マシン - Java Runtime Environment - Javaコンパイラ - Javaバイトコード - JAR |
| 歴史 | Javaに対する批判 - Java Community Process - サン・マイクロシステムズ |
| 言語機能 | 文法 - Javaの予約語 - パッケージ - Javadoc |
| 関連技術 | Jakarta Project - Apache Tomcat - NetBeans - Java Beans - Java Message Service - Java Transaction API - Java3D - JDBC - Java Web Start - Applet - Servlet - JavaServer Pages - Java Foundation Classes |