New Immissions/Updates:
boundless - educate - edutalab - empatico - es-ebooks - es16 - fr16 - fsfiles - hesperian - solidaria - wikipediaforschools
- wikipediaforschoolses - wikipediaforschoolsfr - wikipediaforschoolspt - worldmap -

See also: Liber Liber - Libro Parlato - Liber Musica  - Manuzio -  Liber Liber ISO Files - Alphabetical Order - Multivolume ZIP Complete Archive - PDF Files - OGG Music Files -

PROJECT GUTENBERG HTML: Volume I - Volume II - Volume III - Volume IV - Volume V - Volume VI - Volume VII - Volume VIII - Volume IX

Ascolta ""Volevo solo fare un audiolibro"" su Spreaker.
CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Javaの文法 - Wikipedia

Javaの文法

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Java言語文法はJavaプログラムを記述し解釈する方法を定義するルールの集合である。

目次

[編集] データ構造

言語は特殊な文法を持つが、配列文字列プリミティブ型ではない: それらはjava.lang.Objectに代入できる参照型である。

[編集] 基本データ型

整数型
byte 8-bit 符号付き
short 16-bit 符号付き
int 32-bit 符号付き
long 64-bit 符号付き
浮動小数点数
float 32-bit 符号付き
double 64-bit 符号付き
  • 浮動小数点数は決して例外をスローしない
  • 0(ゼロ)で割った値はInf(無限大)と等値である
  • Infで割った値は0(ゼロ)と等値である。
文字
char 16-bit 符号無しUnicode
ブール代数
boolean true または false
  • falseは0(ゼロ)またはnulを表現することはできない
  • trueは非ゼロを表現することはできない
  • boolean型から非boolean型へのキャストとその逆はできない
プリミティブラッパークラス
使用法
  • 値はある型から他の型へと変換できる
  • 参照に対して基本データ型を渡して使用できる
その他
  • メソッドへは値渡しとなる。
  • デフォルトでは0、nullまたはfalseに初期化される。

[編集] リテラル

整数
8進数 0365, 0[0..7]*
16進数 0xF5, 0x[0..9, A..F, a..f]*
10進数 245, [1..9][0..9]*
浮動小数点数
float 23.5F, 23.5f; 1.72E3F, 1.72E3f, 1.72e3F, 1.72e3f
double 23.5, 23.5D, 23.5d; 1.72E3, 1.72E3D, ...
文字リテラル
char 'a', 'Z', '\u0231'
文字列リテラル
String "Hello, world"
エスケープシーケンス
Unicode文字 \u 16進数Unicode文字を表現するときに使用する
タブ文字 \t
後退(Backspace)文字 \b
キャリッジリターン(復帰文字) \r
改ページ \f
バックスラッシュ \\
シングルクォーテーション(単一引用符) \'
ダブルクォーテーション(二重引用符) \"
ラインフィード(改行文字) \n

[編集] 文字列

文字列

  • Stringオブジェクトはイミュータブルである
  • Stringオブジェクトは生成時に初期化されなければならない
  • コンパイラが文字列リテラル (ダブルクォーテーションで囲まれた文字列)を見つけたとき、Stringオブジェクトが生成される
  • 演算子 "+" と "+=" は文字列を連結するためにオーバーロードされる
String str1 = "alpha"; 
String str2 = new String("alpha");

StringBufferとStringBuilder

  • StringBufferStringBuilderオブジェクトは可変である
  • StringもStringBufferもどちらももう一方から派生したものではない
StringBuffer str1 = new StringBuffer("beta");
StringBuffer str2 = new StringBuffer(50);

[編集] 配列

  • Javaはプリミティブ型クラスインタフェースそれぞれの配列型はもちろん、配列の多次元配列をも持つ。
  • すべての配列要素は同じ型を引き継がなければならない。
  • すべての配列クラスはクラスjava.lang.Objectを引き継ぎ、それらを含む型階層を反映する。
  • 配列オブジェクトは配列要素の数を持っている読み取り専用のlength属性を持つ。
  • 配列は実行時に領域確保される。それで配列生成宣言するときの配列のサイズは可変である(むしろ、Cでは定数表現)。
  • Java配列は一次元である。多次元配列は言語サポートされているが、配列の配列として扱われる。
