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()

一般來說,內部類不需要訪問包裹類的非靜態成員的時候。或者只是做一個工具給外部調用,而這些工具需要按照功能區分為的時候使用靜態內部類。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM