当前位置: 首页 > 知识库问答 >
问题:

非静态方法不能从具有方法和变量[duplicate]的静态上下文中引用

公良鸿禧
2023-03-14

在编写BookStoreApplication时,使用Book、Tape和CD类创建对象。虽然未完成,但application类应该创建新的BookStoreItems,它们是Book、Tape和CD。它们从BookStoreItems类继承。在这个应用程序类中,我不断得到错误:

error: non-static method printMenu() cannot be referenced from a static context
error: non-static method getUserChoice() cannot be referenced from a static context
error: non-static variable input cannot be referenced from a static context

我把它改成静态,然后又改成不是静态,但我继续得到这个错误...

import java.util.Scanner;

public class BookStoreApp2 {

    //constants for options
    static final int ADD_BOOK = 0;
    static final int ADD_TAPE = 1;
    static final int ADD_CD = 2;
    static final int QUIT = -1;

    Scanner input = new Scanner (System.in);

    public static void main(String[] args) {


        BookStoreItem[] item;//declaring array

        item = new BookStoreItem[10];//initializing array

        int itemType = -1;

        printMenu();
        getUserChoice();

        for (int i = 0; i < item.length; i++){
            System.out.print("\n" + i + "\tEnter 0 for Book, 1 for Tape, 2 for CD: ");
            itemType = input.nextInt();

            switch (itemType) {
                case 0:
                    item[i] = new Book();
                    break;
                case 1:
                    item[i] = new Tape();
                    break;
                case 2:
                    item[i] = new CD();
                    break;
                default: 
                    System.out.println("\nInvalid choice.");
            }//end of switch statement

        }//end of for loop

        for (int i = 0; i < item.length; i++) {
            System.out.println("\nAnimal #" + i + ": ");

            System.out.println("\n\tTitle: " + item[i].getTitle()); //polymorphic because they can operate on separate objects
            System.out.println("\n\tAuthor: " + item[i].getAuthor());
        }//end of for


    }//end of main method


//PRINT MENU----------------------------------------------------------  
    public void printMenu(){
        System.out.println("\nPress:");
        System.out.println("\t" + ADD_BOOK + "\tTo add a book to the book store.\n");
        System.out.println("\t" + ADD_TAPE + "\tTo add a tape to the book store.\n");
        System.out.println("\t" + ADD_CD + "\tTo add a CD to the book store.\n");
        System.out.println("\t" + QUIT + "\tTo exit\n");
    }
//---------------------------------------------------------------------
//GET USER CHOICE------------------------------------------------------ 
     public int getUserChoice() {
        int choice;     
        System.out.print("Please enter your choice: ");
        choice = input.nextInt();

        return choice;
    }//end of getUserChoice
//----------------------------------------------------------------------

}//end class

共有2个答案

何涵育
2023-03-14

仅仅为了使您的程序正常工作,可以将main()方法的内容放入构造函数中:

public BookStoreApp2()
{
   // Put contents of main method here
}

然后,在您的main()方法中。执行以下操作:

public void main( String[] args )
{
  new BookStoreApp2();
}
於宏大
2023-03-14

您需要使您的方法-printmenu()getUserChoice()static,因为您直接从静态main方法调用它们,而不创建类的实例,这些方法是在中定义的。并且如果没有对定义非静态方法的类的实例的任何引用,则无法调用该方法

或者,您可以将方法调用部分更改为:

BookStoreApp2 bookStoreApp = new BookStoreApp2();
bookStoreApp.printMenu();
bookStoreApp.getUserChoice();
 类似资料:
  • 这是一个代码的一部分,但当我执行时,我得到了一个错误程序是关于线性规划对不起我的英语,或关于愚蠢的问题 “错误:不能从静态上下文引用非静态方法get_total_profity(String)

  • 问题内容: 我想一劳永逸地理解这一点。 为此,请原谅下面粘贴的大量代码,但是我不想遗漏任何细节。 我唯一更改的是加载的URL。但这不会导致错误。 我想将我的函数称为“ readPosiitons ”。简单的解决方案,使其静态。真正的解决方案,我不确定。 请帮助我更好地了解如何以正确的方式解决此错误。 谢谢!! 问题答案: 真正的解决方案?不要在方法中放太多东西。那是给菜鸟的。 Java是一种面向对

  • 我的应用程序中有两个类: runner类包含我的方法,我尝试在该方法中从Tasks类调用一个方法: 在我的Runner中,当我试图调用Tasks类中的createTaskList()方法时,我得到以下错误: 我该怎么解决这个?

  • 所以我尝试绑定我的Numpad键,以便在计算器应用程序中使用它们,但当我尝试从主窗口以字符串形式发送keyEvent时。java到我的MainWindowController公共void方法它给了我一个错误“不能从静态上下文引用非静态方法”,即使我的类都不是静态的?以下是主窗口代码: } 这里是MainWindowController文件(看keyPress方法)

  • 我想更改FrameLayout的背景。这是我现在使用的代码: 但出现以下错误: 无法从静态上下文引用非静态方法“setBackground(android.graphics.drawable.drawable)”。 怎么了?

  • 我从这行中得到了“无法从静态上下文引用非静态方法”错误: