我正在为一个类开发一个非常简单的文本RPG类型的游戏。我觉得我一切都很好,但是当我运行以下类时,我得到了一个编译器错误。
这是我的“房间”课程:
import java.io.*;
import java.util.*;
public class Room {
public static int size;
public static void Room(int n) {
size = n;
}
public static void showSize() {
System.out.println(size);
}
}
这是调用它的类:
import java.io.*;
import java.util.*;
public class Dungeon {
public static void main(String [] args) {
int mySize = 10;
Room a = new Room(mySize);
a.showSize();
}
}
奇怪的是,如果我在Room()构造函数中没有任何参数的情况下运行它,那很好,但是当我尝试传入一个大小(在变量中或显式地使用int)时,我得到:
Dungeon.java:8: cannot find symbol
symbol : constructor Room(int)
location: class Room
Room a = new Room(mySize);
^
1 error
答案 0 :(得分:5)
public static void Room(int n){
size = n;
}
不是构造函数,它是静态方法。所以,当你尝试
时Room a = new Room(mySize);
Java查找带参数的构造函数并显示编译时错误。
将其更改为:
public Room(int n){
size = n;
}
阅读有关构造函数here的更多信息。
答案 1 :(得分:5)
您正在尝试调用Room
构造函数,但您尚未定义任何构造函数。你有这个:
public static void Room(int n){
size = n;
}
...但这只是一个静态void方法,而不是构造函数 - 它设置了一个静态字段。我怀疑你真的希望你的Room
课程看起来像这样:
public class Room {
private final int size;
public Room(int size) {
this.size = size;
}
public void showSize() {
System.out.println(size);
}
}
请注意,我size
和private
都final
。如果您真的希望您的房间能够在施工后更改尺寸,那么可以删除final
,但我强烈建议您保留字段private
。
答案 2 :(得分:3)
这不是你声明构造函数的方式:
public static void Room(int n){
size = n;
}
请改用:
public Room(int n){
size = n;
}
并使size
非静态。
您实际上已声明static
方法和变量,这些方法和变量并非特定于实例,但属于类。您想要创建Room的实例,因此构造函数和必须特定于每个实例的成员不能是静态的。
如果你在没有任何参数的情况下运行它,它正确编译的原因是,如果你没有指定任何构造函数,就像你在这里一样,编译器提供了一个默认的无参数构造函数。
有关类和实例成员的更多信息,请查看this page of the official tutorial。
答案 3 :(得分:2)
问题是构造函数不能为void和静态类型所以改变:
public static void Room(int n){
size = n;
}
到
public Room(int n){
size = n;
}
它会起作用。
答案 4 :(得分:1)
您的public static void Room(int n){
不是构造函数,而是将其更改为public Room(int n){
您可能还想将尺寸字段更改为非静态
您可以使用System.out.println(new Room().size);
答案 5 :(得分:1)
public static void Room(int n) {
size = n;
}
这似乎是你试图创建构造函数,但它不是创建的方式。
使您的构造函数和大小变量非静态。
public class Room{
private int size;
public Room(int n){
size = n;
}
}
Static
大小将打破Room Object的封装,它应该是私有的。
Room a = new Room(mySize);
答案 6 :(得分:0)
构造函数不会返回任何内容,因此将p public static void Room(int n)
更改为Room(int n)
或public Room(int n)
并记住您不能沿构造函数放置返回类型,如int,String,void,double,byte ,简称,Graphics2D等