public class INode
{
private int value;
private INode right, down;
private int row, col;
public INode(int value)
{
this.value = value;
}
public int getValue()
{
return value;
}
public void setValue(int value)
{
this.value = value;
}
public INode getRight()
{
return right;
}
public void setRight(INode right)
{
this.right = right;
}
public INode getDown()
{
return down;
}
public void setDown(INode down)
{
this.down = down;
}
public int getRow()
{
return row;
}
public void setRow(int row)
{
this.row = row;
}
public int getCol()
{
return col;
}
public void setCol(int col)
{
this.col = col;
}
}
我可以得到a = 8的值但是对于head,即使我使用构造函数来设置,仍然给我value = null ...不知道为什么。
司机是:
import java.util.*;
public class List
{
public static INode head;
public List()
{
head = new INode(8);
}
public static void main (String[] args)
{
INode a = new INode(8);
int data = a.getValue();
System.out.println(data);
System.out.println(head.getValue());
}
}
请帮帮我一个人。不明白为什么当我使用构造函数时,我无法将值赋给节点,但是当我创建一个实例时,我可以......
谢谢你们,爱你们!很好的帮助!
答案 0 :(得分:1)
您没有实例化类List
。将您的代码更改为
public INode head; // remove static
public List() {
head = new INode(8);
}
修改你的主要方法:
public static void main (String[] args) {
INode a = new INode(8);
int data = a.getValue();
System.out.println(data);
List l = new List(); // create new List instance
System.out.println(l.head.getValue()); // get the head from List instance
}
另一个有效的替代方案是只改变一行:
public static INode head = new INode(8); // create instance during class initialization
我建议查看类(静态)和实例变量之间的区别,例如:在Java Tutorials中(摘录如下):
实例变量(非静态字段)从技术上讲,对象将其各个状态存储在“非静态字段”中,即 声明没有static关键字的字段。非静态字段也是 称为实例变量,因为它们的值对每个变量都是唯一的 类的实例(换句话说,对每个对象); currentSpeed 一辆自行车是独立于另一辆自行车的当前速度。
类变量(静态字段)类变量是使用static修饰符声明的任何字段;这告诉编译器那里 正好是这个变量的一个副本,无论如何 很多时候这个类已经被实例化了。定义的字段 特定种类的自行车的齿轮数量可以标记为 从概念上讲,相同数量的齿轮将适用于所有齿轮 实例。代码static int numGears = 6;会创造这样一个 静态场。此外,可以添加关键字final 表示齿轮的数量永远不会改变。
答案 1 :(得分:0)
您应该在声明点或静态初始化程序块中初始化静态变量。而不是在构造函数中。
只有在实例化List
类时,才会使用构造函数,而不是在任何地方。当类加载到memoty中时,执行static initializer
块。因此,当加载类时,您的INode
将被初始化。
public static INode head;
static {
head = new INode(8);
}
或只是: -
public static INode head = new INode(8);
static
变量对所有实例都是通用的。如果进行了更改
例如,它将反映在所有实例中。好吧
确定在使用它们之前,你真的想要它。如果可能的话,
将您的INode
声明为non-static
变量。并实例化你的
使用前List class
。
public INode head = new INode(8);
然后在您的main方法中,您可以像这样访问它: -
List list = new List();
System.out.println(list.head.getValue());
答案 2 :(得分:0)
您必须在main方法
中初始化List对象 public static void main (String[] args)
{
new List();
INode a = new INode(8);
int data = a.getValue();
System.out.println(data);
System.out.println(head.getValue());
}
答案 3 :(得分:0)
您可以这样做。要么您可以创建班级列表的实例,要么 你可以初始化头部指向INode的对象。 这取决于您需要的业务逻辑
public static void main(String[] args) {
INode a = new INode(8);
int data = a.getValue();
System.out.println(data);
List list = new List();
System.out.println(list.head.getValue());
head = new INode(6);
System.out.println(head.getValue());
}