在前面的定义变量中,只能定义一个。那么定义多个的时候,需要创建的空间不便利。
所以Java中数组便于定义多个变量,进行统一操作。
需求:定义1000个变量,输出这1000变量的值 没有学过数组,只能使用下列方式实现 Int i1 = 1; Int i2 = 2;……… System.out.println(i1); System.out.println(i2);
int[] arr = {1,2,3,4.6………}; System.out.println(arr[0]); |
数组的概念与好处
数组其实就是一类类型变量的集合,使用数组可以很好的解决相同类型的变量定义问题,还可以统一对数组中的元素进行统一操作
数组的初始化
动态初始化
- 定义并初始化数组
a) 数组类型[] 数组名 = new 数组类型[长度];
public class ArrayInit{
public static void main(String[] args){
//a) 数组类型[] 数组名 = new 数组类型[长度];
int[] arr1 = new int[3];//创建数组对象(实例化),并将实例地址赋值给arr1
System.out.println(arr1[0]);
arr1[0] = 123;//通过下标进行赋值操作
System.out.println(arr1[0]);
}
}b) 数组类型 数组名[] = new 数组类型[长度];
public class ArrayInit{
public static void main(String[] args){
//a) 数组类型[] 数组名 = new 数组类型[长度];
//b) 数组类型 数组名[] = new 数组类型[长度];
int arr1[] = new int[3];
System.out.println(arr1[0]);
arr1[0] = 123;
System.out.println(arr1[0]);
}
}数组使用时,一定要注意数组越界问题(使用不存在的数组下标造成的)
ArrayIndexOutOfBoundsException
使用数组时,需要定义再赋值,才能使用数组,否则会出现空指针异常的错误
public static void main(String[] args){int[] arr1 = null;
//这里会出现空指针异常,
//原因是在堆中没有实例化数组对象,直接赋值null,也就是没有地址值
//导致arr1变量指向地址是null
arr1[0] = 321;
int[] arr2 = arr1;
arr2[0] = 123;
System.out.println(arr2[0]);//求arr2的值为多少
//结果是123
}
java.lang.NullPointerException
- 数组使用最多的操作是通过for循环进行遍历操作
- 读取
public class ArrayInit{
public static void main(String[] args){
int[] arr1 = new int[10];
for(int i = 0; i < arr1.length ; i++){
//通过数组下标访问数组中的元素,
//数组下标根据循环中的i变量进行递增,
//就可以访问数组中的所有元素
System.out.print(arr1[i]+"\t");
}
System.out.println();
}
}
- 赋值
public class ArrayInit{
public static void main(String[] args){
int[] arr1 = new int[10];
for(int i = 0; i < arr1.length ; i++){
//通过数组下标进行赋值操作
//数组下标根据循环中的i变量进行递增,
//就可以访问数组中的所有元素,进行赋值
arr1[i] = i;
//输出当前元素的值
System.out.print(arr1[i]+"\t");
}
System.out.println();
}
}数组的数据引用
例子:
public static void main(String[] args){
int[] arr1 = new int[10];
arr1[0] = 321;
int[] arr2 = arr1;
arr2[0] = 123;
System.out.println(arr2[0]);//求arr2的值为多少
//结果是123
}静态初始化
定义数组,并初始化数组元素
数据类型[] 数组名 = {元素数据1, 元素数据2, 元素数据3, 元素数据4,……};
例子:
public static void main(String[] args){//定义了一个数组,并进行初始化操作
int[] arr = {1,2,3,4,5,6,6,7,4};
for(int i = 0 ; i < arr.length ; i++){
System.out.println(arr[i]);
}
}
数据类型 数组名[] = new 数据类型[]{元素数据1, 元素数据2, 元素数据3, 元素数据4,……}
例子:
public static void main(String[] args){//定义了一个数组,并进行初始化操作
int[] arr = new int[] {1,2,3,4,5,6,6,7,4};
for(int i = 0 ; i < arr.length ; i++){
System.out.println(arr[i]);
}
}
以上两种方式,除了写法不同,使用上也有小区别
例子:
错误例子:
public static void main(String[] args){//定义了一个数组,并进行初始化操作
// Object o = new Object()
// Onject o = null;
// new Object().toString();
int[] arr = {1,2,3,4,5,6,6,7,4};
System.out.println(arr.toString());
System.out.println(arr);
//上面两句是对象信息打印
//普通匿名对象可以直接在后面调用对象方法,
//但是int[] arr = {1,2,3,4,5,6,6,7,4};
//这行代码中地有右部分不行,会报语法错误
System.out.println({1,2,3,4,5,6,6,7,4}.length);
}
正确例子:
public static void main(String[] args){//定义了一个数组,并进行初始化操作
// Object o = new Object()
// Onject o = null;
// new Object().toString();
int[] arr = {1,2,3,4,5,6,6,7,4};
System.out.println(arr.toString());
System.out.println(arr);
//上面两句是对象信息打印
//普通匿名对象可以直接在后面调用对象方法,
//但是int[] arr = {1,2,3,4,5,6,6,7,4};
//这行代码中地有右部分不行,会报语法错误
System.out.println(new int[]{1,2,3,4,5,6,6,7,4}.length);
}
二维数组的介绍与使用
// 一维数组可以理解为线,下标可看作是线上的点// 二位数组可以看作平面,下标可以看作是x,y轴
// 三维数组可以看作是立方,下标可看作是x,y,z
public static void main(String[] args){
//定义二维数组
int[][] arrs = new int[10][20];
//设置二维数组中的值
arrs[0][2] = 11;
arrs[9][11] = 20;
//读取所有的数据
for(int i = 0 ; i < arrs.length ; i++){
System.out.print(i+":[");
for(int j = 0 ; j < arrs[i].length ; j++){
String str = ""+(arrs[i][j]);
if(j!= ( arrs[i].length-1 ) ){// 当前循环次数不是最后一次,就进入并添加‘,‘,否则就进入
str += ",";
}
System.out.print(str);
}
System.out.println("]");
}
}
数组在方法中的使用
- 方法形参
public class ArrayMethod{public static void main(String[] args){
//1.定义一个数组
String[] strs = new String[4];
setArrayValue(strs);
printArrayValue(strs);
}
////2.将数组批量赋值
public static void setArrayValue(String[] strs){
char c = ‘一‘;
for(int i = 0 ; i < strs.length ; i++){
strs[i] = ""+(char)(c + i);
}
}
////3.将数组打印
public static void printArrayValue(String[] strs){
for(int i = 0 ; i < strs.length ; i++){
System.out.println(strs[i]);
}
}
/**
public static void main(String[] args){
char c = ‘中‘;
System.out.println((int)c);
System.out.println(c+1);
System.out.println((char)(c+1));
}
**/
}
- 方法体内
public class ArrayMethodTwo{public static void main(String[] args){
String[] strs = new String[4];
strs[2] = ""+9;
setArrayValue(strs);
System.out.println(strs[2]);
//此处打印应该是1,因为数组传递是引用传递,
//两个方法操作的是同一个数组对象,
//所以最后打印的是setArrayValue修改过户的值
}
public static void setArrayValue(String[] strs){
strs[2] = ""+1;
}
}
- 方法返回值
public class ArrayMethodTwo{public static void main(String[] args){
String[] strs = new String[4];
strs[2] = ""+9;
String[] strs2 = setArrayValue(strs);
System.out.println(strs2[2]);
//此处打印应该是1,因为数组传递是引用传递,
//两个方法操作的是同一个数组对象,
//所以最后打印的是setArrayValue修改过户的值
System.out.println(strs);
System.out.println(strs2);
}
public static String[] setArrayValue(String[] strs){
strs[2] = ""+1;
return strs;
}
}
原文地址:https://www.cnblogs.com/gs520/p/9807574.html