2012-10-27 99 views
-5

可能重複:
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,字符串,字符串)不能從靜態環境中引用

請幫我一下

+3

閱讀:[「瞭解實例和類成員」](http://docs.oracle.com/ javase/tutorial/java/javaOO/classvars.html) – Sujay

+1

因爲目前還沒有數百個關於這個的SO問題...... –

回答

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`. 
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); 
       } 

     } 
0

你不需要實例化你的工資類。如果的確如此,您希望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; 
} 
相關問題