Java-关键字(static,final)

时间:2024-07-10 07:12:37

1.1 static关键字

  • static关键字 :

    • 静态的意思 , 可以修饰变量 , 也可以修饰方法 , 被static修饰的成员 , 我们叫做静态成员

  • static特点 :

    • 静态成员被所类的所有对象共享

    • 随着类的加载而加载 , 优先于对象存在

    • 可以通过对象调用 , 也可以通过类名调用 , 建议使用类名

1. 静态变量(Static Variables):

静态变量也称为类变量,它们属于类而不是类的特定实例。所有该类的实例共享相同的静态变量的值。静态变量在内存中只有一个副本,无论类实例化多少次,它们都指向相同的内存空间。

class Example {
    static int count = 0; // 静态变量

    Example() {
        count++; // 每创建一个实例,count 加一
    }
}

2. 静态方法(Static Methods):

静态方法属于类,不依赖于类的实例而直接通过类名调用。静态方法不能直接访问类的非静态成员,因为它们在类加载时就已经存在,而非静态成员需要在对象实例化后才能访问。

class Example {
    static void staticMethod() {
        System.out.println("This is a static method.");
    }
}

3. 静态代码块(Static Initialization Block):

静态代码块用于初始化类的静态变量,只在类加载时执行一次,比如静态变量的初始化或者静态方法的调用。

class Example {
    static {
        // 静态代码块
        System.out.println("Static block initialized.");
    }
}

4. 静态内部类(Static Inner Class):

静态内部类是声明为静态的内部类,不依赖于外部类的实例而可以直接通过类名访问。静态内部类不能访问外部类的非静态成员,只能访问静态成员。

class Outer {
    static class Inner {
        void display() {
            System.out.println("Static inner class.");
        }
    }
}

2-final关键字

  • final关键字 : 翻译中文代表最终的意思 , 是java的一个关键字 也是一个修饰符 , 可以修饰类 , 可以修饰方法 , 也可以修饰变量

  • final关键字修饰的特点

    • final修饰的类 : 不能被继承 , 没有子类(太监类)

    • fina修饰的方法 : 不能被重写

    • final修饰的变量

      • 基本数据类型 : 值不能改变

      • 引用数据类型 : 地址不可发生改变 , 对象的属性可改变

      • 注意 :

        • 被final修饰的变量 , 我们叫做自定义常量 , 命名规范 : 每个字母需要大写 , 多个单词之间用下划线分割

        • final修饰成员变量需要注意初始化时机的问题 , 1) 直接赋值 , 2) 在构造方法执行完毕前赋值

1. final 变量:

当应用于变量时,final 表示该变量只能被赋值一次。一旦赋值后,其值就不能再改变。final 变量必须在声明时或者在构造方法中进行初始化。

class Example {
    final int constantValue = 10; // 声明时初始化
    final double PI;

    Example() {
        PI = 3.14; // 在构造方法中初始化
    }

    void method() {
        final int localVar = 5; // 局部变量也可以声明为final
        // localVar = 10; // 编译错误,final变量无法重新赋值
    }
}

2. final 方法:

当应用于方法时,final 表示方法不能被子类重写(override)。这种约束有助于确保方法的行为在继承层次结构中保持一致性和完整性。

class Parent {
    final void finalMethod() {
        // 这个方法不能被子类重写
    }
}

class Child extends Parent {
    // 编译错误,无法重写final方法
    // void finalMethod() { }
}

3. final 类:

当应用于类时,final 表示该类不能被继承。这种设计主要用于确保类的完整性和安全性,防止子类对其进行修改或扩展。

final class FinalClass {
    // 这个类不能被继承
}

// 编译错误,无法从final类派生子类
// class ChildClass extends FinalClass { }