2014-01-14 196 views
1

我知道靜態和非靜態的概念,因爲我在這裏找到了解釋。但我不確定我是否理解它。我的代碼生成以下錯誤:無法從靜態上下文中引用非靜態方法getWerknemers()。非靜態...靜態是什麼?

如果我使方法getWerknemers()爲靜態,則所有變量都會得到類似的錯誤。我究竟做錯了什麼?

package huiswerk; 

import java.sql.*; 
import java.util.*; 

public class Opdracht_1 { 

    private Statement st; 
    private ResultSet rs; 
    String naam; 
    String functie; 
    String woonplaats; 

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

    public void getWerknemers() { 
     DatabaseConnectie con = new DatabaseConnectie(); 
     try { 

      String query = "SELECT * FROM werknemer"; 
      rs = st.executeQuery(query); 
      System.out.println("Gegevens uit de database: "); 
      while(rs.next()) { 
       naam = rs.getString("naam"); 
       functie = rs.getString("functie"); 
       woonplaats = rs.getString("woonplaats"); 
       System.out.println("Naam: " + naam + "\nFunctie: " + functie + "\nWoonplaats: " + woonplaats + "\n"); 
      } 

     }catch(Exception ex) { 
      System.out.println(ex); 
     } 
    } 
} 

回答

4

main方法是static,所以它不能直接調用getWerknemers,因爲它不是staticmain沒有你Opdracht_1對象的實例。如果您使getWerknemers爲靜態,那麼它無法訪問您的非靜態類變量。

最簡單的解決方案是創建一個對象來調用它的非靜態方法。

public static void main(String[] args) { 
    Opdracht_1 op = new Opdracht_1(); 
    op.getWerknemers(); 
} 
1
public static void main(String[] args) { 
    getWerknemers(); 
} 

在這裏,我們調用非靜態方法getWerknemers()從靜態Main方法。將其改爲

​​

它應該可以正常工作。

0

問題是你正試圖從靜態方法調用一個類方法。首先需要創建一個Opdracht_1類型的對象,然後從該對象中調用該方法。從靜態方法

public static void main(String[] args) { 
    Opdracht_1 o = new Opdracht_1(); 
    o.getWerknemers(); 
} 
0

事實上,如果你要調用一個方法(可以說bar())(如main()),它必須是靜態的::請嘗試以下爲您的主要方法

public class Example { 
    public static void foo() { 
     System.out.println("I'm foo!"); 
    } 
    public void bar() { 
     System.out.println("I'm bar"); 
    } 
    public static void main(String[] args) { 
     foo(); // Will run with no problem 
     bar(); // Won't run, because it is not a static method 
    } 
} 

如果要撥打bar(),則必須創建對象並調用對象的非靜態方法:

public class Example { 
    public static void foo() { 
     System.out.println("I'm foo!"); 
    } 
    public void bar() { 
     System.out.println("I'm bar"); 
    } 
    public static void main(String[] args) { 
     foo(); // Will run with no problem 
     Example e = new Example(); 
     e.bar(); // Should run now 
    } 
} 
相關問題