java中为什么在主函数中创建外部类对象可以,创建内部类对象就失败了呢?2类不都是非静态的吗?

 我来答
fuhaiwei
推荐于2018-04-15 · TA获得超过3409个赞
知道大有可为答主
回答量:974
采纳率:75%
帮助的人:1387万
展开全部
public class OuterClass {

    public static void main(String[] args) {
        OuterClass outerClass = new OuterClass();
        InnerClass innerClass = outerClass.new InnerClass();
        StaticInnerClass staticInnerClass = new StaticInnerClass();
    }

    public void foo() {
        InnerClass innerClass = new InnerClass();
        StaticInnerClass staticInnerClass = new StaticInnerClass();
    }

    public class InnerClass {

    }

    public static class StaticInnerClass {

    }
}

了解以下几点:


1:非静态内部类,必须有一个外部类的引用才能创建。


2:在外部类的非静态方法中,因为有隐含的外部类引用this,所以可以直接创建非静态内部类。


3:在外部类的静态方法中,因为没有this,所以必须先获得外部类引用,然后创建非静态内部类。


4:静态内部类,不需要外部类引用就可以直接创建。


5:同时静态的内部类,也不能直接访问外部类的非静态方法。


6:由此可以推测,非静态内部类之所以可以直接访问外部类的方法,是因为创建非静态内部类时,有一个隐含的外部类引用被传递进来。

s136357491
2013-08-06 · TA获得超过223个赞
知道小有建树答主
回答量:295
采纳率:0%
帮助的人:147万
展开全部
对main方法而言,虽然写在类中,它是游离于任何类之外的(就跟C++一样,单独一个main方法),因此某类的非静态内部类对它而言是不直接可见的,也就无法直接访问
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wa...1@sina.com
2013-08-06
知道答主
回答量:1
采纳率:0%
帮助的人:1473
展开全部
主函数是程序的入口,在里面创建外部类对象是可以直接调用的,类分静态和非静态,具体要看怎么定义该类。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
AlexYaole
2013-08-06
知道答主
回答量:45
采纳率:0%
帮助的人:15.8万
展开全部
main是静态的,你声明的内部类是非静态的,所以不可以。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式