JVM的内存分配、数组

JVM的内存分配:
  1.寄存器:CPU用的。
  2.本地方法区:与操作系统相连的。
  3.方法区:主要作用是加载。主要包括常量池和静态域。
  4.栈:方法运行的地方。
       局部变量都是在栈内存中。
       引用数据类型的引用变量名在栈内存中。

       在栈内存中定义的变量必须初始化。

5.堆:存放实例的地方。在堆内存中的变量有默认值。

byteshortintlong --->0
floatdouble --->0.0
boolean ---> false
char ---> '\u0000' (空字符)
View Code

所有引用数据类型的默认值都为null


数组:一组数据,是一个容器。
      有两个固定:类型固定,长度固定。

数组的声明:
1.数据类型[] 数组名 = new 数据类型[长度];

int[] scores = new int[3];
View Code

2.数据类型[] 数组名 = new 数据类型[]{值,值,值...};

int[] arr = new int[]{10,20,30,40};
View Code

3.数据类型[] 数组名 = {值,值,值...};

int[] arr2 = {1,2,3,4,5,6};
View Code

但凡使用到new关键字,那么一定在堆内存中开辟了内存空间。

数组中的每一个存放数据的格子称为元素,每一个元素都代表了当前类型的变量。

在数组中,元素都是有下标(角标、游标、索引)的下标是从0开始的。最大下标为 长度-1

每一个元素为: 数组名[下标]
ArrayIndexOutOfBoundsException数组下标越界异常。

数组有一个属性:长度
数组名.length --->当前数组的长度

遍历:循环显示当前容器内的元素

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();//每一个元素赋值
        }
    }
} 
View Code
 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 }
View Code
 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 }
View Code
for(int i = 0;i < 数组名.length; i++) {//i代表下标
    System.out.println(数组名[i]);
}
View Code
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();
    }
}
View Code
posted on 2019-04-16 20:35  weixg_p  阅读(206)  评论(0编辑  收藏  举报