: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
的类名引用呢?
后来无意中想起来了我看英文书中的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
的类名引用呢?