数组之---数组是第一级对象!

数组是对象:

无论使用哪种类型的数组,数组标示符其实只是一个引用,指向在堆中创建的一个真实对象,这个数组对象用以保存指向其他对象的引用。

可以作为数组初始化语法的一部分隐式的创建此对象,或者用new表达式显示的创建。

只读成员length是数组对象的一部分(事实上这是唯一一个可以访问的字段或方法),表示此数组对象可以存储多少元素。“[]”语法是访问数组对象的唯一方式。

初始化数组的各种方式 & 对象数组和基本类型数组的使用:

下例总结了初始化数组的各种方式,也说明,对象数组和基本类型数组在使用上几乎是相同的;

唯一的区别就是对象数组保存的是引用,基本类型数组直接保存基本类型的值。

class BerylliumSphere {

	private static long counter;	// 静态变量是属于类的,且唯一。
	private final long id = counter++;		// final变量值不可以被改变

	public String toString() {
		return "Sphere " + id;
	}
}

public class Main {

	public static void main(String[] args) {

		/**
		 * 对象数组
		 * */
		BerylliumSphere[] a; // 创建一个对象数组引用
		BerylliumSphere[] b = new BerylliumSphere[5]; // 创建一个数组对象引用,指向在堆中创建的一个真实对象

		// 堆中真实数组所有的引用会自动初始化为null
		// b:[null, null, null, null, null]
		System.out.println("b:"+Arrays.toString(b));

		BerylliumSphere[] c = new BerylliumSphere[4];
		//
		for (int i = 0; i < c.length; i++) {
			if (c[i] == null) { // 能够测试是否为null引用
				c[i] = new BerylliumSphere();
			}
		}

		// 聚集初始化
		BerylliumSphere[] d = {new BerylliumSphere(),new BerylliumSphere(),new BerylliumSphere()};

		// 动态聚集初始化
		a = new BerylliumSphere[]{new BerylliumSphere(),new BerylliumSphere(),new BerylliumSphere()};

		/*
		a.length = 3
		b.length = 5
		c.length = 4
		d.length = 3
		a.length = 3
		*/
		System.out.println("a.length = " + a.length); // length是数组的大小,而不是实际保存的元素个数
		System.out.println("b.length = " + b.length);
		System.out.println("c.length = " + c.length);
		System.out.println("d.length = " + d.length);
		a = d;
		System.out.println("a.length = " + a.length);

		/**
		 * 基本数据类型数组
		 * */
		int[] e; // null 引用
		int[] f = new int[5]; // 会自动初始化为0
		System.out.println("f:"+Arrays.toString(f));

		int[] g = new int[4];
		for (int i = 0; i < g.length; i++) {
			g[i] = i*i;
		}

		int[] h = {11,47,91};
		/*f:
		[0, 0, 0, 0, 0]
		f:[0, 0, 0, 0, 0]
		g:[0, 1, 4, 9]
		h:[11, 47, 91]
		e:[11, 47, 91]
		e:[1, 2]
		*/
		System.out.println("f:"+Arrays.toString(f));
		System.out.println("g:"+Arrays.toString(g));
		System.out.println("h:"+Arrays.toString(h));
		e = h;
		System.out.println("e:"+Arrays.toString(e));
		e = new int[]{1,2};
		System.out.println("e:"+Arrays.toString(e));
	}

数组b初始化为指向一个BerylliumSphere引用的数组,但其实并没有BerylliumSphere对象置入数组中。

然而,仍可以询问数组的大小,因为b指向一个合法的对象。这样做有一个小缺点:你无法知道在此数组中确切的有多少元素,

因为length只表示数组能够容纳多少元素。也就是说,length是数组的大小,而不是实际保存的元素个数。

新生成一个数组对象时,其中所有的引用被自动初始化为null。同样,基本类型的数组如果是数值型的,就被自动初始化为0,字符型char,自动初始化为0,布尔型为false。

结果:

基本类型数组的工作方式和对象数组一样,不过基本类型的数组直接存储基本类型数据的值。

时间: 2024-10-04 15:47:32

数组之---数组是第一级对象!的相关文章

对象和数组-创建数组的多种方法

—————————————————————————— <script type="text/javascript">                //用数组对象的构造函数Array(),Array对象,是内置对象,也提供一个参数,表示数组的初始长度            var arr001 = new Array();        //使用new语句创建一个长度为0的数组            arr001[0] = 1;                    //第

08.18 javascript 06 数组 数组的概念 创建数组 读取数组中的元素 稀疏数组 添加和删除数组的元素 数组遍历 多维数组 数组的方法 类数组对象 作为数组的字符串

# 数组 ### 数组的概念 * 数组是值的有序集合 * 数组中的每个值 称之为 元素 * 每个元素可以是任意数据类型的值 * 每个元素都有索引(下标) * 元素的索引从0开始,按照顺序递增. 元素最大的索引 2^32-2 ### 创建数组 * 直接量 `[]` * 构造函方式  `new Array()` ### 读写数组中的元素 * 数组名[索引] ### 稀疏数组 * js数组的索引是连续的 * 没有连续的给元素赋值 , 没有赋值的元素会自动赋值 undefined ### 添加和删除 数

类数组转数组,对象转数组

1.类数组转数组 //类数组示例 //javascript中常见的类数组有arguments对象和DOM方法的返回结果.//比如 document.getElementsByTagName(). var a = {'1':'gg','2':'love','4':'meimei',length:5}; Array.prototype.join.call(a,'+');//'+gg+love++meimei' //非类数组示例 var c = {'1':2}; //没有length属性就不是类数组

php 获取数组第一个key 第一个键值对 等等

PHP 获取数组中的第一个元素或最后一个元素的值或者键值可以使用 PHP 自带的数组函数. PHP 获取数组中的第一个元素的值或者键值所使用的函数: current() - 返回数组中当前元素值(即:返回当前被数组内部指针指向的元素的值). reset() - 函数把数组的内部指针指向第一个元素,并返回这个元素的值. key() - 返回数组内部指针指向的元素的索引(即:键值). PHP 获取数组中的最后一个元素的值或者键值所使用的函数: end() - 函数将数组内部指针指向最后一个元素,并返

UIResponder 以及事件相关..还有第一响应对象

在iOS 中,一个 UIResponder 对象表示一个可以接收触摸屏上的触摸事件的对象,通俗一点的说,就是表示一个可以接收事件的对象. iOS 中,所有显示在界面上的对象都是从 UIResponder 直接或间接继承的. 下面是 UIResponder 类的一些定义信息: 触摸事件相关: 方法名称 说明 touchesBegan:withEvent 当用户触摸到屏幕时调用方法 tochesMoved:withEvent 当用户触摸到屏幕并移动时调用此方法 tochesEnded:withEve

指针数组和数组指针的区别

数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长.也就是说执行p+1时,p要跨过n个整型数据的长度. 如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组. p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++;       //该语句执行过后,也就是p=p+

数组之 -- 数组元素的比较、排序

前言: 当我们在使用Java,应该"优选容器而不是数组".只有在证明性能成为问题,并且切换到数组对性能提高有所帮助时,你才应该使用数组. 排序: 排序必须根据对象的实际类型执行比较操作.一种自然的解决方案是为每种不同的类型各编写一个不同的排序方法,但是这样的代码难以被新的类型所复用. 程序设计的基本目标是:"将保持不变的事物与会发生改变的事物相分离",而这里,不变的是通用的排序算法,变化的是各种对象相互比较的方式.因此,不是将进行比较的代码编写成不同的子程序,而是使

js类数组转数组的方法(ArrayLike)

1. 什么是类数组ArrayLike 拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解) 不具有数组所具有的方法 //类数组示例 var a = {'1':'gg','2':'love','4':'meimei',length:5}; Array.prototype.join.call(a,'+');//'+gg+love++meimei' //非类数组示例 var c = {'1':2}; //没有length属性就不是类数

指针数组 和数组指针

数组指针和指针数组的区别 数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长.也就是说执行p+1时,p要跨过n个整型数据的长度. 如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组. p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++;       //该语