`

JAVA 数组

 
阅读更多
/**
 * 
 * @author long
 * 
 */

public class Array01 {

	/**
	 * 不要同时使用静态初始化和动态初始化。<br>
	 * 也就是说,不要再进行数组初始化时,既指定数组的长度,也为每个数组分配初始值<br>
	 * java的数组是静态的,一旦为数组初始化完成,数组元素的内存空间分配结束,程序只能改变数组元素的值而无法改变数组的长度<br>
	 * 改变数组的引用会造成数组长度改变的假象 但是真正的数组对象的长度并没有改变
	 * 
	 * 数组元素的默认值<br>
	 * (byte,short,int,long):0 (float,double):0.0 (char):'\u0000'
	 * (boolean):false 引用类型:null
	 * 
	 * 注意考虑数组变量的内存分配(栈内存和对内存)
	 */
	public void test1() {
		final String[] books = new String[] { "疯狂java讲义", "轻量级java ee",
				"疯狂ajax" };
		String[] names = new String[] { "孙悟空", "猪八戒", "白骨精", "test" };
		final String[] strArr = new String[5];
		System.out.println(books.length);
		System.out.println(names.length);
		System.out.println(strArr.length);
		System.out.println("---------------");
		names = books;
		System.out.println(names[0] + "," + names.length);
	}

	/**
	 * 在使用数组之前必须初始化数组对象不是数组变量<br>
	 * 也就是为该数组对象分配连续的内存空间<br>
	 * 分清数组变量(通常放在栈中),数组对象(通常放在堆中)
	 */
	public void test2() {
		final int[] num = new int[] { 0, 1, 2, 3, 4 };
		int[] price;
		price = num;
		System.out.println(price.length);
		price[0] = 10;
		System.out.println(num[0]);
	}

	/**
	 * 基本类型数组的初始化 <br>
	 * 所有局部变量不管是基本类型的变量还是引用类型的变量都是存储在方法栈中<br>
	 * 但引用类型的所引用的对象不管是数组还是java对象都是存储在堆内存中的
	 */
	public void test3() {
		int[] arrInt;
		arrInt = new int[] { 1, 2, 3, 4, 5 };
		System.out.println(arrInt.length);
	}

	public void test4() {
		int[] iarr = null;
		System.out.println(iarr);
		// 空指针
		System.out.println(iarr.length);
		// 只有引用对象后才不会空指针
		iarr = new int[4];
		System.out.println(iarr.length);
	}

	public static void main(final String[] args) {
		new Array01().test1();
	}

}

 

class Perso {
	int age;
	double height;

	public Perso() {

	}

	public Perso(final int age, final double height) {
		this.age = age;
		this.height = height;
	}

	public void info() {
		System.out.println(age + "," + height);
	}
}

public class Array02 {

	/**
	 * 考虑main方法的内存分配<br>
	 * 结果输出的hashcode相同
	 * 
	 * 先在方法栈中生成一个变量stu<br>
	 * 然后又在堆内存中生成两个引用变量stu[0],stu[0]<br>
	 * 然后再在栈内存中一个引用变量p1堆内存中生成一个Person对象p1指向Person对象<br>
	 * 最后让stu[0]指向p1所在的内存
	 * 
	 * @param args
	 */
	public static void main(final String[] args) {
		Perso[] stu;
		stu = new Perso[2];

		final Perso p1 = new Perso(10, 20);
		new Perso(11, 22);

		stu[0] = p1;
		System.out.println(stu[0].hashCode() + "," + p1.hashCode());
	}

}

 

public class Array03 {
	/**
	 * java允许将多维数组当成1维数组来处理<br>
	 * 初始化多维数组时候只初始化最左边的维数<br>
	 * 考虑多维数组的内存分配
	 */
	public void test1() {
		int[][] a;
		a = new int[4][];
		for (int i = 0; i < a.length; i++) {
			System.out.println(a[i]);
		}
		a[0] = new int[] { 0, 1 };
		System.out.println("--------------");
		for (int j = 0; j < a[0].length; j++) {
			System.out.println(a[0][j]);
		}
	}

	public void test2() {
		final Object[][][][] f1 = new Object[3][][][];
		f1[1] = new Object[3][][];
		f1[1][1] = new Object[3][];
		f1[1][1][1] = new Object[] { 0, 1, 2, 3, 4 };

		for (int i = 0; i < f1[1][1][1].length; i++) {
			System.out.println(f1[1][1][1][i]);
		}
	}

	public void test3() {
		final Object[] objArr = new Object[3];
		objArr[1] = new Object[2];
		final Object[] objArr2 = (Object[]) objArr[1];
		objArr2[1] = new Object[3];

	}

	public static void main(final String[] args) {
		new Array03().test1();
	}

}

 

0
4
分享到:
评论

相关推荐

    java数组结构图

    对数组的总结和分析,通过这个结构记住它,在开发的过程中使用

    Java数组讲解

    ### Java数组讲解 #### 1. 数组基本概念与初始化 - **定义**: 数组是一种基本的数据结构,用于存储相同类型的多个元素。这些元素在内存中是连续存储的。 - **初始化**: 可以通过两种方式进行初始化:动态初始化和...

    java数组遍历 删除remove(示例代码)

    在Java编程中,数组是一种基本的数据结构,用于存储固定数量的相同类型的数据。然而,当涉及到动态添加或删除元素时,数组并不方便,因为它在创建时必须指定长度,并且一旦创建,长度就不能改变。这时,我们可以转向...

    java数组

    Java数组是程序设计中不可或缺的基础概念,它是一种数据结构,允许我们存储同类型的多个元素。在Java中,数组是对象,具有固定的大小,一旦创建,其长度就不能改变。本篇文章将深入探讨Java数组的各个方面,包括创建...

    Java 数组进阶知识点

    Java 数组进阶知识点涵盖了数组操作中的多个高级主题,包括数组的复制、排序、查找以及扩容处理。这些知识点是Java程序员在开发过程中经常会使用到的,对于提升编程效率和代码质量有着重要作用。 首先,关于数组的...

    Java程序设计Java数组PDF

    Java数组是Java程序设计中非常重要的数据结构之一。学习Java数组对于掌握Java语言的特性,以及开发高效、专业的Java应用程序都至关重要。数组可以存储固定大小的数据集合,这些数据必须是相同类型,可以是基本数据...

Global site tag (gtag.js) - Google Analytics