この国では犬が

本と芝居とソフトウェア

プログラミング言語Java 第7章 トークン、値、変数

7.1 字句要素

7.1.1 文字セット

C++含め、多くの言語の文字コードはASCIIないしEBCDICだが、JavaUTF-16

 

7.1.2 コメント

コメントのネストはできない。そして、プリプロセッサマクロがないので、# if 0も使えない。if (false) て……。まあ、IDEを使っていれば一括コメントアウトも簡単だろうから、別に問題はなさそうだけど。

 

7.1.3 トークン

字句解析では、「欲張りな」字句解析が行われる。すなわち、字句解析では、トークンを作り出すのにできるだけ多くの文字を取り込む。

まあ、それを意識しないといけないようなコードを書くべきではないと思うので、あまり気にすることなさそうだけど。

 

7.1.4 識別子
7.1.5 予約語

(†が付いた予約語は、予約されていますが、現在は使用されていません)

...

const†

(^^)

 

 7.2 型とリテラル

符号なし整数型はありません。

 おっ……。

 

7.2.1 参照リテラル

nullは唯一の参照リテラル

 

7.2.2 ブール値リテラル
7.2.3 文字リテラル
7.2.4 整数リテラル

整数定数はデフォルトでint。末尾にlないしLをつければlongになる。

 

7.2.5 浮動小数リテラル

浮動小数点定数はデフォルトでdouble。末尾にfないしFをつければfloatになる。

 

7.2.6 文字列リテラル
7.2.7 クラスリテラル

 

7.3 変数

7.3.1 フィールドとローカル変数の宣言

フィールドにはデフォルトの初期値があるが、ローカル変数にはないので、必ず明示的に初期化する必要がある。

 

7.3.2 パラメータ変数
7.3.3 final変数

ブランクfinal、ちょっと便利かも。

使用される前に初期化されていることをコンパイラーが保証してくれるというのがよい。

 

7.4 配列変数

7.4.1 配列修飾子

Javaにconstはありません。

 

7.4.2 配列の配列
7.4.3 配列の初期化
7.4.4 配列と型

 

7.5 名前の意味

Javaには6つの異なる名前空間がある。

  • パッケージ名
  • 形名
  • フィールド名
  • メソッド名
  • ローカル変数名(パラメータを含む)
  • ラベル

このことから、Javaではこんなことができる。

package Reuse;

class Reuse {

    Reuse Reuse(Reuse Reuse) {

      Reuse:

        for (;;) {

            if (Reuse.Reuse(Reuse) == Reuse)

                break Reuse;

        }

        return Reuse;

    }

}

ゲェーッ!

ま、やんないけど……。

 

一方で、隠蔽は、コードブロック内のネストしたスコープでは許されていない。

よって、Javaではこんなことができない。

{

    int uber = 0;

    {

        int uber = 2;

    // ...

    }

}

 

第10章(「制御の流れ」)までは割と慣れ親しんだトピックで、こんな具合にごちゃごちゃ言いながら読み進めていけそうなので、そうします。

第11章(「ジェネリック型宣言」)以降はだんだん耳慣れない話題になっていくので、スタイルを変えようと思います。たぶん、読んだことの報告だけになるかもしれません……。