Java高级类特性:static, final, abstract, interface, 内部类解析

需积分: 7 1 下载量 157 浏览量 更新于2024-07-23 收藏 1.67MB PDF 举报
所有实例共享,不论是否创建了对象,它们都在内存中占有唯一的位置。类变量通常用`static`修饰,例如`private static double radius`。这意味着无论创建了多少个`Circle`类的对象,`radius`变量只有一个副本,所有对象都会共享这个值。如果在类中定义了一个静态变量并改变了它的值,那么所有对象都会看到这个改变。 静态初始化 静态初始化通常发生在类加载时,可以通过静态初始化块(`static { ... }`)来执行。这些代码块只会在类首次被加载到JVM时执行一次,用于设置类变量的初始值。例如: ```java class Circle { static { System.out.println("静态初始化块执行"); } private static double radius = 1.0; } ``` 静态方法 静态方法与类相关联,而不是类的实例。这意味着静态方法不能访问实例变量,因为它们不依赖于任何特定的对象实例。例如,计算圆周率的函数可能是一个静态方法,因为它不依赖于特定的圆的半径。调用静态方法的方式是使用类名,而不是对象实例,如`Circle.calculatePI()`。 单子模式 单子模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。在Java中,通常通过静态方法实现单子模式,返回类的唯一实例。例如: ```java public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } } ``` `main`方法的语法 `main`方法是Java程序的入口点,必须是静态的,以便在没有创建任何对象的情况下执行。其标准签名是`public static void main(String[] args)`。Java虚拟机(JVM)会寻找包含此方法的类并执行其中的代码。 `final`关键字 `final`关键字用于声明一个变量不可改变,一个方法不能被重写,或者一个类不能有子类。例如,声明一个常量: ```java public final double PI = 3.14159; ``` 在此之后,`PI`的值不能被修改。 抽象类(`abstract`关键字) 抽象类是不能被实例化的类,它们通常用来作为其他类的基类。抽象类可以包含抽象方法(没有实现的方法)。如果一个类包含一个或多个抽象方法,那么该类必须被声明为抽象的。子类继承抽象类时,必须实现所有未实现的抽象方法,除非子类也是抽象的。 接口(`interface`关键字) 接口是完全抽象的类型,它们定义了一组方法签名,但不提供具体实现。一个类可以实现多个接口,从而获得多个行为。接口是多继承的唯一方式。例如: ```java public interface Runnable { void run(); } public class MyRunnable implements Runnable { @Override public void run() { // 实现run方法 } } ``` 内部类 内部类是定义在一个类内部的类,它可以访问外部类的所有成员,包括私有成员。内部类分为成员内部类、局部内部类、匿名内部类等。内部类提供了更复杂的封装,常用于事件处理、回调机制以及实现特定设计模式。 总结来说,`static`、`final`、抽象类、接口和内部类都是Java中高级类特性的关键概念,它们提供了丰富的面向对象编程功能,如共享数据、防止篡改、多态性、模块化设计等。理解和熟练使用这些特性对于编写高效、可维护的Java代码至关重要。