Da ich neu in Java bin, bin ich verwirrt zwischen den Konzepten Klasse und Typ . Sollte das Objekt beispielsweise "Hello World!"zum Typ String oder zur Klasse gehören String ? Oder vielleicht beides?
Da ich neu in Java bin, bin ich verwirrt zwischen den Konzepten Klasse und Typ . Sollte das Objekt beispielsweise "Hello World!"zum Typ String oder zur Klasse gehören String ? Oder vielleicht beides?
Antworten:
Eine Klasse ist ein Typ. Eine Schnittstelle ist ein Typ. Ein Primitiv ist ein Typ. Ein Array ist ein Typ.
Daher ist jeder Typ auch entweder eine Klasse (einschließlich einer Enum-Konstante), eine Schnittstelle, ein Grundelement oder ein Array.
Es gibt zwei verschiedene Kategorien von Typen: primitive Typen und Referenztypen:
Object. Die Referenztypen sind Klassentypen (einschließlich Aufzählungstypen), Schnittstellentypen und Arraytypen.Jedes Datenelement hat einen Typ, der seine Struktur definiert, nämlich wie viel Speicher es beansprucht, wie es angeordnet ist und was noch wichtiger ist, wie Sie damit interagieren können.
Beispiele für primitive Typen:
intfloatcharbooleanBeispiele für Klassentypen:
Beispiele für Schnittstellentypen:
Beispiele für Array-Typen:
int[]String[]Integer[][][]Grundsätzlich hat alles, was Sie als Variable bezeichnen können, einen Typ, und Klassen sind eine Art Typ.
Weitere Informationen finden Sie hier: http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html
TLDR - Klasse ist einer der Typen in Java.
Hinweis - Um die Antwort vollständig zu verstehen, müssen Sie eine kleine Vorstellung von Generika in Java haben.
Um den Unterschied zu verstehen, lassen Sie uns zunächst verstehen, was ein Typ in Java ist.
Laut JLS SE 10 ,
In der Programmiersprache Java gibt es zwei Arten von Typen : primitive Typen ( §4.2 ) und Referenztypen (§4.3).
Was ist primitiver Typ?
a) Die Integraltypen sind Byte, Short, Int und Long , deren Werte 8-Bit-, 16-Bit-, 32-Bit- und 64-Bit-Ganzzahlen mit vorzeichenbehafteten Zweierkomplementen sind, und char, deren Werte 16-Bit sind Ganzzahlen ohne Vorzeichen, die UTF-16-Codeeinheiten darstellen (§3.1).
b) Der Gleitkommaprozessor Typen float , deren Werte umfassen , die 32-Bit - IEEE - 754 - Gleitkommazahlen und Doppel , deren Werte sind die 64-Bit - IEEE 754 - Gleitkommazahlen.
c) Der boolesche Typ hat genau zwei Werte: true und false.
Kommen wir nun zu dem Referenztyp.
Es gibt vier Arten von Referenztypen: Klassentypen ( §8.1 ), Schnittstellentypen ( §9.1 ), Typvariablen ( §4.4 ) und Array-Typen ( §10.1 ).
Lassen Sie uns eins nach dem anderen diskutieren.
Wenn Sie sehen, wie in JLS die Klasse wie folgt definiert ist:
Eine Klassendeklaration gibt einen neuen benannten Referenztyp an.
Es gibt zwei Arten von Klassendeklarationen: normale Klassendeklarationen und Enum-Deklarationen .
ClassDeclaration:
NormalClassDeclaration
EnumDeclaration
NormalClassDeclaration:
{ClassModifier} class TypeIdentifier [TypeParameters] [Superclass] [Superinterfaces] ClassBody
Sie sehen, dass [TypeParameters]dies zeigt, dass der Klassentyp auch diese generischen Klassen enthält.
class Example<T>{
}
Der Klassentyp wird aufgerufen Example
Kurz gesagt, ein Klassentyp umfasst unsere Aufzählungen, unsere regulären (nicht generischen) Klassen wie Stringusw. und auch unsere generischen Klassen.
Ebenso hoffe ich, dass auch die Schnittstellen- und Array-Typen klar sind. Mit dem Array - Typ verstehen wir wie int[], String[]usw.
Kommen wir zum letzten Teil - Typvariablen. Was sind Sie ?
Eine Typvariable ist ein nicht qualifizierter Bezeichner, der als Typ in Klassen-, Schnittstellen-, Methoden- und Konstruktorkörpern verwendet wird.
Lassen Sie uns anhand des Beispiels in der JLS darunter verstehen.
class Test {
<T extends C & I> void test(T t) {
t.mI(); // OK
t.mCPublic(); // OK
t.mCProtected(); // OK
t.mCPackage(); // OK
}
}
Sie sehen, dass Ihr Objekt im Methodenparameter vom Typ ist T. Ja, dies Tist eine Typvariable und kann als Referenz verwendet werden. Ja, so ist es. (Konnte dieses seltsame Beispiel nicht verstehen - Erfahren Sie, was eine generische Methode in Java ist.)
Dies vervollständigt die Antwort.
"Typ" ist die umfassendere Kategorie. Variablen in Java können drei Arten von Typen haben: die 8 "primitiven" Typen wie int und float, Schnittstellen und Klassen. Werte (im Gegensatz zu Variablen) können primitive oder Klasseninstanzen sein.
"Typ" definiert, um welche Art von Daten es sich handelt.
Beispiel: "Hallo Welt" ist ein String -> "Hallo Welt" ist ein String-Typ (String ist im Gegensatz zu int keine prämetiven Daten. Wir können also sagen, dass "Hallo Welt" ein String-Klassentyp ist.)
10 ist ein int -> 10 ist ein ganzzahliger Datentyp.