Da ich neu in Java bin, bin ich verwirrt zwischen den Konzepten Klasse und Typ . Sollte das Objekt beispielsweise "Hello World!"zum TypString oder zur Klasse gehörenString ? Oder vielleicht beides?
In letzter Zeit scheint es eine Neigung zu geben, Fragen im "Anfänger" -Stil abzulehnen, ob sie gut sind oder nicht. Es ist nervig, um es gelinde auszudrücken.
nico_c
9
Auch um jede Frage abzulehnen, die der Wähler nicht versteht ...
Marquis von Lorne
4
Ich bin damit einverstanden, dass es etwas unhöflich ist, wenn Sie Anfängerfragen stellen, aber ob gut oder schlecht, alle Anfängerfragen haben ihre Antworten nur durch Durchsuchen des Webs. Das Problem und der Grund, warum die Leute abstimmen, ist, dass dies zu einem Stapelüberlauf führt :)
Marko Lazić
13
Dies ist eine großartige Frage - und die 3 Stimmen zum Schließen sind der Grund, warum wir abstimmen müssen, um offen zu bleiben . Ich erinnere mich noch, als ich Java lernte, dass der OO-Jargon das größte Hindernis war.
Lawrence Dol
4
@nickecarlo Früher gab es einen Punkt in den FAQ, der im letzten Jahr oder so herausgenommen wurde - "Die Frage zeigt einen ernsthaften Mangel an Forschung und zeigt keine Anzeichen von Anstrengungen, die unternommen wurden, um sie zu lösen, bevor die Frage gestellt wurde ". Ich finde es ärgerlich, dass es eine TONNE Bullshit-Fragen gibt, die Google lösen könnte, anstatt dass die Leute hier tatsächlich ihre Zeit damit verschwenden, anderen "Programmieren 101" zu erklären.
TC1
Antworten:
123
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:
Eine Variable vom primitiven Typ enthält immer einen primitiven Wert desselben Typs. Ein solcher Wert kann nur durch Zuweisungsoperationen für diese Variable geändert werden.
Eine Variable vom Referenztyp enthält immer den Wert einer Referenz auf ein Objekt. Alle Objekte, einschließlich Arrays, unterstützen die Klassenmethoden 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.
Ich werde die Bearbeitung nicht selbst vornehmen, da ich nicht sicher bin, ob Sie das schreiben wollten, aber es könnte besser funktionieren , wenn Sie sagen, dass Klassen "eine Art Typ" sind und nicht "eine Art Typ".
Ein Lebenslauf
@ MichaelKjörling Ja, das ist eine bessere Art, es zu sagen. Ich werde es aktualisieren.
Brandon
3
Sie haben den Nulltyp vergessen (siehe JLS 4.1).
user1803551
1
@AndyDong Eine abstrakte Klasse ist immer noch eine Klasse.
Brandon
6
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.
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 .
Sie sehen, dass [TypeParameters]dies zeigt, dass der Klassentyp auch diese generischen Klassen enthält.
classExample<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.
classTest{<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.)
"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.
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:
int
float
char
boolean
Beispiele für Klassentypen:
String
Integer
Boolean
ArrayList
StringBuilder
Beispiele für Schnittstellentypen:
Collection
List
Map
Serializable
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
quelle
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 ,
Was ist primitiver Typ?
Kommen wir nun zu dem Referenztyp.
Lassen Sie uns eins nach dem anderen diskutieren.
Wenn Sie sehen, wie in JLS die Klasse wie folgt definiert ist:
Sie sehen, dass
[TypeParameters]
dies zeigt, dass der Klassentyp auch diese generischen Klassen enthält.Der Klassentyp wird aufgerufen
Example
Kurz gesagt, ein Klassentyp umfasst unsere Aufzählungen, unsere regulären (nicht generischen) Klassen wie
String
usw. 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 ?
Lassen Sie uns anhand des Beispiels in der JLS darunter verstehen.
Sie sehen, dass Ihr Objekt im Methodenparameter vom Typ ist
T
. Ja, diesT
ist 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.
quelle
"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.
quelle
"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.
quelle