静态内部类和非静态内部类的区别
A non-static nested class has full access to the members of the class within which it is nested. A static nested class does not have a reference to a nesting instance, so a static nested class cannot invoke non-static methods or access non-static fields of an instance of the class within which it is nested.Java: Static vs inner class - Stack Overflow
local class不能访问一般的局部变量,只能访问被final修饰的局部变量
local class不能被static修饰, 因为static只能修饰成员变量, 不能修饰局部变量.
local class中可以直接访问外部类的所有成员, 包括私有成员, 因为其默认持有外部类的引用.
但不能访问它所在作用域中的一般的局部变量, 只能访问被final修饰的局部变量.
为什么必须是final的呢? - 崔鹏飞的Octopress Blog
Java的局部内部类以及final类型的参数和变量 - JAVA夜无眠 - ITeye博客
示例代码
package com.zhoujin7;
public class Outer {
private static String outerStaticField = "Outer Static Field";
private String outerInstanceField = "Outer Instance Field";
public Outer() {
System.out.println("Outer Class");
}
public static void staticPrint() {
final String localField = "local Field";
class Local {
public Local() {
System.out.println("Local Class");
System.out.println(outerStaticField);
System.out.println(localField);
}
}
new Local();
}
public static void main(String[] args) {
new StaticMember();
System.out.println();
new Outer().new NonStaticMember();
System.out.println();
new Outer().print();
System.out.println();
Outer.staticPrint();
}
public void print() {
// JDK 8 可以不用加上这个final
final String localField = "local Field";
class Local {
public Local() {
System.out.println("Local Class");
System.out.println(outerInstanceField);
System.out.println(outerStaticField);
System.out.println(localField);
}
}
new Local();
}
public static class StaticMember {
public StaticMember() {
System.out.println("Static Class");
System.out.println(outerStaticField);
}
}
public class NonStaticMember {
public NonStaticMember() {
System.out.println("Non-Static Member Class");
System.out.println(outerInstanceField);
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60