`

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数组练习题(带答案).doc

    Java数组是Java编程语言中的基本数据结构之一,用于存储固定数量的同类型元素。了解和熟练掌握数组的使用是学习Java的重要环节。本篇练习题涵盖了数组的基本概念、操作和异常处理,下面是针对题目中涉及知识点的详细...

    java数组初始化详解

    Java 数组初始化详解 Java 数组初始化是 Java 编程语言中的一种基本概念,它允许开发者创建和初始化数组,以便于存储和操作数据。在本文中,我们将对 Java 数组初始化进行详细的介绍,包括一维数组和二维数组的声明...

    Java数组与内存控制

    ### Java数组与内存控制 #### 一、Java数组在内存分配方面的知识 ##### 1.1 数组初始化 - **声明数组的时候如何分配内存:** - 在Java中,数组的声明并不直接分配内存,而仅仅是创建了一个数组引用变量。例如: ...

    Java数组版ATM

    在Java编程中,"Java数组版ATM"项目是一个典型的面向对象设计实例,它通过数组来模拟自动取款机(ATM)的功能。这个项目旨在教授如何利用Java语言中的类、对象、数组以及相关的面向对象设计原则来实现一个简单的银行...

    Java数组越界问题实例解析

    Java数组越界问题实例解析 在Java中,数组是一种非常重要的数据结构,它广泛应用于各种场景中。然而,在使用数组时,开发者最容易遇到的问题之一就是数组越界问题。数组越界问题是指在访问数组时,索引值超出了数组...

    java数组教案.pdf

    Java数组教案 Java数组是Java编程语言中的一种重要数据结构,用于存储和处理一组数据。在本教案中,我们将详细介绍Java数组的声明、表示、赋值和内存分配,帮助学生掌握数组的基本概念和应用。 一、数组的声明和...

    java数组

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

    java 数组和字符串

    ### Java数组和字符串详解 #### 实验目标与背景 本次实验旨在深化理解Java中的数组与字符串操作,聚焦于`String`类与`StringBuffer`类的掌握,包括它们的常用方法、相等性判断的不同方式、数组的创建及引用机制,...

    java数组函数(摘自JAVA编程思想)

    通过`com.bruceeckel.util`包中的工具类,我们可以更加高效和便捷地处理Java数组,提高代码的可读性和维护性。学习和熟练掌握这些数组函数,对于提升Java编程能力是非常有帮助的。在实际开发中,我们应该充分利用...

    java 数组求和计算

    以上内容涵盖了Java数组求和计算的基本知识以及相关的扩展话题。理解并掌握这些知识点对于进行有效的Java编程至关重要。在实际应用中,根据具体需求,可能还需要考虑性能优化、异常处理等方面的问题。

    java数组扩容2

    Java数组扩容的原理  1)Java数组对象的大小是固定不变的,数组对象是不可扩容的。  2)利用数组复制方法可以变通的实现数组扩容。  3)System.arraycopy()可以复制数组。  4)Arrays.copyOf()可以简便的...

    第03讲 JAVA数组.ppt

    【Java数组】是Java编程语言中基础且重要的数据结构,它允许存储固定数量的相同类型的数据。数组在Java中属于引用类型,也就是说数组本身是一个对象,数组中的每个元素相当于这个对象的成员变量。数组可以包含任何...

    Java数组倒置.rar

    Java数组倒置是一个常见的编程操作,它涉及到对数组元素顺序的反转。在Java中,数组是一种数据结构,用于存储同一类型的多个元素。数组倒置,也就是将数组中的元素顺序从后往前排列,使得原数组的第一个元素变为最后...

    46.java数组遍历1.zip

    46.java数组遍历1.zip46.java数组遍历1.zip46.java数组遍历1.zip46.java数组遍历1.zip46.java数组遍历1.zip46.java数组遍历1.zip46.java数组遍历1.zip46.java数组遍历1.zip46.java数组遍历1.zip46.java数组遍历1.zip...

    43.java数组定义1.zip

    43.java数组定义1.zip43.java数组定义1.zip43.java数组定义1.zip43.java数组定义1.zip43.java数组定义1.zip43.java数组定义1.zip43.java数组定义1.zip43.java数组定义1.zip43.java数组定义1.zip43.java数组定义1.zip...

    22.java数组的复制.zip

    22.java数组的复制.zip22.java数组的复制.zip22.java数组的复制.zip22.java数组的复制.zip22.java数组的复制.zip22.java数组的复制.zip22.java数组的复制.zip22.java数组的复制.zip22.java数组的复制.zip22.java数组...

    20.java数组空间分配.zip

    20.java数组空间分配.zip20.java数组空间分配.zip20.java数组空间分配.zip20.java数组空间分配.zip20.java数组空间分配.zip20.java数组空间分配.zip20.java数组空间分配.zip20.java数组空间分配.zip20.java数组空间...

    java数组基础与典型应用

    ### Java数组基础与典型应用详解 #### 一、数组的概念及基本使用 数组是Java中最基本的数据结构之一,用于存储固定大小的同类型元素集合。它允许程序员在单个变量中存储多个相同类型的数据项,这极大地提高了数据...

Global site tag (gtag.js) - Google Analytics