enclosing instance

:arrow: 么是封闭实例-呵呵,这个概念我第一次看见是在一本叫做Java高效编程的书上,于是baidu,google都没有找到相关的网页。

后来无意中想起来了我看英文书中的enclosing class,推断这个译本的原文应该是enclosing instance,果不其然,上网一搜发现好多人再问no enclosing instance of class XXX的问题,不禁郁闷了一把,心想学java的兄弟第一次见到汉语的封闭类会不会也像我一样郁闷呢,所以决定写这篇贴备我以后查阅也希望能帮到需要的其他人。重新再次声明:“我的日志并不是想有人想像的那样叫做什么显摆用的,呵呵”!

(1)enclosing class

Java中把定义在其他类内部的类定义为Inner class,相反包含Inner class的类被叫做该Inner class的enclosing class。

(2)enclosing instance

有了上面关于enclosing class的定义,很容易就明白enclosing instance就是它的实例(instance)。

(3)no enclosing instance of class XXX

为了解释这个runtime exception,我首先假设有以下的类定义:

public class Outter {

  public class Inner {

    private int value;

  }

  public void testInnerClass () {

  _______________________________

//如何声明一个指向内部类实例的应用变量呢?

  }

}

其实,只要对实例变量和类变量理解的够深刻,你就应该很轻松的在上面的横线填入以下代码:

Outter.Inner oi = new Outter.Inner();

or Inner oi = new Inner();

or Outter.Inner oi = new Outter().new Inner();

Jvm对于这三种答案都是认同的,但是你别高兴得太早,想象如果不是在enclosing class中的情形

又如何呢?

那么只能是最后一个答案,我曾看见有人写过下面的方法:

Outter.Inner oi = new Outter.Inner();

这时就会抛出上面的异常信息了,呵呵,其实想想Inner不是static的,怎么可以通过enclosing class

的类名引用呢?
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值