由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 问一个java基础的初始化的问题,一直搞不明白
相关主题
static vector 怎么 initialize ?[合集] 为什么 const member 不能是 static.
c++ 一问Is the order of initialization a, b, c or c, b, a?
请问static variable init的问题?another c++ interview question
抠字眼:assignment and initialize in C++[c++] static function in a class
Test your C++ knowledge...C++做题,麻烦师傅们再看看。
Global(static) variable initialization questionstatic initialization dependency c++
static variable存在heap还是stack?one question about initializaiton list
vector在constructor里初始化一道 memset in C++的题
相关话题的讨论汇总
话题: employee话题: nextid话题: static话题: string话题: public
进入Programming版参与讨论
1 (共1页)
v******y
发帖数: 84
1
定义一个class Employee, 里面的id 是static按class建立的顺序分配的
就是static nextId 初始化为1
在initiation block中赋值id,
{
id=nextId;
++nextId;
}
测试的时候,第一个用constructor Employee(n, s),id=1,nextId=2
第二个用Employee(s)
然后用this("Employee #"+nextId,s)调用Employee(n,s)
这是我的问题,这个时候initiaion block
{
id=nextId;
++nextId;
}
已经运行了,id=2, nextId 是3了,为啥在这个
this("Employee #"+nextId,s)中的nextId 还是2呢?
public class Employee{
private String name="";
private double salary;
private int id;
private static int nextId=1;
{
id=nextId;
++nextId;
}
public Employee(String n, double s){
name=n;
salary=s;
}
public Employee(double s){
this("Employee #"+nextId,s);
}
public Employee(){
this(0);
}

public static void main(String [] args){
Employee[] staff=new Employee[3];
staff[0]=new Employee("Lee",10000);
staff[1]=new Employee(5000);
staff[2]=new Employee();
}
}
g*****g
发帖数: 34805
2
static block is only ran once, when the class is being loaded, it doesn't
matter how many instances you have.
v******y
发帖数: 84
3
这个是no static block,每次都会run的
比如第三个object是,id=3, nextId=4了

【在 g*****g 的大作中提到】
: static block is only ran once, when the class is being loaded, it doesn't
: matter how many instances you have.

s****y
发帖数: 503
4
no static block每次创建instance都执行,而且比constructor早执行
v******y
发帖数: 84
5
我就是这个意思
但是你看看
第二个instance时
non static block已经运行了,这时分配到第二个instance 的id=2, static nextId=3了
但是在第二个instance的constructor 中的this(nextId)的 nextId还是2
这是我不明白的地方

【在 s****y 的大作中提到】
: no static block每次创建instance都执行,而且比constructor早执行
g*****g
发帖数: 34805
6
I think you are referencing the same static variable in multiple instances.
You probably hit threading issue.
Try AtomicInteger instead.

=3了

【在 v******y 的大作中提到】
: 我就是这个意思
: 但是你看看
: 第二个instance时
: non static block已经运行了,这时分配到第二个instance 的id=2, static nextId=3了
: 但是在第二个instance的constructor 中的this(nextId)的 nextId还是2
: 这是我不明白的地方

v******y
发帖数: 84
7
我想这个是设计成这样的,一直搞不清原理
用AtomicInteger也是一样的结果,当前constructor 用this(static nextId) 是用
cached着上一个 instance的value,不是现在instance的value. 但是如果用其他method
,像Sytem.out.println(nextId)就是当前instance 的nextId.

.

【在 g*****g 的大作中提到】
: I think you are referencing the same static variable in multiple instances.
: You probably hit threading issue.
: Try AtomicInteger instead.
:
: =3了

w***x
发帖数: 105
8
这个构造函数 :
public Employee(double s){
this("Employee #"+nextId,s);
}
由于调用了另外一个构造函数,所以它被调用的时候,初始化部分代码不会触发,而是
在这个最终干净的构造函数之前触发:
public Employee(String n, double s){
name=n;
salary=s;
}
1 (共1页)
进入Programming版参与讨论
相关主题
一道 memset in C++的题Test your C++ knowledge...
c++ 不自动initialize变量么?Global(static) variable initialization question
菜鸟请教smart pointerstatic variable存在heap还是stack?
what is the difference?vector在constructor里初始化
static vector 怎么 initialize ?[合集] 为什么 const member 不能是 static.
c++ 一问Is the order of initialization a, b, c or c, b, a?
请问static variable init的问题?another c++ interview question
抠字眼:assignment and initialize in C++[c++] static function in a class
相关话题的讨论汇总
话题: employee话题: nextid话题: static话题: string话题: public