總而言之:
- 靜態(tài)內(nèi)部類不能直接訪問外部類的成員變量,可以直接創(chuàng)建類,并且可以有自己的靜態(tài)變量與靜態(tài)方法
(可以理解為是一個(gè)獨(dú)立的類) - 內(nèi)部類需要由實(shí)例對(duì)象來生成瘫俊,不可以有自己的靜態(tài)變量與靜態(tài)方法,但是可以直接使用外部類的成員變量。
Hint:
如果實(shí)在想要訪問外部類的成員/靜態(tài) 變量穷当,可以在類內(nèi)部進(jìn)行關(guān)聯(lián)。詳見代碼淹禾。
import java.util.*;
public class Test1 {
static int v1 = 1;
int v2 = 2;
public static void main(String[] args) {
System.out.println(Test1.Inner1.name1);
Inner1 c1 = new Test1.Inner1();
System.out.println(c1.name2);
/**
* error: 'Test1.this' cannot be referenced from a static context
*/
//Inner2 c2 = new Test1.Inner2();
Test1 c = new Test1();
Inner2 c2 = c.new Inner2();
System.out.println(c2.name2);
c1.c=c;
c1.printV2();
c2.c=c;
c2.printV1();
}
private static class Inner1{
static String name1 = "I'm a static variable of static inner class Inner1";
private String name2 = "I'm a variable of static inner class Inner1";
Test1 c;
Inner1(){
int sv = v1;
System.out.println("I can read static variable v1 in outer class");
/**
* error: Non-static field 'v2' cannot be referenced from a static context
*/
//int v = v2;
System.out.println("I cannot read variable in outer class");
}
void printV2(){
int v = c.v2;
System.out.println("now I can read variable in outer class");
}
}
private class Inner2{
/**
* error: Inner classes cannot have static declarations
*/
//static String name1;
private String name2 = "I'm viriable of static inner class Inner2";
Test1 c;
Inner2(){
int sv = v1;
int v = v2;
System.out.println("I can read both static variables and variables in outer class");
}
void printV1(){
int sv = c.v1;
System.out.println("now I can read static variable in outer class");
}
}
}