只是一個簡單的記錄险耀。因為一直排斥java這個東西。java跟c++比是很不錯的一個語言玖喘,至少內(nèi)存管理這么麻煩的東西不用操心了甩牺。但是和不斷崛起的腳本語言比起來,效率差的太多累奈。無論如何做android還是需要java的贬派,所以遇到什么就看點什么急但。
既然要用靜態(tài)內(nèi)部類,那么就看看為什么不用非靜態(tài)內(nèi)部類:
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();
}
}
首先創(chuàng)建一個叫做Company
的類赠群,這個類有一個companyName
靜態(tài)成員和一個theCEO
非靜態(tài)成員羊始。靜態(tài)的公司名值為二貨公司旱幼,這個二貨公司有一個非靜態(tài)的二貨CEO查描。然后給這個二貨公司放一個非靜態(tài)的員工。
- 這個員工可以訪問到靜態(tài)的公司名柏卤。
- 這個員工也可以訪問到非靜態(tài)的CEO冬三。
- 要初始化員工,那就必須先初始化公司對象缘缚。
- 初始換員工用的不是new勾笆,而是company.new。是公司對象.new桥滨。
太麻煩了窝爪,如果內(nèi)部類不是靜態(tài)的。要用這個內(nèi)部類就必須先初始化包裹類齐媒。也是蒲每,如果不初始化出來對應(yīng)的包裹類,內(nèi)部類對象怎么能訪問這些包裹類對象的非靜態(tài)實例對象呢喻括。
所以還是用靜態(tài)類好了:
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還有一個員工邀杏。
- 加
static
,員工類變成靜態(tài)內(nèi)部類唬血。 - 靜態(tài)內(nèi)部類不能再訪問包裹類的非靜態(tài)成員望蜡。
- 看起來正常的初始化方法:
new Company.Employee()
。
一般來說拷恨,內(nèi)部類不需要訪問包裹類的非靜態(tài)成員的時候脖律。或者只是做一個工具給外部調(diào)用腕侄,而這些工具需要按照功能區(qū)分為的時候使用靜態(tài)內(nèi)部類小泉。