// 配列を宣言 - 配列名は「myArray」、 要素の型は "SomeClass" への参照
SomeClass[] myArray = null;
// 配列の領域(サイズ)を確保
myArray = new SomeClass[10];
// または宣言と配列生成を同時に行う
SomeClass[] myArray = new SomeClass[10];
// 配列の要素を割り当て (基本データ型は必要ではない)
for (int i = 0; i < myArray.length; i++)
    myArray[i] = new SomeClass();

[編集] 国際化サポート

言語はbyte文字型とを見分ける。文字は内部でUCS-2で保存されるが、J2SE 5.0以降は、言語はUTF-16とそのサロゲートもサポートする。JavaプログラムソースはそれゆえUnicode文字を持つ。

以下にこのような正しいJavaコードを示す。文字列リテラルだけでなくクラスと変数名にも日本語を使うことができる:

public class こんにちは世界 {
    private String 文字列 = "こんにちは世界";
}

[編集] 演算子

[編集] 計算

二項演算子
文法 意味
+ 加算
- 減算
* 乗算
/ 除算
% 剰余 (整数の余りを返す)
単項演算子
文法 意味
- 単項マイナス (符号反転)
++ インクリメント (変数の前か後につけることができる)
-- デクリメント (変数の前か後につけることができる)
! ブール補数演算
~ ビット単位反転
(型名) キャスト

[編集] 代入

文法 意味
= 代入
+= 加算と代入
-= 減算と代入
*= 乗算と代入
/= 除算と代入
%= 剰余と代入
&= ビット演算 ANDと代入
|= ビット演算 ORと代入
^= ビット演算 XORと代入
<<= 左シフト(ゼロ埋め)と代入
>>= 右シフト (符号伝達と代入)
>>>= 右シフト (ゼロ埋め) と代入

[編集] 比較

文法 意味
== 同値
!= 否定
> 大なり
>= 大なりイコール
< 小なり
<= 小なりイコール
instanceof ~のインスタンス

参照型を使うとき、同値演算子(==!=)は参照値を比較し、参照オブジェクトの比較を含まない–比較演算子は、二つの参照が同じオブジェクト(またはnull)を参照しようが、二つのオブジェクトが等価であろうとテストする。.equals(Object)メソッドはオブジェクトの内容を比較するために使われる。instanceof演算子はオブジェクトがクラスのインスタンスであるかどうかを判定するために使われる。

[編集] 条件式

条件式は複合?:演算子を使用する。条件演算子とも呼ぶ。文法:

condition ? expression1 : expression2

条件conditionの評価は、それがtrueであるとき、条件式は式expression1の値を持ち、そうでない場合は条件式はexpression2の値を持つ。

例:

String answer = (p < 0.05)? "reject" : "keep";

// これは以下のコードと等価である:
String answer;
if (p < 0.05)
  answer = "reject";
else
  answer = "keep";

[編集] ブール代数

  • 短絡回路論理演算(結果が判定するまでオペランドを左から右へと評価する)
  • 必要なだけ最小数の式を評価する
  • 部分計算 (むしろ完全評価(計算))
文法 意味
&& AND (左のオペランドがfalseのとき、式はfalseを返し右のオペランドは評価されない)
|| OR (左のオペランドがtrueのとき、式はtrueを返し右のオペランドは評価されない)
! NOT (論理否定)

[編集] ビット演算

二項演算子
& AND (完全評価ではブール演算子として使われる)
| OR (完全評価ではブール演算子として使われる)
^ XOR
<< 左シフト (ゼロ埋め)
>> 右シフト (符号伝達)
>>> 右シフト (ゼロ埋め)
単項演算子
~ NOT (ビット反転)

[編集] 文字列演算子

Syntax Meaning
+ 連結
+= 連結と代入

[編集] 制御構造

[編集] If ... else

if (expr) {
    statements;
}
else if (expr) {
    statements;
}
else {
    statements;
}
  • expr変数は例"if(String a1 == String a2)"が等しくてもtrueではないと論理値を評価しなければならないが、値を比較する。しかし替わりに、値を比較し、論理的に等価ではないと判断する。

替わりに"if(String a1.equals(String a2))" またはインスタンスの比較を使用する。

[編集] Switch文

switch (expr) {
    case VALUE: 
        statements;
        break;
    case VALUE: 
        statements;
        break;
    default:
        statements;
        break;
}
  • expr値はbyte, short, int またはchar型でなければならない。

各々のcase値はユニークなリテラル値でなければならず、変動する変数は使われない。

[編集] forループ

