/**
源码1 在类中方法外定义成员变量,还有在show方法中定义局部变量,在main函数中创建一个对象
*/
class Demo
{
int i;
String st;
char c; //'\u0000'(null)
byte by; //0(byte 1字节)
short sh; //0(short 2字节)
long l; //0L
float f;//0.0f
double d; //o.od
boolean b;//false
void show()
{
int i1;
String st1;
char c1; //'\u0000'(null)
byte by1; //0(byte 1字节)
short sh1; //0(short 2字节)
long l1; //0L
float f1;//0.0f
double d1; //o.od
boolean b1;//false
System.out.print(i1+":"+st1+":"+c1+":"+by1+":"+sh1+":"+l1+":"+f1+":"+d1+":"+b1);
}
}
class Test
{
public static void main(String[] args)
{
Demo d=new Demo();
System.out.println(d.i+":"+d.st+":"+d.c+":"+d.by+":"+d.sh+":"+d.l+":"+d.f+":"+d.d+":"+d.b);
}
}
编译后发现定义在方法中的局部变量没有初始化
现在将局部变量注释掉,重新编译,
/** 源码2 在类中方法外定义成员变量,在main函数中创建一个对象 */ class Demo
{
int i;
String st;
char c; //'\u0000'(null)
byte by; //0(byte 1字节)
short sh; //0(short 2字节)
long l; //0L
float f;//0.0f
double d; //o.od
boolean b;//false
}
class Test
{
public static void main(String[] args)
{
Demo d=new Demo();
System.out.println(d.i+":"+d.st+":"+d.c+":"+d.by+":"+d.sh+":"+d.l+":"+d.f+":"+d.d+":"+d.b);
}
}
运行发现默认初始化值int--0;String--null;char--'\u0000';byte--0;short--0;long--0;float--0.0;double--0.0;boolean--false;
现在将show方法中输出成员变量,主方法中定义变量输出
/** 源码3 在类中方法外定义成员变量,在show中输出成员变量,在main函数中定义变量并输出。 */ class Demo
{
int i;
String st;
char c; //'\u0000'(null)
byte by; //0(byte 1字节)
short sh; //0(short 2字节)
long l; //0L
float f;//0.0f
double d; //o.od
boolean b;//false
void show()
{
System.out.print(i+":"+st+":"+c+":"+by+":"+sh+":"+l+":"+f+":"+d+":"+b);
}
}
class Test
{
public static void main(String[] args)
{
int a;
Demo d=new Demo();
d.show();
System.out.println(a);
}
}
编译后发现
将main方法中变量去掉
/** 源码4 在类中方法外定义成员变量,在show中输出成员变,说明成员变量在整个类中有用 */ class Demo
{
int i;
String st;
char c; //'\u0000'(null)
byte by; //0(byte 1字节)
short sh; //0(short 2字节)
long l; //0L
float f;//0.0f
double d; //o.od
boolean b;//false
void show()
{
System.out.print(i+":"+st+":"+c+":"+by+":"+sh+":"+l+":"+f+":"+d+":"+b);
}
}
class Test
{
public static void main(String[] args)
{
Demo d=new Demo();
d.show();
}
}
运行结果:说明成员变量能够作用整个类兵器额初始化
/*******************************************/
反思:java的这种机制避免了没有被初始化的数据成员在进行其它操作时引起的严重性错误,尽量从语法上避免程序员犯错。(网上的答案)还有static定义的变量也能够自动默认初始化。求大神解释一下为什么成员变量是能够默认自动初始化的,谢谢!
|