v******y 发帖数: 84 | 1 【 以下文字转载自 Programming 讨论区 】
发信人: victorqy (victorqy), 信区: Programming
标 题: 问一个java基础的初始化的问题,一直搞不明白
发信站: BBS 未名空间站 (Tue Dec 30 11:42:44 2014, 美东)
定义一个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("Emp... 阅读全帖 |
|
v******y 发帖数: 84 | 2 定义一个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 sta... 阅读全帖 |
|
A*****o 发帖数: 284 | 3 贴个递归的完整代码,抛砖引玉了
#include
#include
#include
#include
using namespace std;
// Interview question: Rebuild a tree with DFS output with level
// A, 0, B, 1, C, 2, D, 2
struct TreeNode {
string id;
TreeNode(string a) {
id = a;
}
vector children;
};
void rebuildImpl(istringstream & iss, TreeNode *&father, string id, int
level) {
TreeNode *p = new TreeNode(id);
if (!father) {
father = p;
}
else {
... 阅读全帖 |
|
v******y 发帖数: 84 | 4 我就是这个意思
但是你看看
第二个instance时
non static block已经运行了,这时分配到第二个instance 的id=2, static nextId=3了
但是在第二个instance的constructor 中的this(nextId)的 nextId还是2
这是我不明白的地方 |
|
v******y 发帖数: 84 | 5 我想这个是设计成这样的,一直搞不清原理
用AtomicInteger也是一样的结果,当前constructor 用this(static nextId) 是用
cached着上一个 instance的value,不是现在instance的value. 但是如果用其他method
,像Sytem.out.println(nextId)就是当前instance 的nextId.
. |
|
s******s 发帖数: 508 | 6 select
CusipCol
, case when ValueCol is null and nextValue is not null then nextID else
IDCol end IDCol
, case when ValueCol is null and nextValue is not null then nextValue else
ValueCol end ValueCol
from
(
select CusipCol, IDCol, ValueCol
,lead(ValueCol) over (partition by CusipCol order by IDCol) NextValue
,lead(ValueCol) over (partition by CusipCol order by IDCol) NextID
,row_number() over (partition by CusipCol order by IDCol) rownum
from mytable
) x
where rownum = |
|
|
m****r 发帖数: 5435 | 8
NextId
这个有点意思。从图上看还有点不好说。最好能盘盘。 |
|
v******y 发帖数: 84 | 9 这个是no static block,每次都会run的
比如第三个object是,id=3, nextId=4了 |
|
w***x 发帖数: 105 | 10 这个构造函数 :
public Employee(double s){
this("Employee #"+nextId,s);
}
由于调用了另外一个构造函数,所以它被调用的时候,初始化部分代码不会触发,而是
在这个最终干净的构造函数之前触发:
public Employee(String n, double s){
name=n;
salary=s;
} |
|