A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李培根 于 2012-11-24 08:14 编辑

感谢各位的帮助,问题找到了,原来是已存在Person类,去掉public后删除了另外一个Person类 就ok了
再次感谢大家

第七天的视频
面向对象 构造函数
dos命令行 eclipse 都试了
看视频也有一段时间了,也都能看懂就是很容易就忘,而且视频中练习题也有些少。

public class ConsDemo {
          public static void main(String[] args) {
               Person p = new Person();//eclipse此处提示  the local variable p is never read
          }
}
public class Person{//eclipse此处Person下画着红黑色波浪线
          private String name;
          private int age;
          //定义一个Person类的构造函数。
          Person(){//空参构造函数
               System.out.println("Person run");
          }
          public void speak(){
                System.out.println(name+":"+age);
          }
}

直接编译不通过,提示:
D:\>javac consDemo.java
consDemo.java:1: 错误: 类ConsDemo是公共的, 应在名为 ConsDemo.java 的文件中声明
public class ConsDemo {
       ^
consDemo.java:7: 错误: 类Person是公共的, 应在名为 Person.java 的文件中声明
public class Person{
       ^
2 个错误

明明加着public (不是默认的权限就是public吗),去掉public后编译通过,运行报错
D:\>java consDemo
Exception in thread "main" java.lang.NoClassDefFoundError: consDemo (wrong name:
ConsDemo)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
2)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:472)

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

10 个回复

倒序浏览
这个问题是这个样的:

你要是在同一个文件中的两个类是不能加 public 修饰的,

当这个两个类处于不同的文件中的时候我们才使用 public 来修饰类的。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你在同一个文件中只能有一个public  class ,你写了public class ConsDemo和public class Person两个是不行的

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
亲,一个java文件里面只能有一个类被public修饰哦。

而且,你的java文件名要跟被public修饰的类名一样,建议你开始的时候不要加太多的修饰符···

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
关于使用public class和class声明类的区别
在java中声明一个类的方式有两种,即 public class 类名和class类名。
(1)使用“public  class类名称”声明一个类时,类名必须与文件名称一致,否则就无法编译。
(2)使用“class类名称”声明一个类时,类名可以与文件名称不一致,但在执行时一定要执行生成后的*.class。
(3)在一个java文件中可以有多个class定义的类,但是只能有一个public  class 定义

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你好,你的问题我看过了
1.错误的原因在于你在一个文件中定义了两个权限为Public的类。
2.java中规定,如果将类定义为public的,那么文件名就必须要和类名一致,
如果你在文件中同时定义两个权限为public的类,那么文件名就不知该定义成什么了,所以会报错。
3.java中的默认权限不是public,而是介于public和private之间的另外一种权限。
4.你的代码只要把Person类前面的public去掉就可以了。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这里大神很多啊 我也要经常来问问提{:soso_e128:}
回复 使用道具 举报
你这样肯定是不行的,公共类必须在它自己的文件中定义,一个类中只能出现一个public,所有要把Person类前面
的public去掉
回复 使用道具 举报
类前面加public修饰后,类名须与java文件名相同,一个java源文件里面不可以出现两个或者两个以上的public类或public接口
回复 使用道具 举报
filter 中级黑马 2012-11-23 22:14:38
10#
学习了,另外楼主最后一次运行时类名大小写错误啦{:soso_e100:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马