无法引用非静态方法

时间:2012-10-27 03:33:53

标签: java static

  

可能重复:
  What is the reason behind “non-static method cannot be referenced from a static context”?

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)不能从静态上下文引用

请帮帮我

3 个答案:

答案 0 :(得分: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`.

答案 1 :(得分: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);
                }

        }

答案 2 :(得分: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;
}
相关问题