初心者がJavaを“超高速”で学ぶためのコツ

http://itpro.nikkeibp.co.jp/article/COLUMN/20060927/249181/
いつものように初心者を超光速で混乱させる記事.
分からないなら止めておけばいいのに,どうしてこういう出鱈目を書くんだろう.

「先にC言語などの勉強をはじめた方が効率がよい」という方もいます。しかし,この意見には少し異論があります。なぜなら,C言語のエキスパートがきれいなJavaプログラムを書くとは,必ずしも言い切れないからです。つまり,C言語の先入観が,逆にJava言語の習得に足かせとなることがあるのです。

ある意味でこれは事実.しかし本質を理解していれば妨げになることはないだろうな.

そして,その部分だけ言えば,クラスとインスタンスに大きな違いはないのです。では,クラスとインスタンスはどこが違うのかといえば,それは「生成のされ方」または「性質」が違うということになります(図2)。

おいおい……クラスとインスタンスの違いはオブジェクト指向の基本中の基本だぞ.その後の説明も論外.
http://en.wikipedia.org/wiki/Class_%28computer_science%29

クラスは一度クラス・ファイルから読み込まれてメモリー上に配置されている限り,同じクラス・ファイルが別に読み込まれることはありませんが,インスタンスの方は,メモリー容量が許す限り,クラスから同じものを複数作り出せる点にあります。

どこから突っ込んで良いのか分からんくらい酷い.

概念上のクラス/インスタンスと,JVM実装上で管理されるクラス情報やインスタンスを表すデータ構造とが区別できていないようだ.なおJVM仕様上はクラス情報を複数作っても問題はないはずで,それをしないのは同じものを複数作ってもメモリの無駄遣いにしかならないからだ.初心者ならいざしらず,まともなJVMを作れる人間ならそういうミスはまずしないだろう.*1

次に,クラスとインスタンスの違いをコードで理解しよう

これは「クラスとインスタンスの違い」ではなく「クラス変数/メソッドとインスタンス変数/メソッドの違い」ではないか?
これは「男性と女性の違い」と「男子トイレと女子トイレの違い」くらいの差があるのだが?*2

Javaでは多次元配列のインスタンスが作れない

通常はJavaでは,多次元配列は「配列の配列」で実現されている.「多次元配列のインスタンスが作れない」とは,具体的には何を指しているんだろうね?

  • 配列がインスタンスであることや
  • 「配列は参照型*6である」という言葉に集約されています。
  • 配列は一種のクラスである」と考えると理解しやすいかもしれません。

クラス/インスタンス/オブジェクトを全然理解してないだろ.「配列もオブジェクトだ」.これで終わり.*3

Javaの変数は,int型やlong型などの基本データ型と,クラスなどの参照型に分けられます。

Javaの変数は,int型やlong型などの基本データ(primitive,原始)型と,参照(reference)を表す参照型に分けられます。」が正しいかな.「クラス」や「インスタンス」自体は参照型とはいわんだろ.これもインスタンスと参照を理解していないために,支離滅裂になっているようだ.


ばっさり省略.

Java言語の攻略を進めていく過程で,必ず大きな壁となるのが「オブジェクト指向」です。巷にはオブジェクト指向の良書があふれているにもかかわらず,多くの初心者が「オブジェクト指向は難しい」と答えます。

巷にはオブジェクト指向の入門書は溢れているし,良書もあれば悪書もある.しかし入門書で且つ良書というのは滅多にない.こういう間違った解説を読んで時間を浪費するくらいなら,良書を一冊買った方が絶対に安くつく.
http://d.hatena.ne.jp/JavaBlack/20050909#p1
http://d.hatena.ne.jp/JavaBlack/20060224#p2

*1:メソッドの実行コード部分/バイトコードに相当する部分だけなら実際に複数存在するかな.同じコード部分を動的に何度も最適化するのでそうなる.

*2:ところでインスタンスとクラスには様々な「たとえ話」が存在する.たとえば,一個人「田中一郎氏」が存在したとして,男性がクラスとすれば,「田中一郎」は男性クラスに所属する一インスタンス(に付けられたID)と言える.ただしあくまで「たとえ話」に過ぎないのでそのつもりで.

*3:なおC言語では配列も文字列もポインタである.見かけ上は配列に見えても,内部的には単なるポインタ演算でしかない.