使用 args 时,无法从静态引用非静态
Non-static Cannot Be Referenced From static,when using args
这是代码。
错误发生在第 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方法移动到public中的方法中class.How我可以更正吗?
您的代码如下所示:
class TestStack1 {
public static void main(String[] args) { ... }
class FixCapacityStackOfString { ... }
}
而你在 main
中使用了 FixCapacityStackOfString
。但是 FixCapacityStackOfString
不是静态的 class:它需要 TestStack1
的一个实例。您在静态 main 方法中没有此实例。所以只需将 FixCapacityStackOfString
声明为静态的:
static class FixCapacityStackOfString { ... }
这是一个很好的问题,显示了 "static" 关键字的魔力。
您的程序可以通过三种方式执行:
First Way: When the class FixCapacityStackOfString is a nested class.
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;
}
}
在此,构造函数(非静态方法)的调用需要定义它的 class 的实例。由于您是从静态方法 main 调用的,因此这就是您必须调用的方式。
Second Way: If you class FixCapacityStackOfString is outside the main class
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;
}
Third Way: Declare the class FixCapacityStackOfString as static inside first class.
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;
}
}
这是代码。 错误发生在第 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方法移动到public中的方法中class.How我可以更正吗?
您的代码如下所示:
class TestStack1 {
public static void main(String[] args) { ... }
class FixCapacityStackOfString { ... }
}
而你在 main
中使用了 FixCapacityStackOfString
。但是 FixCapacityStackOfString
不是静态的 class:它需要 TestStack1
的一个实例。您在静态 main 方法中没有此实例。所以只需将 FixCapacityStackOfString
声明为静态的:
static class FixCapacityStackOfString { ... }
这是一个很好的问题,显示了 "static" 关键字的魔力。
您的程序可以通过三种方式执行:
First Way: When the class FixCapacityStackOfString is a nested class.
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;
}
}
在此,构造函数(非静态方法)的调用需要定义它的 class 的实例。由于您是从静态方法 main 调用的,因此这就是您必须调用的方式。
Second Way: If you class FixCapacityStackOfString is outside the main class
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;
}
Third Way: Declare the class FixCapacityStackOfString as static inside first class.
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;
}
}