for (initial-expr; cond-expr; incr-expr) {
    statements;
}

[編集] for-each ループ

J2SE 5.0は、コレクションのすべての要素を反復するタスクを非常に簡易化する拡張for文と呼ばれる新しい機能を追加した。そのループ無しでは、反復はコレクションの上で明示的に反復子の宣言をを要求した:

public int sumLength(Set<String> stringSet) {
  int sum = 0;
  Iterator<String> itr = stringSet.iterator();
  while (itr.hasNext()) {
    sum += itr.next().length();
  }
  return sum;
}

拡張for文はこのメソッドを簡素化する:

public int sumLength(Set<String> stringSet) {
  int sum = 0;
  for (String s : stringSet) {
    sum += s.length();
  }
  return sum
}

このループはstringSetに入っている各々のStringを読み、その長さをsumに加算する。

[編集] whileループ

while (expr) {
    statements;
}

[編集] do ... while

do {
    statements;
} while (expr);

[編集] 分岐文

文法 意味
break; 最も深いループから直ちに脱出する。
continue; ループの次の繰り返し(イテレーション)を継続する。
break LABEL ラベルが付いた文に直ちにジャンプする(ラベル付き文の前で直ちにループを終了する)。
continue LABEL ラベルが付いた文にジャンプする(ラベルが付いた文を再開するかまたはラベル付きループの実行を継続する)

[編集] 例:

int sum = 0;
int i = 1;
while (i < 10) {
    if (i == 3) {
        continue;  //このループ反復の残りをスキップする。
    }
    sum += i;
                          
    if (sum > 15) {
        break;  // ループを脱出する。
    }
}

[編集] ラベル

  • コロンがついた識別子からなる
  • 文を識別または参照するジャンプ文のコードをブロックするために使われる。
  • 仮にラベルを故意に除外すると、ジャンプ文は最も深いループを参照する。

LABEL1: statement;
LABEL2: { statements; }

[編集] 注、"goto" 文について

"goto" 文はJavaの予約語であるが、Java言語では機能しない。

[編集] オブジェクト

[編集] クラス

Javaは もう一つのクラスまたはインタフェース内で宣言するネスト されたクラスを持つ。ネストされていないクラスは、'トップレベルクラスと呼ばれる。 内部クラスは非staticなネストされたクラスである。

クラスは以下の修飾子で宣言できる:

  • abstractインスタンス化できない。インタフェースとabstract(抽象)クラスだけがabstract(抽象)メソッドを持つことができる。abstractクラスを拡張する具象(非abstract)サブクラスは引き継がれたabstractメソッドをオーバーライドしなければならない。修飾子finalと併用することはできない。
  • final – サブクラスを作らせない。 finalクラスのすべてのメソッドは無条件にfinalになる。 修飾子abstractと併用することはできない。
  • strictfp – クラスやエンクロージングクラスにおいて、全ての浮動小数点演算は厳密な浮動小数点演算動作を使用する。厳密な浮動小数点演算動作は浮動小数点演算が全てのプラットフォームにおいて同じ結果をもたらすことを保証する。

C++文法は要求するが、Javaクラスはセミコロン(";")で終わらせる必要が無いことに注意すること。

[編集] 継承

// 子クラスは親クラスを継承する
class ChildClass extends ParentClass { ... }  
  • クラスのデフォルトでの親クラスはObjectクラスである。
  • クラスは単一の親クラスだけ継承することができる(実装多重継承はできない)。

[編集] スコープ

  • this – サブクラス(デフォルト)への参照(i.e. this.someMethod())。
  • super – 親クラスへの参照(i.e. super.someMethod())。サブクラスがオーバーライドした、またはサブクラスが隠蔽する継承されたフィールドを持つ、継承されたメソッドにアクセスするためにサブクラスで使う。

[編集] インタフェース

インタフェースは実装の詳細が一切無い抽象クラスである。その目的はクラスの集合がどう使われるかを定義するためにある。共通インタフェースを実行するクラスはインタフェース型のコンテキストで交換可能性を使用することができる。インタフェースはクラスの実装方法を隠蔽する抽象化のコンセプトを強要するのに役立つ。

インタフェースは抽象メソッドとstatic finalフィールドだけを含むことができる。インタフェースメソッドはデフォルト(非実装)でpublicかつabstractであり、インタフェースフィールドはデフォルトで public static final である。

