为了账号安全,请及时绑定邮箱和手机立即绑定

使用 args 时,不能从静态引用非静态

使用 args 时,不能从静态引用非静态

holdtom 2022-07-06 16:52:43
这是代码。错误发生在第 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 方法移动到公共类中的方法中。我该如何纠正它?
查看完整描述

2 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

这是一个很好的问题,它展示了“静态”关键字的魔力。


您的程序可以通过三种方式执行:


第一种方式:当类 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;

    }


}


查看完整回答
反对 回复 2022-07-06
?
DIEA

TA贡献1820条经验 获得超2个赞

您的代码如下所示:


class TestStack1 {

    public static void main(String[] args) { ... }

    class FixCapacityStackOfString { ... }

}

而你FixCapacityStackOfString在main. 但FixCapacityStackOfString它不是一个静态类:它需要一个TestStack1. 您在静态 main 方法中没有此实例。所以只需声明FixCapacityStackOfString为静态:


static class FixCapacityStackOfString { ... }


查看完整回答
反对 回复 2022-07-06
  • 2 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信