Java的基础知识

  • 数组
  • 数组动态初始化
  • 数组元素访问方式
  • 数组内部保存的数据的访问方式
  • 数组静态初始化
  • 补充:数组操作的两个常见问题
  • 数组操作
  • 栈内存与堆内存
  • Java中内存分配


数组

  • 数组(array)是一种用于存储多个相同类型数据的存储模型。
  • 格式1:数据类型[ ] 变量名, int[ ] arr
  • 定义了一个int类型的数组,数组名是arr
  • 格式2:数据类型 变量名[ ],Int arr[ ]
  • 定义了一个int类型的变量,变量名是arr数组

数组动态初始化

Java中的数组必须先初始化,然后才能使用。所谓初始化,就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。

  • 初始化方式:动态初始化和静态初始化
  • 动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
  • 格式:数据类型[ ] 变量名=new 数据类型[数组长度] ;
  • int[ ] arr=new int[10];
    左边:int:说明是数组中的元素类型是int类型。
    []:说明这是一个数组。
    arr:这是数组的名称。
    右边:new:为数组申请内存空间。
    int:说明数组中的元素类型是int类型。
    []:说明这是一个数组。
    10:数组长度,其实就是数组中的元素个数。

数组元素访问方式

格式:数组名

数组内部保存的数据的访问方式

格式:数组名[索引]

  • 索引:是数组中数据的编号方式。
  • 作用:索引用于访问数组中的数据使用,数组名[索引]等同于变量名,是一种特殊的变量名。
  • 特征:索引从0开始,索引是连续的,索引每次加1。
int[] arr=new int[10]; 
System.out.println(arr); //[I@15db9742 内存地址

//输出数组中的元素
System.out.println(arr[0]);//输出第一个数组元素   //0
System.out.println(arr[1]);//0
System.out.println(arr[2]);//0

数组在初始化时,会为存储空间添加默认值。

  • 整数:默认0
  • 浮点数:默认为0.0
  • 布尔值:默认false
  • 字符:默认空字符
  • 引用数据类型:默认null

数组静态初始化

静态初始化:初始化时指定每一个数组元素的初始值,由系统决定数组长度。

  • 格式:数据类型[ ] 变量名=new 数据类型[ ]{数据1,数据2…};
  • 范例:int[] arr=new int[]{1,2,3,4,5,6};
  • 简化格式:数据类型[] 变量名={数据1,数据2,数据3,…};
  • 范例:int[] arr={1,2,3,4,5,6};
//定义数组
	int[] arr=new int[] {1,2,3,4,5,6};
//输出数组名
	System.out.println(arr);//[I@15db9742  输出内存地址
//输出数组中的元素
	System.out.println(arr[0]);//1
	System.out.println(arr[1]);//2
	System.out.println(arr[2]);//3

补充:数组操作的两个常见问题

  • 索引越界:访问了数组中不存在的索引对应的元素,造成了索引越界问题。
  • 报错为:ArrayIndexOutOfBoundsException
  • 空指针异常:访问的数组已不再指向堆内存的数据,造成空指针异常。
    null:空值,引用数据类型的默认值,表示不指向任何有效对象。
int[] arr=new int[]{1,2,3,4,5,6,7,8,9,10};		等价于后者
int[] arr={1,2,3,4,5,6,7,8,9,10};
System.out.println(arr[1]);//2
//索引越界
System.out.println(arr[10]);//ArrayIndexOutOfBoundsException
//null值赋值给数组(空指针异常)
int[] arr=new int[3];
arr=null;
System.out.println(arr[0]);//NullPointerException

数组操作

1.遍历
int arr[]=new int[]{1,2,3,4,5,6,7,8,9,10};
for(int i=0;i<10;i++){
	System.out.println(arr[i]); //0,1,2,3,4,5,6,7,8,9,10
}
2.获取数组元素数量
格式:数组名.length
例如:arr.length
for(int i=0;i<arr.length;i++){
	System.out.println(arr[i]);//0,1,2,3,4,5,6,7,8,9,10
}
这里arr.length 等同于 10
3.比较最大值
int arr[]=new int[] {1,2,3,4,5,6,7,8,9,10};
int max=arr[0];
for(int i=0;i<arr.length;i++) {
	if(arr[i]>max) {
		max=arr[i];
	}
}
System.out.println(max);//10

4.获取最小值
int arr[]=new int[] {1,2,3,4,5,6,7,8,9,10};
int min=arr[0];
for(int i=0;i<arr.length;i++) {
	if(arr[i]<min) {
		min=arr[i];
	}
}
System.out.println(min);

栈内存与堆内存

  • 栈内存:存储局部变量
  • 定义在方法中的变量,例如:arr
  • 使用完毕,立即消失
  • 堆内存:存储new出来的内容(实体,对象)
  • 数据在初始化时,会为存储空间添加默认值
  • 每一个new出来的东西都有一个地址值,使用完毕,会在垃圾回收器空闲时回收。

Java中内存分配

Java程序在运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。