Javaが初めてなので、クラスとタイプの概念が混同されています。たとえば、オブジェクト"Hello World!"
はタイプ String
またはクラスに 属すべきString
ですか?それとも両方?
Javaが初めてなので、クラスとタイプの概念が混同されています。たとえば、オブジェクト"Hello World!"
はタイプ String
またはクラスに 属すべきString
ですか?それとも両方?
回答:
クラスはタイプです。インターフェースはタイプです。プリミティブはタイプです。配列はタイプです。
したがって、すべての型もクラス(列挙定数を含む)、インターフェース、プリミティブ、または配列のいずれかです。
タイプには、プリミティブタイプと参照タイプの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でのタイプとは何かを理解しましょう。
JLS SE 10によれば、
Javaプログラミング言語には、プリミティブ型(§4.2)と参照型(§4.3)の2種類の型があります 。
プリミティブタイプとは
a)整数型は、それぞれ値が8ビット、16ビット、32ビット、64ビットの符号付き2の補数の整数であるbyte、short、int、およびlongと、値が16ビットのcharです。 UTF-16コード単位を表す符号なし整数(§3.1)。
b)浮動小数点型は、値に32ビットIEEE 754浮動小数点数が含まれるfloatと、値に64ビットIEEE 754浮動小数点数が含まれるdoubleです。
c)ブール型には、trueとfalseの2つの値があります。
では、参照型とは何でしょうか。
参照型には、クラス型(§8.1)、インターフェース型(§9.1)、型変数(§4.4)、配列型(§10.1)の4種類があります。
1つずつ説明します。
JLSでの方法を見ると、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とは異なり、文字列は事前データではないため、「hello world」は文字列クラス型と言えます)
10はint-> 10は整数データ型です。