java数组

数组在编程语言中是一种常见的数据结构或者说数据类型,数组中可以存储多个数据,这些数据叫做数组元素。数组是引用类型,数组中的元素可以是任意类型的,但是一个数组中的所有元素却必须是同一类型。

通常通过数组元素的索引来访问数组元素,包括为数组中的元素赋值和取出数组中的元素。

数组初始化以后,他所占用的内存就固定下来了,也就是长度将不可变,即使把该数组中的数据全部清空,他所占的内存依旧是那么多。

定义数组有两种方式:类型 [] 数组名 或 类型 数组名 [],常用的是第一种。定义数组仅仅是定义了一个引用变量,还没有具体的内存,需要初始化,定义数组的时候不能指定数组的长度。

数组的初始化也就是为他指定长度,如果指定长度以后没有为数组中的元素赋值,那么系统会指定默认值。整数类型默认是0,浮点类型默认0.0,char类型默认\u0000,boolean类型默认false,引用类型默认的是null,null也是一个值。

数组初始化分为静态初始化和动态初始化,静态初始化指的是初始化的时候由程序员显示的为数组元素指定初始值,系统来决定长度;动态初始化指的是初始化时由程序员来指定数组的长度,系统分配初始值,静态初始化和动态初始化不要同时使用。

执行静态初始化时,为元素指定的初始值类型必须与new后的类型相同或者是它子类的实例,而new后的类型要与定义数组时的类型相同或者是定义数组时的类型的子类。

静态初始化还有一种简化的方式,即:不需要new,直接在等号后边用大括号并给元素赋值,这里给元素赋值时一样要遵循类型符合的原则。

java中通过索引来访问数组元素,索引默认从0开始,最后一个是数组长度减1。如果访问数组时指定的索引值小于0或大于数组长度减1,则编译通过但是会运行时出现下标越界异常。

数组中提供了length属性,可以通过这个属性来获得数组的长度。

除开可以根据数组的长度循环遍历数组中的每个元素以外,jdk1.5以后还提供了增强for循环来遍历数组和集合,增强for循环foreach在循环遍历的时候不需要知道数组的长度,也不需要数组索引。例如:for(元素类型 接收元素的变量名:要遍历的数组或集合名)

数组是一种引用类型的数据,数组元素和数组变量在内存中是分开存放的,数组变量只是一个引用,存放在栈中,而数组元素存放在堆中。

如果一个数组确定不再需要使用了,可以把变量赋值为null,也就切断了相关的引用,那么垃圾回收机制就会把该数组回收。

只要类型相互兼容,可以让一个数组变量指向另一个实际的数组,这个时候可能会产生数组长度可变的错觉,而实际上并不是数组长度变了,只是引用改变了而已。

时间: 2024-11-10 00:22:17

java数组的相关文章

关于Java 数组内存分配一点认识

 可能Java 数组大家都很熟悉,最近我遇到了一个关于Java 数组内存分配的问题.         呵呵.突然就发现许多书上"基本数据类型存储在栈内存当中,对象则保存在堆内存"这句话完全是错误的.下面是个简单的例子代码: public class Test { public static void main(String[] argv) { // 静态初始化数组 String[] names = { "Michael", "Orson", &q

关于java数组的深度思考

数组 刚刚开始接触java数组的人都会听到一句类似的话:java是纯面向对象的语言,他的数组也是一个对象.于是乎,笔者就按照一个对象的方式来使用数组,心安理得.直到我接触到C的数组后,才发现将数组作为一个类来使用在实现上是多么的"不自然". 首先我们看一下表面现象,数组创建的时候采用的是如下语句: MyClass[] arr = new MyClass[9]; 而普通类采用的是如下语句: MyClass obj = new MyClass(); 就是说,创建数组的时候不使用小括号传参.

新手入门:Java数组特点及基本使用技巧

技巧|数组 1.关于数组的特点 1)在Java中,无论使用数组或容器,都有边界检查.如果越界操作就会得到一个RuntimeException异常. 2)数组只能保存特定类型.数组可以保存基本类型,容器则不能.容器不以具体的类型来处理对象,它们将所有对象都按Object类型处理. 3)容器类只能保存对象的引用.而数组既可以创建为直接保存基本类型,也可以保存对象的引用.在容器中可以使用包装类,如Integer.Double等来实现保存基本数据类型值. 4)对象数组和基本类型数组在使用上几乎是相同的:

java数组的返回

假定我们现在想写一个方法,同时不希望它仅仅返回一样东西,而是想返回一系列东西.此时,象C和C++这样的语言会使问题复杂化,因为我们不能返回一个数组,只能返回指向数组的一个指针.这样就非常麻烦,因为很难控制数组的"存在时间",它很容易造成内存"漏洞"的出现. Java采用的是类似的方法,但我们能"返回一个数组".当然,此时返回的实际仍是指向数组的指针.但在Java里,我们永远不必担心那个数组的是否可用--只要需要,它就会自动存在.而且垃圾收集器会在

Java数组模拟优先级队列数据结构的实例_java

优先级队列如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了.这样,我们就引入了优先级队列 这种数据结构. 优先级队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一个新元素 (3)删除 一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素 .对于优先权相同的元素,可按先进先出次序处理或按任意优先权

初学者求解java数组下标越界问题

问题描述 初学者求解java数组下标越界问题 public class Test{ public static void main(String[]args){ System.out.println(args[0]); System.out.println(args[1]); }} doc显示Exception in thread ""main"" java.lang.ArrayIndexOutOfBoundsException:0 at Test.main(Tes

random-关于java数组的问题,想来这边问一下

问题描述 关于java数组的问题,想来这边问一下 首先是这样子的,我们作业时是一个打地鼠的小程序,模拟地鼠出现的样子. 我是先设定一个4x4的数组Array[4][4],数组默认值全部设定为0. 然后设定两个随机变量row和col,范围都在0-3之间 然后把Array[row][col]的值从设定为1,以表示地鼠出现的位置. 那接下来就是我想要问的地方: 如何把出现过的位置舍弃,就是希望接下来随机的row和col不要再重复出现同样的数字? 下面是代码片段 int i = new Random()

java数组 代码优化 我能想到的就是下面的代码(未考虑Arrays类)

问题描述 java数组 代码优化 我能想到的就是下面的代码(未考虑Arrays类) // 定义一个函数,接收一个数组与一个要查找的元素,如果该元素存在数组中,那么返回该元素在数组中的索引值,如果不存在返回-1.(不要严格要求使用二分查找法) import java.util.Scanner; class demo2 { public static void main(String[] args){ int[] index=lookfornum(); for (int i=0;i<index.le

Java数组内存分析

1. Java数组是静态的 Java是静态语言,所以Java的数组也是静态的,即:数组被初始化后,长度不可变 静态初始化:显式指定每个数组元素的初始值,系统决定数组长度 String[] books = new String[]{"疯狂Java讲义","Thinking in Java","Java核心技术卷"}; String[] names = new String[]{"张三","李四","

遍历-两个java数组比大小排序

问题描述 两个java数组比大小排序 举个例子,我现在有两个集合数组 A ={32,43,28,3,67,20, 40,0, 59 } B = {3 ,45, 18 ,83 ,30 ,28 ,40,56 ,25} 我要对两个集合数组的大小进行一 一的比较,最后整合到一个大集合数组C中,数字大的排的前面,数字小的在后面,如果AB有数字相同的,那将A组里面的数字排到B前面.求大神帮忙怎么用循环遍历来写这一段代码. 解决方案 上面写成了从小到大排序了,不好意思 public static int[]