1. 数组是不是类?
-
首先数组是类, 不过与其他类或者接口不同,数组类是由JVM创建的,由下面代码可知:
public class Main1 { public static void main(String[] args) { int[] arr1 = new int[10]; System.out.println(arr1.getClass()); double[] arr2 = new double[10]; System.out.println(arr2.getClass()); PersonVO[] arr3 = new PersonVO[10]; System.out.println(arr3.getClass()); } } --------------------------------------------------------------------------------------- 运行结果: class [I class [D class [Lorg.example.PersonVO;
[I [D [Lorg.example.PersonVO; 这种就是数组的类名。
2.类加载器
-
JVM支持两种类加载器:1. JVM提供的引导类加载器 2.用户自定义的类加载器。
-
用户自定义的类加载器应该是ClassLoader类的子类实例
-
定义加载器_和_初始加载器: 如果类加载器L直接创建了类C 那就是说L定义了C, L也就是C的定义加载器。 如果L委托其父加载器创建类C, 那就是说L导致了C的创建,L是C的初始加载器。
2. 类是由类的二进制名称(同全限定名)和它的定义加载器共同确定
- 也就是说全限定名和定义加载器得是相同的类才是同一个类,这一点我们可以通过代码实证一下:
类里面有name和classLoader两个属性,如果这两个属性不是相同的,肯定就不是同一个类了
3. 数组类是由谁创建的
- 数组类是由JVM创建的,当然比如 User[ ] 这种数组类会要用到User类的加载器,创建User类,然后JVM创建 [Lxxx.User; 这个类。
- 如果是int[ ] 这种类就是由JVM直接创建了,因为基础数据类型int不是类。简单理解能getClass的都是类,不能getClass的就不是类了。