- 成员变量:定义在类中,方法体之外。
- 局部变量:定义在方法体,构造方法,语句块中的变量。
局部变量定义后,必须初始化,即赋值,才能使用(它没有默认值)
public class Demo{
public static void main(String[] args){
int i; //没有赋值
System.out.println("i is" + i);
}
}
编译结果:
而成员变量定义后可以不初始化,因为它有默认值
变量类型 | 默认值 |
---|---|
int,byte,short,long | 0 |
char | 一个空格 |
float,double | 0.0 |
引用值(比如String) | null |
public class Demo{
//成员变量(更准确说是:静态变量)不初始化
static int x1;
static byte x2;
static short x3;
static long x4;
static String x5;//String是用引用值,引用值都是null
static char x6;
static float x7;
static double x8;
public static void main(String[] args){
System.out.println("x1 is " + x1);//int:0
System.out.println("x2 is " + x2);//byte:0
System.out.println("x3 is " + x3);//short:0
System.out.println("x4 is " + x4);//long:0
System.out.println("x5 is " + x5);//String(引用值):null
System.out.println("x6 is " + x6);//char:空格
System.out.println("x7 is " + x7);//float:0.0
System.out.println("x8 is " + x8);//double:0.0
}
}
//但是它编译成功,运行结果可以看出 成员变量有默认值,并且是各个类型类变量的默认值
实例提示: 演示代码是为了方便,直接在main中调用该类的静态变量(成员变量前加statis)
不过还有一个问题,char型类变量的默认值到底是啥,上图看不出来啊
做个代码实验:
public class Demo{
static String x5;
static char x6;
public static void main(String[] args){
System.out.println("x5 is " + x5 + "haha");
System.out.println("x6 is " + x6 + "haha");
}
}
看下图,可以看出char型类变量的默认值是' '
,确定是个空格