1.一维数组声明
1.1先声明,再用new关键字进行内存分配
两种方式声明
数据类型 数组名字[]; int arr[];
数据类型[] 数组名字; int[] arr;为数组分配空间
数组名字 = new 数据类型[容量];arr = new int[5]
此时数组arr[]中默认值为0,并没有为数组赋值赋值:
arr [0] = 1;
如果赋值时候超过下标,例如
int arr[5] = 5;
程序报错:java.lang.ArrayIndexOutOfBoundsException
正因为如此所以开发中不使用数组,使用集合。
1.2声明的同时为数组分配内存
数据类型 数组名字[] = new 数据类型[容量];int arr[] = new int[5];
2.初始化一维数组
第一种方式
数据类型[] 数组变量名字 = {值1, 值2, 值3,......};
或者
数据类型 数组变量名字 []= {值1, 值2, 值3,......};
int arr[] = {1, 2, 3}
第二种声明方式:
数据类型[] 数组变量名字 = new 数据类型[]{值1, 值2, 值3,.....};
int arr[] = new int[]{1, 2, 3}
System.out.println(数组名字);
打印的是数组的内存地址
System.out.println(Arrays.toString(数组名));
将内存地址转为字符串输出
但唯独char类型的数组不需要使用toString,可直接输出,其他
类型的都不可以。
取值
通过循环取值
package com.wyx.a_array;
public class Demo1 {
public static void main(String[] args) {
int arr[] = {20, 30, 40, 50};
//arr.length 获取数组长度
for (int i =0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
通过foreach取值
package com.wyx.a_array;
public class Demo2 {
public static void main(String[] args) {
int arr[] = {20, 30, 40, 50};
for (int i : arr) {
System.out.println(i);
}
}
}
数组可以当成一个方法的参数(重点)
语法格式
public static void 方法名 (数据类型 形参[]) {
方法体
}
案例:声明一个方法遍历数组
package com.wyx.a_array;
public class Demo3 {
public static void main(String[] args) {
int arr[] = {2, 3, 4};
printArr(arr);
}
//声明一个方法遍历数组
public static void printArr (int arr[]) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
案例:声明一个方法,用来为数组赋值
package com.wyx.a_array;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;
//1声明数组,2赋值,3打印
public class Demo4 {
public static void main(String[] args) {
//1声明一个空数组
int arr[] = new int[4];
add(arr);
//打印数组
System.out.println(Arrays.toString(arr));
}
/**
*
* @param arr 空数组进行赋值
*/
public static void add (int arr[]) {
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入第" + (i+1) + "个数:");
int i1 = scanner.nextInt();
arr[i] = i1;
}
}
}
数组可以当成方法的返回值
案例:声明一个方法,实现数组中的值翻转
package com.wyx.a_array;
import java.lang.reflect.Array;
import java.util.Arrays;
public class Demo5 {
public static void main(String[] args) {
System.out.println(Arrays.toString(reverse()));
}
public static int[] reverse () {
//被用来翻转的数组
int arr[] = {1, 2, 3, 4};
//空数组用来接收翻转之后的数据
int arr1[] = new int[arr.length];
//实现翻转
for (int i = 0, j = arr.length - 1; i < arr.length; i++, j--) {
arr1[j] = arr[i];
}
return arr1;
}
}
数组在内存中如何分配的【了解,以后还会再讲】
目前学到的知识点你只需要关注:栈内存 和堆内存
内存区域的名字 | 作用 |
---|---|
寄存器 | 给CPU使用的,和开发没有关系 |
本地方法栈 | JVM虚拟机操作咱们的电脑的系统的时候,才会使用 |
方法区 | 存储和运行的class文件 |
堆区 | 存储的是对象或者数组, 凡是new出来的都存在堆区 |
方法栈 | 方法运行的时候使用的内存,比如main方法会进入到方法栈区 |
栈:存储的是八大基本数据类型的数据
int a = 20; 这个存在了栈区
存储的是对象的引用 scanner 就是一个对象的等号的左边的
Scanner scanner = new Scanner(System.in);
堆区:
凡是new的 都存在堆区
int[] arr = new int[5];
arr存在了栈区 new int[5];存在了堆区
Scanner scanner = new Scanner(System.in);
scanner 存在了栈区, new Scanner(System.in); 在堆区
1.png