Javaが初めてなので、classとtypeの概念が混同されています。たとえば、オブジェクト"Hello World!"
はtypeに属するString
またはclassString
?それとも両方?
クラスはタイプです。インターフェイスはタイプです。プリミティブは型です。配列は型です。
したがって、すべての型は、クラス(enum定数を含む)、インターフェイス、プリミティブ、または配列でもあります。
型には、プリミティブ型と参照型の2つの異なるカテゴリがあります。
Object
のメソッドをサポートします。参照型は、クラス型(列挙型を含む)、インターフェース型、および配列型です。すべてのデータには、その構造を定義する型があります。つまり、どのくらいのメモリを使用するか、どのようにレイアウトするか、さらに重要なことには、どのようにデータとやり取りするかです。
プリミティブ型の例:
int
float
char
boolean
クラスタイプの例:
インターフェイスタイプの例:
配列型の例:
int[]
String[]
Integer[][][]
基本的に、変数として参照できるものはすべて型を持ち、クラスは一種の型です。
詳細はこちら: http://docs.Oracle.com/javase/specs/jls/se8/html/jls-4.html
[〜#〜] tldr [〜#〜]-クラスはJavaのタイプの1つです。
注-答えを完全に理解するには、Javaのジェネリックに関する少しの知識が必要です。
違いを理解するために、まずJavaでTypeが何であるかを理解しましょう。
JLS SE 1 に従って
Javaプログラミング言語:primitive types(---)には、2種類のtypesがあります。 §4.2 )および参照タイプ(§4.3)。
プリミティブ型とは何ですか?
a)整数型はbyte、short、int、およびlongであり、その値は8ビット、16ビット、32ビット、および64ビットの符号付き2の補数整数です。 、およびchar、値は、UTF-16コード単位を表す16ビットの符号なし整数です(§3.1)。
b)浮動小数点型はfloatで、その値には32ビットIEEE 754浮動小数点数が含まれ、double 、その値には64ビットIEEE 754浮動小数点数が含まれます。
c)booleanタイプには、trueとfalseの2つの値があります。
さて、参照型とは何でしょうか?
4種類の参照タイプがあります:クラスタイプ( §8.1 )、インターフェイスタイプ(- §9.1 )、type variables( §4.4 )、およびarray types( §10.1 )。
ひとつひとつ話し合いましょう。
JLSでの方法を見ると、Classは次のように定義されています。
class宣言は、新しい名前付き参照型を指定します。
クラス宣言には、通常のクラス宣言と列挙型宣言の2種類があります。
ClassDeclaration:
NormalClassDeclaration
EnumDeclaration
NormalClassDeclaration:
{ClassModifier} class TypeIdentifier [TypeParameters] [Superclass] [Superinterfaces] ClassBody
[TypeParameters]
、これは、クラス型にこれらの汎用クラスも含まれることを示しています。
class Example<T>{
}
クラスタイプはExample
と呼ばれます
要するに、クラス型は列挙型、String
などの通常の(非ジェネリック)クラス、そしてジェネリッククラスもカバーします。
同様に、インターフェイスと配列のタイプも明確であることを願っています。配列タイプでは、int[]
、String[]
など.
最後の部分-型変数に進みましょう。彼らは何ですか ?
型変数は、クラス、インターフェイス、メソッド、およびコンストラクターの本体で型として使用される非修飾識別子です。
下のJLSの例で理解してみましょう。
class Test {
<T extends C & I> void test(T t) {
t.mI(); // OK
t.mCPublic(); // OK
t.mCProtected(); // OK
t.mCPackage(); // OK
}
}
MethodパラメーターのオブジェクトがT
型であることがわかります。はい、このT
はType変数であり、参照として使用できます。はい、そうです。 (この奇妙な例を理解できませんでした-Javaの汎用メソッドとは何ですか)
これで答えは完成です。
「タイプ」はより包括的なカテゴリです。 Javaの変数は3種類の型を持つことができます:intやfloatなどの8つの「プリミティブ」型、インターフェース、クラス。変数ではなく値はプリミティブまたはクラスインスタンスです。
「タイプ」は「データのタイプ」を定義します
例:「hello world」は文字列->「hello world」は文字列型です(文字列はint ..とは異なり、premetiveデータではないため、「hello world」は文字列クラス型です)
10はintです-> 10は整数データ型です。