java中访问静态内部类时为什么不能创建外部类的对象 10

小程序如下:classOuter{staticintx=2;staticclassInner{}}classTest{publicstaticvoidmain(Strin... 小程序如下:
class Outer{
static int x = 2;

static class Inner{
}

}

class Test{
public static void main(String[] args){
new Outer.Inner(); //正确
new Outer().new Inner(); //编译报错:限定的新静态类
}

}

我知道访问静态内部类可以不实例化外部类,但是为什么实例化就报错呢?
比如在上面的小程序中,我要输出x,确实可以Outer.x,但是我也可以使用new Outer().x啊,为什么在内部上就报错呢?
展开
 我来答
datong370
2015-11-25 · TA获得超过307个赞
知道答主
回答量:164
采纳率:0%
帮助的人:113万
展开全部
你首先要明白new Outer().new Inner()是干什么的,这个是在外围类中穿件非静态内部类时的代码,非静态内部类必须要持有一个隐含的指向外部类的引用,所以必须先new outer再new inner,但是如果是非静态的,就无需持有外部类引用,这么写有什么道理呢?
追问
如果我创建了一个外部类的对象来调用外部类中的方法:
Outer out = new Outer();
//....省略
然后这个时候我需要使用到内部类中的方法,我认为的情况是可以直接这么写:
out.new Inner().method();
直接使用自己已经创建过的对象,但是结果是这样写会出现上面的错误
帕霖胀谠丈54Av
2015-11-25 · TA获得超过322个赞
知道小有建树答主
回答量:193
采纳率:75%
帮助的人:100万
展开全部
静态内部类

静态内部类定义在类中,任何方法外,用static定义。

静态内部类只能访问外部类的静态成员。

生成(new)一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:

Outer.Inner in=new Outer.Inner();

而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类。可以定义私有静态内部类。
追问
没太懂,
实际上使静态内部类成为了一个顶级类
是什么意思呢?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式