初始化

java初始化
1、 一个类的所有基本类型数据成员都会保证获得一个初始值。
非基本类型,会初始化为null


public class Initialization {
int a;
char b;
short s;
float f;
long lo;
double dou;
byte e;
boolean flag;
Object obj;

public static void main(String [] args){
Initialization init = new Initialization();
init.print();
}

public void print(){
System.out.println("int a="+a+"\nchar b="+b+" \n"+" short s="+s+"\n float f="+f+"\n long lo="+lo+"\n double dou="+dou+"\n byte e="+e+"\n boolean flag="+flag+"\n Object obj="+obj);
}
}

出来结果为

int a=0
char b=
short s=0
float f=0.0
long lo=0
double dou=0.0
byte e=0
boolean flag=false
Object obj=null

可见,java会为类的基本类型的变量提供一个初始值,各类型初始值不同,非基本类型初始为null。注意,这里的变量必须是类变量,注意,只会为类变量提供初始化,而局部变量不会。如果局部变量没有初始化,会收到一个出错信息

2、可以通过构造方法或其他方法进行初始化,但是不会妨碍java默认的初始化
构造方法初始化不用赘述。
用方法进行初始化值得一提的是下面这种情况

public int init(int j){
return j;
}

int a = init(b);
int b = 0;

这样就会提示错误。

这时需要修改b和a的定义顺序

通过构造方法或方法都可以进行初始化,但是不会妨碍java默认的初始化。
看下面的例子

int i;
Object obj;
public Initialization(){
System.out.println("before i="+i+" obj="+obj);
i = 1;
obj = new Object();
System.out.println("after i="+i+" obj="+obj);
}

public static void main(String [] args){
Initialization init = new Initialization();
}

输出结果为

before i=0 obj=null
after i=1 obj=java.lang.Object@de6ced

由此可见,不论是基本类型,还是其他的类。java默认的初始化是最先发生的,位于一切方法之前。
3、static 数据的初始化
static 数据会发生上述同样的事情(基本类型,获得对应基本类型的初始化值;非基本类型,初始化为null)
但是,由于static值只有一个存储区域,所以static值只会被初始化一次,看下面的例子

public static void main(String [] args){
Cupboard cup = new Cupboard();
cup = new Cupboard();
}

public class Cupboard {
static Bowl bowl = new Bowl();

public Cupboard(){
System.out.println("initialization Cupboard");
}
}
public class Bowl {
public Bowl(){
System.out.println("init ing Bowl~");
}
}

输出结果如下

init ing Bowl~
initialization Cupboard
initialization Cupboard

所以说,static数据只会在第一次进行初始化,之后就不会了。

4、初始化顺序
在一个类中,无论变量的定义是在方法之前还是方法之后,都会在方法之前进行初始化的;
另外,static数据初始化位于非static数据初始化之前
来看下边的例子

public static void main(String [] args){
Cupboard cup = new Cupboard();

}
public class Cupboard {
Pan pan = new Pan();
public Cupboard(){
System.out.println("initialization Cupboard");
}
static Bowl bowl = new Bowl();
}
public class Bowl {
public Bowl(){
System.out.println("init ing Bowl~");
}
}
public class Pan {
public Pan(){
System.out.println("initialization Pan");
}
}

结果如下

init ing Bowl~
initialization Pan
initialization Cupboard


此次总结还没有涉及到继承。
涉及到继承后会更复杂。日后会详细分析的^-^
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值