Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类在Java中是否具有(唯一)标识?_Java_Class_Identity - Fatal编程技术网

类在Java中是否具有(唯一)标识?

类在Java中是否具有(唯一)标识?,java,class,identity,Java,Class,Identity,类具有唯一标识的语句。对还是错 java中的对象至少通过其内存地址具有唯一标识,但类是否也具有唯一标识?因为类不是对象,我对此感到困惑。或者一个类是否需要实例化?这是可能的吗?如果您将它放在其中的包包括在其中,则它的名称是它的唯一标识符。如果您将它放在其中的包包括在其中,则它的名称是它的唯一标识符。首先,一个类在包级别上必须是唯一的,但在不同的级别上可以有相同的类名包装。考虑java. UTIT.TIMER和java. Savig.Time.还有许多其他的例子 并非所有类都需要实例化才能使用。考

类具有唯一标识的语句。对还是错


java中的对象至少通过其内存地址具有唯一标识,但类是否也具有唯一标识?因为类不是对象,我对此感到困惑。或者一个类是否需要实例化?这是可能的吗?

如果您将它放在其中的包包括在其中,则它的名称是它的唯一标识符。

如果您将它放在其中的包包括在其中,则它的名称是它的唯一标识符。

首先,一个类在包级别上必须是唯一的,但在不同的级别上可以有相同的类名包装。考虑java. UTIT.TIMER和java. Savig.Time.还有许多其他的例子


并非所有类都需要实例化才能使用。考虑具有静态方法的数学类。

首先,类必须在包级上是唯一的,但是在不同的包中可以有相同的类名。考虑java. UTIT.TIMER和java. Savig.Time.还有许多其他的例子


并非所有类都需要实例化才能使用。考虑具有静态方法的数学类。

每个类都有一个与对象类相关联的实例Object.class。此实例对于每个类装入器都是唯一的。这意味着类在类装入器中具有唯一标识。但是,同一个Foo类可以在JVM中加载两次,例如在容器的两个不同webapp中


还请注意,“系统类”始终由根类加载器加载,因此在JVM中具有唯一标识。

每个类都有一个与对象类相关联的实例Object.class。此实例对于每个类装入器都是唯一的。这意味着类在类装入器中具有唯一标识。但是,同一个Foo类可以在JVM中加载两次,例如在容器的两个不同webapp中


还要注意,“系统类”总是由根类加载器加载,因此在JVM中有一个唯一的标识。

根据您的标识定义,有true和false

因为类是通过它们的完全限定名FQN(例如java.lang.String)定位并加载到JVM中的,所以很容易认为这些FQN是唯一的,但是java程序可以运行多个ClassLoader实例,每个实例都加载了它们自己的类版本,这些类共享相同的FQN。这些类及其实例将无法通过代码中的相等性检查,并且不能相互转换,即使它们是从磁盘上的同一.class文件加载的


因此,该语句是错误的,因为可能有多个类加载了相同的标识,但该语句是正确的,因为它们在JVM眼中都是唯一可区分的。

正确和错误,取决于您对标识的定义

因为类是通过它们的完全限定名FQN(例如java.lang.String)定位并加载到JVM中的,所以很容易认为这些FQN是唯一的,但是java程序可以运行多个ClassLoader实例,每个实例都加载了它们自己的类版本,这些类共享相同的FQN。这些类及其实例将无法通过代码中的相等性检查,并且不能相互转换,即使它们是从磁盘上的同一.class文件加载的


因此,该语句是错误的,因为可以有多个类加载相同的标识,但这句话是正确的,因为它们在JVM眼中都是唯一可区分的。

....如果您执行导入或class.forName或ClassLoaderloadClass或类似操作,则需要实例化类。如果类没有唯一标识,那么就不可能实例化类的一个已定义实例了………..如果您执行import或class.forName或ClassLoaderloadClass之类的操作,则需要实例化的类将完成如果一个类没有唯一标识,那么就不可能实例化该类的一个已定义实例。这不一定是真的。对于多个类加载器层次结构,一个类可以两次加载到同一个JVM中,两个类将具有相同的名称,但它们将具有不同的标识,并且它们可能具有不同的字节码,也可能不具有不同的字节码,例如,如果加载了不同的版本。用一个轶事来支持Mark:对于一个大学项目,我们运行了一个带有四个部署的Wildfly服务器,其中三个在同一个包中包含相同的类。这最终给了我们ClassCastException,从一个类到同一个类,从com.example.Film到com.example.Film,但从不同的部署。只有当我们使用Docker在自己的Wildfly上运行每个部署时,我们才能够绕过这个问题。当依赖项包含服务器上已存在的库的不同版本时,也会发生同样的情况。所以我认为这个答案可能是错误的。谢谢!真有趣!让我觉得我应该对我的一些代码做一些修改
这不一定是真的。对于多个类加载器层次结构,一个类可以两次加载到同一个JVM中,两个类将具有相同的名称,但它们将具有不同的标识,并且它们可能具有不同的字节码,也可能不具有不同的字节码,例如,如果加载了不同的版本。用一个轶事来支持Mark:对于一个大学项目,我们运行了一个带有四个部署的Wildfly服务器,其中三个在同一个包中包含相同的类。这最终给了我们ClassCastException,从一个类到同一个类,从com.example.Film到com.example.Film,但从不同的部署。只有当我们使用Docker在自己的Wildfly上运行每个部署时,我们才能够绕过这个问题。当依赖项包含服务器上已存在的库的不同版本时,也会发生同样的情况。所以我认为这个答案可能是错误的。谢谢!真有趣!这让我觉得我应该对我的一些代码做一些修改。名称本身并不能使类唯一。一个类的多个版本可以通过不同的类加载器加载。我的陈述并不意味着它会加载。对我来说,你是在暗示类x.y.z.Example仅凭借其名称是唯一的,这在简单的Java应用程序中可能是正确的,但具有多个类加载器层次结构,您可以加载x.y.z.Example的多个不同变体。名称本身不会使类唯一。一个类的多个版本可以通过不同的类加载器加载。我的陈述并不意味着它会加载。对我来说,你是在暗示类x.y.z.Example仅凭借其名称是唯一的,这在简单的Java应用程序中可能是正确的,但具有多个类加载器层次结构,您可以加载x.y.z.Example的多个不同变体。