这是代码。错误发生在第2行。
public class TestStack1 {
public static void main(String[] args) {
FixCapacityStackOfString fcstack = new FixCapacityStackOfString(100);
for (int i = 0; i < args.length; i++) {
fcstack.add(args[i]);
}
}
class FixCapacityStackOfString {
public FixCapacityStackOfString(int a) {
list = new String[a];
}
private int size;
private String[] list;
public int size() {
return size;
}
public boolean isEmpty() {
if (size == 0) {
return true;
} else {
return false;
}
}
public String push() {
return list[--size];
}
public void add(String s) {
list[size++] = s;
}
}
}
因为它使用了args,所以我无法将main方法移动到公共类中的方法中。我怎么能纠正它?
这是一个很好的问题,显示了“静态”关键字的神奇之处。
您的程序可以通过三种方式执行:
第一种方式:当类FixCapacityStackOfString是嵌套类时。
class ClassName
{
public static void main(String[] args) {
ClassName obj = new ClassName();
FixCapacityStackOfString fcstack = obj.new FixCapacityStackOfString(100);
}
class FixCapacityStackOfString {
public FixCapacityStackOfString(int a) {
list = new String[a];
}
private int size;
private String[] list;
}
}
在这种情况下,构造函数的调用(非静态方法)需要一个定义它的类的实例。由于您是从静态方法main调用的,因此这是您必须调用的方式。
第二种方式:如果你的类FixCapacityStackOfString在主类之外
class ClassName
{
public static void main(String[] args) {
FixCapacityStackOfString fcstack = new FixCapacityStackOfString(100);
}
}
class FixCapacityStackOfString {
public FixCapacityStackOfString(int a) {
list = new String[a];
}
private int size;
private String[] list;
}
第三种方法:将类FixCapacityStackOfString声明为第一类中的静态。
class ClassName
{
public static void main(String[] args) {
FixCapacityStackOfString fcstack = new FixCapacityStackOfString(100);
}
static class FixCapacityStackOfString {
public FixCapacityStackOfString(int a) {
list = new String[a];
}
private int size;
private String[] list;
}
}
您的代码如下所示:
class TestStack1 {
public static void main(String[] args) { ... }
class FixCapacityStackOfString { ... }
}
你在FixCapacityStackOfString
中使用main
。但FixCapacityStackOfString
不是一个静态类:它需要一个TestStack1
的实例。静态main方法中没有此实例。所以只需将FixCapacityStackOfString
声明为静态:
static class FixCapacityStackOfString { ... }