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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 逍遥呆 中级黑马   /  2014-9-21 12:50  /  1614 人查看  /  19 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我用的是myEclipse

  1. public class demo {
  2.        
  3.         public static void main(String[] args)throws Exception
  4.         {       
  5.                 Outer out = new Outer();  
  6.         out.method(7);//打印7  
  7.         out.method(8);//打印8
  8.         }       
  9. }
  10. class Outer  
  11. {  
  12.     int x = 3;  
  13.     void method(final int a)  
  14.     {  
  15.         final int y = 4;  
  16.         //局部内部类  
  17.                 class Inner  
  18.         {  
  19.             void function()  
  20.             {  
  21.                 System.out.println(y);  
  22.             }  
  23.         }  
  24.         new Inner().function();//使用局部内部类中的方法。  
  25.     }  
  26. }  
复制代码


然后显示就是The type Outer is already defined
之后我把Outer.class文件删了。
之后就出现了:
Exception in thread "main" java.lang.NoClassDefFoundError: Outer
        at Javademo.main(Javademo.java:9)
Caused by: java.lang.ClassNotFoundException: Outer
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        ... 1 more
这是什么问题?

19 个回复

倒序浏览
我复制代码试了下 打印结果是
4
4

没问题 看不懂你要表达什么
回复 使用道具 举报
首先你要弄懂Outer。class是什么东西。
回复 使用道具 举报
夜半风 发表于 2014-9-21 13:24
我复制代码试了下 打印结果是
4
4

最开始我这个程序敲完之后就在Outer那显示The type Outer is already defined
我怀疑是别的程序有outer.class这个类,所以我就到文件夹里吧这文件删了。
之后问题没解决,还出现了后面的那个错误显示。
回复 使用道具 举报
THE_FUTURE 发表于 2014-9-21 14:09
首先你要弄懂Outer。class是什么东西。

不是字节码文件吗!
回复 使用道具 举报
逍遥呆 发表于 2014-9-21 20:20
最开始我这个程序敲完之后就在Outer那显示The type Outer is already defined
我怀疑是别的程序有outer.c ...

我明白了  是不是以前编过同名的类
回复 使用道具 举报
夜半风 发表于 2014-9-21 23:00
我明白了  是不是以前编过同名的类

一般编译过那个类的话,再编译不是会覆盖的吗?为什么不行?
回复 使用道具 举报
kakasa 中级黑马 2014-9-21 23:47:20
8#
楼主用eclipse么
回复 使用道具 举报

是myEclipse
回复 使用道具 举报
逍遥呆 发表于 2014-9-21 23:10
一般编译过那个类的话,再编译不是会覆盖的吗?为什么不行?

曾经遇到过类似的问题 具体因为什么原因不清楚
回复 使用道具 举报
这问题我出现过很多次了,因为你在同一个包下已在某一个java中声明过一个Outer类,所以你在这个java文件中再声明Outer类就会出现这个问题,把Outer改个名字就行了
回复 使用道具 举报
霜林醉zhx 发表于 2014-9-22 01:45
这问题我出现过很多次了,因为你在同一个包下已在某一个java中声明过一个Outer类,所以你在这个java文件中 ...

再编译不会覆盖吗?
回复 使用道具 举报
逍遥呆 发表于 2014-9-22 08:24
再编译不会覆盖吗?

不会,反正eclipse(MyEclipse也一样)都不允许这种操作
回复 使用道具 举报
是你定义的类名在同一个包钟和别的类名重复了,同一个包中,类名不能重复的,从新创建一个包,把这个代码复制进去试试
回复 使用道具 举报
Justfeeling 发表于 2014-9-22 11:31
是你定义的类名在同一个包钟和别的类名重复了,同一个包中,类名不能重复的,从新创建一个包,把这个代码复 ...

谢谢,问下,如果我在包中把class文件删掉,就没这个同名文件了,为什么还是不行
回复 使用道具 举报
删掉class文件,编译的时候还是会出来的- - 你又没有注释或者删掉同名类
回复 使用道具 举报
上面貌似已经说清楚了,清空一下工程就好了,之前有编译同名的类文件。
回复 使用道具 举报
Project - clean
回复 使用道具 举报
Beka 中级黑马 2014-9-23 01:14:09
19#
楼主想表达什么?什么问题?
回复 使用道具 举报
我是来学习的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马