Javaは完全に直交の多重継承をサポートしない。C++にある多重継承は、 フィールド、多重スーパークラスから継承したメソッド、多重継承した型を区別する複雑なルールを持つ。実装からインタフェースを分離することにより、インタフェースは少ない複雑性と少ない曖昧さを持つ多重継承の恩恵を大いに与える。インタフェースは実装を含めることができないが、クラスのシグニチャだけを定義するようになって以来、多重継承を禁ずることの価値は多くのコードを冗長にしている。実装も継承される純粋な多重継承と違って、インタフェースを継承しているすべてのクラスは定義されたメソッドを実装しなければならない。

Javaインタフェースは Objective-C規約のコンセプトのような振る舞いをよく見せる。

[編集] インタフェースの実装

クラスは、一つのクラスを継承できることに加えて、implementsキーワードを用いて一つ以上のインタフェースを実装することができる。

interface MyInterface {
    void foo();
}
interface Interface2 {
    void bar();
}
class MyClass implements MyInterface {
    void foo() {...}
    ...
}
class ChildClass extends ParentClass implements MyInterface, Interface2 {
    void foo() {...}
    void bar();
    ...
}

以下の例では、

public interface Deleteable {
    void delete();
}

Deleteableインタフェースを実装した非abstractクラスは引数無しで戻り型がvoidであるdeleteという名前の非抽象メソッドを定義しなければならない。実装とメソッドの機能は各々のクラスによって決定される。このコンセプトに関して、多くの使用方法がある。例えば:

public class Fred implements Deleteable {
    // このメソッドはDeleteableインタフェースを満足させる
    public void delete() {
        // ここにコードを実装する
    }
    public void someOtherMethod() {
    }
}
public void deleteAll(Deleteable[] list) {
    for (int i = 0; i < list.length; i++) {
        list[i].delete();
    }
}

配列上にあるオブジェクトはdelete()を持つために保証されているため、deleteAll()メソッドはFredオブジェクトと他のDeleteableオブジェクトとを区別する必要がない。

[編集] インタフェースの継承

インタフェースはextendsキーワードを用いて一つ以上のインタフェースを継承することができる。

interface ChildInterface extends ParentInterface, AnotherInterface {
    ...
}

結果としてインタフェースを実装するクラスはメソッドの複合セットを定義しなければならない。

public interface MyInterface {
    foo();
}
public interface Interface2 extends MyInterface {
    bar();
}
public class MyClass implements Interface2 {
    void foo() {...}
    void bar() {...}
    ...
}

[編集] アクセス修飾子

アクセス修飾子はコードにクラスやクラスメンバのアクセス権を決定する。

[編集] トップレベルクラスアクセス

  • public – 定義されたパッケージ外からアクセス可能。
  • default – 定義されたパッケージ内からのみアクセス可能。

[編集] クラスメンバアクセス

クラスメンバとはフィールド、メソッド、コンストラクタ、クラス内で定義されたネストされたクラスのことである。アクセス権にて制限の強さ順での、クラスメンバのアクセス修飾子:

  • public – 任意のクラスからアクセス可能。
  • protected – 継承されたクラスや同じパッケージ内の他のクラスからアクセス可能。
  • default – 同じパッケージからアクセス可能。
  • private – そのクラスからのみアクセス可能 (内部クラスからのアクセスを含む)。private宣言されたメンバはサブクラスによって引き継ぐことができない。

メソッドをオーバーライドするとき、メソッドアクセス修飾子はより制限的することができない。さもなければ、親クラスとのインタフェース契約を破壊する。このように、オーバライドされるき、publicメソッドは、デフォルトアクセスを与えられないpublicprotectedメソッドによって定義されなければならない。しかしながら、オーバーライドメソッドがそれをより制限的にすることは許される。このように、オーバーライドするときは、デフォルト(パッケージ)アクセスメソッドはprotectedまたはpublicとして宣言することができ、 protectedメソッドはpublicとして宣言することができる。

[編集] フィールド

アクセス修飾子に加えて、データフィールドは以下の修飾子によって宣言される:

  • final – この値は変更できない。正確には一度だけ初期化されなければならない。イニシャライザ(初期化子)が無いfinalフィールドは ブランクfinalフィールドである—staticなブランクfinalフィールドは最終的にスタティックイニシャライザによって初期化されなければならない。非staticブランクfinalフィールドは各々のコンストラクタの実行中に初期化されなければならない。volatileと併用することはできない。
  • static – クラスのインスタンスではなくクラスに属する。
  • transient – オブジェクトの永続化の一部ではない。この値はシリアライズによって保存されるべきでも後に復元されるべきでもない。
  • volatile – 非同期に分割されたスレッドによってアクセスされたことをコンパイラに通知する。finalと併用することはできない。

