成员变量的初始值
成员变量的初始值
写了这么多程序. 不知道大家有没有产生这样一个疑问. 我们写的这个成员变量. 仔细观察一下
package com.xyq.bao; public class Person { String name; public static void main(String[] args) { Person p = new Person(); System.out.println(p.name); } }
这个成员变量啊. 就是创建了一下. 并没有赋值. 但是没有飘红嘛~. 编译是通过的. 我们换个例子, 大家再看一下
package com.xyq.bao; public class Person { String name; public static void main(String[] args) { Person p = new Person(); System.out.println(p.name); String nn; System.out.println(nn); // 飘红报错 } }
第12行代码会飘红报错. 为什么会这样. 记住这样一句话. 所有的变量, 必须先声明后赋值, 才能使用.
package com.xyq.bao; public class Person { String name; public static void main(String[] args) { Person p = new Person(); System.out.println(p.name); String nn = "哇卡卡卡卡"; System.out.println(nn); } }
不报错了.
为什么啊… 我的全局变量也没赋值啊. 为什么可以用呢? 原因是. 所有的成员变量, 在写好之后. java都会给他们一个初始值. 根据数据类型的不同. 给的值也不一样. 我们来看看这些成员变量的初始值.
看一下结果:
byte=0 short=0 int=0 long=0 float=0.0 double=0.0 char= boolean=false String=null
char是空字符. boolean是false, String是null. 其他都是零.
空字符在ascii里就是0.
false在计算机里也是0.
其他的都很好解释. 唯独这个null.
注意: null表示空, 表示没有. 真空. 连空气都不如.
我们给出一个children类
package com.xyq.bao;
public class Children {
}
然后在Person里使用Children
public class Person {
byte b;
short s;
int i;
long l;
float f;
double d;
char c;
boolean bool;
String str;
Children children;
public static void main(String[] args) {
Person p = new Person();
System.out.println("byte="+p.b);
System.out.println("short="+p.s);
System.out.println("int="+p.i);
System.out.println("long="+p.l);
System.out.println("float="+p.f);
System.out.println("double="+p.d);
System.out.println("char="+p.c);
System.out.println("boolean="+p.bool);
System.out.println("String="+p.str);
System.out.println("Children="+p.children);
}
}
结果:
byte=0
short=0
int=0
long=0
float=0.0
double=0.0
char=
boolean=false
String=null
Children=null
我们发现Children也是null.
原因: String其实也是一个类. 和我们写的Children, Cat, Panda没区别的. java为了让程序能正常执行. 必须要给成员变量一个初始值. 但是Children类型的对象必须得通过new来创建. java不能自动的去给你创建一个对象放这里, 所以, 只能告诉你这里的对象是空. 你用的时候啊. 自己去创建一个对象, 放这里.