Java 代码初始化块

![[Pasted image 20250820164453.png]]

Java内部类

成员内部类

成员内部类是最常见的内部类

 class Wanger {
    int age = 18;

    class Wangxiaoer {
        int age = 81;
    }
}

看起来内部类 Wangxiaoer 就好像 Wanger 的一个成员,成员内部类可以无限制访问外部类的所有成员属性。

Java 抽象类

定义抽象类

定义抽象类的时候需要用到关键字  abstract,放在  class  关键字前,就像下面这样。

abstract class AbstractPlayer {
}

抽象类的特征

抽象类是不能实例化的,尝试通过  new  关键字实例化的话,编译器会报错,提示“类是抽象的,不能实例化”。 虽然抽象类不能实例化,但可以有子类。子类通过  extends  关键字来继承抽象类。就像下面这样。

Java接口

接口通过 interface 关键字来定义,它可以包含一些常量和方法,来看下面这个示例。

public interface Electronic {
    // 常量
    String LED = "LED";

    // 抽象方法
    int getElectricityUse();

    // 静态方法
    static boolean isEnergyEfficient(String electtronicType) {
        return electtronicType.equals(LED);
    }

    // 默认方法
    default void printDescription() {
        System.out.println("电子");
    }
}

接口中定义的变量会在编译的时候自动加上  public static final  修饰符 没有使用  privatedefault  或者  static  关键字修饰的方法是隐式抽象的,在编译的时候会自动加上  public abstract  修饰符。 从 Java 8 开始,接口中允许有静态方法,接口中定义静态方法的目的是为了提供一种简单的机制,使我们不必创建对象就能调用方法,从而提高接口的竞争力。 接口中允许定义  default  方法 允许在接口中定义默认方法的理由很充分,因为一个接口可能有多个实现类,这些类就必须实现接口中定义的抽象类,否则编译器就会报错。假如我们需要在所有的实现类中追加某个具体的方法,在没有  default  方法的帮助下,我们就必须挨个对实现类进行修改。 接口不允许直接实例化,否则编译器会报错。 需要定义一个类去实现接口,见下例。

Java 枚举

枚举(enum),是 Java 1.5 时引入的关键字,它表示一种特殊类型的类,继承自 java.lang.Enum。 新建一个枚举。

public enum PlayerType {
    TENNIS,
    FOOTBALL,
    BASKETBALL
}

其反编译后的字节码。

Java注解

注解(Annotation)是在 Java 1.5 时引入的概念,同 class 和 interface 一样,也属于一种类型。注解提供了一系列数据用来装饰程序代码(类、方法、字段等),但是注解并不是所装饰代码的一部分,它对代码的运行效果没有直接影响,由编译器决定该执行哪些操作。 注解的生命周期有 3 种策略,定义在 RetentionPolicy 枚举中。 1)SOURCE:在源文件中有效,被编译器丢弃。