Java中的静态主类
我正在学习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;
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