Java 在类中声明时无法访问变量。在函数中声明时工作。为什么?
在下面的代码中,Java 在类中声明时无法访问变量。在函数中声明时工作。为什么?,java,Java,在下面的代码中,LinkedList是一个用于创建链接列表的类,它具有方法insertFirst(…)和displayList() 我试图使用该类在另一个类-->FCFS类中创建变量。在类FCFS中将其声明为私有变量会导致以下行出现NullPointerException错误:process.insertFirst(..)和process.display()。当我在work()方法中声明它时,它工作得非常好 我只是想了解为什么这样做有效: public class FCFS { p
LinkedList
是一个用于创建链接列表的类,它具有方法insertFirst(…)
和displayList()
我试图使用该类在另一个类-->FCFS类中创建变量。在类FCFS中将其声明为私有变量会导致以下行出现NullPointerException错误:process.insertFirst(..)
和process.display()
。当我在work()
方法中声明它时,它工作得非常好
我只是想了解为什么这样做有效:
public class FCFS {
public void work(){
LinkedList process = new LinkedList();
process.insertFirst(3);
process.displayList();
}
}
但这并不是:
public class FCFS {
private LinkedList process;
public void work(){
process.insertFirst(3);
process.displayList();
}
}
在第二个代码示例中,您没有像在第一个代码示例中那样初始化
进程
。因此,Java根据自动将其初始化为null
。使用:
或者您可以使用构造函数:
public FCFS() {
process = new LinkedList();
}
在第二个版本中,您从未初始化
进程
,因此它的默认值为null。当您解除对它的引用时,您将得到一个NullPointerException
如果在局部变量版本中将process
初始化为null
,则会遇到完全相同的问题。。。如果在实例字段version中将进程
初始化为非空值,它将工作。不过,现在还不清楚应该在哪里初始化它——这将取决于类的其余部分的设计
如果您根本不初始化局部变量,您将得到一个编译时错误:虽然字段有默认值(0、null、false等),但局部变量没有-编译器确保您不会读取未明确指定的变量
请注意,如果您只需要一个变量在方法的持续时间内有效——如果它在逻辑上不是类状态的一部分——那么最好是局部变量
还要注意的是,Java已经附带了一个(通用的)
LinkedList
类型。我希望此代码仅用于学术目的:)当您在方法中声明它时,您还分配了一个非空值
LinkedList process = new LinkedList();
在类内部,java编译器使用null值初始化进程变量,从而初始化NPE
private LinkedList process = new LinkedList();
你面临什么样的错误 它是空指针异常吗? 尝试先初始化链接列表
private LinkedList process = new LinkedList();
在第二个示例中,您没有初始化LinkedList(而在第一个示例中,您初始化了LinkedList)。您应该这样做:
public class FCFS {
private LinkedList process = new LinkedList();
public void work(){
process.insertFirst(3);
process.displayList();
}
}
或者这个(我通常更喜欢这个):
在执行FCFS的代码中,work()初始化FCFS:
FCFS myFCFS = new FCFS();
myFCFS.work();
public class FCFS {
private LinkedList process;
public FCFS(){
this.process = new LinkedList();
}
....(work method)
}
FCFS myFCFS = new FCFS();
myFCFS.work();