数组:

当存储多个数据时,此时可能会使用多个变量,这样不断声明变量会很麻烦,而这些变量都有相似的特性,因此我们可以将它们存放到一个容器中,统一处理。

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

数组概念: 数组是存储数据的容器,多个数据的数据类型一致。

数组特性:数组是一种引用类型数据、数组中多个数据的类型一致、数组的长度在程序运行期间不可改变、

数组初始化:在内存中创建一个数组,并向其中赋些默认的值;初始化数组的方式有两种:动态初始化(指定数组长度)、静态初始化(不指定数组长度,自动推算长度,直接指定内容)。

public class Arrays {public static void main(String[] args){// 1.动态初始化数组的格式:数据类型[] 数组名 = new 数据类型[数组长度];// 左侧数据类型:数组当中保存的数据的类型,且数据类型一致。// 左侧中括号:代表一个数组// 左侧数组名:给初始化的这个数组一个变量名。// 右侧的关键字new:表示创建的动作。// 右侧数据类型:和左侧数据类型保持一致// 右侧中括号中数组长度:一个整数型数字,表示数组中元素的个数。int[] arrInt = new int[5];//创建了一个数据类型为int数组长度为5的数组arrString[] arrString = new String[10];//创建了一个数据类型为String数组长度为10的数组arrString// 2.静态初始化数组的格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};其简写格式:数据类型[] 数组名 = {元素1,元素2,...};int[] arrnum = new int[]{1,2,3,4,5};//创建了一个数组元素为:1,2,3,4,5的数组arrnum,其数组长度为5String[] arrHello = {"hello","world","my","name","is","kuhai"};//使用数组的简写格式定义一个数组arrHello,简写方式不支持将数组拆分后再赋值给变量的形式定义数组,如:int arr;arr = {1,2},编译器无法解析;System.out.println(arrHello);//[Ljava.lang.String;@6d1e7682,直接打印数组会的到一个内存地址哈希值。// 3.访问数组中的元素:直接打印数组会得到一个内存地址哈希值,想要访问到数组中的具体元素,其方法是:数组名[索引],索引为整型从0开始到数组长度-1,0表示数组的第一个元素,后面的因此类推,如:int[] arraynum =new int[]{1,2,3,4};System.out.println(arraynum[0]);//1System.out.println(arraynum[arraynum.length-1]);//4,arraynum.length表示数组的长度,length表示长度,通过点.访问数组的这个属性。// 4.动态初始化的数组默认每一项都有相同的值(int类型默认值为:0、浮点型默认为:0.0、字符型默认为:'/u0000'、布尔型默认为:false、引用型默认为:null),如:int[] arrayone = new int[2];System.out.println(arrayone[0]);//0System.out.println(arrayone[1]);//0// 给动态初始化的数组元素赋值后,可以修改默认值,其格式为:数组名[索引]=值,如:arrayone[0] = 2;arrayone[1] = 5;System.out.println(arrayone[0]);//2,赋值后,默认值被修改了System.out.println(arrayone[1]);//5}
}

Java虚拟机的内存划分:

为了提高运算效率,对空间进行不同区域的划分,每一片区域都有特定的处理数据方式和内存管理方式。

JVM的内存划分:


数组存储在内存中:

两个数组在内存中

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

两变量指向同一地址

public static void main(String[] args) {// 定义数组,存储3个元素int[] arr = new int[3];//数组索引进行赋值arr[0] = 5;arr[1] = 6;arr[2] = 7;//输出3个索引上的元素值System.out.println(arr[0]);System.out.println(arr[1]);System.out.println(arr[2]);//定义数组变量arr2,将arr的地址赋值给arr2int[] arr2 = arr;arr2[1] = 9;System.out.println(arr[1]);
}


遍历数组及越界异常、空指针异常

public class Arraytest {public static void main(String[] args){// 1.两个变量指向同一地址:当两个变量指向同一地址时,这两个变量都可以修改内存中的数据,如:int[] arr1 = new int[]{1,2};int[] arr2 = arr1;System.out.println(arr2[1]);//2arr2[1] = 5;System.out.println(arr1[1]);//5arr1[0] = 3;System.out.println(arr2[0]);//3// 2.遍历数组:for(int i = 0; i < arr1.length; i++){System.out.println("arr1中第" + (i+1) + "个元素为:" + arr1[i]);}// 3.数组越界访问异常:访问一个数组中超出数组长度-1的索引的元素时会报:ArrayIndexOutOfBoundsException,表示数组索引越界异常,异常后面的代码将不再执行System.out.println(arr1[2]);//Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at Arraytest.main(Arraytest.java:13)// 4.数组空指针异常:当给一个数组变量没有初始化,而是给null值,null表示什么也没有,此时会发生空指针异常,异常后面的代码将不再执行int[] arr3 = null;System.out.println(arr3[2]);//Exception in thread "main" java.lang.NullPointerException at Arraytest.main(Arraytest.java:17)System.out.println("arr3[2]");//Exception in thread "main" java.lang.NullPointerException at Arraytest.main(Arraytest.java:17)}
}

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海

初识java中数组、数组在内存中、越界异常、空指针异常相关推荐

