作为Java的新手,我对class和type的概念感到困惑。例如,对象应该"Hello World!"
属于类型 String
还是类 String
?或两者兼而有之?
作为Java的新手,我对class和type的概念感到困惑。例如,对象应该"Hello World!"
属于类型 String
还是类 String
?或两者兼而有之?
Answers:
类是一种类型。接口是一种类型。基元是一种类型。数组是一种类型。
因此,每种类型都是类(包括枚举常量),接口,基元或数组。
类型分为两种:基本类型和引用类型:
Object
。引用类型是类类型(包括枚举类型),接口类型和数组类型。每个数据都有一个定义其结构的类型,即,它占用了多少内存,如何布局,更重要的是,您如何与之交互。
基本类型的示例:
int
float
char
boolean
类类型的示例:
接口类型的示例:
数组类型的示例:
int[]
String[]
Integer[][][]
基本上,任何可以称为变量的东西都具有类型,而类则是一种类型。
此处的更多信息:http : //docs.oracle.com/javase/specs/jls/se8/html/jls-4.html
TLDR-类是Java中的类型之一。
注–要完全理解答案,您必须对Java中的泛型有一点了解。
要了解差异,让我们首先了解Java中的类型。
根据JLS SE 10,
什么是原始类型?
a)整数类型为byte,short,int和long,其值分别为8位,16位,32位和64位带符号的二进制补码整数,以及char,其值为16位表示UTF-16代码单元(第3.1节)的无符号整数。
b)浮点类型是float,其值包括32位IEEE 754浮点数,以及double,其值包括64位IEEE 754浮点数。
c)布尔类型具有正好两个值:true和false。
现在,让我们来看看什么是引用类型?
让我们一一讨论。
如果您看到JLS中的方式,则Class是这样定义的:
一类声明指定一个新的命名引用类型。
有两种类型的类声明:普通类声明和枚举声明。
ClassDeclaration:
NormalClassDeclaration
EnumDeclaration
NormalClassDeclaration:
{ClassModifier} class TypeIdentifier [TypeParameters] [Superclass] [Superinterfaces] ClassBody
您会看到[TypeParameters]
,这表明类类型也包括那些泛型类。
class Example<T>{
}
类的类型将被称为 Example
简而言之,一个类类型涵盖了我们的枚举,我们的常规(非通用)类(如String
etc)以及我们的通用类。
同样,我希望接口和数组类型也很清楚。数组类型指的是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中的通用方法)
这样就完成了答案。