Java中final关键字详解

简介: 在Java中final关键字的作用还有很多,final关 键字能修饰变量、方法和类。

final修饰变量


final修饰的变量即成为常量,只能赋值一次,但是final所修饰局部变量和成员变量有所不同。


final修饰的局部变量必须使用之前被赋值一次才能使用。

final修饰的成员变量在声明时没有赋值的叫“空白final变量”。空白final变量必须在构造方法或静 态代码块中初始化。

final修饰变量示例代码如下:

public class FinalDemo {
//    final修饰的全局变量在声明时赋值即成为常量
    final int a = 5;
//    空白final变量
    final int b;
//    静态常量
    final static int c = 12;
//    空白final变量
    final static int d;
//    静态代码块
    static {
        d = 10;
    }
//    构造方法
    public FinalDemo(int b) {
        this.b = b;
    }
//    成员方法
    void doSomething(){
//        final修饰局部变量
        final int e = 100;
        System.out.println(e);
    }
}
class FinalDemoTest{
    public static void main(String[] args) {
//        创建对象
        FinalDemo finalDemo = new FinalDemo(6);
        System.out.println(finalDemo.b);
        finalDemo.doSomething();
        System.out.println(FinalDemo.d);
    }
}

运行结果:

6
100
10


final修饰类


final修饰的类不能被继承。有时出于设计安全的目的,这时可以使 用final关键字修饰父类。

示例代码如下:

final class SuperClass { 
}
class SubClass extends SuperClass { //编译错误 
}

在声明SubClass类时会发生编译错误。


final修饰方法


final修饰的方法不能被子类重写。有时也是出于设计安全的目的,这 是可以使用final关键字修饰父类中方法。

class SuperClass { 
  final void doSomething() { 
    System.out.println("in SuperClass.doSomething()"); 
  } 
}
class SubClass extends SuperClass { 
  @Override 
  void doSomething() { //编译错误 
    System.out.println("in SubClass.doSomething()"); 
  } 
}

子类中的void doSomething()方法试图重写父类中void doSomething()方法,父类中的void doSomething() 方法是final的,因此会发生编译错误。



相关文章
|
2月前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
30 3
|
2月前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
在Java并发编程中,`final`关键字不仅用于修饰变量、方法和类,还在多线程环境中确保对象状态的可见性和不变性。本文深入探讨了`final`关键字的作用,特别是其在final域重排序规则中的应用,以及如何防止对象的“部分创建”问题,确保线程安全。通过具体示例,文章详细解析了final域的写入和读取操作的重排序规则,以及这些规则在不同处理器上的实现差异。
了解final关键字在Java并发编程领域的作用吗?
|
2月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
23 5
|
2月前
|
缓存 安全 Java
Java中 final、finally、finalize 有什么区别?
本文详细阐述了Java中`final`、`finally`和`finalize`的区别:`final`用于修饰类、方法和变量以表示不可变性;`finally`是用于确保在`try-catch`结构中无论是否发生异常都能执行的代码块;而`finalize`是`Object`类的方法,用于在对象被垃圾回收前执行清理工作,但在JDK 9中已被标记为弃用。
36 0
Java中 final、finally、finalize 有什么区别?
|
2月前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
208 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
2月前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
了解final关键字在Java并发编程领域的作用吗?
|
2月前
|
Java 程序员 编译器
【Java】继承、super、final、子类构造方法
【Java】继承、super、final、子类构造方法
31 0
|
2月前
|
安全 Java 编译器
了解final关键字在Java并发编程领域的作用吗?
【10月更文挑战第8天】在Java并发编程中,`final`关键字具有重要作用,包括保证变量的可见性和不可变性,防止对象引用被意外修改,并帮助编译器优化读取操作及消除不必要的同步。通过确保变量不可变,`final`增强了多线程环境下的安全性与性能。
|
4月前
|
前端开发 JavaScript Java
【前端学java】java中final修饰符(6)
【8月更文挑战第9天】java中final修饰符(6)
39 2
|
4月前
|
Java Android开发
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
507 1