4.01 数组概述和定义格式说明
数组是用来存储固定大小的同类型元素。是同一种类型数据的集合,本身为一个容器
好处:方便操作数据元素,数组中的数据元素
定义数组:
定义格式
数据类型 [] 变量名=new 数据类型[长度];
例: int [] array=new int [5];
分析数组:
左边:
int:数据类型(基本数据类型/引用数据类型)
[]:定义的数组类型
array:变量名
int [] array也可以定义成:int array[]
右边:
new int [5];
new:创建数组对象的关键字
int[5]:数组最多可以存放多少数据元素
** 数组相关数据类型默认值:
int 0
double 0.0
blooean flase
处理数组
数组的元素类型和数组的大小都是确定的,所以当处理数组元素时候,我们通常使用基本循环。
4.02 数组的初始化动态初始化
Java中的数组必须先初始化,然后才能使用。
所谓初始化,就是为数组中的数组元素分配内存空间,并为每个数组元素赋值
动态初始化:(由系统分配初始值)
数据类型 [] 变量名=new 数据类型[长度];
变量名[0]=值;
...
静态初始化:
(1)直接赋值
(2)遍历数组赋值
for(初始值;判断条件;i++){
//赋值
}
(3)把已有的的数组的引用赋值给新创建的数组。
4.03 Java中内存分配以及栈和堆的区别
Java程序在运行时,需要在内存中分配空间。为了提高运算效率,有对空间进行了不同区域划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈
堆
方法区
本地方法区
寄存器
例子:
class ArrayDemo1{
public static void main(String[] args){
int[] arr=new int[10]; //创建一个数组
System.out.println(arr[0]);
int[] arr2=arr; //给新数组赋值
arr2[0]=888; //数组元素赋值
System.out.println(arr[0]); //888
arr=null; //值置空
arr2=null;
System.out.println(arr[0]);
//报错 NullPointerException 引用变量找到不对象:要么压根没创建对象 要么本身是null
//当一个对象没有被任何变量所引用的时候 则成为垃圾
//垃圾有Java中垃圾回收机制处理 C/C++-free()函数
}
}
执行流程:
4.04 数组操作的两个常见小问题越界和空指针
ArrayIndexOutofBoundsException 数组角标越界异常
是指数组中没有合格角标
NullPointerException 空指针异常
引用变量找到不对象:要么压根没创建对象 要么本身是null
4.05 数组的基本操作
-
遍历数组
for循环遍历数组
for(int i=0;i<数组.length;i++){ }
-
获取数组中最大和最小值
int[] arr=new int[]{1,2,3,4,5};
int max=arr[0];
int min=arr[0];
for(int i=0;i<arr.length;i++){
if(arr[i]>max){
max=arr[i];
}
if(arr[i]<min){
min=arr[i];
}
}
- 将数组元素逆序输出
for(int i=arr.length-1;i>=0;i--){
System.out.println(arr[i]);
}
arr=new int[]{1,2,3,4,5,6,7,8,9,10};
for(int i=0;i<arr.length/2;i++){
/*
arr[i]=arr[i]^arr[arr.length-i-1]; //两数交换 方法一
arr[arr.length-i-1]=arr[i]^arr[arr.length-i-1];
arr[i]=arr[i]^arr[arr.length-i-1];
*/
/*
int a=3; 两数交换 方法二
int b=7;
a=a+b; //10
b=a-b; //10-7 3
a=a-b; //10-3 7
*/
/*
int temp=arr[i]; //两数交换 方法三
arr[i]=arr[arr.length-1-i];
arr[arr.length-1-i]=temp;
*/
}
for(int i=0;i<arr.length;i++){
System.out.println(arr[i])