只是一个简单的记录。因为一直排斥java这个东西。java跟c++比是很不错的一个语言,至少内存管理这么麻烦的东西不用操心了。但是和不断崛起的脚本语言比起来,效率差的太多。无论如何做android还是需要java的,所以遇到什么就看点什么。

既然要用静态内部类,那么就看看为什么不用非静态内部类:

package com.company;

class Company {

    private String theCEO = "stupid";
private static String companyName = "STUPID COM"; class Employee {
public Employee() {
// 1
System.out.println("company name - " + companyName);
// 2
System.out.println("CEO - " + theCEO);
}
} public Company(){
System.out.println("Company object is created");
}
} public class Main { public static void main(String[] args) {
// 3
Company company = new Company();
// 4
Company.Employee employee = company.new Employee();
}
}

首先创建一个叫做Company的类,这个类有一个companyName静态成员和一个theCEO非静态成员。静态的公司名值为二货公司,这个二货公司有一个非静态的二货CEO。然后给这个二货公司放一个非静态的员工。

  1. 这个员工可以访问到静态的公司名。
  2. 这个员工也可以访问到非静态的CEO。
  3. 要初始化员工,那就必须先初始化公司对象。
  4. 初始换员工用的不是new,而是company.new。是公司对象.new

太麻烦了,如果内部类不是静态的。要用这个内部类就必须先初始化包裹类。也是,如果不初始化出来对应的包裹类,内部类对象怎么能访问这些包裹类对象的非静态实例对象呢。

所以还是用静态类好了:

package com.company;

class Company {

    private String theCEO = "stupid";
private static String companyName = "STUPID COM"; // 1
static class Employee {
public Employee() {
System.out.println("company name - " + companyName);
// 2
//System.out.println("CEO - " + theCEO);
}
} public Company(){
System.out.println("Company object is created");
}
} public class Main { public static void main(String[] args) {
// Company company = new Company();
// Company.Employee employee = company.new Employee(); // 3
Company.Employee employee = new Company.Employee();
}
}

还是一个二货公司和这个公司的二货CEO还有一个员工。

  1. static,员工类变成静态内部类。
  2. 静态内部类不能再访问包裹类的非静态成员。
  3. 看起来正常的初始化方法:new Company.Employee()

一般来说,内部类不需要访问包裹类的非静态成员的时候。或者只是做一个工具给外部调用,而这些工具需要按照功能区分为的时候使用静态内部类。

最新文章

  1. JavaEE学习文章汇总-ssm框架
  2. php.exe php-cgi.exe php-win.exe的区别
  3. Oracle Forms 10g Tutorial Ebook Download - Oracle Forms Blog
  4. UEditor 1.4.3.1.NET版本上传配置备忘录
  5. python的简洁是shell无法代替的
  6. Car---hdu5935(简单题)
  7. tensorflow + pycharm安装即相关资料
  8. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:4.安装Oracle RAC FAQ-4.2.Oracleasm Createdisk ASM磁盘失败:Instantiating disk: failed
  9. 差分信号(Differential Signal)
  10. virtualbox下Centos6.5桥接模式上网配置方法
  11. IT技术网站汇总
  12. X5 Blink下文字自动变大
  13. liteUploader上传控件的封装使用
  14. SQL 查看表字段及说明
  15. 获取mysql 配置和目录
  16. db2命令参数with ur
  17. Trimmomatic过滤Illumina低质量序列
  18. 【十六】php 面向对象
  19. centos7:mysql-5.7.23安装(二进制安装)
  20. 【 js 基础 】【读书笔记】关于this

热门文章

  1. 线特征---LineMatching代码运行(五)
  2. MVC中的七层架构
  3. javascript 生存周期
  4. c# 多个事件公用一个相应方法判断事件来源
  5. DevExpress中RibbonControl的简单应用
  6. hdu 1010(DFS) 骨头的诱惑
  7. oracle表或视图不存在和标识符无效的问题解决
  8. VS2010配置OpenGL开发环境
  9. 码代码的小女孩(来自noip贴吧)
  10. 让eclipse调试和豌豆荚并存