静态方法错误

时间:2013-09-15 01:36:57

标签: java static

public class Queue {

    public class ArrayQueue
    {
        Object store[];
        int front,rear;
        static final int MAX = 100;

        public ArrayQueue()
        {
            store = new Object[MAX];
            front = rear = 0;
        }

        public void EnQueue(Object o)        
        {
            if((rear +1)%MAX!=front)
            {
                store [rear] = o;
                rear = (rear + 1) % MAX;
            }

        }

        public Object dequeue() throws Exception
        {
            if( empty())
            {
                throw new Exception();
            }
            else
            {
                Object data = store[front];
                store [front] = null;
                front = (front+1)%MAX;
                return data;
            }
        }
    }

    public static void main (String args)
    {
        main();
    }

        public static void main()
        {
        String choice;
        Scanner input = new Scanner(System.in);
        System.out.println("A.EnQueue");
        System.out.println("B.DeQueue");
        System.out.println("C.Print");
        System.out.println("D.MakeNull");
        System.out.println("E.Empty");
        System.out.println("F.Full");
        System.out.println("G.Exit");

        choice = input.nextLine();
        switch(choice){
            case "A":
                System.out.println("Enter a character");
                char x;
                x= input.next().charAt(0);
                // ArrayQueue.EnQueue(x);
                System.out.println(x+"was added to the queue");

        }
    }
    }
}

我遇到静电问题,实际上是静态方法,在第76行发生错误,即#34; ArrayQueue.EnQueue(x);"如果使EnQueue函数静态,那么还有一个错误,为什么呢?我该如何解决这个错误。错误是非静态方法Enqueue(Object)无法从静态上下文引用

2 个答案:

答案 0 :(得分:6)

信息非常明确; public void EnQueue不是静态方法,因此您无法将其称为一个。

您不能简单地将其转换为静态方法,因为您试图在类中引用非静态变量。

答案 1 :(得分:2)

静态和非静态方法的主要区别在于静态方法属于整个类,非静态方法属于该类的特定实例。通常,非静态方法是以某种方式改变对象状态的方法。在您的情况下,enQueue()deQueue()方法都是更改ArrayQueue对象实例状态的方法,因此这两种方法都应该是非静态方法。

现在,为了调用非静态方法来修改(更改对象的状态),您需要首先实例化ArrayQueue对象的实例,然后在该特定对象上调用enQueue方法。

例如:

ArrayQueue myQueue = new ArrayQueue();  //instantiate the object first

myQueue.enQueue(variable); //then access the non-static methods to act on that object