Redian新闻
>
问一个java基础的初始化的问题,一直搞不明白
avatar
问一个java基础的初始化的问题,一直搞不明白# Programming - 葵花宝典
M*e
1
最近突然很想念国内麦当劳的麦香鱼和肯德基的深海鳕鱼堡~~~
不知道这边哪个快餐店有卖的哦?
avatar
n*n
2
我曾经是J1, 现在是F1,想转H1B
现在想wave J1的两年回国限制
请教一下怎么办理
主要是如何获得大使馆的no objection letter
要在国内办理很多手续证明是吗?
avatar
v*y
3
定义一个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();
}
}
avatar
y*e
4
麦当劳和burger king都有
avatar
g*g
5
static block is only ran once, when the class is being loaded, it doesn't
matter how many instances you have.
avatar
y*e
6
不过不要奢望向国内的一样好吃
avatar
v*y
7
这个是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.

avatar
M*e
8
oh,还真是没怎么去过麦当劳呢。改天去搜寻一下
不如国内好吃是肯定的啦。

【在 y*****e 的大作中提到】
: 麦当劳和burger king都有
avatar
s*y
9
no static block每次创建instance都执行,而且比constructor早执行
avatar
m*o
10
burger king的还算不错

【在 y*****e 的大作中提到】
: 不过不要奢望向国内的一样好吃
avatar
v*y
11
我就是这个意思
但是你看看
第二个instance时
non static block已经运行了,这时分配到第二个instance 的id=2, static nextId=3了
但是在第二个instance的constructor 中的this(nextId)的 nextId还是2
这是我不明白的地方

【在 s****y 的大作中提到】
: no static block每次创建instance都执行,而且比constructor早执行
avatar
M*e
12
真是奇怪,以前老去Burger king的,怎么就没注意过有鱼肉汉堡呢

【在 m****o 的大作中提到】
: burger king的还算不错
avatar
g*g
13
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
: 这是我不明白的地方

avatar
m*j
14
wendy's
not bad
avatar
v*y
15
我想这个是设计成这样的,一直搞不清原理
用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了

avatar
M*e
16
上周末在超市里偶然买到了特别推出的鱼肉汉堡,突然想起来国内吃的麦香鱼和鳕鱼堡
都很好吃,后来再去这家超市就不卖了,然后我就绞尽脑汁想哪里有卖鱼肉汉堡的。。
。。。
以前在学校每天中午都是burger king和wendy's打发午饭,居然没有发现有鱼肉汉堡……
啥眼神……

【在 m***j 的大作中提到】
: wendy's
: not bad

avatar
w*x
17
这个构造函数 :
public Employee(double s){
this("Employee #"+nextId,s);
}
由于调用了另外一个构造函数,所以它被调用的时候,初始化部分代码不会触发,而是
在这个最终干净的构造函数之前触发:
public Employee(String n, double s){
name=n;
salary=s;
}
avatar
a*l
18
麦香鱼还经常打折.
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。