  1. Java对象运行时在内存中的情况

    Java对象运行时在内存中的情况 您可能已经知道,一旦创建了一个对象,它就只是堆中的一系列字节.您可能对Java对象在内存中的情况感到好奇吗? 1.变量 以下是"Base"(B)类 ...

  2. 常见Java面试题之解释内存中的栈、堆和静态区用法

    栈(stack).堆(heap)和静态区(static area)的用法区别 * 通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间: * 通过new关 ...

  3. JAVA入门级教学之(内存中的空指针异常)

    空指针异常示例:  //定义一个顾客类测试空指针异常public class Customer {int id; } /*空指针异常示例*/ public class OOTest04 {public ...

  4. vs2008、vs2010、vs2012中查看变量在内存中的内容的方法

    在vs中调试程序的,有时候需要设置断点看某个变量的内容,如果变量是一个指针.数组或结构体,则可以通过查看该变量所指向的内存来看变量的内容. 1.在vs2008中打开内存窗口 在vs2008调试界面中, ...

  5. 通过查看Windbg中汇编指令及内存中的值去定位软件崩溃问题

    目录 1.在Windbg中分析dump文件的一般步骤 1.1.查看异常的类型

  6. (二十六)、Java数组在内存中如何存放与分配

    Java中有两种类型的数组: 基本数据类型数组: 对象数组: 当一个对象使用关键字"new"创建时,会在堆上分配内存空间,然后返回对象的引用,这对数组来说是一样的,因为数组也是一个 ...

  7. Java千百问_06数据结构(014)_java数组如何存储在内存中

    1.数组的内存空间是何时分配的 Java中的数组是用来存储同一种数据类型的数据结构,一旦初始化完成,即所占的空间就已固定下来,初始化的过程就是分配对应内存空间的过程.即使某个元素被清空,但其所在空间仍 ...

  8. 重新认识java(十一)---- java中的数组

    面向对象的一些知识暂时告一段落,从本文开始,进入java语法的重学阶段~ 初识数组 什么是数组 数组:相同类型的.用一个标识符名称封装到一起的一个对象序列或基本类型数据序列. 数组的定义及初始化 定义 ...

  9. java中的数组_Java中的数组

    数组是在内存中存储相同数据类型的连续的空间 声明一个数组就是在内存空间中划出一串连续的空间 数组名代表的是连续空间的首地址 通过首地址可以依次访问数组所有元素 元素在数组中的排序叫做下标从零开始 数组 ...

最新文章

  1. 京东姚霆:推理能力,正是多模态技术未来亟需突破的瓶颈!
  2. [11] ADB 实用功能
  3. Query Layer介绍
  4. APP 控制 ROS 机器人 群组
  5. Matlab语音倍速播放
  6. WCF编程]WCF使用Net.tcp绑定时候出现错误:元数据包含无法解析的引用
  7. 50预训练权重_MMDetection笔记:修改预训练模型权重类别数
  8. Fragment的使用
  9. cher怎么翻译中文_中文翻译法语收费标准是怎么定的
  10. sqlite增删改查(一)及SqliteDev工具下载地址
  11. 便利店“三方会战”,谁是最后赢家?
  12. 截图软件:TechSmith SnagIt V10.0.0.788英文原版+有效激活码
  13. java机票编程_携程预订机票后台java开发编程
  14. Entrust 将不再签发超过13个月有效期的SSL证书
  15. OL3实现空间查询的代码示例
  16. Nginx的安装与常用配置
  17. linux安装完mysql没有服务_Linux中安装mysql之后 mysql服务不能启动
  18. 你想要的样子 我都有
  19. 云享 值得一用的在线文档即时通讯平台 新用户持续免费
  20. 奔跑吧ansible.pdf 免费下载

热门文章

  1. Spring AOP是什么?
  2. MATLAB基础教程(9)——高级积分运算、二重积分
  3. 数学建模学习笔记(一)——层次分析模型
  4. python全局名称空间_python名称空间,命名空间
  5. anaconda3安装_Anaconda3软件安装教程
  6. php 预防循环发短信_php短信接口发送短信失败,罪魁祸首原来在这里
  7. 机器学习-01regression
  8. hdu 六度分离 floyd
  9. 弗尤博客(十一)之搜索博文
  10. 图文详解linux/windows mysql忘记root密码解决方案