Java内部类是定义在另一个类内部
的类,它可以访问外部类
的成员变量和方法。内部类分为成员内部类
、静态内部类
、局部内部类
和匿名内部类
。为什么要学习内部类呢?因为在底层源码中,有大量的内部类,下面我将详细介绍各种内部类,并结合Java代码示例:
1. 成员内部类
成员内部类是定义在类内部
的普通类,可以直接访问或者使用外部类.this.变量/方法
访问外部类的成员变量和方法。
class Outer {
private int outerField;
class Inner {
public void display() {
System.out.println("OuterField: " + outerField);
}
}
}
内部类可以访问外部类的成员变量和方法,但外部类不能直接访问内部类的成员。
非静态内部类持有外部类的引用,可能导致内存泄漏,应避免在内部类中持有外部类的大对象
内部类可以访问外部类的私有成员,但外部类无法直接访问内部类的私有成员,需要通过内部类的实例访问。
2. 静态内部类
静态内部类是使用 static
关键字修饰的内部类,不持有外部类的引用,可以直接通过外部类访问。
class Outer {
private static int outerStaticField;
static class StaticInner {
public void display() {
System.out.println("OuterStaticField: " + outerStaticField);
}
}
}
静态内部类不持有外部类的引用,可以避免潜在的内存泄漏问题
内部类不能拥有静态成员(除非是常量),但静态内部类可以拥有静态成员。
3. 局部内部类
局部内部类是定义在方法内部
的类,作用域仅限于方法内部
。
class Outer {
public void display() {
class LocalInner {
public void show() {
System.out.println("Local Inner Class");
}
}
LocalInner localInner = new LocalInner();
localInner.show();
}
}
4. 匿名内部类
匿名内部类是没有类名
的内部类,通常用于创建只需使用一次
的类的实例。
interface Greeting {
void greet();
}
class Outer {
public void displayGreeting() {
Greeting greeting = new Greeting() {
@Override
public void greet() {
System.out.println("Hello, Anonymous Inner Class!");
}
};
greeting.greet();
}
}
匿名内部类不持有外部类的引用,可以避免潜在的内存泄漏问题
总结
本文记录一下java内部类最全详解:成员内部类、局部内部类、匿名内部类、静态内部类。
希望对看到本文的你有帮助。
上一篇 Java——Stream流式编程 |
记得点赞收藏哦!!!
| 下一篇 java接口和抽象类区别 |