黑马程序员技术交流社区

标题: 关于内部类的问题.... [打印本页]

作者: 赵太云    时间: 2013-7-11 22:34
标题: 关于内部类的问题....
本帖最后由 赵太云 于 2013-7-13 16:04 编辑

   最近回顾了下se的知识,在看到内部类时卡住了!
   如果内部类是非静态的,则内部类中是不能有静态成员的。
这是为什么?

作者: 在乎..    时间: 2013-7-11 23:40
首先必须先执行加载OuterClass,再加载Innerclass,最后初始化静态变量,问题就出在加载Innerclass上面,我们可以把InnerClass看成OuterClass的非静态成员,它的初始化必须在外部类对象创建后以后进行,要加载InnerClass必须在实例化OuterClass之后完成,java虚拟机要求所有的静态变量必须在对象创建之前完成,这样便产生了矛盾。
作者: yangchao313    时间: 2013-7-12 12:48
访问格式
1、当内部类定义在外部类的成员位置上而且非私有可以在外部其他类中可以直接建立内部类对象
   格式:外部类名.内部类名 变量名=外部类对象.内部类对象;
             Outer.Inner in=new Outer().new Inner();
2、当内部类在成员位置就可以被成员修饰符所修饰
   比如 private:将内部类在外部类中进行封装
        static: 内部类就具备static的特性
   当内部类被static修饰后只能直接访问外部类中的static成员,出现了访问局限
   在外部其他类中如何直接访问static内部类的非静态成员呢?
        new Outer.Inner().function();
     在外部其他类中如何直接访问static内部类的静态成员呢?
        Outer.Inner().function();
注意:当内部类中定义了静态成员 该内部类必须是static的
      当外部类中的静态方法访问内部类时 内部类也必须是static的
内部类定义在局部时
1、不可以被成员修饰符修饰
2、可以直接访问外部类中的成员,因为还持有外部类中的引用,但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量
作者: 赵太云    时间: 2013-7-12 15:01
为什么不给提问的技术分。。。。。。。。
作者: 神之梦    时间: 2013-7-12 18:49
这就是提问帖的技巧了,提问时最好不要只写一句话或者很笼统的问一个问题,如:什么是面向对象?之类的
再就是如果是技术方面的问题,最好有代码辅助
如果是概念性的东西,除非是自己对有些话真的想不明白,或者老师在视频中没有讲得让你明白,这样是会加分的
但是回帖加分不代表提问就会加分,如:你问什么是面向对象,别人很认真的回答了,且回答的很好,肯定会加分

对于楼主这个问题,我觉得楼主确实是没想明白,所以也是该获得技术分的。(上面的话只是对楼主说为什么不给提问加技术分的解释,不针对楼主的此提问帖)
作者: 赵太云    时间: 2013-7-13 15:58
神之梦 发表于 2013-7-12 18:49
这就是提问帖的技巧了,提问时最好不要只写一句话或者很笼统的问一个问题,如:什么是面向对象?之类的
再 ...

:kiss::kiss::kiss::kiss:




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2