关于#main#的问题,如何解决?(语言-java)

今天学的方法,做作业的时候遇到了一个问题。
为什么我把数组创建到main函数外面,就会报错呢?

public class TestBooks {


    public static void main(String[] args) {
        Books[] books = new Books[3];
        for (int i = 0; i < books.length; i++) {
            books[i] = new Books();
            books[i].setId(i + 1);
        }
        books[0].setName("java");
        books[0].setPrice(110.5);
        books[0].setNumber(0);
        books[1].setName("abcd");
        books[1].setPrice(10.5);
        books[1].setNumber(0);
        books[2].setName("JDBC");
        books[2].setPrice(12.5);
        books[2].setNumber(0);
        for (int i = 0; i < books.length; i++) {
            System.out.println(books[i].getId() + "\t" + books[i].getName() +
                    "\t" + books[i].getPrice() + "\t" + books[i].getNumber());
        }
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入图书的编号:");
        int choice = sc.nextInt();


    }

public class TestBooks {
    Books[] books = new Books[3];

    public static void main(String[] args) {
        
        for (int i = 0; i < books.length; i++) {
            books[i] = new Books();
            books[i].setId(i + 1);
        }
        books[0].setName("java");
        books[0].setPrice(110.5);
        books[0].setNumber(0);
        books[1].setName("abcd");
        books[1].setPrice(10.5);
        books[1].setNumber(0);
        books[2].setName("JDBC");
        books[2].setPrice(12.5);
        books[2].setNumber(0);
        for (int i = 0; i < books.length; i++) {
            System.out.println(books[i].getId() + "\t" + books[i].getName() +
                    "\t" + books[i].getPrice() + "\t" + books[i].getNumber());
        }
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入图书的编号:");
        int choice = sc.nextInt();


    }

  • main方法是静态方法, 它能引用的外部变量【比如你这个类的成员 】 ,都要是 静态 static 修饰

img

你的main方法是个静态方法,如果想要引用books这个变量你需要把他也声明为静态的,也就是

static Books[] books = new Books[3];

mian方法是静态方法,声明在mian方法外变量有两种,一种是静态变量,这种可以直接使用,另外一种是成员变量,这种变量需要new对象,通过对象进行使用