java面向对象final


在Java中,final是一个关键字,它可以用于修饰类、方法和变量。

当用final修饰一个类时,表示这个类不能被继承。例如:

final class MyClass {
    // ...
}

当用final修饰一个方法时,表示这个方法不能被子类重写。例如:

class MyClass {
    final void myMethod() {
        // ...
    }
}

当用final修饰一个变量时,表示这个变量只能被赋值一次。例如:

class MyClass {
    final int MY_CONSTANT = 100;
}

注意,final修饰的变量必须在声明时或者构造函数中初始化,而不能在方法中初始化。

使用final修饰变量的另一个常见用途是,将一个对象引用声明为final,这样就保证了这个引用指向的对象不能被改变,但是这个对象本身是可以改变的。例如:

class MyClass {
    final List<String> myList = new ArrayList<>();
}

在这个例子中,myList是一个final引用,但是我们可以向其中添加或删除元素。

总的来说,final关键字用于限制类、方法和变量的可变性,使程序更加安全和可靠。

当使用final修饰类、方法和变量时,有以下几个方面的注意点:

  1. final类不能被继承,这是因为final关键字将这个类的继承链断掉了。如果你的设计需要让一个类被继承,就不能使用final修饰它。

  2. final方法不能被子类重写,这是因为final关键字将这个方法的实现锁定了。如果你的设计需要让一个方法在子类中有不同的实现,就不能使用final修饰它。

  3. final变量只能被赋值一次,这是因为final关键字将这个变量的值锁定了。如果你的设计需要让一个变量的值可以被多次修改,就不能使用final修饰它。

  4. final变量在声明时或构造函数中初始化,如果你尝试在其他方法中对final变量进行初始化,编译器会报错。

  5. final变量常常被用于表示常量,常量一般用全大写字母命名,例如:

    final int MAX_COUNT = 100;
  6. final引用只保证了这个引用指向的对象不能被修改,但是这个对象本身是可以被修改的。如果你需要保证一个对象本身也不能被修改,可以考虑使用不可变对象。

  7. 在Java中,static final组合经常用于表示全局常量,例如:

    public static final int MAX_THREADS = 10;

    注意到这里使用了public修饰符,表示这个常量是公共的,其他类可以通过类名来访问它。

除了以上提到的注意点,还有一些关于final的细节需要注意:

  1. final关键字和privateabstract等关键字可以一起使用,例如:

    private final int MY_CONSTANT = 100;

    这里的MY_CONSTANT是一个私有的、只能被赋值一次的常量。

  2. final关键字和volatile关键字不可以同时使用,因为final关键字表示变量不可变,而volatile关键字表示变量的值可以在多个线程之间共享。所以这两个关键字有冲突。

  3. final关键字和transient关键字可以同时使用,表示这个变量是一个不可变的、不需要序列化的成员变量。

  4. 在方法参数中使用final关键字可以确保这个参数在方法内部不会被修改。例如:

    public void myMethod(final int x) {
        // x = 10;  // 编译错误:final参数不能被修改
    }
  5. 在匿名内部类中使用外部变量时,这个变量必须是final的。这是因为匿名内部类可以访问外部变量,但是如果外部变量被修改了,匿名内部类中的值就不确定了。例如:

    int x = 100;
    Runnable r = new Runnable() {
        @Override
        public void run() {
            System.out.println(x);
        }
    };
    x = 200; // 修改x的值
    r.run(); // 输出200,而不是100

    如果将x声明为final,则在匿名内部类中就不能修改它的值,就可以保证输出的是100。

总的来说,final关键字用于修饰不可变的类、方法和变量,可以提高程序的可读性、可靠性和安全性。在使用final时,需要注意一些细节和注意点。


原文链接:codingdict.net