Array类
1、每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
如果此类对象表示一个数组类,则名字的内部形式为:表示该数组嵌套深度的一个或多个 '[' 字符加元素类型名。元素类型名的编码如下:
Element Type | Encoding | |
boolean | Z | |
byte | B | |
char | C | |
class or interface | Lclassname; | |
double | D | |
float | F | |
int | I | |
long | J | |
short | S | |
2、 代表数组的Class实例对象的getSuperClass()方法返回的父类为Object类对应的Class。
3、 基本类型的一维数组可以被当作Object类型使用,不能当作Object[]类型使用;非基本类型的一维数组既可以当作Object类型使用,也可当作Object[]类型使用。
4、 Array工具类用于完成对数的反射操作。
示例代码:


复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
1371 package reflect; 2 3 import java.lang.reflect.Array; 4 import java.lang.reflect.Constructor; 5 import java.lang.reflect.Field; 6 import java.lang.reflect.Method; 7 import java.util.Iterator; 8 9 public class ReflectTest { 10 11 private static final Object Integer = null; 12 13 /** 14 * @author alan 15 * @param args 16 * @throws Exception 17 */ 18 public static void main(String[] args) throws Exception { 19 /* 20 *数组的反射 21 *每个数组属于被映射为 Class 对象的一个类, 22 *所有具有相同元素类型和维数的数组都共享该 Class 对象。 23 */ 24 int [] intArray1=new int[]{1,2,3}; 25 int [] intArray2=new int[4]; 26 int [] []intArray3=new int[3][4]; 27 String[] stringArray=new String[]{"a","b","c"}; 28 System.out.println(intArray1.getClass()==intArray2.getClass()); //输出为true 29 //System.out.println(intArray1.getClass()==intArray3.getClass()); //编译无法通过 30 //System.out.println(intArray1.getClass()==stringArray.getClass());//编译无法通过 31 32 System.out.println("intArray1 is "+intArray1.getClass().getName() ); 33 /* 34 * 类 Object 是类层次结构的根类。 35 * 每个类都使用 Object 作为超类。 36 * 所有对象(包括数组)都实现这个类的方法。 37 */ 38 System.out.println("intArray1's parent is "+intArray1.getClass().getSuperclass().getName()); 39 System.out.println("intArray3's parent is "+intArray3.getClass().getSuperclass().getName()); 40 Object object1=intArray1; //基本类型的一维数组可以被当作Object类型使用 41 Object object2=stringArray; //非基本类型的一维数组可以当作Object类型使用 42 Object[] object3=intArray3; //数组可以为Object类型使用 43 Object[] object4=stringArray; //非基本类型的一维数组可当作Object[]类型使用 44 //Object[] object5=intArray1; //编译出错.基本类型的一维数组不能当作Object[]类型使用,基本类型不是Object。 45 //System.out.println("int's parent is "+int.class.getSuperclass().getName());//运行出错:Exception in thread "main" java.lang.NullPointerException 46 47 /* 48 *Array工具类用于完成对数的发射操作。 49 *Array 类提供了动态创建和访问 Java 数组的方法。 50 *Array 允许在执行 get 或 set 操作期间进行扩展转换, 51 *但如果发生收缩转换,则抛出 IllegalArgumentException。 52 */ 53 54 Class classType=Class.forName("java.lang.String"); 55 Object array=Array.newInstance(classType,10); 56 Array.set(array, 5, "helloWorld!"); 57 String string=(String) Array.get(array, 5); 58 System.out.println("The 5th is "+string); 59 60 //多维数组反射,使用Array类静态方法创建三维、二维、一维数组, 61 //并给数组的每个赋值并取出该值。 62 int[] dims=new int[]{5,15,20}; 63 Object dimsarray3=Array.newInstance(int.class,dims);//此时为三维数组 64 Object dimsarray2=Array.get(dimsarray3, 3); //此时为二维数组 65 Class cls=dimsarray2.getClass().getComponentType(); //获得二维数组的Class类型 66 dimsarray2=Array.get(dimsarray2, 5); //此时为一维数组 67 Array.set(dimsarray2, 10, 37); 68 System.out.println("反射方法获取:"+Array.get(dimsarray2, 10)); 69 int[][][] arrayCast=(int[][][]) dimsarray3; 70 System.out.println("所设的值:"+arrayCast[3][5][10]); 71 } 72 }
转载于:https://www.cnblogs.com/M-Star/archive/2013/02/09/2909617.html
最后
以上就是幽默汽车最近收集整理的关于java反射机制初体验3Array类的全部内容,更多相关java反射机制初体验3Array类内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复