JVM的内存分配、数组
JVM的内存分配:
1.寄存器:CPU用的。
2.本地方法区:与操作系统相连的。
3.方法区:主要作用是加载。主要包括常量池和静态域。
4.栈:方法运行的地方。
局部变量都是在栈内存中。
引用数据类型的引用变量名在栈内存中。
在栈内存中定义的变量必须初始化。
5.堆:存放实例的地方。在堆内存中的变量有默认值。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
byte、short、int、long --->0 float、double --->0.0 boolean ---> false char ---> '\u0000' (空字符)
所有引用数据类型的默认值都为null
数组:一组数据,是一个容器。
有两个固定:类型固定,长度固定。
数组的声明:
1.数据类型[] 数组名 = new 数据类型[长度];
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
int[] scores = new int[3];
2.数据类型[] 数组名 = new 数据类型[]{值,值,值...};
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
int[] arr = new int[]{10,20,30,40};
3.数据类型[] 数组名 = {值,值,值...};
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
int[] arr2 = {1,2,3,4,5,6};
但凡使用到new关键字,那么一定在堆内存中开辟了内存空间。
数组中的每一个存放数据的格子称为元素,每一个元素都代表了当前类型的变量。
在数组中,元素都是有下标(角标、游标、索引)的下标是从0开始的。最大下标为 长度-1
每一个元素为: 数组名[下标]
ArrayIndexOutOfBoundsException数组下标越界异常。
数组有一个属性:长度
数组名.length --->当前数组的长度
遍历:循环显示当前容器内的元素
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import java.util.Scanner; public class Demo2{ public static void main(String[] args){ /* * 班级有5名同学: * 1.要求循环输入五名同学的成绩 * 2.显示班级所有同学的成绩 * 3.求出班级同学的成绩和,和平均分 * 4.求最高分以及最低分,以及他们的下标 * 5.求某个分数在班级的位置 */ int[] scores = new int[5]; show(scores); inputScore(scores);//赋值 show(scores);//遍历 getSumAvg(scores);//求和与平均分 getMost(scores);//最值 下标 int index = getIndex(scores,80); System.out.println("下标为:" + index); } /* * 5.求某个分数在班级的位置 * 求某一个元素在数组中的下标,如果不存在返回-1 */ public static int getIndex(int[] arr,int key){ //求key在arr中的下标 /* for(int i = 0; i < arr.length; i++){ //arr[i]代表每一个元素 if(key == arr[i]){ //找到了!! return i; } } return -1; */ int index = -1;//key的下标 for(int i = 0; i < arr.length; i++){ //arr[i]代表每一个元素 if(arr[i] == key){ index = i;//index进行重新赋值 break; } } return index; } /* * 4.求最高分以及最低分,以及他们的下标 * * 求数组中的最值以及最值的下标 * */ public static void getMost(int[] arr){ int max = arr[0]; //假设第一个元素为最大值 int min = arr[0]; //假设第一个元素为最小值 int maxIndex = 0; //最大值的下标 int minIndex = 0; //最小值的下标 for(int i = 0; i < arr.length; i++){ //arr[i]为每一个元素 if(max < arr[i]){ //如果该元素大于最大值,最大值需要重新赋值 max = arr[i]; maxIndex = i;//最大下标重新赋值 } if(min > arr[i]){ //如果该元素小于最小值,最小值需要重新赋值 min = arr[i]; minIndex = i;//最小下标重新赋值 } } System.out.println("最大值为:" + max + ",下标为:" + maxIndex); System.out.println("最小值为:" + min + ",下标为:" + minIndex); } /* * 3.求班级同学的成绩和和平均分 * 求数组元素的和 和平均值 */ public static void getSumAvg(int[] arr){ int sum = 0;//和 for(int i = 0; i < arr.length; i++){//i代表下标 //arr[i]代表每一个元素 sum += arr[i];//把每一个元素加起来 } System.out.println("和为:" + sum); System.out.println("平均分为:" + sum*1.0/arr.length); } /* * 2.显示五名同学的成绩 * 遍历数组元素 */ public static void show(int[] arr){ System.out.println("---------------------"); for(int i = 0; i < arr.length; i++){//i是下标 //arr[i] 代表每一个元素 System.out.print(arr[i] + "\t"); } System.out.println(); System.out.println("----------------------"); } /* * 1.输入五名同学的成绩 * 给数组元素赋值 */ public static void inputScore(int[] arr){ Scanner input = new Scanner(System.in); for(int i = 0; i < arr.length; i++){//i代表下标 //arr[i]代表每一个元素 System.out.println("请输入" + (i+1) + "名同学的成绩:"); arr[i] = input.nextInt();//每一个元素赋值 } } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Demo { 2 public static void main(String[] args) { 3 /* 4 6.将班级同学成绩进行排序 升序 5 */ 6 int[] scores = {78,95,12,34,96,44,50}; 7 show(scores); 8 sort2(scores); 9 show(scores); 10 } 11 /* 12 选择排序: 13 */ 14 public static void sort2(int[] arr){ 15 /* 16 i控制比赛轮数 17 i代表主角的下标 18 */ 19 for(int i = 0; i < arr.length -1; i++){//控制比赛轮数 20 /* 21 if(主角 > 配角){ 22 换位置 23 } 24 j为配角的下标 25 */ 26 for(int j = i+1; j < arr.length; j++){//控制比赛次数 27 if(arr[i] > arr[j]){ 28 int temp = arr[i]; 29 arr[i] = arr[j]; 30 arr[j] =temp; 31 } 32 } 33 } 34 } 35 36 /* 37 冒泡排序: 38 */ 39 public static void sort(int[] arr){ 40 /* 41 i循环的次数控制了比赛的轮数 42 i也代表ok的数字个数 43 */ 44 for(int i = 0; i < arr.length-1; i++ ){//控制比赛轮数 45 //控制一轮中 每一次的比赛 46 /* 47 主角pk 配角 48 if(主角 > 配角){ 49 换位置 50 } 51 控制比赛次数 52 j代表主角的下标 53 每一轮比赛主角的下标从0开始,到length-1-i-1结束 54 */ 55 for(int j = 0; j < arr.length-1-i; j++ ){ 56 if(arr[j] > arr[j+1]){ 57 int temp = arr[j]; 58 arr[j] = arr[j+1]; 59 arr[j+1] = temp; 60 } 61 } 62 } 63 } 64 public static void show(int[] arr){ 65 for(int i = 0; i < arr.length; i++){ 66 System.out.print(arr[i] + "\t"); 67 } 68 System.out.println(); 69 } 70 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Test { 2 public static void main(String[] args) { 3 int c = ji(5,6); 4 System.out.println("c:" + c); 5 jiuJiu(); 6 jiuJiu(); 7 } 8 9 //求两个数的积 10 public static int ji(int a,int b) { 11 return a*b; 12 } 13 14 //九九乘法表 15 public static void jiuJiu() { 16 for(int i = 1; i <= 9; i++) { 17 for(int j = 1; j<= i; j++) { 18 System.out.print(j + "*" + i + "=" + i*j + "\t"); 19 } 20 System.out.println(); 21 } 22 } 23 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
for(int i = 0;i < 数组名.length; i++) {//i代表下标 System.out.println(数组名[i]); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class Demo { public static void main(String[] args){ int[] scores = new int[3]; System.out.println(scores);//I[@39443f 地址 scores[0] = 50;//-->相当于一个int类型的变量 scores[1] = 60; scores[2] = 70; System.out.println(scores[0]); System.out.println(scores[1]); System.out.println(scores[2]); //scores[3] = 100;//ArrayIndexOutOfBoundsException System.out.println("----------------"); for(int i = 0;i < scores.length; i++){//i代表下标 System.out.println(scores[i]); } int[] arr = new int[80]; System.out.println(".."); System.out.println(arr.length); System.out.println("-----------------"); int[] arr2 = new int[]{10,20000,30,40}; for(int i = 0; i < arr2.length; i++){ System.out.print(arr2[i] + "\t"); } System.out.println(); System.out.println("...................."); int[] arr3 = {1,2,3,4,5,6}; for(int i = 0; i < arr3.length; i++){ System.out.print(arr3[i] + "\t"); } System.out.println(); } }