Essendo nuovo in Java, sono confuso tra i concetti di classe e tipo . Ad esempio, l'oggetto dovrebbe "Hello World!"
appartenere al tipo String
o alla classe String
? O forse entrambi?
Essendo nuovo in Java, sono confuso tra i concetti di classe e tipo . Ad esempio, l'oggetto dovrebbe "Hello World!"
appartenere al tipo String
o alla classe String
? O forse entrambi?
Risposte:
Una classe è un tipo. Un'interfaccia è un tipo. Una primitiva è un tipo. Un array è un tipo.
Pertanto, ogni tipo è anche una classe (inclusa una costante enum), un'interfaccia, una primitiva o un array.
Esistono due categorie distinte di tipi: tipi primitivi e tipi di riferimento:
Object
. I tipi di riferimento sono tipi di classe (inclusi i tipi enum), tipi di interfaccia e tipi di matrice.Ogni dato ha un tipo che ne definisce la struttura, ovvero quanta memoria occupa, come è disposto e, cosa più importante, come puoi interagire con esso.
Esempi di tipi primitivi:
int
float
char
boolean
Esempi di tipi di classe:
Esempi di tipi di interfaccia:
Esempi di tipi di array:
int[]
String[]
Integer[][][]
Fondamentalmente, tutto ciò a cui puoi fare riferimento come variabile ha un tipo e le classi sono una sorta di tipo.
Maggiori informazioni qui: http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html
TLDR : la classe è uno dei tipi in Java.
Nota: per comprendere appieno la risposta, è necessario avere una piccola idea dei generici in Java.
Per capire la differenza dobbiamo prima capire cos'è un Type in Java.
Secondo JLS SE 10 ,
Esistono due tipi di tipi nel linguaggio di programmazione Java: tipi primitivi ( §4.2 ) e tipi di riferimento (§4.3).
Cos'è il tipo primitivo?
a) I tipi integrali sono byte, short, int e long , i cui valori sono rispettivamente interi a complemento a due con segno a 8 bit, 16 bit, 32 bit e 64 bit, e char, cui valori sono 16 bit interi senza segno che rappresentano unità di codice UTF-16 (§3.1).
b) I tipi a virgola mobile sono float , i cui valori includono i numeri a virgola mobile IEEE 754 a 32 bit e double , i cui valori includono i numeri a virgola mobile IEEE 754 a 64 bit.
c) Il tipo booleano ha esattamente due valori: vero e falso.
Ora, veniamo a cos'è il tipo di riferimento?
Esistono quattro tipi di tipi di riferimento: tipi di classe ( §8.1 ), tipi di interfaccia ( §9.1 ), variabili di tipo ( §4.4 ) e tipi di array ( §10.1 ).
Parliamo uno per uno.
Se vedi come in JLS, Class è definita in questo modo:
Una dichiarazione di classe specifica un nuovo tipo di riferimento denominato.
Esistono due tipi di dichiarazioni di classe: normali dichiarazioni di classe e dichiarazioni enum .
ClassDeclaration:
NormalClassDeclaration
EnumDeclaration
NormalClassDeclaration:
{ClassModifier} class TypeIdentifier [TypeParameters] [Superclass] [Superinterfaces] ClassBody
Come vedi [TypeParameters]
, questo mostra che il tipo di classe include anche quelle classi generiche.
class Example<T>{
}
Verrà chiamato il tipo di classe Example
In breve, un tipo di classe copre le nostre enumerazioni, le nostre classi regolari (non generiche) come String
ecc e anche le nostre classi generiche.
Allo stesso modo, spero che anche i tipi di interfaccia e array siano chiari. Per tipo di array si intende come int[]
, String[]
ecc.
Veniamo all'ultima parte: le variabili di tipo. Quali sono ?
Una variabile di tipo è un identificatore non qualificato utilizzato come tipo nei corpi di classe, interfaccia, metodo e costruttore.
Cerchiamo di capire dall'esempio nel JLS sotto di esso.
class Test {
<T extends C & I> void test(T t) {
t.mI(); // OK
t.mCPublic(); // OK
t.mCProtected(); // OK
t.mCPackage(); // OK
}
}
Vedi che il tuo oggetto nel parametro del metodo è di tipo T
. Sì, questa T
è la variabile di tipo ed è / può essere utilizzata come riferimento. Sì. (Impossibile capire questo strano esempio - Scopri cos'è il metodo generico in Java)
Questo completa la risposta.
"Tipo" è la categoria più inclusiva. Le variabili in Java possono avere tre tipi di tipi: gli 8 tipi "primitivi" come int e float, interfacce e classi. I valori (al contrario delle variabili) possono essere istanze primitive o di classe.
"Tipo" definisce "di che tipo di dati si tratta"
Es: "ciao mondo" è una stringa -> "ciao mondo" è di tipo stringa (la stringa non è un dato premetivo a differenza di int .. quindi possiamo dire che "ciao mondo" è un tipo di classe stringa)
10 è un int -> 10 è un tipo di dati intero.