Java 代码初始化块
![[Pasted image 20250820164453.png]]
![[Pasted image 20250820164453.png]]
成员内部类是最常见的内部类
class Wanger {
int age = 18;
class Wangxiaoer {
int age = 81;
}
}看起来内部类 Wangxiaoer 就好像 Wanger 的一个成员,成员内部类可以无限制访问外部类的所有成员属性。
定义抽象类的时候需要用到关键字 abstract,放在 class 关键字前,就像下面这样。
abstract class AbstractPlayer {
}抽象类是不能实例化的,尝试通过 new 关键字实例化的话,编译器会报错,提示“类是抽象的,不能实例化”。
虽然抽象类不能实例化,但可以有子类。子类通过 extends 关键字来继承抽象类。就像下面这样。
接口通过 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 修饰符
没有使用 private、default 或者 static 关键字修饰的方法是隐式抽象的,在编译的时候会自动加上 public abstract 修饰符。
从 Java 8 开始,接口中允许有静态方法,接口中定义静态方法的目的是为了提供一种简单的机制,使我们不必创建对象就能调用方法,从而提高接口的竞争力。
接口中允许定义 default 方法
允许在接口中定义默认方法的理由很充分,因为一个接口可能有多个实现类,这些类就必须实现接口中定义的抽象类,否则编译器就会报错。假如我们需要在所有的实现类中追加某个具体的方法,在没有 default 方法的帮助下,我们就必须挨个对实现类进行修改。
接口不允许直接实例化,否则编译器会报错。
需要定义一个类去实现接口,见下例。
枚举(enum),是 Java 1.5 时引入的关键字,它表示一种特殊类型的类,继承自 java.lang.Enum。 新建一个枚举。
public enum PlayerType {
TENNIS,
FOOTBALL,
BASKETBALL
}其反编译后的字节码。
注解(Annotation)是在 Java 1.5 时引入的概念,同 class 和 interface 一样,也属于一种类型。注解提供了一系列数据用来装饰程序代码(类、方法、字段等),但是注解并不是所装饰代码的一部分,它对代码的运行效果没有直接影响,由编译器决定该执行哪些操作。 注解的生命周期有 3 种策略,定义在 RetentionPolicy 枚举中。 1)SOURCE:在源文件中有效,被编译器丢弃。