public class Outer {
    private int size;
    public class Inner {
        private int counter = 10;
        public void doStuff() {
            size++;
        }
    }
    public static void main(String args[]) {
        Outer outer = new Outer();
        Inner inner = outer.new Inner();
        inner.doStuff();
        System.out.println(outer.size);
        System.out.println(inner.counter);
        // 编译错误,外部类不能访问内部类的变量
        System.out.println(counter);
    }
}
这段代码定义了一个外部类 Outer,它包含了一个内部类 Inner。将错误语句注释掉,编译,会生成两个 .class 文件:Outer.class 和 Outer$Inner.class。也就是说,内部类会被编译成独立的字节码文件。

内部类是一种编译器现象,与虚拟机无关。编译器将会把内部类翻译成用 $ 符号分隔外部类名与内部类名的常规类文件,而虚拟机则对此一无所知。

注意:必须先有外部类的对象才能生成内部类的对象,因为内部类需要访问外部类中的成员变量,成员变量必须实例化才有意义。

最新文章

  1. C#抽象方法和虚拟方法理解
  2. Python“Non-ASCII character 'xe5' in file”报错问题(转)
  3. 正则表达式:Pattern类与Matcher类详解
  4. linux命令:more
  5. nc:a test cmd for TCP HTTP
  6. Groovy轻松入门——通过与Java的比较,迅速掌握Groovy (更新于2008.10.18)
  7. Warning: Using innodb_additional_mem_pool_size is DEPRECATED
  8. HOJ2275 Number sequence
  9. 80C51 K1控制D1发光
  10. Python env使用(virtualenv)
  11. Fragment已经被added了导致的异常。
  12. 关于C++中Hash的应用
  13. 自己实现一个jQuery插件
  14. pandas模块实现小爬虫功能-转载
  15. Apache Windows下Apache安装步骤
  16. 一、.NET Core MVC 项目结构模板
  17. .NET 黑魔法 - asp.net core 配置文件的"对象存储"
  18. 04 复制删除行为IDA反汇编
  19. PAT甲题题解-1065. A+B and C (64bit) (20)-大数溢出
  20. 115道Java经典面试题(面中率最高、最全)

热门文章

  1. MySQL table
  2. JavaScript数组遍历:for、foreach、for in、for of、$.each、$().each的区别
  3. ubuntu主板信息
  4. 数据结构之 图论---图的深度遍历( 输出dfs的先后遍历序列 )
  5. FZU1901 Period II —— KMP next数组
  6. jQuery插件之ajaxFileUpload API文档
  7. DateTime.Now.ToString("yyyy/MM/dd") 输出的结果是 2006-03-16(转)
  8. jqGrid 编辑完数据后能返回到当前位置的方法
  9. 关于 GraPhlAn 的孤独自学
  10. sublime text3安装配置c++环境(windows+ubuntu)