A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

关于普通内部类和静态内部类的疑问,谢谢!





大家好!如上图所示,我的疑问是,普通内部类的实例化和静态内部类的实例化的区别就是一个括号吗?
普通内部类有括号,而静态内部类没括号。请大家解释一下,谢谢啦!




评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

4 个回复

倒序浏览
是这样的:
普通的内部类对象的创建:Outter .Inner oi = new Outter().new Inner();
创建内部类对象首先需要要有外部类对象,所以先要有new Outter(),new Outter().new Inner(),表示Inner类是Outter的成员变量,通过new Outter的形式去调用。
而静态的内部类的创建:Outter .Inner oi  = new Outter.Inner();
静态的话,可以使用类名调用,Outter.Inner表示的就是内部类的全名
当要访问外部其他类中要访问内部类的非静态成员:new Outter.Inner().function(),通过对象来调用
当要访问外部其他类中要访问内部类的静态成员:Outter.Inner().function(),通过类来调用
回复 使用道具 举报 1 0
假设外部类Outter中有一个变量x
如果该变量x是非静态的,那么在主函数中就必须新建一个对象,再进行赋值:

        Outter o = new Outter();
        o.x = 3 ;

如果该变量x是静态的,那么在主函数可以直接赋值:

        Outter.x = 3 ;

普通内部类是非静态的,所以必须新建立一个对象,再建立内部类对象:

        Outter o = new Outter();
        Outter.Inner s1 = o.new Inner();
        Outter.Inner s2 = new Outter().new Inner();

静态内部类是静态的,可以直接建立:

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

总结:静态成员不依赖对象。
回复 使用道具 举报
lwj123 发表于 2015-3-25 08:08
是这样的:
普通的内部类对象的创建:Outter .Inner oi = new Outter().new Inner();
创建内部类对象首先需 ...

懂了,静态不用实例就可以用了是吧?谢谢啦!
回复 使用道具 举报
natsu647 发表于 2015-3-25 10:19
假设外部类Outter中有一个变量x
如果该变量x是非静态的,那么在主函数中就必须新建一个对象,再进行赋值:
...

好,谢谢你。最后一句让我明白的,静态不用实例化就能用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马