我是靠谱客的博主 幽默汽车,最近开发中收集的这篇文章主要介绍java反射机制初体验3Array类,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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工具类用于完成对数的反射操作。

示例代码:

View Code
 1 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类所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部