kanizaのブログ

コンピュータ、ソフトウェア、映画、音楽関連や家族のことなど、思いついたことを書きます。

Javaの勉強

このところ、Javaの経験があまりない方とお仕事をしていて、Javaのかなり基本的な話について質問されることがある。「何かいい本はないです?」とか聞かれたりもするんだけど、考えてみると僕は Java について本を読んで勉強したというわけではないから、なかなか良い答えがない。僕はもう4年半も Java をいじくっているので、そりゃあ本を読まなくても詳しくなるよな。

僕は主に、JavaAPI ドキュメントとプロジェクトの先達が書いたソースコード、それからオープンソースJava クラスライブラリのソースコードなんかを見て、ちょっとずつ Java の知識を深めてきた、のだと思う。

まぁ、せっかくの機会なので、自分がこれまで Java をやってきてつまずいたところの中で、印象深いものを挙げてみることにしよう。

とりあえず最初に思いつくのが、Arrayクラスだ。

Java を使い始めて間もないころ、配列を使おうと思った。ドキュメントを見て Array クラスというのがあると知って、「配列というのは Array クラスのサブクラスとして作るのだろう」と思ってしまった。「オブジェクトはクラスに属する」と学んでいた僕は「じゃあ配列オブジェクトは何クラス?」という疑問への答として、Array クラスではないかという間違った予測を立ててしまったのですな。

実際のところ配列は String[] array のように書けばいいので、特に何かのサブクラスを作る必要はない。*1

API ドキュメントにもあるとおり、Array クラスは動的に配列を扱う場合に利用する。たとえば、ある正体不明のオブジェクト「obj」のクラスを要素とする、長さnの配列が作りたい場合には次のように書ける。

Object[] newArray = Array.newInstance(obj.getClass(), n);

ここで newArray は Objectの配列と宣言してあるけど、objの実際の型の配列(たとえばStringの配列)にキャストできる。

作りたい配列の要素の型も長さも、プログラミングしている段階ではわからない。実行時に決まるから「動的」と言う。Array クラスを利用すれば、プログラムの実行中にユーザに入力してもらったクラスと長さから、配列を作ることもできる。

正直いうと Array クラスはほとんど使ったことがないんだけど、誤解してしまったがために印象に残っている。

Java でのつまずきで思い出すのは他にもある。また日を改めて紹介したい。

*1:実際に配列オブジェクトが何クラスに属するかという問題について興味がある人は、どうぞ調べてみてください。