Collection.Stack做类的成员变量的问题。

朔北冥 2016-11-26 10:52:05
我在一个类让Stack作为类的成员变量但是在构造方法之后我在调用Stack类型的成员却发现他们都为null了,这是怎么回事?
放上代码:

private Stack<Integer> statuStack;
private Stack<Ttuple> tStack;
private TtupleNode curr;
private LinkedList<String> varlist;

public DeclareAnaly(String processFile,String midCodeFile,TtupleNode curr){
this.processFile=processFile;this.midCodeFile=midCodeFile;this.curr=curr;
Stack<Ttuple> tStack=new Stack<Ttuple>();
Stack<Integer> statuStack=new Stack<Integer>();
Stack<String> sStack=new Stack<String>();varlist=new LinkedList<String>();
statuStack.push(0);tStack.push(new Ttuple("start", "#"));sStack.push("#");
}
/**
* analysis the code which to declare variable and save to file
* @param curr the linear of tuple
* @param midCod the filename of file which saved middle code
* @param analyProcess the process of analysis to filename's file
*/
public void analy(){
int i,j;
while(true){
sStack.peek();
i=statuStack.peek();
j=find(curr.element.name, curr.element.value);
if(j<0)
break;
if(move[i][j]==-1&&reduction[i][j]==-1)
{ writeToFile(processFile, "error:"+curr.element.value);;break;}
if(move[i][j]!=-1){
moveToStack(move[i][j], j);
curr=curr.next;
continue;
}
if(reduction[i][j]!=-1){
reduce(reduction[i][j]);
}
}
}


错误地方:
...全文
156 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
朔北冥 2016-11-29
  • 打赏
  • 举报
回复
引用 2 楼 windowsoahil 的回复:
成员没初始化。 构造器里声明了和成员同名的局部变量,覆盖了成员的作用域。 应该写成:tStack=new Stack<Ttuple>();或this.tStack=new Stack<Ttuple>();
明白了,谢谢。
朔北冥 2016-11-29
  • 打赏
  • 举报
回复
引用 4 楼 m2200 的回复:
构造方法里的Stack<Ttuple> tStack=new Stack<Ttuple>();这段代码里的tStack是局部变量,跟外部成员变量tStack不是同一个变量,局部变量当方法结束就回收了,你analy调用的tStack是成员变量,而这个成员变量你没有初始化,正确的做法是把Stack<Ttuple> tStack=new Stack<Ttuple>();改成tStack=new Stack<Ttuple>();
明白了,谢谢。
zhaopeng2511 2016-11-27
  • 打赏
  • 举报
回复
sStack是DeclareAnal的局部成员 ,不可以在analy中引用吧 tStack才可以
爱睡觉的阿狸 2016-11-27
  • 打赏
  • 举报
回复
构造方法里的Stack<Ttuple> tStack=new Stack<Ttuple>();这段代码里的tStack是局部变量,跟外部成员变量tStack不是同一个变量,局部变量当方法结束就回收了,你analy调用的tStack是成员变量,而这个成员变量你没有初始化,正确的做法是把Stack<Ttuple> tStack=new Stack<Ttuple>();改成tStack=new Stack<Ttuple>();
解开者 2016-11-26
  • 打赏
  • 举报
回复
成员没初始化。 构造器里声明了和成员同名的局部变量,覆盖了成员的作用域。 应该写成:tStack=new Stack<Ttuple>();或this.tStack=new Stack<Ttuple>();
朔北冥 2016-11-26
  • 打赏
  • 举报
回复
DeclareAnaly()为我的构造方法

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