Étant nouveau sur Java, je suis confus entre les concepts de classe et de type . Par exemple, l'objet doit-il "Hello World!"
appartenir au type String
ou à la classe String
? Ou peut-être les deux?
Étant nouveau sur Java, je suis confus entre les concepts de classe et de type . Par exemple, l'objet doit-il "Hello World!"
appartenir au type String
ou à la classe String
? Ou peut-être les deux?
Réponses:
Une classe est un type. Une interface est un type. Une primitive est un type. Un tableau est un type.
Par conséquent, chaque type est également une classe (y compris une constante d'énumération), une interface, une primitive ou un tableau.
Il existe deux catégories distinctes de types: les types primitifs et les types de référence:
Object
. Les types de référence sont les types de classe (y compris les types enum), les types d'interface et les types de tableau.Chaque donnée a un type qui définit sa structure, à savoir combien de mémoire elle prend, comment elle est disposée et, plus important encore, comment vous pouvez interagir avec elle.
Exemples de types primitifs:
int
float
char
boolean
Exemples de types de classes:
Exemples de types d'interface:
Exemples de types de tableaux:
int[]
String[]
Integer[][][]
Fondamentalement, tout ce que vous pouvez appeler une variable a un type et les classes sont une sorte de type.
Plus d'informations ici: http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html
TLDR - La classe est l'un des types en Java.
Remarque - Pour bien comprendre la réponse, vous devez avoir une petite idée des génériques en Java.
Pour comprendre la différence, comprenons d'abord ce qu'est un type en Java.
Selon JLS SE 10 ,
Il existe deux types de types dans le langage de programmation Java: les types primitifs ( §4.2 ) et les types référence (§4.3).
Qu'est-ce que le type primitif?
a) Les types intégraux sont byte, short, int et long , dont les valeurs sont respectivement des entiers à complément à deux signés 8 bits, 16 bits, 32 bits et 64 bits, et char, dont les valeurs sont 16 bits entiers non signés représentant les unités de code UTF-16 (§3.1).
b) Les types à virgule flottante sont float , dont les valeurs incluent les nombres à virgule flottante IEEE 754 32 bits, et double , dont les valeurs incluent les nombres à virgule flottante IEEE 754 64 bits.
c) Le type booléen a exactement deux valeurs: true et false.
Maintenant, arrivons à ce qu'est le type de référence?
Il existe quatre types de types de référence: les types de classe ( §8.1 ), les types d'interface ( §9.1 ), les variables de type ( §4.4 ) et les types de tableaux ( §10.1 ).
Discutons un par un.
Si vous voyez comment dans JLS, la classe est définie comme ceci:
Une déclaration de classe spécifie un nouveau type de référence nommé.
Il existe deux types de déclarations de classe: les déclarations de classe normales et les déclarations d'énumération .
ClassDeclaration:
NormalClassDeclaration
EnumDeclaration
NormalClassDeclaration:
{ClassModifier} class TypeIdentifier [TypeParameters] [Superclass] [Superinterfaces] ClassBody
Vous voyez cela [TypeParameters]
, cela montre que le type de classe inclut également ces classes génériques.
class Example<T>{
}
Le type de classe sera appelé Example
En bref, un type de classe couvre nos énumérations, nos classes régulières (non génériques) comme String
etc et nos classes génériques aussi.
De même, j'espère que les types d'interface et de tableau sont également clairs. Par type de tableau, nous entendons comme int[]
, String[]
etc.
Venons-en à la dernière partie - Variables de type. Que sont-ils ?
Une variable de type est un identificateur non qualifié utilisé comme type dans les corps de classe, d'interface, de méthode et de constructeur.
Laissez-nous comprendre par l'exemple dans le JLS ci-dessous.
class Test {
<T extends C & I> void test(T t) {
t.mI(); // OK
t.mCPublic(); // OK
t.mCProtected(); // OK
t.mCPackage(); // OK
}
}
Vous voyez que votre objet dans le paramètre de méthode est de type T
. Oui, il T
s'agit d'une variable de type et est / peut être utilisée comme référence. Oui, ça l'est. (Impossible de comprendre cet exemple étrange - Découvrez ce qu'est une méthode générique en Java)
Ceci complète la réponse.
«Type» est la catégorie la plus inclusive. Les variables en Java peuvent avoir trois types de types: les 8 types "primitifs" comme int et float, les interfaces et les classes. Les valeurs (par opposition aux variables) peuvent être des instances primitives ou de classe.
"Type" définit "de quel type de données il s'agit"
Ex: "hello world" est une chaîne -> "hello world" est de type String (la chaîne n'est pas une donnée prémétive contrairement à int .. donc nous pouvons dire "hello world" est un type de classe string)
10 est un entier -> 10 est un type de données entier.