我知道静态和非静态的概念,因为我在这里找到了解释。但我不确定我是否理解它。我的代码生成以下错误:非静态方法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);
}
}
}
答案 0 :(得分:4)
main
方法为static
,因此无法直接调用getWerknemers
,因为它不是static
而main
没有实例您的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
}
}