[編集] 定数

staticfinal両方を宣言されたフィールドは事実上、定数である。staticはクラスに関連するフィールドの存在を意味し、finalは一度きりだけ代入されたフィールドであることを意味する。

[編集] 初期化子

イニシャライザ(初期化子)はフィールドのイニシャライザとして同時に実行されるコードのブロックである。

[編集] スタティックイニシャライザ

スタティックイニシャライザ (Static initializers)はstaticフィールドのイニシャライザとして同時に実行されるコードのブロックである。静的フィールド初期化子とスタティックイニシャライザは宣言された順番に実行される。静的初期化はクラスがロードされてから実行される。

static int count = 20;
static int[] squares;
static {  // スタティックイニシャライザ
    squares = new int[count];
    for (int i = 0; i < count; i++)
        squares[i] = i * i;
}
static int x = squares[5];  // x には値25が代入されている。

[編集] インスタンスイニシャライザ

インスタンスイニシャライザ (Instance initializers)はインスタンス(非static)フィールドのイニシャライザとして同時に実行されるコードのブロックである。インスタンスフィールドイニシャライザとインスタンスイニシャライザは宣言された順番に実行される。

インスタンスイニシャライザとインスタンスフィールドイニシャライザはコンストラクタが呼び出されている間に実行される。イニシャライザはスーパクラスコンストラクタの後と、コンストラクタ本体の前に、直ちに実行される。

[編集] メソッド

アクセス修飾子に加えて、メソッドは以下の修飾子で宣言される:

  • abstract – クラスで定義されていないメソッドであり、具象(非abstract)サブクラスによって定義されなければならないメソッドである。staticfinalnativeと併用することはできない。
  • final – サブクラスによって再定義できないメソッド。インスタンス(非static) メソッドとして、これは、メソッドは小型化するがコンパイラにメソッド(インライン関数に類似)の拡張を許可する。abstractと併用することはできない。
  • native – このメソッドはネイティブなマシン依存コードにリンクする。メソッド本体無しで宣言される。abstractと併用することはできない。
  • static – クラスのインタンスではなく、クラスに属する。abstractと併用はできない。
  • strictfp – メソッドや内部クラスですべての浮動小数点演算が厳密浮動小数点演算動作を使用する。厳密浮動小数点演算動作はすべてのプラットフォームで同じ結果を返す浮動小数点演算を保証する。
  • synchronized – メソッド本体実行前にオブジェクトに関連するロックを確保するカレントスレッドを引き起こす。もしそのロックが、現在他のスレッドによって確保されているとき、カレントスレッドはそのロックが解放され、そのスレッドがロックを得られるまでブロックするだろう。

関連オブジェクトはstaticメソッドに関するClassオブジェクトであり、非staticメソッドに関するオブジェクトインスタンスである。それがsynchronizedとしてabstractメソッドを許可するが、同期化が実装や宣言ではないもの、実装を持たない抽象メソッドを横断することは無意味である。

privateメソッドはabstractにできず暗黙のうちにfinalになっていることに注意せよ。

[編集] 可変引数

Java SE 5.0は、可変引数を要するメソッドのタイプセーフ使用を簡易にする可変引数(varargs) [1]を持つメソッドサポートのシンタックスを追加した。最後の引数は...を付け足すことができ、Javaはすべての引数を配列に詰める:

public void drawPolygon (Point... points) {…}

メソッドを呼ぶとき、プログラマは、明確にPointオブジェクトの配列を作らずに カンマによって簡単にポイントを分割できる。そのメソッドではポイントはpoints[0],、points[1]、etcとして参照される。もし、ポイントが渡されなければ、配列は長さがゼロの配列を持つ。最小の引数を使うことをプログラマに要求することは、それらの引数が、可変引数よりも前に特定できるということである:

// ポリゴンは少なくとも3つの点を必要とする。
public void drawPolygon (Point p1, Point p2, Point p3, Point... otherPoints) {…}

[編集] コンストラクタ

コンストラクタはオブジェクトが割り当てられた後ですぐにオブジェクトを初期化するときに呼ばれる。 典型的に、コンストラクタはnewキーワードを使用して呼び出されるが、コンストラクタは、java.lang.reflectパッケージによって提供されるリフレクションを使用することでも呼び出すことができる。

