Ich habe vorher gelesen, dass Java-Klassen Instanzen der Klasse Class
sind. Aber jetzt sagt mein Informatiklehrer, dass Java-Klassen keine Objekte sind.
Was ist wahr?
Java-Klassen sind keine Objekte, sie sind eine Abstraktion.
Jede Java-Klasse hat jedoch eine entsprechende Instanz der Klasse java.lang.Class
, die sie repräsentiert. Diese Repräsentation ist ein Objekt. Aber Sie sollten die Darstellung nicht mit der tatsächlichen Sache verwechseln.
Die Beziehung ist ähnlich wie zwischen Musik und Noten. Obwohl die geschriebene Notation Musik darstellt, ist sie selbst nicht die Musik.
Der Unterschied spielt in der Praxis jedoch nur selten eine Rolle, solange Sie wissen, was Sie mit java.lang.Class
objects tun können und was nicht.
Die Klasse (Ihr Code oder sogar der kompilierte Code in Ihren .class-Dateien) sind keine Objekte. Sie haben kein Objekt, bis Sie diese Klasse instanziiert haben.
Zum Beispiel ist Java.lang.String
eine Klasse. String s = new String("Hello world");
definiert ein Objekt vom Typ String. Das mag die Unterscheidung sein, die dein Professor macht.
Jede Java-Klasse, auch java.lang.Class
stammt von java.lang.Object
ab.
BEARBEITEN:
Der Wortlaut ist ein wenig mehrdeutig. Die Instanzen von Java-Klassen sind definitiv Objekte. Klassen für sich selbst können nicht wirklich als Objekte betrachtet werden, nun, da nichts außer der Klasse "Blueprint" im Gedächtnis existiert.