以前、Javaクラスはクラスのインスタンスであることを読みましたClass
。しかし今、私のコンピュータサイエンスの先生は、Javaクラスはオブジェクトではないと言っています。
どちらが正しいですか?
Javaクラスはオブジェクトではありません。
ただし、すべてのJavaクラスには、Class
それを記述するクラスのインスタンスがあります。
それらのインスタンスはオブジェクトです。
Javaクラスはオブジェクトではなく、抽象化されたものです。
ただし、各Javaクラスには、それjava.lang.Class
を表すクラスの対応するインスタンスがあります。その表現はオブジェクトです。しかし、表現を実際のものと間違えないでください。
関係は音楽と楽譜の関係にいくぶん似ています。書かれた表記は音楽を表していますが、それ自体が音楽ではありません。
java.lang.Class
ただし、オブジェクトで何ができるか、何ができないかを知っている限り、実際には違いが問題になることはめったにありません。
クラス(コード、または.classファイル内のコンパイル済みコード)はオブジェクトではありません。そのクラスをインスタンス化するまで、オブジェクトはありません。
たとえば、Java.lang.String
はクラスです。String s = new String("Hello world");
String型のオブジェクトを定義します。それはあなたの教授が作っている区別かもしれません。
クラスがメソッドを理解でき、(「静的」を使用して)独自の属性を持つことができる場合は、それらをオブジェクトと考えてみませんか?オブジェクトはそれを行います。
しかし、それは彼らを混乱させるだけなので、学生に持ち込むものではありません。クラスとオブジェクトの概念をすでに習得している場合は、クラスを一種のオブジェクトと考えることができると思います。
すべてのJavaクラスは、java.lang.Class
から派生しjava.lang.Object
ます。
編集:
言い回しは少しあいまいです。Javaクラスのインスタンスは間違いなくオブジェクトです。クラス「ブループリント」以外はメモリに存在しないため、クラス自体をオブジェクトと見なすことはできません。