Java 利用Array.newInstance创建动态数组突破Array本身限制
2018-01-28 23:49
555 查看
1,创建一个字符串数组修改其中的索引值并打印
Array.newInstance(clazz, 10)调用链分析:
public static Object newInstance(Class<?> componentType, int length)
throws NegativeArraySizeException {
return newArray(componentType, length);
}
//在Array类中调用了静态nativ方法来实现
private static native Object newArray(Class<?> componentType, int length)
throws NegativeArraySizeException;2、Java中动态修改数组(Array)的大小
/** * Created by Administrator on 2018/1/28. */ public class DynamicArrayTest { public static final void main(String... args) throws Exception { Class clazz = Class.forName("java.lang.String"); //创建一个长度为10的字符串数组,在Java中数组也可以作为Object对象 Object array = Array.newInstance(clazz, 10); //把字符串数组对象的索引位置为5的元素设置为"hello" Array.set(array, 5, "hello"); //获得字符串数组对象的索引位置为5的元素的值 String str = (String)Array.get(array, 5); //打印 System.out.println(str); } }
Array.newInstance(clazz, 10)调用链分析:
public static Object newInstance(Class<?> componentType, int length)
throws NegativeArraySizeException {
return newArray(componentType, length);
}
//在Array类中调用了静态nativ方法来实现
private static native Object newArray(Class<?> componentType, int length)
throws NegativeArraySizeException;2、Java中动态修改数组(Array)的大小
/** * Created by Administrator on 2018/1/28. */ public class DynamicArrayTest { private static Object resizeArray (Object oldArray, int newSize) { //获取数组oldArray的长度 int oldSize = Array.getLength(oldArray); //获取数组oldArray的元素类型 Class elementType = oldArray.getClass().getComponentType(); //实例一个新的数组 类型和oldArray的一样 长度参数传入的newSize Object newArray = Array.newInstance(elementType,newSize); //得到新数组newArray 和oldArray两个中长度最短的,并把长度返回给preserveLength int preserveLength = Math.min(oldSize,newSize); //数组内容复制 if (preserveLength > 0) { System.arraycopy (oldArray, 0, newArray, 0, preserveLength); } return newArray; } public static final void main(String... args) throws Exception { int[] a = {1,2,3}; a = (int[])resizeArray(a,5); a[3] = 4; a[4] = 5; for (int i=0; i<a.length; i++) { System.out.println (a[i]); } } }
相关文章推荐
- 一个关于用Array.newInstance方式创建多维数组的问题
- Java反射04 : 通过Array动态创建和访问Java数组
- Java 反射 Array动态创建数组
- [Java]利用反射机制动态加载并创建包含参数的对象
- 容器(vector)、数组、new创建的动态数组,你到底用哪一个(执行效率分析)
- 使用new创建动态数组
- PB动态数组实现机理1 --- 利用本身的结构来实现动态二维数组
- Java—java中如何实现动态数组的创建与赋值
- java 声明和动态创建数组
- C++ 用new 动态创建多维数组
- C++ 用new 动态创建多维数组
- Java中动态修改数组(Array)的大小
- c++ primer plus 习题5.7(使用new为结构创建动态数组)
- JS - 动态创建2维数组Array (例子源码)
- 利用java反射动态调整数组长度
- 容器(vector)、数组、new创建的动态数组,你到底用哪一个(执行效率分析)
- 用Java创建数组工具类ArrayTool
- java 利用Constructor动态创建构造函数带有参数的类
- 《C++ Primer》笔记-创建动态数组new,delete
- 【动态代理】使用构造方法创建代理类、使用 newProxyInstance.newProxyInstance()创建代理类