浅谈Java数组
来源:互联网 发布:线阵音响和矩阵的区别 编辑:程序博客网 时间:2024/06/10 06:41
Java中的数组是静态的,一旦初始化后,长度就不会改变。所谓初始化,就是为数组对象的元素分配内存空间,为每个数组元素指定初始化值。
初始化有两种方式:
1、静态初始化:初始化时由我们显示赋值,由系统决定长度,即我们自己确定每个数组元素是什么,但是不规定长度。
String [] students=new String[] { "西昌","酒泉" } String [] students= { "西昌","酒泉" }
2、动态初始化:初始化时我们只负责指定长度,不负责为数组元素赋值。
String [] students=new String[3];
当我们定义一个数组变量时,比如String [] students; students这个数组变量(引用变量)并没有指向一个有效的内存,直到我们完成了初始化后,students就会像一个指针一样,指向一个有效的数组对象。实际上初始化,并不是初始化对象的引用变量(students),而是对对象本身进行初始化(此处也就是系统为数组分配内存空间,将数组元素的值存入对应内存里)。
对于Java中的所有引用变量,它们都不需要经过所谓初始化操作,需要进行初始化操作的只是该引用变量所对应的对象。引用变量只是栈内存中的变量本身,它的本质是一个指针,只有当引用变量调用方法,或者访问属性时,该引用变量才会由它所引用的对象代替。(补充:所有局部变量都是放在栈内保存,不论是基本类型变量(int a),还是引用类型变量(String [] students)都是存储在各自栈内;但引用类型变量所引用的对象(包括数组,普通Java对象)则总是存储在内存中)
//此时系统不会去访问students所引用的数组对象 System.out.println(students); /*此时students访问了length属性,所以此刻程 序自动访问students所引用的数组对象*/ System.out.println(students.length); System.out.println(students[0]);
此时我们就可以解释一个NullPointerException的一种情况了。当我们用引用变量访问实例属性,或者调用非静态方法时,如果该引用变量没有引用一个对象,程序就会发生空指针异常。
String []students; System.out.println(students.length); //会抛出空指针异常
最后谈谈多维数组,多位数组的本质其实就是一维数组。如下图所示:
//定义并且初始化一个一维数组 Object[] obj1=new Object[2]; obj1[1]=new Object[2]; //将obj[1]的值赋值给obj2 Object[] obj2=(Object[])obj1[1]; //......
依次类推,定义的一个一维数组中的每个空间放置一个一维数组,然后在放置的一维数组的空间内再放置一维数组,不断下去这样其实就是一个多维数组了。就等同于创建如下类似的多维数组:
Object[] obj=new Objecta[c];
今天分享就到这里,希望对大家有所收获。(原文在我自己博客里面原文地址)
参考书籍:李刚《疯狂Java》
- 浅谈java中的数组
- 浅谈java数组
- 浅谈JAVA二维数组
- java数组浅谈
- 浅谈Java数组
- 浅谈Java数组声明、创建、初始化
- 浅谈Java不同于C++的数组
- 数组浅谈
- 浅谈数组
- 浅谈数组
- 浅谈Java String类、Java数组和Java对象
- 浅谈Java集合中Array(数组)的应用
- 浅谈java中整型数组选择排序的思想
- java:浅谈数组与对象的内存控制
- 浅谈Java集合中Array(数组)的应用
- 浅谈Java集合中Array(数组)的应用
- 浅谈Java集合中Array(数组)的应用
- 浅谈C#中的数组
- Ubuntu16.04环境下命令行安装驱动
- Java实现-寻找峰值
- HDU 1052
- OSPF Configuration Examples
- 2017年上海金马五校程序设计竞赛:Problem C : Count the Number
- 浅谈Java数组
- 基于Linux系统利用XAMPP扩展Redis和Memcache
- 基于Unity3D的并行渲染模型的开发教程(五):Leap Motion
- Windows 多线程编程链表的读写
- SSH框架随写
- NOIP2015 斗地主 洛谷P2668
- 找工作笔试面试那些事儿(5)---构造函数、析构函数和赋值函数
- App主界面Tab四个实现方法
- GO语言interface