15 java.util.AbstractCollection
16 java.lang.Object
17 */
6) 获取实现的接口:
在Java中并没有像C++那样支持多重继承,而是提供了一种更为安全和合理的方式,即单一继承和多实现,这里的单一继承是指继承(extends)一个超类,多实现是指可以实现(implements)多个接口。下面的例子将让我们获取某个类所实现的接口,如下:
1 public static void main(String[] args) {
2 Class< >[] interfaces = LinkedList.class.getInterfaces();
3 if ((interfaces != null) && (interfaces.length > 0)) {
4 if (LinkedList.class.isInterface())
5 System.out.print(" extends ");
6 else
7 System.out.print(" implements ");
8 for (int i = 0; i < interfaces.length; i++) {
9 if (i > 0)
10 System.out.print(", ");
11 System.out.print(interfaces[i].getName());
12 }
13 }
14 }
15 /* 输出结果如下:
16 implements java.util.List, java.util.Deque, java.lang.Cloneable, java.io.Serializable
17 */
7) 获取包名:
1 public static void main(String[] args) {
2 System.out.println(String.class.getPackage().getName());
3 }
4 /* 输出结果如下:
5 java.lang
6 */
2. 基于数组的反射:
1) 通过反射创建数组实例:
1 public static void main(String[] args) {
2 int[] dim1 = { 5 };
3 //通过Array的newInstance方法构造新的数组实例,这里的dim1定义了
4 //oneDimA的维度,以及在该维度内的长度
5 int[] oneDimA = (int[]) Array.newInstance(int.class, dim1);
6 //第二个参数定义了一维数组的长度
7 int[] oneDimB = (int[]) Array.newInstance(int.class, 5);
8 System.out.println("The length of oneDimA is " + oneDimA.length);
9 System.out.println("The length of oneDimB is " + oneDimB.length);
10 if (Arrays.equals(oneDimA, oneDimB))
11 System.out.println("OneDimA is equal to oneDimB");
12
13 int[] dimStr = { 5, 10 };
14 //这里通过dimStr来定义一个5*10的二维String数组。
15 String[][] twoDimStr = (String[][]) Array.newInstance(String.class,dimStr);
16 System.out.println("The length of twoDimStr is " + twoDimStr.length);
17 for (int i = 0; i < twoDimStr.length; ++i) {
18 System.out.print(twoDimStr[i].length + "\t");
19 }
20 }
21 /* 输出结果如下:
22 The length of oneDimA is 5
23 The length of oneDimB is 5
24 OneDimA is equal to oneDimB
25 The length of twoDimStr is 5
26 10 10 10 10 10
27 */
2) 获取原始类型和原始类型数组的类型名称:
1 public static void main(String[] args) {
2 System.out.println(int.class.getName());
3 System.out.println(int[].class.getName());
4 System.out.println(byte.class.getName());
5 System.out.println(byte[].class.getName());
6 }
7 /* 输出结果如下:
8 int
9 [I
10 byte
11 [B
12 */
可以看到数组的名称前面带有一个[,这是数组名称的表示方式,二维数组则表示为[[,后面的I表示int,B表示byte。这是JVM提供的一套类型名称编码规范,我会在后面关于本地代码(JNI)的Blog中给出更为明确的列表和使用方式,因为他们在JNI中应用还是比较广泛的。
3) 判断当前对象是否为数组:
1 public static void main(String[] args) {
2 Object o = new int[10];
3 boolean b = o.getClass().isArray();
4 if (b) {
5 System.out.println("object is an array");
6 }
7 }
8 /* 输出结果如下:
9 object is an array
10 */
4) 获取数组的维度:
1