当前位置:  技术问答>java相关

[ 求助 ] 两个小问题,请大虾指教~

    来源: 互联网  发布时间:2015-11-08

    本文导语:  问题一: 《Thinking in java》中说“若试图定义一个匿名内不类,并想使用在匿名内部类外部定义的一个对象,则编译器要求外部对象为final属性” 我弄不明白为什么外不对象必须为final属性? +++++++++++++++++++++++++++++++...

问题一:
《Thinking in java》中说“若试图定义一个匿名内不类,并想使用在匿名内部类外部定义的一个对象,则编译器要求外部对象为final属性”
我弄不明白为什么外不对象必须为final属性?

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

问题二:
class Egg {
  protected class Yolk {
    public Yolk() {
      System.out.println("Egg.Yolk()");
    }
  }
  private Yolk y;
  public Egg() {
    System.out.println("New Egg()");
    y = new Yolk();
  }
}

public class BigEgg extends Egg {
  public class Yolk {
    public Yolk() {
      System.out.println("BigEgg.Yolk()");
    }
   // !private Yolk yy;
   // !public BigEgg() {
   // !System.out.println("New BigEgg()");
   // !yy = new Yolk();
   // !}    
  }
  public static void main(String[] args) {
    new BigEgg();
  }
} ///:~

以上被注释的五行为BigEgg类的构造器,但为什么不能出现在这里,提示错误如下:

E:MyDocumentMyJavatestBigEgg.java:20: 无效的方法声明;需要有返回类型
    public BigEgg() {
           ^
1 个错误

Process completed.

请问是什么原因?


|
To  cbu(阿牛): 我总算你弄明白了匿名内部类为什么只能用final.是变量的作用域的问题,因为匿名内部类是出现在一个方法的内部的,如果它要访问这个方法的参数或者方法中定义的变量,则这些参数和变量必须被修饰为final。因为虽然匿名内部类在方法的内部,但实际编译的时候,内部类编译成Outer.Inner,这说明内部类所处的位置和外部类中的方法处在同一个等级上,外部类中的方法中的变量或参数只是方法的局部变量,这些变量或参数的作用域只在这个方法内部有效。因为编译的时候内部类和方法在同一级别上,所以方法中的变量或参数只有为final,内部类才可以引用。你看看下面的例子:
public class Outer{
  private int m = (int)(Math.random()*100);
  public static void main(String args[]){
    Outer that = new Outer();
    that.go((int)(Math.random()*100),(int)(Math.random()*100));
  }
  public void go(int x,final int y){
    int a = x+y;
    final int b = x-y;
    class Inner{
      public void method(){
        System.out.println("m is " + m);
//        System.out.println("x is " + x);//非法
        System.out.println("y is " + y);
//        System.out.println("a is " + a);//非法
        System.out.println("b is " + b);
      }
    }
    Inner that = new Inner();
    that.method();
  }
}

|
这条规则的翻译有问题,我想该是《java变成死相》的翻译出了问题
如果一个匿名内部类出现在一个方法的内部,那么它如果它要访问这个方法的参数或者方法中定义的变量,则这些参数和变量必须被修饰为final

|
final是防止被其他类继承.看类的需要,如果觉的自类的功能已经很强大了那么当然就希望继续对它进行扩展重写

    
 
 

您可能感兴趣的文章:

  • 求助,各位大虾帮忙
  • 高分求助:哪位大虾对resin的设置比较熟悉?请进!
  • 向各位jsp大虾求助!!!
  • 求助!!! 超简单问题... 大虾们进来,菜鸟也进来!!
  • 求助!!implements的用法与作用,那位大虾可以解释一下???(在线等待)
  • 求助!!关于两行代码的理解问题!请大虾近来看看!!(在线等待)
  • 网络技术 iis7站长之家
  • 求助xargs的一个用法,请大虾支招
  • 求助!!关于两行代码的理解问题!请大虾近来看看!!
  • 求助!!程序错误!请大虾近来看看!!
  • 大虾 紧急求助!!!!如何求得当前机子的处理器利用率和内存利用率?
  • 高分求助,请教关于在ARM Linux下启动goahead服务器的问题。很急,在线等待,希望各位大虾帮帮,万分感激
  • 求助:一个makefile,大虾们进来看看
  • 菜鸟求助! 请各位大虾一定帮忙。。。。。。!!!! 一定给分!
  • 嵌入式linux下的界面编程环境选择。求助大虾~.
  • 今天第4次送分了,求助!!!!!!!!!!大虾来看看  makefile问题
  • 循环嵌套查询求助!!我能给的分数就这么多了,请大虾帮忙
  • 急!急!急!如何在电子地图上加“Loading...”,菜鸟求助各位大虾!!!
  • 紧急,目录访问权限问题求助,请大侠指教,先写了!
  • 一个初学者的衷心求助~谢谢高手指教~
  • [高分求助]小弟在编第一个驱动程序时出现了若干辣手问题,请高手指教!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求助:linux下typedef struct {unsigned long long pmd;}pmd_t;中有两个long,是什么意思?
  • linux开发中经常碰到的两个小问题求助
  • 求助 两个问题
  • 求助arm-linux-gcc-3.4.1 如何交叉编译具有两个依赖库的文件?
  • 郁闷我很久的ssh的两个问题,求助
  • 高分求助:bigphysareas和mmap的操作在两个不同的版本返回的结果不同
  • 关于QT的问题,两个问题200分【求助】
  • [求助]安装双系统崩溃,两个系统都进不去,求解决!
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 怎样读取HZK24S前十区的内容啊???求助求助
  • 紧急求助!紧急求助!
  • 【求助】iplanet问题,求助高手解答!
  • 菜鸟求助,solaris下计算问题求助
  • 【求助】SOS紧急求助..............极为简单的问题...跪求....
  • 高分求助啊!求助SUSE 10.0 不能上网.
  • 急急急急急急急啊,紧急求助啊!!!!!满分求助啊!!!!!!
  • 求助:linux下 vim的配置(高分求助)
  • red hat怎么安装gcc啊!总是出错,求助求助啊!!!yum源怎么改啊!!
  • 求助~~求助 ~~linux文件读写问题
  • 求助:信号 --13 进程中断
  • 求助,安装了红帽子后进不了
  • 新装linux求助
  • linux的 iptables问题求助
  • (高分求助)请问,那里有软件开发的<设计文档>
  • 一个简单的问题,高分求助!!!
  • 紧急求助:Unix下给文件夹重命名用什么命令?谢谢!!!!
  • VJ的一个问题,高分求助,熟悉VJ得请进!
  • 高分求助


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3