[英]Non-static … static what?
当我在这里找到解释时,我知道静态和非静态的概念。 但是我不确定我是否理解。 我的代码生成以下错误:无法从静态上下文引用非静态方法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);
}
}
}
main
方法是static
,所以它不能直接调用getWerknemers
,因为它不是static
并且main
没有Opdracht_1
对象的实例。 如果将getWerknemers
静态,则它无权访问您的非静态类变量。
最简单的解决方案是创建一个对象以调用其非静态方法。
public static void main(String[] args) {
Opdracht_1 op = new Opdracht_1();
op.getWerknemers();
}
public static void main(String[] args) {
getWerknemers();
}
在这里,您从静态Main方法调用非静态方法getWerknemers()。 更改为
public static void main(String[] args) {
new Opdracht_1().getWerknemers();
}
它应该可以正常工作。
问题是您试图从静态方法中调用类方法。 您首先需要创建一个类型为Opdracht_1的对象,然后从该对象中调用该方法。 尝试以下方法作为您的主要方法:
public static void main(String[] args) {
Opdracht_1 o = new Opdracht_1();
o.getWerknemers();
}
确实,如果您想从静态方法(例如main()
)中调用方法(比如说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
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.