web-dev-qa-db-fra.com

Différence entre classe et type

Étant nouveau pour Java, je suis confus entre les concepts de classe et type. Par exemple, l'objet "Hello World!" appartient au type String ou classe String? Ou peut-être les deux?

98
user2236096

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:

  • Une variable de type primitif contient toujours une valeur primitive de ce même type. Une telle valeur ne peut être modifiée que par des opérations d'affectation sur cette variable.
  • Une variable de type référence contient toujours la valeur d'une référence à un objet. Tous les objets, y compris les tableaux, supportent les méthodes de la classe 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 tableaux.

Chaque élément de données a un type qui définit sa structure, à savoir la quantité de mémoire utilisée, la disposition et, plus important encore, la manière dont vous pouvez interagir avec elle.

Exemples de types primitifs:

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

Exemples de types de cours:

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

Exemples de types d'interface:

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

Exemples de types de tableaux:

  1. int[]
  2. String[]
  3. Integer[][][]

Fondamentalement, tout ce que vous pouvez appeler une variable a un type et les classes sont une sorte de type.

Plus d'infos ici: http://docs.Oracle.com/javase/specs/jls/se8/html/jls-4.html

117
Brandon

[~ # ~] 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 médicaments génériques en Java.


Pour comprendre la différence, commençons par comprendre ce qu’un type est en Java.

Selon JLS SE 1 ,

Il existe deux types de types dans le langage de programmation Java:: ) (- §4.2 ) et types de référence (§4.3).

Quel est le type primitif?

a) Les types d'intégraux sont octet, short, int et long , dont les valeurs sont des entiers en complément à deux signés 8 bits, 16 bits, 32 bits et 64 bits. , respectivement, et char, dont les valeurs sont des entiers non signés sur 16 bits représentant des 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 boolean a exactement deux valeurs: true et false.

Voyons maintenant quel est le type de référence?

Il existe quatre types de types de référence: types de classe ( §8.1 ), types d'interface (- §9.1 ), variables de type ( §4.4 ) et types de tableau ( §10.1 ).

Laissez-nous discuter un par un.

Si vous voyez comment dans JLS, , la classe est définie comme suit:

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

Tu vois ça [TypeParameters], cela montre que le type de classe inclut également ces classes génériques.

class Example<T>{

}

Le type de classe s'appellera Example

En bref, un type de classe couvre nos énumérations, nos classes régulières (non génériques) comme String etc, ainsi que nos classes génériques.

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 - Les 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 method est de type T. Oui, cette T est 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 quelle est la méthode générique en Java)

Ceci complète la réponse.

5
Breaking Benjamin

"Type" définit 'quel type de données il s'agit'

Ex: "hello world" est une chaîne -> "hello world" est un type de chaîne (String n'est pas une donnée prémétive contrairement à int .. nous pouvons donc dire "hello world" est un type de classe de chaîne).

10 est un entier -> 10 est un type de données entier.

2
Satya