Java中的静态主类

Java中的静态主类,java,Java,我正在学习Java,目前正在阅读一本书,这是这本书提供的代码: package Person; public class Person { private String lastName; private String firstName; private int age; public Person(String last, String first, int a) { //constructor lastName = last;

我正在学习Java,目前正在阅读一本书,这是这本书提供的代码:

package Person;

public class Person {
    private String lastName;
    private String firstName;
    private int age;

    public Person(String last, String first, int a) {       //constructor
        lastName = last;
        firstName = first;
        age = a;
    }

    public void displayPerson() {
        System.out.print("    Last name: " + lastName);
        System.out.print(", First name: " + firstName);
        System.out.println(", Age: " + age);
    }

    public String getLast(){
        return lastName;
    }
}

class ClassDataArray {
    private Person[] a;
    private int nElems;

    public ClassDataArray(int max){
        a = new Person[max];
        nElems = 0;
    }
    public Person find(String searchName){
        int j;
        for(j = 0; j<nElems; j++){
            if(a[j].getLast().equals(searchName)){
                break;
            }
        }
        if(j == nElems){
            return null;
        }else{
            return a[j];
        }
    }

    public void insert(String last, String first, int age){
        a[nElems] = new Person(last, first, age);
        nElems++;
    }

    public boolean delete(String searchName){
        int j;
        for(j = 0; j<nElems; j++){
            if(a[j].getLast().equals(searchName)){
                break;
            }
        }
        if(j == nElems){
            return false;
        }else{
            for(int k = j; k<nElems; k++){
                a[k] = a[k + 1];
            }
            nElems--;
            return true;
        }
    }

    public void displayA(){
        for(int j = 0; j<nElems; j++){
            a[j].displayPerson();
        }
    }
//////////////////////////////////////////////////////  
    class ClassDataApp{
        public static void main(String[] args){
            int maxSize = 100;
            ClassDataArray arr;
            arr = new ClassDataArray(maxSize);

            arr.insert("Evans","Parry", 24);
            arr.insert("Smith","Lorraine",37);
            arr.insert("Yee","Tom", 43);
            arr.insert("Adams","Henry", 63);
            arr.insert("Hashimoto","Sato",21);
            arr.insert("Stimson","Henry",29);
            arr.insert("Velasquez","Jose",72);
            arr.insert("Lamarque","Henry",54);
            arr.insert("Vang","Minh",22);
            arr.insert("Creswell","Lucinda",18);

            arr.displayA();

            String searchKey = "Stimson";
            Person found;

            found = arr.find(searchKey);
            if(found != null){
                System.out.print("Found ");
                found.displayPerson();
            }else{
                System.out.println("Can't find " + searchKey);
            }
            System.out.println("Deleting Smith, Yee, and Creswell");
            arr.delete("Smith");
            arr.delete("Yee");
            arr.delete("Creswell");

            arr.displayA();
        }
    }   
}

我认为创建一个单独的文件可以解决这个问题,但我正在阅读一本书,所以我可能会错过一个概念?这本书没有告诉我创建另一个
.java
文件。文件中只有两个类,其中一个包含
静态main
。有人能提供一些见解吗?谢谢

您应该将类放入不同的文件中。您将ClassDataApp嵌套在ClassDataArray中

除非是打字错误,否则在
类ClassDataApp{
之前,您缺少一个结束语
}
它有一个很好的例子。如果嵌套,ClassDataApp可能是静态的。

公共静态main(String[]args)仅当它放置在公共类中时才会被视为程序的入口点。一个.java文件只能有一个公共类

如果要将所有类保留在同一个java文件中,请仅将ClassDataApp类公开


否则,请将它们放在不同java文件中的同一个包中,并确保ClassDataApp是公共的,而其他类至少不是私有的。

您错误地嵌套了该类。谢谢!@SLaks我没有看到!在
类ClassDataApp
之前,您需要额外的
}
。一个好的IDE应该会向您展示这一点。奇怪的是,Eclipse没有向我显示任何关于OP中
}
的错误。您还需要删除最后一个“}”。Eclipse会检测到不平衡的大括号。真的很奇怪。我数了数大括号-代码缩进正确,因此缺少了一个大括号。我将每个类分开,eclipse显示的所有可见错误都消失了,但是当我运行编译代码时,出现了此错误
错误:无法找到或加载主类Person.ClassDataArray$ClassDataApp
感谢您的输入。我试图将每个类放在一个文件中,并尝试将
ClassDataApp
公开,但我得到的错误是
公共类型ClassDataApp必须在其自己的文件中定义
我可以简单地将该类放在另一个文件中,我想这将是一个简单的修复方法。您是否认为由于此文件位于其自己的包中,因此会发生此错误?您可以将所有类放在一个文件中,但其中只有一个可能是公共的。在这种情况下,ClassDataApp应该是公共类,另外两个应该是非公共类。
The method main cannot be declared static; static methods can only be declared in a static or top level type