Java 静态引用

Java 静态引用,java,Java,有人知道为什么在出现“类型”菜单时,错误无法对非静态方法FileMenu进行静态引用吗 import javax.swing.JOptionPane; public class Menu { public void FileMenu() { } public void ViewMenu() { } public static void main(String[] args) { String[] mainbu

有人知道为什么在出现“类型”菜单时,错误无法对非静态方法FileMenu进行静态引用吗

import javax.swing.JOptionPane;

public class Menu {

    public void FileMenu() {            
    }

    public void ViewMenu() {
    }

    public static void main(String[] args) {
        String[] mainbuttons = { "File", "View" };

        int choice = JOptionPane.showOptionDialog(null, "Please Select An Option: ","Application Menu",JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null,mainbuttons, mainbuttons[2]);

        switch (choice) {
            case 0:
                FileMenu();
                break;
            case 1:
                ViewMenu();
                break;
        }
    }       
}
代码中的FileMenu不是一个静态方法,而down-in-switch语句是在静态上下文中调用它的。没有对象。这里有两个选项

使FileMenu方法像publicstaticvoidfilemenu一样是静态的,然后您可以调用它,而不需要菜单类的任何对象

创建Menu类的对象并使用它调用FileMenu方法。像

菜单obj=新菜单

obj.FileMenu


这意味着您不能在静态方法中调用非静态方法,例如static void mainString[]args

要正常工作,请将方法FileMenu和ViewMenu设置为静态

public static void FileMenu() {

}

public static void ViewMenu() {


}

创建菜单对象并调用FileMenu和ViewMenu方法

Menu m = new Menu();

switch (choice) {
    case 0:
        m.FileMenu();
        break;

    case 1:
        m.ViewMenu();
        break;

    }

发生这种情况的原因是您正在从静态公共静态void mainString[]参数访问非静态文件菜单{.如果将FileMenu和ViewMenu更改为static public static void…,则会起作用。您需要使FileMenu和ViewMenu成为静态函数,因为它们与Main属于同一类。静态函数只能调用其他静态函数。