[JavaⅠ]1.1基础语法——数组
数组
1.基本概念
- 数组(array)是一种容器,可以同时存放多个数据值
- 数组的特点:
1.数组是一种引用数据类型
2.数组当中的多个数据,类型必须统一
3.数组的长度在程序运行期间不可改变
2.数组的初始化
- 动态初始化(指定长度)
数据类型[] 数组名称 = new 数据类型 [数组长度]; - 静态初始化(指定内容)
数据类型[] 数据名称 = new 数据类型[] {元素1,元素2, ... };
省略格式:
数据类型[] 数组名称 = {元素1,元素2, ...};
3.数组输出
-
直接打印数组名称,得到的是数组对应的:内存地址哈希值。
-
访问数组元素的格式:数组名称[索引值]
索引值:就是一个int数字,代表数组当中元素的编号,从0开始,一直到“数组的长度 -1”为止。
使用动态或者静态初始化都有默认值的过程,只不过静态初始化系统自动马上将默认值替换成为了大括号当中的具体数值。
4.常用方法
- 输出数组长度
格式: 数组名称. length
这将会得到一个int数字,代表数组的长度。 - 数组遍历
- for循环
最原始的for循环 - for-each循环
for-each循环是Java相比C语言中的for循环拓展而来的一种新的遍历数组的循环方式,其相对于一般的for循环更方便 - toString方法
toString() 方法用于返回以一个字符串表示的 Number 对象值。
- for循环
代码演示
public class Demo_01 {
public static void main(String[] args) {
int[] arrayA = new int [5];
String[] arrayB = new String[] {"Hello","World","Java"};
double[] arrayC = { 10.0, 15.5, 20.0 };
// System.out.println(array);
// 这样打印是的是数组的首地址。
System.out.println("======获取数组长度======");
System.out.println(arrayA.length);
System.out.println("======数组遍历======");
//传统方法
for(int i=0;i<arrayA.length;i++)
{
System.out.println(arrayA[i]);
}
System.out.println("============");
//for each循环
for(String a:arrayB)
System.out.println(a);
System.out.println("============");
//Array类中的toString方法 (import java.util.Arrays;)
System.out.println(Arrays.toString(arrayC));
}
}
5.常见异常
-
如果访问数组元素的时候,索引编号并不存在,那么将会发生
数组索引越界异常ArrayIndexOutOfBoundsException
-
所有的引用类型变量,都可以赋值为一个null值。但是代表其中什么都没有,数组必须进行new初始化才能使用其中的元素。
如果只是赋值了一个null,没有进行new创建,那么将会发生:空指针异常NullPointerException
* Java内存区域划分
首先由一张图了解Java内存区域的划分
程序计数器:是一块较小内存,可以看作是当前线程所执行的字节码的行号指示器。每条线程都需要有一个独立的程序计数器,各个线程之间计数器互不影响。
Java虚拟机栈:Java虚拟机栈也是线程私有,他的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量、操作数、操作数栈、动态链接、方法出口等信息。每一个方法的调用过程直至执行完成的过成,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
局部变量表存放了编译期可知的各种基本数据类型、对象引用和returnAddress
类型。如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError
异常;如果虚拟机可以动态扩展,如扩展时无法申请到足够的内存,就会抛出OutOfMemoryError
异常。
本地方法栈:与虚拟机栈类似,他们之间的区别是虚拟机栈为虚拟机执行Java方法(字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务。
Java堆:Java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域。在此内存区域中唯一目的就是存放对象实例,几乎所有的对象都在这里分配内存。
方法区(Method Area):和Java堆一样也是各个线程共享的内存区域,他用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。使用永久代实现方法区。
参考资料:
《深入理解Java虚拟机》周志明
《Java教程零基础入门到精通IDEA版》黑马程序员