内部类(Inner Class),是 Java 中对类的一种定义方式,是嵌套类的一个分类,即非静态嵌套类(Non-Static Nested Class)。内部类(非静态嵌套类)分为成员内部类、局部内部类、静态内部类和匿名内部类4种。
与成员变量类似,写在类里。如果内部类持有外部类的引用,可能导致内部类没有执行完,外部类也无法释放,有内存泄漏风险。想要避免这种现象,需要在外部类对象生命周期结束时手动将内部类对象生命周期结束。除非延迟回收会成为系统的运维瓶颈,一般不需要特别关注,GC机制通常足以应付。
public class Outter {
String s;
class Inner{
}
}
局部内部类是定义在一个方法或者一个作用域里的类。Inner2和Inner都是Outter的内部类。
public class Outter {
public Inner getInner2(){
class Inner2 extends Inner{
String s = "Inner2";
}
return new Inner2();
}
}
class Inner{
String s;
}
好吧,就是成员内部类前面加了static。声明为static的类不会持有外部类的引用,可以通过软引用的方式保存外部类的了引用,只有静态内部类不可能造成内存泄漏。
public class Outter {
String s;
static class Inner{
}
}
匿名内部类应该是我们用得最多的,在编写事件监听的代码时使用匿名内部类不但方便,而且使代码更加容易维护。
public class Outter {
void test() {
new Thread(new Runnable(){
String S;
@Override
public void run(){}
}).start();
}
}
上述的Java内部类的4种类型包含了所有的Java内部类,与实例的方法和变量一样,内部类与其外围类的实例相关联,并可直接访问该外围类对象的方法和字段。此外,由于内部类与实例相关联,因此不能在内部类中定义任何静态成员。 想了解其中的详细规则我们可以参考动力节点在线的免费视频课程,学习更多的相关知识。
提枪策马乘胜追击04-21 20:01
代码小兵87207-15 12:10
杨晶珍05-11 14:54
杨晶珍05-12 17:30