提示:本文讲述静态、枚举、包装类、抽象类、内部类
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类验证初始化顺序。
通过以上结构,系统化掌握静态成员、单例、枚举和内部类的核心概念与应用场景。
网硕互联帮助中心






评论前必须登录!
注册