it-swarm.com.de

Unterschied zwischen Klasse und Typ

Als Java-Neuling verwechsle ich die Begriffe class und type. Soll das Objekt "Hello World!" gehören zum Typ String oder zur Klasse String? Oder vielleicht beides?

98
user2236096

Eine Klasse ist ein Typ. Eine Schnittstelle ist ein Typ. Ein Primitiv ist ein Typ. Ein Array ist ein Typ.

Daher ist jeder Typ entweder eine Klasse (einschließlich einer Enum-Konstante), eine Schnittstelle, ein Grundelement oder ein Array.

Es gibt zwei verschiedene Kategorien von Typen: Grundtypen 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 Methoden der Klasse 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 belegt, wie es angelegt ist und, was noch wichtiger ist, wie Sie damit interagieren können.

Beispiele für primitive Typen:

  1. int
  2. float
  3. char
  4. boolean

Beispiele für Klassenarten:

  1. String
  2. Integer
  3. Boolean
  4. ArrayList
  5. StringBuilder

Beispiele für Schnittstellentypen:

  1. Collection
  2. List
  3. Map
  4. Serializable

Beispiele für Array-Typen:

  1. int[]
  2. String[]
  3. 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

117
Brandon

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, müssen wir zunächst verstehen, was ein Typ in Java ist.

Nach JLS SE 1 ,

In der Programmiersprache Java) gibt es zwei Arten von types: primitive types ( §4.2 ) und - Referenztypen (§4.3).

Was ist primitiver Typ?

a) Die Integraltypen sind Byte, Short, Int und Long, deren Werte jeweils 8-Bit-, 16-Bit-, 32-Bit- und 64-Bit-Ganzzahlen mit Zweierkomplement-Vorzeichen sind, und - char, deren Werte vorzeichenlose 16-Bit-Ganzzahlen sind, die UTF-16-Code-Einheiten darstellen (§3.1).

b) Die Gleitkommatypen sind float, deren Werte die 32-Bit-IEEE 754-Gleitkommazahlen enthalten, und double, deren Werte die 64-Bit-IEEE 754 enthalten Gleitkommazahlen.

c) Der Typ boolean 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 ), type variables ( §4.4 ) und array types ( §10.1 ).

Lassen Sie uns eins nach dem anderen besprechen.

Wenn Sie sehen, wie in JLS, Klasse ist wie folgt definiert:

Eine Klassendeklaration gibt einen neuen benannten Referenztyp an.

Es gibt zwei Arten von Klassendeklarationen: normale Klassendeklarationen und Aufzählungsdeklarationen.

ClassDeclaration:
NormalClassDeclaration 
EnumDeclaration
NormalClassDeclaration:
{ClassModifier} class TypeIdentifier [TypeParameters] [Superclass] [Superinterfaces] ClassBody

Siehst du das [TypeParameters], dies zeigt, dass der Klassentyp auch diese generischen Klassen enthält.

class Example<T>{

}

Der Klassentyp heißt 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 Interface- und Array-Typen ebenfalls klar sind. Mit Array-Typ meinen wir int[], String[] etc.

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 das Beispiel 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 T ist. Ja, dieses T ist eine Typvariable und kann als Referenz verwendet werden. Ja ist es. (Konnte dieses seltsame Beispiel nicht verstehen - Erfahren Sie, was eine generische Methode in Java ist.)

Dies vervollständigt die Antwort.

5

"Typ" ist die umfassendere Kategorie. Variablen in Java) können drei Arten von Typen haben: die 8 "primitiven" Typen wie int und float, interfaces und classes. Werte (im Gegensatz zu Variablen) können primitive oder Klasseninstanzen sein.

4

"Typ" definiert, welche Art von Daten es ist

Beispiel: "Hallo Welt" ist ein String -> "Hallo Welt" ist ein String-Typ

10 ist ein Int -> 10 ist ein Integer-Datentyp.

2
Satya