非静态......静态是什么?

时间:2014-01-14 16:58:33

标签: mysql java

我知道静态和非静态的概念,因为我在这里找到了解释。但我不确定我是否理解它。我的代码生成以下错误:非静态方法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 个答案:

答案 0 :(得分:4)

main方法为static,因此无法直接调用getWerknemers,因为它不是staticmain没有实例您的Opdracht_1对象。如果使getWerknemers为静态,则它无法访问非静态类变量。

最简单的解决方案是创建一个对象来调用其非静态方法。

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

答案 1 :(得分:1)

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

这里你从静态Main方法调用非静态方法getWerknemers()。将其更改为

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

它应该可以正常工作。

答案 2 :(得分:0)

问题在于您尝试从静态方法调用类方法。首先需要创建一个Opdracht_1类型的对象,然后从该对象调用该方法。请尝试以下主要方法:

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

答案 3 :(得分: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
    }
}