zoukankan      html  css  js  c++  java
  • java虚拟机内存划分 java的数组类型

    一,java虚拟机内存的划分

    内存在计算机中是一个比较重要的原件,他为数据从硬盘传输到cup起到了承上启下的作用。我们编写的程序是放在硬盘中,要运行程序就要放在内存条中,程序运行结束后就会去空内存。

    为了提高运行效率,java虚拟机运行程序时,对内存空间进行了分配和管理。

    java虚拟机内存划分为:

    寄存器        给cup使用,我们开发不用知道

    本地方法栈      JVM在使用操作系统功能的时候使用,和开发无关

    方法栈        存储可以运行的class文件

    堆内存        存储对象或者数组, new来创建的,都存储在堆内存

    方法栈        方法运行时使用的内存,比如main方法运行,进入方法栈中执行

     java数组的内存图:

    二,数组定义及其操作

    当我们要储存大量数据时,例如50个学生的考试成绩。这时我们用java的基本数据类型来储存这些数据时要定义50个,这样不仅麻烦,还造成内存的浪费。因此我们可以使用一种容器来进行储存。将所有成绩全部储存到一个容器中,统一操作。

    容器:将多个数据存储到一起,期中的每个数据称为容器的元素。

    java数组:在保持存储的数据的数据类型的一致的前提下,数组接收存储数据长度固定的容器。

    (1)数组的定义(动态和静态)

    1.动态初始化(指定长度):在创建数组的时候,直接指定数组当中的数据元素个数。

    格式:  数组存储的数据类型 [ ] 数组名字  = new 数组存储的数据类型 [ 长度 ];

    代码示例:

    package cn.itcate.day4demo;
    
    
    public class Demo01Array {
        public static void main(String[] args) {
            // 动态初始化
            int[] arrayA = new int[300];
            double[] arrayB = new double[10];
            String[] arrayC = new String[5];
        }
    }

    注意:

    左侧数据类型:也就是数组当中保存的数据,全都是统一的什么类型
    左侧的中括号:代表我是一个数组
    左侧数组名称:给数组取一个名字
    右侧的new:代表创建数组的动作
    右侧数据类型:必须和左边的数据类型保持一致
    右侧中括号的长度:也就是数组当中,到底可以保存多少个数据,是一个int数字

    2,静态初始化(指定内容):在创建数组的时候,不直接指定数据个数多少,而是直接将具体的数据内容进行指定。

    格式一:  数据类型 [ ]  数组名  = new 数据类型 [ ] {元素1,元素2,元素3...};

    代码示例:

    package cn.itcate.day4demo;
    
    public class Demo02Array {
        public static void main(String[] args) {
            // 整数数组
            int[] arrayA = new int[] {1,2,3,4,5};
            // 字符串数组
            String[] arrayB = new String[] {"Hello", "World", "Python", "Java"};
            
        }
    }

    格式二:  数据类型 [ ]  数组名  =  {元素1,元素2,元素3...};

    代码示例:

    package cn.itcate.day4demo;
    
    public class Demo03Array {
        public static void main(String[] args) {
            // 整数数组
            int[] arrayA = {1,2,3,4,5};
            // 字符串数组
            String[] arrayB = {"Hello", "World", "Java"};
    
        }
    }

    建议:如果不确定数组当中的具体内容,用动态初始化;否则,已经确定了具体的内容,用静态初始化。

    (二),数组的访问

    数组的索引:存储的到数组的数据都是从0开始自动编号的,这些编号就成为数组的索引。通过索引能访问到数组里面的元素。

    格式: 数组名【索引值】

    代码如下:

    package cn.itcate.day4demo;
    
    public class Demo04ArrayUse {
        public static void main(String[] args) {
            // 定义一个整数数组
            int[] arrayA = new int[] {10, 20, 30, 40, 50};
            System.out.println(arrayA);
            // 数组的索引
            System.out.println(arrayA[0]);// 10
            System.out.println(arrayA[1]);// 20
            System.out.println(arrayA[2]);//30
            System.out.println(arrayA[3]);//40
            System.out.println(arrayA[4]);//50
            // 将一个索引值赋值给一个变量
            int num = arrayA[2];
            System.out.println(num);// 20
        }
    }

    数组的长度属性: 数组名.length   -------》 得到最大索引值为:数组名.length-1

    代码示例:

    package cn.itcate.day4demo;
    
    public class Demo05ArrayUse {
        public static void main(String[] args) {
            int[] arr = new  int[] {1, 2, 3, 4, 5};
            System.out.println(arr.length);// 5
        }
    }

    修改数组中的元素: 数组名[索引] = 数值


    代码如下:

    package cn.itcate.day4demo;
    
    public class Demo06ArrayUse {
        public static void main(String[] args) {
            // 定义int类型数组
            int[] arr = {1, 2, 3, 4, 5};
            // 为0索引元素赋值为10
            System.out.println(arr[0]);
            arr[0] = 10;
            int i = arr[0];
            System.out.println(i);
            System.out.println(arr[0]);
        }
    
        
    }

    (三),数组的常见操作

    3.1 数组越界异常

    public static void main(String[] args) {
        int[] arr = {1,2,3};
        System.out.println(arr[3]);
    }

     

    创建数组,赋值3个元素,数组的索引就是0,1,2,没有3索引,因此我们不能访问数组中不存在的索引,程序运
    行后,将会抛出 ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一
    旦出现了,就必须要修改我们编写的代码。

     

    3.2 数组空指针异常

    public static void main(String[] args) {
        int[] arr = {1,2,3};
        arr null;
        System.out.println(arr[0]);
    }

    arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候
    会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修
    改我们编写的代码。

    在内存中的表现:

    3.3,数组遍历

    数组遍历: 就是将数组中的每个元素分别获取出来,一个一个的进行处理,就是遍历

    package cn.itcate.day4demo;
    
    public class Demo07Array {
        public static void main(String[] args) {
            // 定义一个int类型的数组
            int[] arr = {12,34,54,64,64};
            // 遍历每一个元素
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
    }

    3.4, 数组获取最大值元素

    package cn.itcate.day4demo;
    
    public class Demo08Array {
        public static void main(String[] args) {
            // 定义一个int类型的颜值数组
            int[] arr = {5, 15, 200, 10000, 100, 4000};
            int max = arr[0];
            // 遍历数组和max进行比较,优胜劣汰
            for (int i = 0; i < arr.length; i++){
                if (arr[i] > max) {
                    max = arr[i];
                }
            }
            System.out.println(max);
        }
        
    }

    3.5, 数组的翻转

    package cn.itcate.day4demo;
    
    public class Demo09Array {
        public static void main(String[] args) {
            int[] arr = {1, 2, 3, 4, 5};
            /*
            循环中定义变量min = 0最小索引
            max = arr.lenth-1 最大索引
            min++
            max--
             */
            for (int min = 0, max = arr.length -1; min <= max; min++, max--) {
            int temp = arr[min];
            arr[min] = arr[max];
            arr[max] = temp;
    
        }
        // 反转后,遍历数组
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
    }
  • 相关阅读:
    【STM32F429】第11章 ThreadX中断优先级配置,含BasePri配置方案
    【STM32H7】第10章 ThreadX任务栈大小确定及其溢出检测
    【STM32F429】第10章 ThreadX任务栈大小确定及其溢出检测
    《安富莱嵌入式周报》第216期:2021.06.07--2021.06.13
    嵌入式新闻早班车-第3期
    嵌入式新闻早班车-第2期
    Keil Studio已经确定为MDK下一代开发工具,更多功能将在今年年底上线
    嵌入式新闻早班车-第1期
    【STM32H7的DSP教程】第32章 STM32H7的实数FFT的逆变换(支持单精度和双精度)
    【STM32F429的DSP教程】第32章 STM32F429的实数FFT的逆变换(支持单精度和双精度)
  • 原文地址:https://www.cnblogs.com/xingyuyu/p/12257923.html
Copyright © 2011-2022 走看看