黑马程序员技术交流社区

标题: 内部类的问题 [打印本页]

作者: 逍遥呆    时间: 2014-9-21 12:50
标题: 内部类的问题
我用的是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
这是什么问题?
作者: 夜半风    时间: 2014-9-21 13:24
我复制代码试了下 打印结果是
4
4

没问题 看不懂你要表达什么

作者: THE_FUTURE    时间: 2014-9-21 14:09
首先你要弄懂Outer。class是什么东西。
作者: 逍遥呆    时间: 2014-9-21 20:20
夜半风 发表于 2014-9-21 13:24
我复制代码试了下 打印结果是
4
4

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

不是字节码文件吗!
作者: 夜半风    时间: 2014-9-21 23:00
逍遥呆 发表于 2014-9-21 20:20
最开始我这个程序敲完之后就在Outer那显示The type Outer is already defined
我怀疑是别的程序有outer.c ...

我明白了  是不是以前编过同名的类
作者: 逍遥呆    时间: 2014-9-21 23:10
夜半风 发表于 2014-9-21 23:00
我明白了  是不是以前编过同名的类

一般编译过那个类的话,再编译不是会覆盖的吗?为什么不行?
作者: 逍遥呆    时间: 2014-9-22 00:08
kakasa 发表于 2014-9-21 23:47
楼主用eclipse么

是myEclipse
作者: 夜半风    时间: 2014-9-22 00:22
逍遥呆 发表于 2014-9-21 23:10
一般编译过那个类的话,再编译不是会覆盖的吗?为什么不行?

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

再编译不会覆盖吗?
作者: 霜林醉zhx    时间: 2014-9-22 10:41
逍遥呆 发表于 2014-9-22 08:24
再编译不会覆盖吗?

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

谢谢,问下,如果我在包中把class文件删掉,就没这个同名文件了,为什么还是不行
作者: 高泳    时间: 2014-9-22 13:37
删掉class文件,编译的时候还是会出来的- - 你又没有注释或者删掉同名类
作者: Beka    时间: 2014-9-23 01:14
楼主想表达什么?什么问题?
作者: 戏言丶    时间: 2014-9-23 01:24
我是来学习的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2