2012-08-16 6 views
7

これまでJavaクラスがクラスClassのインスタンスであることを読んだことがあります。しかし今、コンピュータ科学の先生は、Javaクラスはオブジェクトではないと言います。Javaクラスはオブジェクトですか?

本当ですか?

+0

あなたが彼に尋ねたとき、彼はあなたに何の理由を与えましたか? – EJP

+0

@ EJP彼はクラスがインターフェースであると言っていましたが、私はすべてを覚えていません。 – itdoesntwork

+0

Javaクラスは、特殊な種類のオブジェクトであっても、実際にはオブジェクトです。たとえば、任意のクラス 'SomeClass'の複数のインスタンスを持つことができます:新しい' ClassLoader'を作成し、再度 "SomeClass"をロードします。同じコンパイル時クラスに対して異なるインスタンスを取得します。潜在的には異なるメソッド実装を使用します。 –

答えて

15

Javaクラスはオブジェクトではありません。

ただし、すべてのJavaクラスには、それを記述するクラスClassのインスタンスがあります。
これらのインスタンスはオブジェクトです。

+0

「Javaクラス」という意味は重要だと思います。 "クラス"の定義はオブジェクトではありませんか?ソースコード内にクラス宣言がありますか? –

+0

クラス 'クラス'のインスタンスは 'class'キーワードで作成されたクラスと同じではありません。とった。 – itdoesntwork

+0

@MattBall:クラスは型であり、オブジェクトではありません。 – SLaks

0

すべてのJavaクラスでも、java.lang.Classjava.lang.Objectに下がります。

編集:

文句は少し曖昧です。 Javaクラスのインスタンスは確実にオブジェクトです。クラス自体は、実際にはオブジェクトと見なすことはできません。クラス "青写真"を除いてメモリには何も存在しないからです。

+0

クラスオブジェクトはメモリ内に存在します。 Object.getClass()の結果を考えてみましょう。 – EJP

+0

@EJPあなたのポイントは何か分かりません。 getClass()は、そのクラスのインスタンスがある場合にのみ機能します(yes)。私は決してそうは言っていません。私の主張は、インスタンスを持たない限り、メモリには何もなく、JVM(青写真)のクラスのマッピングだけです。 – jn1kk

+0

@ EJP私は、質問そのものがあいまいであるため、私たちが議論していることや他の人の想像上のインターネットポイントを奪い取っていることは馬鹿げていることがわかります。私はそれがさらに愚かであることを私はこの質問に答えることさえしようとしていることがわかります。 – jn1kk

1

クラス(あなたのコード、または.classファイルのコンパイル済みコード)はオブジェクトではありません。あなたはそのクラスをインスタンス化するまでオブジェクトを持っていません。

たとえば、Java.lang.Stringはクラスです。 String s = new String("Hello world");はString型のオブジェクトを定義します。それはあなたの教授が作っている区別かもしれません。

+0

ここでも、「クラス」という単語の定義が重要です。 –

+0

私の答えが 'クラス'と呼んでいるものを指定するのは同意です。 –

3

Javaクラスはオブジェクトではなく、抽象です。

しかし、各Javaクラスには、それを表すjava.lang.Classクラスの対応するインスタンスがあります。その表現オブジェクトです。しかし、あなたは実際のものの表現を間違えるべきではありません。

この関係は、音楽と楽譜の関係と多少似ています。書かれた表記は音楽を表していますが、それ自体が音楽ではありません。

java.lang.Classオブジェクトで何ができるのか分からない限り、実際には違いはほとんどありません。

+0

ありがとうございます。編集:すべての言語をRubyと同じくらい簡単にしたいと思うようになります:) – itdoesntwork

+0

RubyはJavaよりもはるかに複雑ですが、多分方法があります。 – biziclop

関連する問題