itdoesntwork
itdoesntwork

Reputation: 4802

Are Java classes objects?

I've read before that Java classes are instances of the class Class. But now, my computer science teacher says that Java classes are not objects.

Which is true?

Upvotes: 12

Views: 8213

Answers (5)

Fabrizio
Fabrizio

Reputation: 11

Well, if a Class can understand methods, and have its own atributes (using "static") Then why not think of them as Objects? Objects do that.

But it's not something to bring up to the students, because it will only confuse them. I think that if you already master the concept of Class and object, then you can think of clases as a kind of object.

Upvotes: 1

biziclop
biziclop

Reputation: 49804

Java classes are not objects, they're an abstraction.

However, each Java class has a corresponding instance of the java.lang.Class class that represents it. That representation is an object. But you shouldn't mistake the representation for the actual thing.

The relationship is somewhat similar to that between music and sheet music. Although the written notation represents music, it is not itself the music.

The difference rarely matters in practice though, so long as you know what you can and cannot do with java.lang.Class objects.

Upvotes: 9

Babak Naffas
Babak Naffas

Reputation: 12581

The class (your code, or even the compiled code in your .class files) are not objects. You don't have an object until you instantiate that class.

For example, Java.lang.String is a class. String s = new String("Hello world"); defines an object of type String. That may be the distinction your professor is making.

Upvotes: 1

SLaks
SLaks

Reputation: 888185

A Java class is not an object.

However, every Java class has an instance of the Class class describing it.
Those instances are objects.

Upvotes: 23

jn1kk
jn1kk

Reputation: 5112

Every Java class, even java.lang.Class descends from java.lang.Object.

EDIT:

The wording is a bit ambiguous. The instances of Java classes are definitely objects. Classes by themselves, cannot be really considered objects, well because nothing exists in memory except for the class "blueprint".

Upvotes: 0

Related Questions