Java静态内部类

Posted lev1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java静态内部类相关的知识,希望对你有一定的参考价值。

java的静态内部类

只是一个简单的记录。因为一直排斥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静态内部类的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记3.8.3 内部类 - 静态内部类

java静态内部类

java内部类可以访问外部类的静态方法吗

Java连载58-静态内部类成员内部类详解

深入浅析Java中Static Class及静态内部类和非静态内部类的不同

Java中的四种内部类总结