云计算百科
云计算领域专业知识百科平台

Java基础——面向对象(四)

提示:本文讲述静态、枚举、包装类、抽象类、内部类

7.1 静态

7.1.1 静态关键字(static)

        静态关键字用于修饰与类而非对象关联的成员变量和方法。当成员变量或方法与类的实例无关时,使用static可以避免为每个对象单独存储或调用,提升效率和代码简洁性。

7.1.2 静态变量
  • 语法格式

    【修饰符】 class 类名 {
    【其他修饰符】 static 数据类型 变量名;
    }

  • 特点

    • 默认值与实例变量相同(基本类型为0/false,引用类型为null)。
    • 所有对象共享同一份数据,存储在方法区。
    • 本类中可直接使用;其他类中通过类名.变量名访问(推荐)或对象.变量名访问。
    • 静态变量的get/set方法需为静态方法,重名时用类名.变量名区分。
  • 内存分析
    静态变量在类加载时分配内存,生命周期与类相同,独立于对象实例。

  • 与其他变量对比

    • 静态变量:方法区存储,类共享,有默认值。
    • 实例变量:堆存储,对象独立,有默认值。
    • 局部变量:栈存储,无默认值,作用域限于方法/块。
7.1.3 静态方法
  • 语法格式

    【修饰符】 static 返回值类型 方法名(参数列表) {
    方法体
    }

  • 特点
    • 可直接通过类名.方法名()调用,无需实例化。
    • 可继承但不可重写(子类同名方法为隐藏而非覆盖)。
    • 调用时基于编译时类型(多态不适用)。
7.1.4 静态代码块
  • 语法格式

    static {
    // 初始化代码
    }

  • 特点
    • 用于静态变量初始化,类加载时执行一次。
    • 执行优先级高于非静态代码块和构造器。

静态与非静态的区别

1、本类中的访问限制区别
  • 静态直接访问静态,可以

  • 非静态直接访问非静态,可以

  • 非静态直接访问静态,可以

  • 静态直接访问非静态,不可以

2、在其他类的访问方式区别

        静态的类变量和静态的方法可以通过“类名.”的方式直接访问;也可以通过“对象."的方式访问。(但是更推荐使用类名的方式)

非静态的实例变量和非静态的方法==只能==通过“对象."方式访问。

3、this和super的使用
静态的方法和静态的代码块中,==不允许==出现this和super关键字,如果有重名问题,使用“类名.”进行区别。

非静态的方法和非静态的代码块中,可以使用this和super关键字。


7.2 单例模式(补充)

7.2.1 饿汉式实现

class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}

7.2.2 懒汉式实现(线程安全)

class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}


7.3 枚举类

7.3.1 定义与使用

enum Weekday {
MONDAY, TUESDAY, WEDNESDAY;
}

  • 特点
    • 天然单例,线程安全。
    • 可添加构造器、方法及字段,实现复杂逻辑。
7.3.2 枚举与设计模式
  • 状态模式:通过枚举实现状态机。
  • 策略模式:枚举成员封装不同策略。

包装类

        Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而当要使用只针对对象设计的API或新特性(例如泛型),那么基本数据类型的数据就需要用包装类来包装。

7.4 内部类

7.4.1 成员内部类

class Outer {
class Inner {}
}

  • 访问规则:可访问外部类所有成员,包括私有。
7.4.2 静态内部类

class Outer {
static class Inner {}
}

  • 特点:不依赖外部类实例,仅能访问外部类静态成员。
7.4.3 匿名内部类

Runnable r = new Runnable() {
@Override
public void run() {}
};


7.5 代码示例整合

  • 静态变量示例:Employee类演示共享company和total。
  • 静态方法示例:Father与Son类展示继承与隐藏。
  • 静态代码块示例:Chinese类验证初始化顺序。

通过以上结构,系统化掌握静态成员、单例、枚举和内部类的核心概念与应用场景。

赞(0)
未经允许不得转载:网硕互联帮助中心 » Java基础——面向对象(四)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!