アクセス修飾子はコンストラクタを宣言するために使われる修飾子だけがある。

  • 可能ならば、オブジェクトは、分割された初期化メソッドに頼ることと対比して、正確で、一度だけ構築される意味深長なオブジェクトであるべきである。
  • 慣習では、コピーコンストラクタは、引数としてそれ自身の型をオブジェクトを受け入れるコンストラクタのことであり、データメンバをコピーする。

もし、コンストラクタが明示的に定義されていなければ、コンパイラは暗黙のうちに空の引数無しデフォルトコンストラクタを提供する。

  • コンストラクタはオーバーロードできる。
  • コンストラクタの最初の文はスーパークラスのコンストラクタ: super(...);または同じくクラス内にあるもう一つのコンストラクタ: this(...);を呼び出すことがある。
  • もし、super(...) または this(...)が明示的に呼び出されてないときは、コンストラクタ本体が実行される前に、デフォルトのスーパークラスのコンストラクタsuper();が呼ばれる。

[編集] Objectクラスのメソッド

Objectクラスのメソッドは引き継がれ、すべてのクラスで共有される。

[編集] cloneメソッド

詳細はクローン (関数)を参照

Object.clone()メソッドは現在のオブジェクトのコピーである新しいオブジェクトを返す。クラスは、それがクローンできることをはっきりと示すためにマーカーインタフェースCloneableを実装しなければならない。

[編集] equalsメソッド

Object.equals(Object)メソッドはオブジェクトをもう一つのオブジェクトと比較し、ふたつのオブジェクトが同一であるかどうかを示すboolean型の結果を返す。意味論的には、このメソッドはオブジェクトの内容を比較する。だが一方、同値性比較演算子"=="はオブジェクトの参照を比較する。equalsメソッドはjava.utilパッケージにあるデータ構造クラスの多くによって使われる。これらのデータ構造クラスのいくつかはObject.hashCodeメソッドにも頼る - 関連 hashCodeメソッド equalshashCodeとの契約の詳細。

[編集] finalizeメソッド

詳細はファイナライザを参照

Object.finalize()メソッドはガーベッジコレクタがオブジェクトのメモリを解放するまえに一度だけ明示的に呼び出される。クラスはオブジェクトが再生される前に機能しなければならないクリーンナップを機能するためのfinalizeをオーバーライドする。大多数のオブジェクトはfinalizeのオーバーライドを必要としない。

finalizeメソッドが呼ばれる保証は無い。さもないと、finalizeメソッドの命令では多くのオブジェクトが呼ばれるだろう。もしJVMがガーベッジコレクションを機能せずに終了すると、finalizeメソッドが呼ばれない場合、OSはオブジェクトを解放するかもしれない。 finalizeメソッドは、finalizeメソッド呼び出している他のクラスを防ぐために常にprotected宣言されるべきである。

protected void finalize() throws Throwable { ... }

[編集] getClassメソッド

Object.getClass()メソッドはオブジェクトをインスタンス化するために使われたクラスのClassオブジェクトを返す。クラスオブジェクトはJavaの|リフレクションのクラスをベースにしている。追加されたリフレクションのサポートはjava.lang.reflectパッケージで提供されている。

[編集] hashCodeメソッド

Object.hashCode()メソッドは連想配列にオブジェクトを保存するためのハッシュコードとして(int型の)整数を返す。java.util.Mapインタフェースを実装するクラスは連想配列を提供しhashCodeメソッドを頼る。良いhashCode実装は安定した(変更されない)ハッシュコードを返し、均等に分布する(ユニークなオブジェクトのハッシュコードユニークになる傾向がり、ハッシュコードは整数値の範囲内で均等に分布する。)。

連想配列はequalshashCodeメソッド両方に依存するため、これら二つのメソッドの間には、オブジェクトがMapに挿入された状態を保持しなければならない重要な契約がある:

二つのオブジェクト abに関して
  • a.equals(b) == b.equals(a)でなければならない。
  • もしa.equals(b)ならばa.hashCode() == b.hashCode()でなければならない。

この契約を維持するために、equalsメソッドをオーバーライドしたクラスはhashCodeメソッドもオーバーライドしなければならない。逆もまた同様である。その結果、hashCodeequalsとして同じプロパティ(またはプロパティのサブセット)をベースとしている。

