public static void main(String[] args) {
//1.定义数组
Person[] persons;
//2.分配内存空间
persons = new Person[2];
//3.为数组元素指定值
Person p1 = new Person();
p1.age = 28;
p1.name = "Miracle";
Person p2 = new Person();
p2.age = 30;
p2.name = "Miracle He";
persons[0] = p1;
persons[1] = p2;
//输出元素的值
for(Person p : persons) {
p.display();
}
}
}
对于数组元素为引用类型在内存中的存储与基本类型不一样,此时数组元素仍然存放引用,指向另一块内存,在其中存放有效的数据。

谈到这里,不知是否有朋友要问:Java的多维数组是什么样的?我的回答是:可以有。为什么呢?从底层来看,数组元素可以存放引用类型,包含数组。也就是说在数组元素的内部还可以包含数组(如int[][] numbers = new int[length][]),也即二维数组可当作一维数组(数组长度为length)来处理,也可以同时指定多个维度的长度(如int[][] matrix = new int[length][width]),不过必须至少指定最左端的数组长度length。由此我们得出结论: 任何多维数组(维度为n,n>1)都当作一维数组,其数组元素为n-1维数组。
public class TestMultiArray {
public static void main(String[] args) {
//1.定义二维数组
int[][] numbers;
//2.分配内存空间
numbers = new int[3][];
//可以把numbers看作一维数组来处理
for(int i = 0;i < numbers.length;i++) {
System.out.print(numbers[i] + ",");//null,null,null
}
System.out.println("");
//3.为数组元素指定值
numbers[0] = new int[2];
numbers[0][1] = 1;
for(int i = 0;i < numbers[0].length;i++) {
System.out.print(numbers[0][i] + ",");//0,1
}
}
}
最后,简单介绍一下Arrays(位于java.util下)的静态方法:binarySearch、copyOf、copyOfRange、equals、fill、sort、toString等方法(具体用法参见JDK)。
import java.util.Arrays;
public class TestArrays {
public static void main(String[] args) {
int[] a = {3, 4, 5, 6};
int[] b = {3, 4, 5, 6};
System.out.println("a和b是否相等:" + Arrays.equals(a, b));//true
System.out.println("5在a中的位置:" + Arrays.binarySearch(a, 5));//2
int[] c = Arrays.copyOf(a, 6);
System.out.println("a和c是否相等:" + Arrays.equals(a, c));//false
System.out.println("c的元素:" + Arrays.toString(c));//3,4,5,6,0,0
Arrays.fill(c, 2, 4, 1);//将c中第3个到第5个元素(不包含)赋值为1
System.out.println("c的元素:" + Arrays.toString(c));//3,4,1,1,0,0
Arrays.sort(c);
System.out.println("c的元素:" + Arrays.toString(c));//0,0,1,1,3,4
}
}
接下来,给出两个数组实际应用场景的示例。
数字转化为人民币大写(简易版)
import java.util.Arrays;
public class NumberToRMB {
private String[] numbers = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
private String[] units = { "拾", "佰","仟" };
private String[] divide(double number) {
long zheng = (long)number;
long xiao = Math.round((number - zheng) * 100);
return new String[] { zheng + "", String.valueOf(xiao) };
}
private String toRMBString(String str) {
String money = "";
for(int i = 0, len = str.length(); i < len; i++) {
int num = str.charAt(i) - 48;
if(i != len - 1 && num != 0) {
money += numbers[num] + units[len - 2 - i];
} else {
money += numbers[num];
}
}
return money;
}
public static void main(String[] args) {
NumberToRMB rmb = new NumberToRMB();
System.out.println(Arrays.toString(rmb.divide(2346.789)));
System.out.println(rmb.toRMBString("2346"));
}
}
五子棋游戏实现(简易版)

import java.io.*;
public class WZQ {
//定义一个二维数组当作棋盘
private String[][] board;
//定义棋盘大小
private static int BOARD_SIZE = 15;
//初始化棋盘
private void initBoard() {
bo