あきらめて『プログラミング言語Java』よんでる
普段の学習と別に、『プログラミング言語Java』を読んでいます。読むだけだと飽きるので、練習問題を少しずつ解いています。目的は、
- Java7が出る前に文法を総ざらいする
- JVMの読みたい実装に当たりをつける
で、区切りの良いところで覚書を残すことにしました。
第1章「はやめぐり」とは
一応、読んだことがない人のために、章の紹介くらいはしてみます。
Javaには、企業の新人研修で大抵さらっと流されるけれども、実際にそこらに転がっているコードではよく使われていて、ウッカリはまる文法項目、というものが存在します。…しませんか。自分だけですか。まあいいです。自分の場合、それは、ジェネリック型やアノテーションやセキュリティマネージャでした。
第1章「はやめぐり」では、そういった事項にも触れつつ、Java言語が持つ特徴的な文法をひととおり説明しています。細かい説明は、後の章に譲られているため、ありません。
この章は、軽めの入門書かオンラインチュートリアルで基本文法を押さえた後に読み、自分が知らない項目を発見するために使うと、きっと便利です。
というわけで、以下はただの覚書
- フィールドとは状態を決めるものである。
深い言葉だと思ったのです。
- 「基本データ型はプログラマが定義するオブジェクト型と異なり、直接解釈されます」
直接解釈する、の意味がわかりません・・・
Cとは違う。
基本多言語プレーン=Basic Multilingual Plane: BMPという言葉を覚えました。この資料→「Delphiでの文字コードのハンドリングについて(PDF)」の文字コードの説明とか参照。
- 数値のフィールドは、明示的に初期化されない場合、デフォルト値に初期化される。
大好きな初期化。
- クラスに関する仕事をするのがstaticメソッド
- 個々のオブジェクトに関する仕事をするのが非staticメソッド
サテ、クラスメソッドがオブジェクトを受け取っても許されるのは、一般的にどういうケースか?
- 配列の各オブジェクトは、宣言時に、暗黙にnullで初期化される。
これも初期化だ。
- 配列の長さを調べる。そして、その前に、配列への参照がnullでないかを調べる。
案外気を遣って書くなぁ。
- Stringの連結によって、新たなStringオブジェクトが作成される。
- Stringは不変である。
- Stringオブジェクトは文字の配列ではないし、文字の配列をString参照に代入はできない。
- しかし、文字の配列をStringのコンストラクタに渡して、文字の配列からStringオブジェクトを作成することはできる。
- toCharArrayメソッドを使えば、Stringから文字の配列を得ることもできる。
はすけるとは違う。(検索回避)
- サブクラスでオーバーライドしたメソッドで、super.method()すると、ランタイムはmethod()を含む最初のスーパークラスを探して、継承関係をさかのぼる。
- メソッド呼び出しは、参照の型ではなく、実際のクラスを使用する。
コンパイラが型キャストの正しさを調べる処理を読みたい。ClassCastExceptionを吐く前の部分かな。
- IntegerはObjectのサブクラスだが、Lookup
はLookup
先月から話題が再燃しているジェネリック型。
// Objectを返す。 interface Lookup{ Object find(String name); } //こう書けば、Tは何でもかまわない。Objectでなくてもよくなる。 interface Lookup<T>{ T find(String name); }
- 例外はオブジェクト。型、メソッド、データを持つ。
- チェック例外のラッパーである例外型を定義できる。
- ラップする前の元の例外を受け取ることができる。
その他、気になったのは、パッケージ名を解決する部分の実装、セキュリティ機構のOSごとの実装、verifierのはたらき…と、まぁ、そんなところでした。