所以,我是一名学习程序员,2个月前我开始学习Java作为我大学的课程。我真的很喜欢在业余时间编程而且我正在尝试制作游戏。目前有一个问题我无法解决。
我有一个名为Move的类,我在我的类中声明了Start: 移动move1 = new Move();
现在,当我回到我的Move课程中时,我想访问此移动1,但它不允许我。它说:classname无法解析。
澄清:
public class Move {
private String s = null;
public void setName(String s) {
name = s;
}
public String getName() {
return name;
}
public void setList() {
System.out.println(move1.getName() + move2.getName()); // This won't work
}
}
开始课程:
public class Start {
public static void main(String[] args) {
Move move1 = new Move();
Move move2 = new Move();
move1.setName(kick);
move2.setName(punch);
}
}
如果有人可以帮助我,那真是太棒了!
-edit
OK!我得到了一些反应,但我没有得到我需要的答案。我知道现在我可以使用this
而不是对象名称,但如果我想使用第二个对象怎么办?我改变了上面的代码。
答案 0 :(得分:1)
您遇到的问题是名称move1和move2超出了setList方法的范围。它们在Start.main中定义为局部变量,因此它们只在那里可见。
有很多方法可以解决这个问题。最直接的方法是将setList方法移动到Start。因为你是从main调用它的,这是一个静态方法,所以setList也必须是静态的。
public class Start {
public static void main(String[] args) {
Move move1 = new Move();
Move move2 = new Move();
move1.setName(kick);
move2.setName(punch);
setList(move1, move2);
}
public static void setList(Move move1, Move move2) {
System.out.println(move1.getName() + move2.getName());
}
}
如果你认为setList应该在Move类中,你需要将第二步作为参数传递。
public class Move {
...
public void setList(Move other) {
System.out.println(this.getName() + other.getName());
}
}
答案 1 :(得分:0)
您无需说move1.getName()
。您可以改为this.getName()
。关键字this
指的是调用方法的任何对象 - 在本例中为move1
。
这是因为对象move1
仅存在于Start
中主方法的范围内。因此,“move1”在main
以外的任何地方都没有意义。
实际上,关键字this
可以省略;你可以说getName()
而不在它前面放任何东西。
答案 2 :(得分:0)
move1
是Move
类中Start
类定义的对象,因此您无法访问它。您只需使用下面的行访问Move类的方法。
System.out.println(getName()); // THis will work
答案 3 :(得分:0)
访问当前移动对象(move1)的正确方法是使用this
关键字。你可以在Move类中说System.out.println(this.getName());
。
答案 4 :(得分:-2)
也许你没有添加类Move的导入?当您从其他包访问对象时,它是必需的。