这是代码。 错误发生在第二行。
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方法移到公共类的方法中。如何纠正它?
答案 0 :(得分:0)
您的代码如下:
class TestStack1 {
public static void main(String[] args) { ... }
class FixCapacityStackOfString { ... }
}
然后您在FixCapacityStackOfString
中使用main
。但是FixCapacityStackOfString
不是静态类:它需要一个TestStack1
的实例。您在静态main方法中没有此实例。因此,只需将FixCapacityStackOfString
声明为静态:
static class FixCapacityStackOfString { ... }
答案 1 :(得分:0)
这是一个很好的问题,它显示了“静态”关键字的神奇之处。
您的程序可以通过三种方式执行:
第一种方法:当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;
}
}