课前知识拓展:JVM java虚拟机
虚拟机就是一台虚拟的电脑,它是在JDK安装之后就出现了,它也有自己虚拟的内存用来管理java系统资源,java虚拟机内存主要分为以下四块:
1、栈区(要求理解):存放函数的参数值,局部变量的值等,在超过这个变量的作用域(简单理解为{}范围)时就会被系统自动释放掉存在于JVM内存中的资源;
优点:存取速度比堆快
缺点:存在栈中的数据大小与生存期必须是确定的,无灵活性
举例:for(int i=0;i<43;i++){
System.out.println(i); //打印会报错的
}
System.out.println(i); //是没有办法打印的,i是for的局部变量
注:java中基础的数据类型(四种八类)还有Sring都是栈区存储
int a=1;int b=1;a和b赋值相同,b后赋值,仅仅会给b一个地址,不会在内存新增一个1;
2、堆区(要求理解):存放由new创建的对象和数组,JVM不定时查看这个对象,如果没有引用指向这个对象就回收;
Scanner input(该部分存放在栈区)=new Scanner(System.in);(该部分存放在堆区)
优点:可以动态分配JVM内存
缺点:要在运行时分配JVM内存,速度慢(运行java的时候还要调用内存资源,肯定会慢)
3.静态区(暂时作为了解)
4.代码区(暂时作为了解)
本章目标
/*掌握数组的基本用法
**掌握数组的几种典型应用
**掌握多维数组的用法*/
数组:是一个变量,存储相同数据类型的一组数据的集合;声明一个数组就是在内存空间划出一串连续的空间
java中都有哪些数组类型(简单的说:只要是数据类型,都有自己的数组,因为数组就是数据的集合)
举例:
Char char[]
Int int[]
Double doublie[]
String String[]
Scanner Scanner[]
Random Random[]
……等等
*********
数组基本四要素
标识符: 数组的名称,用于区分不同的数组;
数组元素:数组中存放的数据
元素类型:数组中数据的类型
元素下标:对数组元素进行编号;从0开始,通过下标可以访问到其中的每个元素
注:数组长度固定不变,避免数组越界;数据类型和大小都是固定的
*********
数组使用的三种方式:
1、声明数组int[] arr(在栈区建立数组引用arr)
分配空间arr=new int[5](堆区分配空间)
赋值arr[0]=32(赋值)
2、声明数组并分配空间int[] arr=new int[5]
赋值arr[0]=32
3、边声明边赋值int[] arr={1,2,3}
int[] arr=new int[]{1,2,3}
关于数组特点的说明:
1、数组是分两部分存储的,引用类型arr是在栈区;而具体的数组空间和数据是在堆区
2、数值类型未赋值默认为0;非数值类型未赋值默认为null,char为空
3、数组是数据类型确定,空间内存大小确定的集合
数组length属性:数组名.length可以求出数组长度(点的作用引出属性)
int [ ] score = {60, 80, 90, 70, 85};
int sum = 0;
double avg;
for(int i = 0; i < score.length; i++){
sum = sum + score[i];
}
avg = sum / score.length;
在java的API中有一个专门操作数组的类,就是Array类,它提供了很多静态方法用于数组之间的操作
Array类常用的API方法
注:Arrays类的使用只需引入import java.util.Arrays; 调用方式 Array.sort() 或其他方法
以上方法开头数据类型boolean String int均为返回值;
数组四大算法:
数组复制算法:使用for循环赋值,可以利用下标一致的特性
数组查找算法:使用for循环提取每个元素与查找值比较;if条件判断加break加计数
数组插入算法:有序数组,使用比大小,大了占你位置,其他整体平移
分析:数组的插入算法结合了数值交互;需要注意的是,数组是长度固定的,所以要为插入的数据提前准备一个占位位置;这也是以后为集合框架打下一定的底层基础
数组冒泡算法:原理类似水中气泡上浮,一层一层往上把最大值/最小值踢到后面
多维数组介绍
数组的数组:也就是说组成一维数组的各个元素也是数组
声明方式: 必须从一维开始申请
int[][] arr=new int[5][];
第一次就必须把一维确定出来,否则就是错误的
本篇文章,本应有对应的代码对照学习才能事半功倍,由于时间有限,日后补上。。。