静态内部类(嵌套类)
如果你不需要内部类对象与其外围类对象之间有联系,那你可以将内部类声明为st atic
1. 要创建嵌套类的对象,并不需要其外围类的对象。
2. 不能从嵌套类的对象中访问⾮静态的外围类对象。
匿名内部类
简单地说:匿名内部类就是没有名字的内部类。什么情况下需要使⽤匿名内部类,如果满⾜下
⾯的⼀些条件,使⽤匿名内部类是⽐较合适的:
1. 只⽤到类的⼀个实例。
2. 类在定义后⻢上⽤到。
3. 类⾮常⼩(SUN推荐是在4⾏代码以下)
给类命名并不会导致你的代码更容易被理解,在使⽤匿名内部类时,要记住以下⼏个原则:
1. 匿名内部类不能有构造⽅法。
2. 匿名内部类不能定义任何静态成员、⽅法和类。
3. 匿名内部类不能是public,prot ected,private,st atic。
4. 只能创建匿名内部类的⼀个实例。
5. ⼀个匿名内部类⼀定是在new的后⾯,⽤其隐含实现⼀个接⼝或实现⼀个类。
因为匿名内部类也是局部内部类,所以局部内部类的所有限制都对其⽣效。
public class Outer{1
private static final int i = 1;
2
public static class staticInner {
3
public void notStaticPrint() {
4
System.out.println("Outer.staticInner.notStaticPrint(), i = " + i);
5
}
6
public static void staticPrint() {
7
System.out.println("Outer.staticInner.staticPrint()");
8
}
9
}
10
}
11
public static void main(String[] args){
12
Outer.staticInner os = new Outer.staticInner();
13
os.notStaticPrint();
14
Outer.staticInner.staticPrint();
15
}
16
public static void main(String[] args) throws InterruptedException{1
final ThreadDomain44 td = new ThreadDomain44();
2
Runnable runnable = new Runnable() {
3
public void run() {
4
td.testMethod();
5
}
6
}
7
Thread[] threads = new Thread[10];
8
for (int i = 0; i < 10; i++)
9
threads[i] = new Thread(runnable);
10