Java 中的 int.class 是什么?如何使用?

java 中 , 还有 int.class 这种写法 ?
int 不是基本类型吗 ??


回答:

每个基本类型都已其.class, 比如 boolean.class,

就一直到Java SE 8版本的Java而言:(未来也有可能会有变化)首先看java.lang.Class的JavaDoc:

Class (Java Platform SE 8 )Instances of the class Class represent classes and interfaces in a running Java application. An enum is a kind of class and an annotation is a kind of interface. Every array also belongs to a class that is reflected as a Class object that is shared by all arrays with the same element type and number of dimensions. The primitive Java types (boolean, byte, char, short, int, long, float, and double), and the keyword void are also represented as Class objects.

请特别留意最后一句。这一句所表述的意思是,作为特例,虽然Java的原始类型与void不是class或interface,但还是有对应的用于表现它们的Class对象。所以题主的问题:int有class,是否说明int其实在java中也算是一个类不是。int只是有对应的java.lang.Class对象作为反射系统的一部分,以便实现反射系统的完整性。但int是一个Java的基本类型,不是一个类。(当然我们事后评论可以认为java.lang.Class这个名字起得不好…)如果创建基本类型变量如int,也会用到对应的int.class吗?不会。int.class只有在反射操作时有用。例如说,对于这样的Foo.bar()方法:

class Foo {

public int bar(int ignored) { return 42; }

}

它对应的java.lang.reflect.Method对象所报告的getReturnType()的Class对象就会是int.class所指向的那个。而如果我们要使用反射API在Foo.class上精确查找这个bar()方法的话, 用Foo.class.getDeclaredMethod("bar", int.class) 这里也需要用int.class来指定参数类型(注意这个情况下不能用Integer.class来指定参数类型,因为那样匹配到的是 bar(Integer) 而不是 bar(int) )在JDK哪个JAR包下能找到int.class这个文件呢?并不存在。int.class对应的Class对象是JVM合成出来的,并不是从Class文件加载出来的。注意:int.class跟Integer.class所指向的不是同一个Class对象。JVM的实现中,在JVM初始化的时候就会把原始类型和void对应的Class对象创建出来。这些Class对象的创建不依赖任何外部信息(例如说需要从Class文件加载的信息),不需要经历类加载过程,而纯粹是JVM的实现细节。Java的int类型是原始类型,是值类型而不是引用类型(或者说“对象”)。使用它并不会触发任何类加载动作 ,不会调用任何构造器。它就是个简单的值,直接存储在局部变量/字段中。

https://www.zhihu.com/question/55857335/answer/146837989

以上是 Java 中的 int.class 是什么?如何使用? 的全部内容, 来源链接: utcz.com/p/945465.html

回到顶部