java中成员变量和局部变量的初始化
成员变量的初始化
在java中,成员变量存在于类之内,方法和代码块之外。
class A{
修饰符 数据类型 成员变量名;
方法(){}
}
这类变量在创建时如果不给初始化值,创建之后java会自动赋默认值:
基本数据类型 | 默认值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
char | \u0000(空格) |
float | 0.0f |
double | 0.0d |
boolean | false |
所有引用类型的初始化值为null。
class
interface
array
*开始我在疑问array为什么初始化值为null,一般在用的时候,int[] 中元素都初始化为了0,不应该是null啊。后来恍然大悟:
public class Demo1_Array {
static int[] arr;
public static void main(String[] args) {
System.out.println(arr);
}
}
结果打印输出null;
很显然这里的arr并没有给地址,数组内也就没有元素,默认初始化是将地址值初始null;
然而我定义一个int[] arr =new int [5]后,其中的arr[0]才是基本数据类型int,初始化值为0;
局部变量的初始化
局部变量存在于方法中和代码块中;
java自己不会执行局部变量的初始化,需要人为赋值,才可以使用。
但是,定义一个局部的数组:
int[] arr =new int[5] ;
其中的元素也被赋上默认初始值,打印结果为0,看来数组还真是不简单。百度后发现和new关键字有关,并且需要掌握内存中的栈和堆。
变量在内存中的分配
原来,内存中分为堆内存和栈内存,程序开始时,main方法进栈,在堆内存中分配空间创建的成员变量;局部变量保存在栈中。
创建数组则是在堆中,分配空间后默认初始化值。
我觉得可以这样认为,在堆内存中分配空间的变量都会java都会自动初始化值,像成员变量。