マップがオブジェクトを持つさらなる契約は、hashCodeequalsメソッドが、マップに挿入されたオブジェクトを一度も変えない効果である。従って、オブジェクトのイミュータブルプロパティでハッシュ関数をベースとすることは、一般的に良いプラクティスである。

[編集] toStringメソッド

Object.toString()メソッドはオブジェクトの文字列表現をStringで返すものである。toStringメソッドは、オブジェクトが文字列連結演算子(++=)で使われるとき、暗黙のうちにコンパイラによって呼び出される。

[編集] wait と notifyスレッドシグナルメソッド

すべてのオブジェクトはスレッドが関連する二つの待ちリストを持つ。一つの待ちリストはオブジェクトに関連するミューテックスロックを得るsynchronizedキーワードによって使われる。もしミューテックスロックがもう一つのスレッドによって確保されたとき、現在のスレッドは、ミューテックスロックを待っているブロックされたスレッドを、リストに追加する。スレッド間にシグナルを送るために使われるもう一つの待ちリストは、waitnotifynotifyAllメソッドを通して遂行される。

wait/notigyの使用はスレッド間のタスクの能率的な強調を与える。あるスレッドがもう一方のスレッドの命令が終わるのを待つ必要があるとき、または、イベント発生まで待つ必要があるとき、スレッドはその実行を一時停止することができ、イベントが発生するときに通知されるために待つ。これはスレッドが短期間で待機し続け、フラグや他の条件指標をチェックするポーリング (情報工学)の契約である。ポーリングは

スレッドがチェックを継続する、より計算量的コストがかかるものと、状態を通知しないスレッドが、チェックする次回まで変わらない鈍感なものとがある。

[編集] waitメソッド

タイムアウト値を特定する異なる方法でサポートするwaitメソッドには三つのオーバーロードバージョンがある:wait()wait(long timeout)wait(long timeout, int nanos)。一つ目のメソッドは、待機がタイムアウトしないことを意味する値がゼロ(0)のタイムアウトを使用する。二つ目のメソッドはタイムアウトのミリ秒を取る。三つ目のメソッドは、1000000 * timeout + nanosとして計算されたタイムアウトのナノ秒をとる。

waitを呼ぶスレッドはブロック(実行スレッドから除去される)され、オブジェクトの待ちリストに追加される。スレッドは以下の三つのイベントのうち一つが起きるまで、オブジェクトの待ちリストは留まる:

  1. もう一つのスレッドはオブジェクトのnotifyまたはnotifyAllメソッドを呼ぶ。 (詳細に関しては下の関連 notifyメソッド を見よ)。
  2. もう一方のスレッドがスレッドのinterrupt()メソッドを呼ぶか、または、
  3. 非ゼロタイムアウト は無効なwaitの呼び出しで指定される。

waitメソッドは、ブロック内またはオブジェクトのメソッド同期で呼ばれなければならない。これはwaitnotifyとの間で競合を起こさないための予備である。スレッドが待ちリストに置かれたとき、スレッドはオブジェクトのミューテックスロックを解放する。スレッドが待ちリストから除去され実行スレッドのセットに追加された後で、それは実行を継続する前にオブジェクトのミューテックスロックを得る。

[編集] notifynotifyAllメソッド

Object.notify()Object.notifyAll() メソッドはオブジェクトの待ちリストからひとつ以上のスレッドを除去し、それらを実行スレッドのセットに追加する。notifyは待ちリストからシングルスレッドを除去するが、notifyAllは待ちリストからすべてのスレッドを除去する。スレッドがnotifyによって除去されることは特定されず、JVM実装に依存しない。

通知メソッドはブロックまたはオブジェクトの同期をとるメソッド内で呼ばれなければならない。これはwaitnotifyとの間で競合を起こさないための予備である。

[編集] 入出力

関連項目: Java Platform, Standard Edition#java.io と New I/O

J2SE1,4前のJavaのバージョンはストリーム・ベースのブロッキングI/Oのいをサポートしていた。これはアクティブスレッドが入出力待機するをブロックする場所得る他の処理が無いもとして、扱われるストリームによってスレッドを要求した。これは、Javaネットワークサービスを実装する必要があるものにとって重要な拡張性と性能問題であった。J2SE1.4でNIO(New I/O)の導入以来、この拡張性問題は非ブロッキングI/Oフレームワーク(だが、サンによって実装されるNIO APIには多くの未解決の問題がある)の導入によって改正された。

