while和do-while区别
1、 while先判断后执行。do-while是先执行后判断
2、do-while总是保证循环体会被至少执行一次!(*主要区别)
Java内存分析
Java内存
- 堆
(1)存放new的对象和数组
(2)可以被所有的线程共享,不会存放别的对象引用 - 栈
(1)存放基本变量类型(会包括这个基本类型的具体数值)
(2)引用对象的变量(会存放这个引用再堆里面的具体地址) - 方法区
(1)可以被所以的线程共享
(2)包含了所有的class和static变量
数组的四个基本特点
- 长度是确定的。数组一旦被创建,它的大小就是不可改变的。
- 元素必须是相同类型,不允许出现混合类型。
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
- 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象内存,数组对象本身是在堆中的。
数组边界
- 下标的合法区间: [0,length-1],如果越界就会报错
public static void main(String[] args) {
int[] array = new int[10];
System.out.println(array[10]); //此处array[10]取的是下标为10的值,由于不存在,会发生下标越界异常,报错
}
-
ArrayIndexOutOfBoundsException
小结:
(1)数组是相同数据类型(数据类型可以为任意类型)的有序集合
(2)数组也是对象。数组元素相当于对象的成员变量。
(3)数组长度是确定的,不可变的。如果越界,则报:ArrayIndexOutOfBoundsException
数组三种初始化
静态初始化
int[] a = {1,2,3};
Man[] mans ={new Man(1,1),new Man(2,2)}```
动态初始化
int [] a == new int[3];
a[0] = 1; //此时返回值为1
a[1] = 2; //此时返回值为2
//若输出a[2] ,由于未定义a[2]的值,会**默认初始化**,返回值为0
数组的默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐藏初始化。