Java の構成要素

  1. java の文字セット
  2. java のコメント
  3. トークン
  4. 識別子
  5. java の基本型
  6. リテラル
  7. 名前付き定数
  8. 変数宣言
  9. 初期化
  10. オブジェクト
  11. 演算子の優先順位と結合規則
  12. java のプログラムの基本構成
  13. java のプログラム
  14. コンパイル単位
  15. 基本的な文
  16. 例外
  17. その他
  18. シグネチャ

  1. java の文字セット
  2. java のソースプログラムは、16ビット文字セットである Unicode で書かれています。

    Unicode のはじめの 256 文字は Latin-1 文字セットであり、 Latin-1 文字セットの初めの 128 文字は ASCII 文字セットとほぼ同じです。

  3. java のコメント
  4. java のコメントは3種類ありますが、ネストできません。 ネストとは、入れ子のことです。

  5. トークン
  6. トークンは、言語の基本となる単語のことです。
    コンパイラはソースプログラムをトークンに分割し、プログラムを構成する文、 識別子などを調べます。

    java では空白文字(スペース、タブ、改行、フォームフィード)は、 トークンや文字列リテラルを分離するものとしての意味しかありません。

  7. 識別子
  8. 識別子とは、宣言された変数、定数、ラベルなどの名前に使われるものです。
    java の識別子は、文字(アンダスコアや $ を含む)で始まり、 文字または数字が続かなければなりません。

    java の予約語

    java の予約語は、識別子としては使えません。

    機 能 予      約      語
    基本型 boolean,char,byte,short,int,long,float,double,void
    new,this,super
    分岐 if,else,switch,case,break,default
    繰り返し for,continue,do,while
    制御 return,throw
    ガード文 synchronized,try,catch,finally
    宣言 static,abstract,final,private,protected,public,native,transient ,volatile
    クラス class,throws
    演算子 instanceof
    その他 extends,interface,implements,package,import

  9. java の基本型
  10. 基本型 内        容 値の範囲 対応するクラス
    java.lang
    boolean 真偽値 true,false Boolean
    char 16 ビット Unicode 1.1 規格の文字 0~65535 Character
    byte 8 ビット符号付き整数 -128~127 Byte
    short 16 ビット符号付き整数 -32768~32767 Short
    int 32 ビット符号付き整数 -2147483648~2147483647 Integer
    long 64 ビット符号付き整数 -9223372036854775808~
    9223372036854775807
    Long
    float 32 ビット浮動小数点数 (IEEE754-1985) -3.4E38~3.4E38,NaN Float
    double 64 ビット浮動小数点数 (IEEE754-1985) 1-1.7E308~1.7E308,NaN Double

    基本型には、java.lang パッケージに対応する ラッパクラスがあります。
    ラッパが便利なのは、ほとんどの java ユーティリティ・クラスはオブジェクトを使うようにできているからです。

    基本型の変数は、java ではオブジェクトではありませんが、 オブジェクトに変換するための簡単な方法が、 ラッパクラスで提供されているので便利です。

    short と byte の値は、評価前に int に変換されます。 これらは値の保存のみに使われ、これらを使って演算することはできません。

    float と double には、NaN(Not a Number)がありますが、 これは数でない数という意味で、 浮動小数点数が取り得る値であっても数学的に定義できない演算、 たとえば0を0で割る演算などの結果を表します。

    NaN に対するすべての関係演算子および等値演算子は false を返します。 値が NaN であるか否かを判定するためには、その型に用意されている NaN 判定メソッド (Float.isNaN(float),XX.isNaN()等)を使います。

    int からオブジェクト Integer へ、オブジェクト Integer から int への Integer クラスのメソッドを使った変換例を示します。

    Integer  mango;
    int      j,i = 42;
    
    mango = new Integer(i);
    j     = mango.intValue();
    

  11. リテラル
  12. リテラルとは、コンパイル時に与えられる値のことで、 定数ともいいます。
    null,true,false を識別子としては使えません。

    タ  イ  プ リ テ ラ ル 値 の 例 備考
    オブジェクト参照null
    真偽値 true,false 左記2値のみ
    整数値 29,035,0x1d,0X1D 等 10 進,8 進,16 進数表記可能
    浮動小数点数 18.,1.8e1,.18e2,0f,0d,1F,1D 等 f,F で float 定数と指定しない場合は double 扱い
    文字値 'Q',\',\377 等 8 進数の文字定数は3桁以下で
    \377 を超えてはならない
    文字列値 "String","I don\'t know." 等

  13. 名前付き定数
  14. 定数とはリテラルのことで、 プログラムが終わるまで演算などによって変更されない値のことです。

    2つの理由で名前付き定数を使うことをお奨めします。

  15. 変数宣言
  16.    アクセス修飾子 タイプ 識別子
    

    基本型の場合は、宣言によって値を保持する場所が確保されます。 これに対してオブジェクト型の場合は、宣言によってオブジェクトへの参照を 保持する場所のみが確保されます。 宣言しただけでは、オブジェクトそのものは確保されません。 つまりc でいうポインタが確保されます。 java ではそれを参照といいます。

  17. 初期化
  18. クラスのデータフィールドには、初期値が設定されます。 生成時に初期値を明示的に設定しなかった場合には、デフォルトのゼロビット値 、すなわち型によって 0,null,false,0.0 などが設定されます。

    これは、メソッド内で宣言される基本型の変数とは対照的です。 メソッド内で宣言される基本型の変数は、初期値が定義されません。 局所変数はスタックにとられますが、オブジェクトはヒープに置かれます。

  19. オブジェクト
  20. java でデータをグループ化する主な方法は、クラスに入れることです。 配列をつかう方法もありますが、これもプログラマからはクラスに見えます。

    java のクラスにものを入れるのは便利です。言語の基本型以外はすべてが オブジェクトです。

  21. 演算子の優先順位結合規則
  22. 演 算 子 種 別 演    算   子
    後置演算子 [] . (params) expr++ expr--
    単項演算子 ++expr --expr +expr -expr ~ !
    生成とキャスト演算子 new (type)expr
    積除、剰余演算子 * / %
    和減演算子 + -
    シフト演算子 << >> >>>
    関係演算子 < > >= <= instanceof
    等値演算子 == !=
    ビット毎の論理積(AND) &
    ビット毎の排他的論理和(XOR) ^
    ビット毎の論理和(OR) |
    論理和 &&
    論理積 ||
    条件演算子 ?:
    代入演算子 = += -= *= /= %= >>= <<= >>>= &= ^= |=

    代入演算子以外のすべての二項演算子は左結合的です。 代入演算子のみ右結合的です。

    instanceof 演算子は、 オブジェクトが指定の型であるか否かを調べるもので、 そうである場合は、true が返されます。

    注意 >>> 演算子は右に指定ビットシフトしたあと、上位ビットを0で埋めるものです。
    short と byte の場合は、シフト前に int に変換し、その後この演算が行われ、 結果を short または byte に戻します。従って以下の結果は b は 0 でなく -1 です。

    byte b = -1;
    b >>>=10;
    

  23. java のプログラムの基本構成
  24. package 文(必要なら)
    import 文(必要なら)
    クラスアクセス修飾子 class クラス名 {クラスの宣言
    フィールド 変数宣言
    コンストラクタ(引数){ .. }オブジェクトの初期化
    メソッド(引数){ .. }処理部
    } クラスの終わり

  25. java のプログラム
  26. 簡単なプログラムを書いて、動かしてみましょう。

    1. 以下のプログラムを HelloWorld.java に書きます。
      java では、クラス名とファイル名は同じでなければなりません。

    2. javacjava があるディレクトリを環境変数 PATH に設定します。

    3. クラスがあるディレクトリを環境変数 CLASSPATH に設定します。
      この場合、コンパイルしたクラスがあるディレクトリを指定しないと、 実行できません。

      setenv CLASSPATH .:$CLASSPATH

    4. javac コンパイラを使って、コンパイルしてクラスファイルを作ります。

    5. java でクラスファイルを実行してみましょう。

    class HelloWorld {
       public static void main(String[] args) {
         System.out.println("Hello World !!");
       }
    }
    
    > javac HelloWorld.java
    > java  HelloWorld
    Hello World !!
    

    説明 上記プログラムについて簡単に説明します。

    main() のシグネチャを見てみましょう。

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

    アクセス修飾子が public かつ static です。すなわち、どこからでも見えて(public)
    どれかのオブジェクトでなくクラス全体に所属します(static)。

    アクセス修飾子を取り除くと、実際のメソッドは以下のようになります。

    void main(String[] args) {}
    

    これは、c と同じで main という名前の戻り値を持たないメソッド (void) を 定義しています。
    その引数は1つで args という名前の String の配列です。 空の大括弧が、配列であることを示します。

    java プログラムの main は、 特殊なメソッドでアプリケーション・プログラムとして実行した場合に、 はじめに呼ばれます。

    args は実行開始時にコマンド行で入れた引数が渡されますが、 args[0] はcのようにプログラム自身の名前ではなく、 プログラムに渡された初めの引数です。 String は java のクラスで c の char の配列に似ています。

    System.out.println は、System クラスの out という PrintStream の println メソッドで、それを使って "Hello World !!" を出します。

    class HelloWorld は、このクラスの名前を宣言しています。
    従って、コンパイルすると HelloWorld.class ができます。

  27. コンパイル単位
  28. 基本的な文
  29. 宣言文 型 変数名;
    選択文 if (式) 文 [else 文]
    switch (式) { case XX: 文 break;[default:文 break;] }
    繰り返し文 for (初期値;テスト;インクリメント) { 文 }
    while (式) { 文 }
    do { 文 } while (式);
    continue [識別子];
    break [識別子];
    制御移行文 return 式;
    ガード文(スレッド、例外) try ブロック catch(例外) ブロック [finally ブロック]

    ブロックとは、中括弧で囲まれた実行文の集合です。

  30. 例外
  31. java ではチェックした例外によってエラーを処理できます。 例外はプログラム内でエラーを処理するよう強要しますが、 処理しない場合はエラーが発生した時点で報告されます。

    メソッドは、実行中にエラーを検出すると例外を送出します。 例外はメソッド呼び出しのスタックを遡り、 例外を処理して本処理を継続するコードを探します。 ユーザが処理を規定しなかった例外は、 java のデフォルト処理ルーチンによって処理されます。 それはエラーを報告し実行を中止します。

  32. その他
  33. シグネチャ
  34. java のメソッドの型と引数の型を列挙したものを シグネチャといいます。
    以下の <method_type_descriptor> がシグネチャの定義です。

       <method_type_descriptor> ::= (<argument_type>)<return_type>
       <argument_type>          ::= <field_type>
       <return_type>            ::= <field_type>
    
       <field_type>             ::= <base_type>|<object_type>|<array_type>
       <base_type>              ::= B|C|D|F|I|J|S|Z|V
       <object_type>            ::= L<full_classname>;
       <array_type>             ::= [<data_type>
    

    ただし、<base_type> のシンボルは以下のとおりです。

    B:byte  C:char  D:double  F:float  I:int  J:long  S:short
    Z:boolean  V:void
    

    例えば String クラスの substring メソッドは、以下のように表されます。

       substring (I)Ljava/lang/String;
       substring (II)Ljava/lang/String;
    

    java Core API の java.lang.String の substring を見てみましょう。





まとめ

変数宣言   アクセス修飾子 タイプ 変数名
メソッド宣言  アクセス修飾子 タイプ メソッド名

java プログラムの基本構成

package 文(必要なら)
import 文(必要なら)
クラスアクセス修飾子 class クラス名 [ throws 例外 ] {クラスの宣言
フィールド 変数宣言
コンストラクタ(引数){ .. }オブジェクトの初期化
メソッド(引数){ .. }処理部
} クラスの終わり

文の種類

宣言文型 変数名;
選択文if (式) 文 [else 文]
switch (式) 文
繰り返し文for (初期値;テスト;インクリメント) 文
while (式) 文
do 文 while (式)
continue [識別子];
break [識別子];
制御移行文return 式;
ガード文(スレッド、例外) try ブロック catch(例外) ブロック [finally ブロック]