Java学习第四天笔记-第三部分
2013-04-13 08:33
447 查看
数组:
概念:数组就是存放同一种数据类型的集合,在内存中的表现形式为一个实体的容器.
特点:数组可以自动给存放在其中的数据元素进行索引编号,从0号开始.方便我们直接通过操作数组来操作其中的元素数据.
定义格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; int[] arr = new int[3];
定义格式2:
元素类型[] 数组名 = new 元素类型[]{元素,元素,元素,....}; int[] arr = new int[]{3,5,4,2,7,9};
数组在内存中的结构:
内存的划分:
1.寄存器(CPU进行操作管理)
2.本地方法区(所在操作系统如window中提供的一些方法)
3.方法区(类加载技术)
4.栈内存
储存的是局部变量,所谓局部变量就是在函数(方法)当中定义的变量,注意类级别下定义的变量不是局部变量.
栈内存运行效率高,其中数据生命周期短,变量所属的作用域一旦结束,该变量就自动释放.
5.堆内存
存储数组和对象(数组也是一种对象),凡是通过new来建立的实体都存放在堆内存中.
每个实体都有一个首地址值.
堆内存中的每一个变量都是一个默认初始化值,根据类型的不同而不同,整数是0,小数是0.0或者0.0f,布尔是false,
char类型是'\u0000'.
堆内存中的实体不再被指向时,该实体就会变成垃圾由垃圾回收机制来回收,并不是实时的.
相对于基本数据类型,对象被称为引用数据类型,因为在栈中的对象变量只是存储了其指向的堆中实体的地址值.
null用以取消引用类型变量的指向.
多个引用型变量可以指向同一个实体.它们只是记录了同一个实体在堆中的地址值.
几种异常和特殊情况:
1.数组索引越界异常,当访问到数组中不存在的角标时,发生该异常.
int [] arr = new int[3];//数组的中元素的个数为3个
System.out.println(arr[3]);//数组的角标编号从0开始,0,1,2.此数组没有3角标
2.空引用(指针)异常,当引用型变量没有指向任何实体时,还在使用其操作实体,就会发生该异常.
int[] arr = new int[3];
arr = null;//取消了引用类型变量的指向
System.out.println(arr[0]);//无法访问
以上两种异常在编译时并不会报错,到JVM运行时才会报异常.因为以上两种情况语法并没有错误,编译器在编译时只是检查语法,并不会真正在内存中加载数组,所以编译时不会报错.
3.一种特殊情况 ,直接打印了数据类型变量,而不是访问其中的某个元素,得到一串哈希值,表示实体在堆中存放的数据类型和地址值.一般在测试中用到,查看引用型变量指向的是一个什么样的实体.
int[] arr = new int[3];
System.out.println(arr); // [I@d12345 [:表示该实体存放的是一个数组 I:表示该实体的元素的类型是int型
//d12345是调用window方法得出的一串哈希值,表示该实体在内存中的地址值.
概念:数组就是存放同一种数据类型的集合,在内存中的表现形式为一个实体的容器.
特点:数组可以自动给存放在其中的数据元素进行索引编号,从0号开始.方便我们直接通过操作数组来操作其中的元素数据.
定义格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; int[] arr = new int[3];
定义格式2:
元素类型[] 数组名 = new 元素类型[]{元素,元素,元素,....}; int[] arr = new int[]{3,5,4,2,7,9};
数组在内存中的结构:
内存的划分:
1.寄存器(CPU进行操作管理)
2.本地方法区(所在操作系统如window中提供的一些方法)
3.方法区(类加载技术)
4.栈内存
储存的是局部变量,所谓局部变量就是在函数(方法)当中定义的变量,注意类级别下定义的变量不是局部变量.
栈内存运行效率高,其中数据生命周期短,变量所属的作用域一旦结束,该变量就自动释放.
5.堆内存
存储数组和对象(数组也是一种对象),凡是通过new来建立的实体都存放在堆内存中.
每个实体都有一个首地址值.
堆内存中的每一个变量都是一个默认初始化值,根据类型的不同而不同,整数是0,小数是0.0或者0.0f,布尔是false,
char类型是'\u0000'.
堆内存中的实体不再被指向时,该实体就会变成垃圾由垃圾回收机制来回收,并不是实时的.
相对于基本数据类型,对象被称为引用数据类型,因为在栈中的对象变量只是存储了其指向的堆中实体的地址值.
null用以取消引用类型变量的指向.
多个引用型变量可以指向同一个实体.它们只是记录了同一个实体在堆中的地址值.
几种异常和特殊情况:
1.数组索引越界异常,当访问到数组中不存在的角标时,发生该异常.
int [] arr = new int[3];//数组的中元素的个数为3个
System.out.println(arr[3]);//数组的角标编号从0开始,0,1,2.此数组没有3角标
2.空引用(指针)异常,当引用型变量没有指向任何实体时,还在使用其操作实体,就会发生该异常.
int[] arr = new int[3];
arr = null;//取消了引用类型变量的指向
System.out.println(arr[0]);//无法访问
以上两种异常在编译时并不会报错,到JVM运行时才会报异常.因为以上两种情况语法并没有错误,编译器在编译时只是检查语法,并不会真正在内存中加载数组,所以编译时不会报错.
3.一种特殊情况 ,直接打印了数据类型变量,而不是访问其中的某个元素,得到一串哈希值,表示实体在堆中存放的数据类型和地址值.一般在测试中用到,查看引用型变量指向的是一个什么样的实体.
int[] arr = new int[3];
System.out.println(arr); // [I@d12345 [:表示该实体存放的是一个数组 I:表示该实体的元素的类型是int型
//d12345是调用window方法得出的一串哈希值,表示该实体在内存中的地址值.
相关文章推荐
- Java新手学习笔记——Java实战经典(李兴华)第三部分概述
- Java学习第四天笔记-第二部分
- Java学习笔记——参数交换(无第三变量)
- Linux 学习笔记 -- 第三部分 学习 shell 与 shell script -- 第10章 vim 程序编辑器
- Java IO编程 学习笔记 (其一:基础部分)
- headFirst java学习笔记之一:基础知识部分(5.7)
- Java学习笔记(基础部分)--环境变量的配置
- Java基础学习笔记 第二部分 part 2
- Java IO部分的学习笔记
- 数据库系统概论 学习笔记(三)第三部分
- 【Java学习笔记】第5章:控制部分(第2部分)
- JAVA新手学习笔记——JAVA实战经典(李兴华)第二部分A
- JAVA新手学习笔记——Java实战经典(李兴华)第二部分C
- JAVA I/O系统学习笔记-部分
- Linux 学习笔记 -- 第三部分 学习 shell 与 shell script -- 第11章 认识与学习 bash
- Java学习第四天笔记-第一部分
- java学习之部分笔记2
- JAVA新手学习笔记——JAVA实战经典(李兴华)第二部分B
- Java复习笔记-第三部分
- [置顶] 【第三部分-django论坛从搭建到部署】一个完整的Django入门指南学习笔记