あきらめて『プログラミング言語Java』よんでる

普段の学習と別に、『プログラミング言語Java』を読んでいます。読むだけだと飽きるので、練習問題を少しずつ解いています。目的は、

  • Java7が出る前に文法を総ざらいする
  • JVMの読みたい実装に当たりをつける

で、区切りの良いところで覚書を残すことにしました。

第1章「はやめぐり」とは

一応、読んだことがない人のために、章の紹介くらいはしてみます。

Javaには、企業の新人研修で大抵さらっと流されるけれども、実際にそこらに転がっているコードではよく使われていて、ウッカリはまる文法項目、というものが存在します。…しませんか。自分だけですか。まあいいです。自分の場合、それは、ジェネリック型やアノテーションやセキュリティマネージャでした。

第1章「はやめぐり」では、そういった事項にも触れつつ、Java言語が持つ特徴的な文法をひととおり説明しています。細かい説明は、後の章に譲られているため、ありません。

この章は、軽めの入門書かオンラインチュートリアルで基本文法を押さえた後に読み、自分が知らない項目を発見するために使うと、きっと便利です。

というわけで、以下はただの覚書

  • フィールドとは状態を決めるものである。

深い言葉だと思ったのです。

  • 「基本データ型はプログラマが定義するオブジェクト型と異なり、直接解釈されます」

直接解釈する、の意味がわかりません・・・

Cとは違う。

  • enumは、個々の名前付定数に対する事前に定義されたインスタンスを持つ特別なクラスである。
    • 個々のenum定数は、オブジェクトを参照するstaticフィールドである。
  • JavaUnicodeで書くことができる。変数名πなど。

基本多言語プレーン=Basic Multilingual Plane: BMPという言葉を覚えました。この資料→「Delphiでの文字コードのハンドリングについて(PDF)」の文字コードの説明とか参照。

  • 数値のフィールドは、明示的に初期化されない場合、デフォルト値に初期化される。

大好きな初期化。

  • クラスに関する仕事をするのがstaticメソッド
  • 個々のオブジェクトに関する仕事をするのが非staticメソッド

サテ、クラスメソッドがオブジェクトを受け取っても許されるのは、一般的にどういうケースか?

  • 配列の各オブジェクトは、宣言時に、暗黙にnullで初期化される。

これも初期化だ。

  • 配列の長さを調べる。そして、その前に、配列への参照がnullでないかを調べる。

案外気を遣って書くなぁ。

  • Stringの連結によって、新たなStringオブジェクトが作成される。
  • Stringは不変である。
  • Stringオブジェクトは文字の配列ではないし、文字の配列をString参照に代入はできない。
    • しかし、文字の配列をStringのコンストラクタに渡して、文字の配列からStringオブジェクトを作成することはできる。
    • toCharArrayメソッドを使えば、Stringから文字の配列を得ることもできる。

はすけるとは違う。(検索回避)

  • サブクラスでオーバーライドしたメソッドで、super.method()すると、ランタイムはmethod()を含む最初のスーパークラスを探して、継承関係をさかのぼる。
  • メソッド呼び出しは、参照の型ではなく、実際のクラスを使用する。

コンパイラが型キャストの正しさを調べる処理を読みたい。ClassCastExceptionを吐く前の部分かな。