JAVAfinal修饰符

简介: JAVAfinal修饰符

### Java中的`final`修饰符详解

 

在Java编程中,`final`修饰符是一个重要的概念,它可以应用于变量、方法和类,用于表示不可改变的常量、不可继承的方法或不可派生的类。本文将深入探讨Java中`final`修饰符的作用、用法以及在实际项目中的应用场景。

 

### `final`修饰符的作用

 

`final`修饰符在Java中具有以下作用:

 

1. **表示不可变常量:** 当`final`修饰一个变量时,该变量被称为不可变常量,即其值无法再次被修改。

2. **表示不可重写的方法:** 当`final`修饰一个方法时,该方法被称为不可重写的方法,子类无法覆盖父类中的这个方法。

3. **表示不可派生的类:** 当`final`修饰一个类时,该类被称为不可派生的类,即不能有子类继承该类。

 

### `final`修饰变量

 

使用`final`修饰变量时,需要注意以下几点:

 

- **对于基本类型:** `final`修饰的基本类型变量的值一旦被初始化就不能再改变。

- **对于引用类型:** `final`修饰的引用类型变量的引用地址不能再改变,但是引用对象的内容(即对象的状态)可以改变。

```java
public class FinalVariableExample {
    public static void main(String[] args) {
        final int x = 10;
        // x = 20; // 编译错误,无法重新赋值给final变量
 
        final StringBuilder sb = new StringBuilder("Hello");
        // sb = new StringBuilder("World"); // 编译错误,无法重新赋值给final引用类型变量
        sb.append(" World"); // 可以修改引用对象的内容
        System.out.println(sb); // 输出:Hello World
    }
}
```

 

### `final`修饰方法

 

使用`final`修饰方法时,表示该方法不可被子类重写。

 

```java
public class Parent {
    public final void finalMethod() {
        System.out.println("This method cannot be overridden.");
    }
}
 
public class Child extends Parent {
    // 编译错误,无法重写父类中被final修饰的方法
    // @Override
    // public void finalMethod() {
    //     System.out.println("Cannot override final method.");
    // }
}
```

 

### `final`修饰类

 

使用`final`修饰类时,表示该类不可被继承。

 

```java

public final class FinalClass {

   // 类的成员和方法

}

 

// 编译错误,无法从final类派生子类

// public class ChildClass extends FinalClass {

// }

```

 

### `final`修饰成员变量

 

在类中,`final`修饰的成员变量需要在声明时或构造方法中进行初始化赋值,一旦被初始化,其值就无法再次改变。

 

```java
public class FinalMemberExample {
    final int x;
 
    public FinalMemberExample(int x) {
        this.x = x; // 在构造方法中初始化final成员变量
    }
 
    public static void main(String[] args) {
        FinalMemberExample obj = new FinalMemberExample(10);
        // obj.x = 20; // 编译错误,无法重新赋值给final成员变量
    }
}
```

 

### `final`修饰方法参数

 

在方法参数列表中,使用`final`修饰参数表示该参数是只读的,即在方法中不能修改该参数的值。

 

```java

public class FinalParameterExample {

   public void process(final int x) {

       // 编译错误,无法重新赋值给final参数

       // x = 20;

       System.out.println("Value of x: " + x);

   }

 

   public static void main(String[] args) {

       FinalParameterExample obj = new FinalParameterExample();

       obj.process(10);

   }

}

```

 

### `final`修饰注意事项

 

- `final`修饰的成员变量命名通常使用大写字母和下划线分隔的命名规范,如`MAX_VALUE`。

- `final`修饰的方法通常用于设计模式中的模板方法,以防止子类修改模板方法中的核心逻辑。

- `final`修饰的类通常用于安全和性能方面的考虑,以避免类被继承和修改。

 

### `final`的应用场景

 

- **常量声明:** 在声明常量时使用`final`修饰符,以确保常量的值不会被修改。

- **单例模式:** 在单例模式中,将单例对象的引用使用`final`修饰,以确保单例对象的唯一性和不可变性。

- **不可变类:** 在设计不可变类时,将类的成员变量使用`final`修饰,以确保对象状态的不可变性。

- **线程安全:** 在多线程环境下,将共享资源声明为`final`可以提高线程安全性。

 

### 示例代码

 

```java
public class FinalExample {
    public static final int MAX_VALUE = 100;
    private final String name;
 
    public FinalExample(String name) {
        this.name = name;
    }
 
    public final void printName() {
        System.out.println("Name: " + name);
    }
 
    public static void main(String[] args) {
        FinalExample obj = new FinalExample("John");
        obj.printName();
        // obj.name = "Alice"; // 编译错误,无法重新赋值给final成员变量
    }
}
```

 

### 总结

 

`final`修饰符在Java中具有重要的作用,可以用于声明不可变常量、不可重写的方法和不可派生的类。通过合理地使用

相关文章
|
2月前
|
编译器 API 索引
常量、修饰符,以及回调函数
常量、修饰符,以及回调函数
18 0
|
6月前
|
存储 编译器 程序员
c++修饰符类型
c++修饰符类型
46 1
|
6月前
|
安全 Java 数据安全/隐私保护
|
6月前
|
C# 开发者 索引
C#修饰符
C#修饰符
32 0
|
6月前
|
编译器 C++
C++修饰符
C++修饰符
32 0
|
6月前
|
C++
C++ 修饰符类型
C++ 修饰符类型
|
前端开发 C语言
关于修饰符“#”
关于修饰符“#”
76 0
访问修饰符和修饰符
访问修饰符和修饰符
100 1
v-on的参数问题、修饰符、使用
v-on的参数问题、修饰符、使用
93 0
|
C++
类的修饰符
类的修饰符
73 0