-5

可能重复:
“不能从静态上下文引用非静态方法”背后的原因是什么?

import java.io.*;

public class Pay
{
     boolean checkCard(int cardNumber)
    {
        boolean flag=false;
        if(cardNumber==12)  
        return flag;
    }

    public static void main(String args[])throws SQLException
        {
            boolean f=checkCard(12);
            System.out.println("\n Card Details "+f);
        }

}

我收到错误消息,说不能从静态上下文中引用非静态方法 checkCard(int,String,String)

请帮帮我

4

3 回答 3

2
boolean checkCard(int cardNumber)
        {
            boolean flag=false;
            if(cardNumber==12)  
            return flag;
        }

不是静态方法。它是实例方法。

但是您正在尝试从静态方法访问它

public static void main(String args[])throws SQLException
            {
                boolean f=checkCard(12);
                 .....
}

要访问实例方法,您需要在该实例上实例化类和类此方法。

例子:

new Pay().checkCard(12);

(或者)

change the checkCard method signature to `static`.
于 2012-10-27T03:35:31.170 回答
0

非静态方法或变量不能在静态方法内部直接(没有引用)使用。

静态方法或变量可以直接在静态方法内部使用。

public class Pay
    {
         static boolean checkCard(int cardNumber)
        {
            boolean flag=false;
            if(cardNumber==12)  
            return flag;
            else
               return boolean;---------missing
        }

        public static void main(String args[])throws SQLException
            {
                boolean f=checkCard(12);
                System.out.println("\n Card Details "+f);
            }

    }

您也可以创建实例来调用它

 public class Pay
        {
             boolean checkCard(int cardNumber)
            {
                boolean flag=false;
                if(cardNumber==12)  
                return flag;
                else
                   return boolean;---------missing
            }

            public static void main(String args[])throws SQLException
               {
                    Pay p= new Pay();
                    boolean f=p.checkCard(12);
                    System.out.println("\n Card Details "+f);
                }

        }
于 2012-10-27T03:37:17.703 回答
0

您不需要实例化您的 Pay 类。如果确实希望 checkCard 函数是静态的,则必须指明该函数是静态的:

static boolean checkCard(int cardNumber)
{
    boolean flag=false;
    if(cardNumber==12)
        flag = true;    // is this the behavior you want?
                        //  your original function had no
                        //  change to `flag` based on the condition.
    return flag;
}
于 2012-10-27T03:44:12.797 回答