Java 核心技术(第八版)卷1:基础知识:例5-8P196ArrayGrowTest

Java 核心技术(第八版)卷1:基础知识:例5-8P196ArrayGrowTest,第1张

import java.lang.reflect.*;
//本程序演示了用反射来 *** 纵数组
public class ArrayGrowTest {
    public static void main(String[] args)
    {
        int[] a={1,2,3};
        a=(int[]) goodArrayGrow(a);
        arrayPrint(a);

        String [] b={"Tom","Dick","Harry"};
        b=(String[]) goodArrayGrow(b);
        arrayPrint(b);
      //  System.out.println("The following call will generate an exception.");
      //  b=(String[]) badArrayGrow(b);
    }
    //本程序试图通过分配一个新的数组,然后草被所有的元素实现 增长一个数组(为数组扩容)
    //为什么这么做不好呢?因为 这个创建数组的语句是:Object[] newArray=new Object[newLength] 这样
    //创建的数组是Object[] ,这个数组是不能转换为其他类型的数组的。
    static Object[] badArrayGrow(Object[] a)
    {
        int newLength=a.length*11/10+10;
        Object[] newArray=new Object[newLength];
        System.arraycopy(a,0,newArray,0,a.length);
        return newArray;
    }
    //本方法通过分配一个新的同样类型的数组 然后拷贝所有的元素.请注意这个same type 同样的类型 这个是关键
    static Object goodArrayGrow(Object a)
    {
        Class cl=a.getClass();
        if(!cl.isArray())return  null;
        Class componentType=cl.getComponentType();
        int length=Array.getLength(a);
        int newLength=length*11/10+10;

        Object newArray=Array.newInstance(componentType,newLength);
        System.arraycopy(a,0,newArray,0,length);
        return newArray;
    }
    //打印数组中的元素
    static void arrayPrint(Object a)
    {
        Class cl=a.getClass();
        if(!cl.isArray()) return ;
        Class componentType=cl.getComponentType();
        int length=Array.getLength(a);
        System.out.print(componentType.getName()+"["+length+"]={");
        for(int i=0;i

运行结果:

int[13]={1 2 3 0 0 0 0 0 0 0 0 0 0 }
java.lang.String[13]={Tom Dick Harry null null null null null null null null null null }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/801604.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-07
下一篇 2022-05-07

发表评论

登录后才能评论

评论列表(0条)