非ブロッキングIOフレームワークは、独自のブロッキングIOフレームワークよりもかなり複雑だがシングルスレッドによって扱われる多くの"チャネル"を与える。フレームワークはReactorパターンをベースとしている。

[編集] 実行コード

[編集] アプリケーション

public class MyClass {
    public static void main (String[] args) {...}
    ...
}

[編集] アプレット

詳細はJavaアプレットを参照
  • ウェブブラウザで明示された表示領域上で実行されるJavaコード。
  • initdestroyは一度だけ呼ばれるが、startstopはユーザがウェブページを訪問するたびに何回も呼ばれる。
// MyApplet.java

import java.applet.*;

public class MyApplet extends Applet {
    init() {...}     // ブラウザが最初にアプレットを読み込むときに呼ばれる。
    destroy() {...}  // ユーザがブラウザを終了するときに呼ばれる。
    start(){...}     // アプレットを実行し始めるときに呼ばれる。
    stop() {...}     // ユーザがウェブページを去るとき、再読込するとき、
                     // ブラウザを終了するときにに呼ばれる。
}

<applet code="MyApplet" width="200" height="200">
</applet>

[編集] appletタグの埋め込み

  • HTMLアプレットタグはアプレットソースコードに埋め込むことができる。
  • アプレットタグに含まれるものは、.htmlファイルを必要とせずとも、簡易アプレットビューアによって直接実行されるアプレットを許可する。
  • 典型的に、アプレットタグは直ちにimport文に従う。
  • それは/* */コメントによって囲まれていなければならない。

It must be enclosed by /* */ comments.

// MyApplet.java
...
/*
<applet code="MyApplet" width="200" height="200">
</applet> 
*/
...

[編集] サーブレット

詳細はJava Servletを参照

[編集] JSP (JavaServer Pages)

詳細はJavaServer Pagesを参照
  • ウェブページにJavaコードを埋め込む形態。
  • JSPタグはウェブサーバで処理され、出力結果(一般的にHTMLやXML)はクライアントに送信される。
  • JSPコードは実行される前にJava Servletにコンパイルされる。
  • JSPはJava Servletの拡張である。
  • JSPタグの使用法はPHPASPのタグの使用方法と類似する。

[編集] JSPタグ

文法 意味
<% Java構文 %> スクリプトレット
<%= 単一Java構文の出力 %> 構文
<%! Java宣言文 %> 宣言
<%@ [page, include, taglib] JSPディレクティブ %> ディレクティブ

[編集] その他

[編集] ケースセンシビティ (大文字小文字区別)

Javaはケースセンシティブ (大文字小文字を区別する) である。

[編集] コメント

// 一行コメント
/* 複数行
   コメント */
/**
 * この行はクラス、インタフェース、メソッド、データメンバ宣言の直前に記述する。
 * このコメントはクラスのドキュメンテーションを自動生成する
 * ユーティリティで使用することができる。
 */

[編集] 関連項目

Wikibooks
ウィキブックスJava関連の教科書や解説書があります。

[編集] 参考文献

  • James Gosling, Bill Joy, Guy Steele, and Gilad Bracha, The Java language specification, third edition. Addison-Wesley, 2005. ISBN 0-321-24678-0.
  • Patrick Naughton, Herbert Schildt. Java 2: The Complete Reference, third edition. The McGraw-Hill Companies, 1999. ISBN 0-07-211976-4
  • Vermeulen, Ambler, Bumgardner, Metz, Misfeldt, Shur, Thompson. The Elements of Java Style. Cambridge University Press, 2000. ISBN 0-521-77768-2

[編集] 外部リンク

[編集] サン・マイクロシステムズ

Java
主要
テクノロジ
Java言語 | Javaプラットフォーム | Java Development Kit | Java仮想マシン | Java Runtime Environment | Javaコンパイラ | Enterprise JavaBeans | Java Message Service | Java Transaction API | Java3D | JDBC | Java Web Start
歴史 Javaバージョンの歴史 | Java批評 | Java Community Process | サン・マイクロシステムズ
言語機能 バイトコード | 文法 | Applet | Servlet | JavaServer Pages | Java Foundation Classes | Java予約語 | パッケージ | JAR | Javadoc
Java関連技術 Jakarta Project | Apache Tomcat | NetBeans
他の言語

Static Wikipedia (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu