目录
- 一维数组内存分析
- Java虚拟机的内存划分
- 一维数组内存解析
- 一维数组知识点
- 一维数组课后练习
一维数组内存分析
Java虚拟机的内存划分
为了提高运行效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
java中的内存结构是如何划分的?(主要关心JVM的运行时内存环境)
将内存区域划分为5个部分,程序计数器、虚拟机栈、本地方法栈、堆、方法区
与目前数组相关的内存结构: int [] arr = new int[]{1,2,3}
1、虚拟机栈:用于存放方法中声明的变量.比如:arr
2、堆:用于存放数组的实体(即数组中的所有元素).比如:1,2,3
一维数组内存解析
一维数组知识点
package ArrayTest;
/**
* 1、数组的概念:是多个相同类型数据按照一定排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
* 2、数组的特点:①数组中的元素在内存中依次紧密排列的,有序的
* ② 属于引用数据类型变量;数组的元素可以是基本数据类型,也可以是引用数据类型
* ③数组一旦初始化完成,数组的长度就确定了;并且数组长度不能更改
* ④创建数组队形会在内存中开辟一整块"连续的空间"。占据的空间大小,取决于数组的长度和数组中元素的类型。
* 3、数组的分类:
* ①:按照元素的类型:基本数据类型的数组、引用数据类型的数组
* ②:按照数组的维度来分:一维数组、二维数组。。。
* 4、一维数组的使用:
* ①数组的声明和初始化
* ②调用数组的指定元素
* ③数组的属性:length,表示数组的长度
* ④数组的遍历
* ⑤数组元素的默认初始化值
* 1)浮点型数组元素的默认初始化值
* 2)字符型数组元素的默认初始化值
* 3)字符型数组元素的默认初始化值
* 4)boolean型数组元素的默认初始化值
* 5)引用数据类型数组元素的默认初始化值
* ⑥一维数组的内存解析
*/
public class OneArrayTest {
public static void main(String[] args) {
//1、数组的声明和初始化
// 声明数组
double[] prices;
// 静态初始化:数组变量的赋值与数组元素的赋值操作同时进行
prices = new double[]{12.34,13.11};
// String[] names = new String[]{"拌海蜇","龙须菜"};
// 动态初始化:数组变量的赋值与数组元素的赋值操作分开进行
String[] foods = new String[4];
//2、数组元素的调用
//通过角标的方式,获取数组元素
//角标的范围从0开始,到数组长度-1结束
// System.out.println(prices[0]);
foods[0]="拌海蜇";
foods[1]="龙须菜";
foods[2]="炝冬瓜";
foods[3]="玉兰花";
// System.out.println(foods[2]);
//3、数组的长度:用来描述数组容器中容量的大小
// System.out.println(prices.length);
// System.out.println(foods.length);
//4、数组的遍历
for(int i=0;i<prices.length;i++){
System.out.println(prices[i]);
}
// //5、数组元素的默认初始化值
// int arr1 [] = new int[3];
// System.out.println(arr1[0]);
}
}
package ArrayTest;
public class OneArrayTest1 {
public static void main(String[] args) {
//5.数组元素的默认初始化值
//整型数组元素初始化值:0
int [] arr1 = new int[4];
System.out.println(arr1[0]);
int[] arr2 = new int[4];
for(int i=0;i<arr2.length;i++){
System.out.println(arr2[i]);
}
//浮点型数组元素的默认初始化值:0.0
float [] float1 = new float[4];
System.out.println(float1[0]);
//字符型数组元素的默认初始化值:0
char [] char1 = new char[4];
System.out.println(char1[0]);
if(char1[0]==0){
System.out.println("111");
}else if(char1[0]=='0'){
System.out.println("222");
}else if(char1[0]=='\u0000'){
System.out.println("333");
}
//boolean型数组元素的默认初始化值:false
boolean [] boolean1 = new boolean[4];
System.out.println(boolean1[1]);
//引用数据类型数组元素默认初始化值:null
String [] strings = new String[4];
for(int i=0;i<strings.length;i++){
System.out.println(strings[i]);
}
//6.数组的内存解析
int a1[] = new int[]{1,2,3,4};
int [] a2 = a1;
a2[1]=10;
System.out.println(a1[1]); //10
}
}
一维数组课后练习
package ArrayTest;
import java.util.Arrays;
import java.util.Scanner;
public class OneArrayExer {
public static void main(String[] args) {
/**
* 案例:“破解”房东电话号码
*/
int arr[] = new int[]{8,2,1,0,3};
int index[] = new int[]{2,0,3,2,4,0,1,3,2,3,3};
String tell = "";
for(int i=0;i<index.length;i++){
int value = index[i];//2 3
tell+=arr[value];//2
}
System.out.println(tell);
/**
* 案例:输出英文星期几
* 用一个数组,保存星期一到星期天的7个英语单词,从键盘输入1-7,显示对应的单词
* {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}
*/
String [] days = new String[]{"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
if(number<1 || number >7){
System.out.println("您输入的数据有误。");
}else
System.out.println(days[number-1]);
/**
* 案例:学生考试等级划分
* 从键盘读入学生成绩,找出最高分,并输出学生成绩等级
* 成绩>=最高分-10 等级为‘A'
* 成绩>=最高分-20 等级为‘B'
* 成绩>=最高分-30 等级为‘C'
* 其余 等级为‘D'
*提示:先读入学生人数,根据人数创建int数组,存放学生成绩
*/
System.out.println("请输入学生人数");
int num = scanner.nextInt();
System.out.print("请输入"+num+"个学生成绩");
double [] grade =new double[num];
for(int i=0;i<grade.length;i++){
int grades = scanner.nextInt();
grade[i]=grades;
}
double max_num = max(grade);
System.out.println("最高分为:"+max_num);
for(int j=0;j<grade.length;j++){
if(grade[j]>=max_num-10){
System.out.println("等级为A");
}else if(grade[j]>=max_num-20){
System.out.println("等级为B");
}else if(grade[j]>=max_num-30){
System.out.println("等级为C");
}
else{
System.out.println("等级为D");
}
}
}
private static double max(double[] grade) {
Arrays.sort(grade);
return grade[grade.length-1];
}
}