java在保证,所有的变量在使用前都得到恰当的初始化。对于方法中的局部变量,java将通过报错的形式提醒我们
void f(){
int i;
i++;
}
上述代码,编译是会报错,会提示我们没有进行初始化。<br /> 如果说一个类中的成员都是基本类型会怎样的呢? 在java中的基本数据类型中说到,会确保类中的每一个基本数据类型成员有初始值。我们通过下面这段代码来验证
class Person1 {
boolean b;char c;byte y;short s;int i;long l;double d;Person1 person1;
void print(){
System.out.println(b+" char的默认值:"+c+" "+y+" "+s+" "+i+" "+l+" "+f+" "+d+""+person1);
}
}
public class Test01 {
public static void main(String[] args) {
Person1 person1 = new Person1();
person1.print();
}
}
output
false char的默认值: 0 0 0 0 0.0 0.0null
我们可以发现,所有的数据成员的初值我们没有给出,但是输出的时候他们确实有值(char的默认值为0,所有显示时候为空白)。同样的我们定义一个类的引用时,如果为初始化为给定一个特殊的值 ——null。<br />** 3.指定初始化 **<br /> 如果我们想为某个成员变量赋初值,我们要怎么样呢?很直接的方法,直接在定义类成员变量的地方赋值.
int i=10;
我们也可以用同样的方法为非基本类型的变量赋值。
class Tank{}
public class Test{
public static void main(String[] args) {
Tank t=new Tank ();
}
}
如果我们没有对上述代码中的t指定初始化就要去使用他,那么是会有错误的
class Tank{}
public class Test{
public static void main(String[] args) {
Tank t;
}
}
这种时候运行是会有错误的。
4.方法初始化
我们也可以通过方法来进行为成员变量初始化
public class Test02 {
int i=f();
int g=g();
int f(){
return 1;
}
int g(){
return -1;
}
}
当然这个时候调用的方法也可以带有参数,但这些参数也必须被初始化的
int i=f();
int f(){ return 1; }
int g=g(i);
int g(int x){ return x*1; }
因为方法否f()已经给i放回了1,所以说i已经被初始化。所以此时在通过g()赋值给g是可行的,如果方法里面的参数没有被初始化。那这样是不行的。
int g=g(i);
int f(){ return 1; }
int i=f();
int g(int x){ return x*1; }
我们交换两个变量的顺序,发现这样编译出错,这个时候i还未被初始化,所以这样编写是错误的。