java 成员初始化_静态成员及其初始化

静态数据成员的初始化是在类的构造函数之前就完成的,如果静态数据成员是基本类型,没有将其进行初始化,那么它得到的就是基本类型的标准初值。如果是一个对象引用,那么除非新创建一个对象,并指派给该引用,否则它就是空值(null)。看下面一个例子:

StaticInitialization.javaclass Bowl{

Bowl(int marker){

System.out.println("Bowl("+marker+")");

}

void f(int marker){

System.out.println("f("+marker+")");

}

}

class Table{

static Bowl b1=new Bowl(1);

Table(){

System.out.println("Table()");

b2.f(1);

}

void f2(int marker){

System.out.println("f2("+marker+")");

}

static Bowl b2=new Bowl(2);

}

class Cupboard{

Bowl b3=new Bowl(3);

static Bowl b4=new Bowl(4);

Cupboard(){

System.out.println("Cupboard()");

b4.f(2);

}

void f3(int marker){

System.out.println("f3("+marker+")");

}

static Bowl b5=new Bowl(5);

}

public class StaticInitialization{

public static void main(String[] args){

System.out.println("Creatin new Cupboard() in main");

new Cupboard();

System.out.println("Creatin new Cupboard() in main");

new Cupboard();

t1.f2(1);

c1.f3(1);

}

static Table t1=new Table();

static Cupboard c1=new Cupboard();

}

那么输出的结果如下:

Bowl(1)

Bowl(2)

Table()

f(1)

Bowl(4)

Bowl(5)

Bowl(3)

Cupboard()

f(2)

Creatin new Cupboard() in main

Bowl(3)

Cupboard()

f(2)

Creatin new Cupboard() in main

Bowl(3)

Cupboard()

f(2)

f2(1)

f3(1)

得出如下结论:

静态成员在初始化以后,就不再进行初始化,不管创建多少个对象,静态数据成员只占有一份内存空间;

静态成员根据在类中的顺序进行初始化;

静态成员数据之后就是非静态成员数据,然后再构造函数,因为构造函数可能使用成员数据,所以成员数据会在构造函数之前就初始化;

通过改变main函数所在类最后两个初始化语句的位置得到:

如果将其移到main函数里面,结果就报错:非法的表示式开始,说明在函数中不能定义static的变量,static变量只能是class的,而且local变量除了可以用final以外,不能使用其它modifier;

如果将静态的改成非静态也报错,无论放在main函数之前还是之后都报错,因为在static函数中不能

引用非static变量;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值