只是一个简单的记录。因为一直排斥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()

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

java的静态内部类的更多相关文章

  1. Java:静态内部类的使用目的、使用限制、与非静态内部类的对比

    Java之静态内部类(static class) 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的(利用static关键字修饰),也可以是非静态的. 一.静态内部类的使用目的. 在 ...

  2. Java非静态内部类中为什么不能有静态变量却可以有常量?

    如:public class InnerClassDemo{ int x; class A{ static int a = 0;//这样写是不合法的. static final int b=0;//这 ...

  3. 【Java入门提高篇】Day9 Java内部类——静态内部类

    今天来说说Java中的最后一种内部类--静态内部类 所谓的静态内部类,自然就是用static修饰的内部类,那用static修饰过后的内部类,跟一般的内部类相比有什么特别的地方呢? 首先,它是静态的,这 ...

  4. Java中静态内部类的理解

    class A { public void func() { A a=new A(); C c=a.new C(); } public static void main(String[] args) ...

  5. Java 非静态内部类中可以定义静态变量或方法吗?

    如图: 这个问题的答案是不可以 由于内部类的实例化是由外部类实例化之后加载的,如果外部类还没有实例化,这时候调用内部类的静态成员,此时内部类还没有被加载,却要开始创建静态成员,这是矛盾的,所以java ...

  6. Java非静态内部类为什么不能有静态成员

    我们可以把InnerClass看成OuterClass的非静态成员,它的初始化必须在外部类对象创建后以后进行,要加载InnerClass必须在实例化OuterClass之后完成 ,java虚拟机要求所 ...

  7. Java - 静态内部类

    Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类.内部类又分为:常规内部类.局部内部类.匿名内部类和静态嵌套类四种. 1.静态内部类定义 静态内部类,定义在类中,任何方法外,用sta ...

  8. Java基础知识(贰)

    一.面向对象 Java中的面向对象与C#的面向对象,本质都是一样.所以对于学过C#的同学理解Java中面向对象的概念就比较轻松. 对象 定义: 万物皆对象,客观存在的事物都称为对象. 1.面向对象 类 ...

  9. C#与Java的比较

    C#与Java的比较 写完后得知维基百科里有更加全面得多的比较: http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java NET(C#) ...

随机推荐

  1. storage封装

    storage.js /* storage 主要放项目中的storage相关操作:存取等 */ var storage = { /** 对本地数据进行操作的相关方法,如localStorage,ses ...

  2. IDEA安装小配置

    1. view-->toolbar+toolbuttons 2. 根据大小写IDEA能准确提示 配置自动导入包 定义代码模板 提示忽略大小写 配置虚拟机内存,修改idea64.exe.vmopt ...

  3. sql server 查询不为空的字段

    经常用,经常忘 select * from table where content is not null and datalength(content)<>0

  4. Github上Markdown基本语法

    基础写作和语法格式 本篇文章的内容来源于Github的基础写作帮助.如果在观看时有什么问题,可以直接查阅源文件.另外需要说明的是Git对Markdown的支持增加了一些扩展功能,因此在Git上可以渲染 ...

  5. PAT 甲级 1005 Spell It Right (20)(代码)

    1005 Spell It Right (20)(20 分) Given a non-negative integer N, your task is to compute the sum of al ...

  6. Docker原生网络技术简介

    Docker原生网络技术简介 默认网络 在宿主机部署好Docker Engine后会默认创建三种网络:Bridge.Host和None,如下: docker network ls NETWORK ID ...

  7. 修改别人写的Hibernate数据库操作代码

    最近正在维护别人写的一个关于Hibernate操作数据库的项目,在运行测试的时候(向表中插入记录),报了一个错误:cannot insert a null into column(XXX字段名,下文统 ...

  8. Luogu 2822[NOIP2016] 组合数问题 - 数论

    题解 乱搞就能过了. 首先我们考虑如何快速判断C(i, j ) | k 是否成立. 由于$k$非常小, 所以可以对$k$分解质因数, 接着预处理出前N个数的阶乘的因数中 $p_i$ 的个数, 然后就可 ...

  9. 常用MFC宏

    最近我在用MFC开发一个智能家居监控平台的软件(用到了MSCOMM串口通信控件),当我通过在一个对话框类A中定义另一个对话框类B的对象访问B的public成员时,提示不可访问.后来经过多天的向朋友求救 ...

  10. jx9脚本引擎BUG修复

    BUG1:    rc = WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), pOutput, (DWORD)nOutputLen, 0, 0);        修 ...