日期:2014-05-20  浏览次数:20808 次

两个类一个是public的,一个是默认的,为什么一个编译,一个不编译
public class XueShen {
public static void main(String[] args) {
xueShen ff=new xueShen(30,89,96,92,"张三");
ff.getInfo();
}

}

class xueShen{
private int age;
private int suxue;
private int en;
private int jisuanji;
private String name;
xueShen(int a,int b,int c,int d,String name){
this.setAge(a);
this.setSuXue(b);
this.setEn(c);
this.setJiSuanJi(d);
this.setName(name);
}
  public void setAge(int a){
  age=a;
  }
  public void setSuXue(int b){
suxue=b;
}
public void setEn(int c){
en=c;
}
public void setJiSuanJi(int d){
jisuanji=d;
}
public void setName(String name){
this.name=name;
}
public int getAge(){
return age;
}
public int getSuXue(){
return suxue;
}
public int getJiSuanJi(){
return jisuanji;
}
public int getEn(){
return en;
}
public String getName(){
return name;
}
public String getInfo(){
return "学生信息: \n" +
"\t|- 姓名:" + this.getName() + "\n" +
"\t|- 年龄:" + this.getAge() + "\n" +
"\t|- 数学成绩:" + this.getSuXue() + "\n" +
"\t|- 英语成绩:" + this.getEn() + "\n" +
"\t|- 计算机成绩:" + this.getJiSuanJi() ;
}
  }


编译:F:\JavaDemo>javac XueShen.java 这里在F:盘只生成了一个XueShen.class文件!一个是public的,一个是默认的, 为什么一个编译,一个不编译

F:\JavaDemo>java XueShen
Exception in thread "main" java.lang.NoClassDefFoundError: XueShe
xueShen)
  at java.lang.ClassLoader.defineClass1(Native Method)
  at java.lang.ClassLoader.defineClassCond(ClassLoader.java
  at java.lang.ClassLoader.defineClass(ClassLoader.java:616
  at java.security.SecureClassLoader.defineClass(SecureClas
1)
  at java.net.URLClassLoader.defineClass(URLClassLoader.jav
  at java.net.URLClassLoader.access$000(URLClassLoader.java
  at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
  at java.security.AccessController.doPrivileged(Native Met
  at java.net.URLClassLoader.findClass(URLClassLoader.java:
  at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.ja
  at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: XueShen. Program will exit.




------解决方案--------------------
不是public的问题,是类名相同了,你在同一个包下面建Test类在建一个test类你就知道行不行了
------解决方案--------------------
windows 系统下,文件名大小写认为是一样的。
不允许在一个目录下出现:XueShen.class 和xueShen.class.
(简单试一下:你在随便一个目录下,建文件AA.txt,之后再建一个文件aa.txt, 看会让你建吗?(系统认为aa.txt和AA.txt是一个文件。)
反编译一下,发现 XueShen.class 对应的是 class xueShen 的内容。
我猜测过程是这样:编译器先建立了一个XueShen.class 的文件,发现这里还有类引用,这个类名是xueShen,于是要建一个xueShen.class 的文件,但发现文件已经存在(就是XueShen.class),就不再建xueShen.class 文件了。把类xueShen的代码编译后放在了XueShen 里了。
等编译完xueShen类后,就不再编译XueShen 类了。

以上个人理解,有错欢迎指正。