分享
 
 
 

Thinking:int,Integer数组的初始化

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

EXAMPLE ArrayOne :

import java.util.*;

public class ArrayOne{

static Random rand = new Random();

static int pRand(int mod) {

return Math.abs(rand.nextInt()) % mod + 1;

}

public static void main(String[] args) {

int[] a;

a = new int[pRand(20)];

prt("length of a = " + a.length);

for(int i = 0; i prt("a[" + i + "] = " + a[i]);}static void prt(String s) {System.out.println(s);}}My Tip:从程序输出可看到基本数据类型的数组元素会自动初始化成“空”值(对于数值,空值就是零;对于char,它是null ;而对于boolean,它却是false)==============EXAMPLE ArrayTwo:public class ArrayClassObj {??????? public static void main(String[] args) {??Integer[] a = new Integer[20];??prt("length of a = " + a.length);??for(int i = 0; i ??a[i] = new Integer(i);/**将该句注释后,执行没有错误!!!*/??prt("a[" + i + "] = " + a[i]);????????? }?}?static void prt(String s) {??System.out.println(s);?}}My Tip:ThinkingInJava 2 叙述如下:若操作的是一个非基本类型对象的数组,那么无论如何都要使用new。在这里,我们会再一次遇到句柄问题,因为我们创建的是一个句柄数组。请大家观察封装器类型Integer,它是一个类,而非基本数据类型Integer[] a = new Integer[20]中,甚至在new 调用后才开始创建数组,它只是一个句柄数组,而且除非通过创建一个新的Integer 对象,从而初始化了对象句柄,否则初始化进程不会结束,所以a[i] = new Integer(i),但若忘记创建对象,就会在运行期试图读取空数组位置时获得一个“违例”错误。===注意,在这里,当我注释掉a[i] = new Integer(i);这句时,仍然可以运行,运行结果是,a[0]~a[19]均为null理解(1):Integer[] a = new Integer[20];就已经对数组进行初始化了,数组里的每个元素的值都为null,a是一个数组对象,已经生成实例了:a = new Integer[20];其元素是Integer对象的引用,按照java规范,其初值为 null,即不指向任何对象而在int[] a=new int[3];中数组里的每个元素都是0;理解(2):屏蔽掉a[i] = new Integer(i);仍然能执行的原因是下面的这句语句prt("a[" + i + "] = " + a[i]);它会把a[i]转换成字符串,然后想加.由于a[i]=null,而null这个特殊的东西转换成的字符串也是"null",所以你的程序的输出必然是a[0] = nulla[1] = nulla[2] = null...,当然你把prt语句中的a[i]换成null,程序一样的执行结果.但是这并不是说你的数组就初始化结束了,这个时候数组仍然没有被初始化,他的每个值都是null,即不可用的.这个时候调用a[i].任何方法都会出异常.比如你把prt这句该为prt("a[" + i + "] = " + a[i].toString());/**改后抛出异常,因为基本数据类型中toString()已经重写,而非基本类型要自己写,此处会传地址值,但因为a[i]为null,所以异常,具体可看此笔记第二篇*/还有想看看效果,可以把上句该为prt("a[" + i + "] = " + new Object());他输出的是Object.toString()转换出来的地址.所以只有在「生成新的Integer 物件以初始化reference」之後,初始化動作才算完成:这句话是正确的.只有这样才能使用a[i],否则可能就只能象prt 这样的程序可以执行,其他的恐怕还会出错.能运行的原因当然是因为那个null了.而不是说a[i]是可用的.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有