繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM