Saul's blog Saul's blog
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)

Saul.J.Wu

立身之本,不在高低。
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)
  • Java入门基础

    • 计算机常识

    • Java语言概述

    • 基本语法

    • 数组

    • 面向对象

      • 面向对象
      • 类和对象
      • 类的成员-属性
      • 类的成员-方法
      • 类的成员-构造器
      • 面向对象特性-封装
      • this关键字
      • package关键字
      • import关键字
      • 面向对象特征-继承
      • 方法的重写
      • 访问权限修饰符
      • super关键字
      • 子类对象实例化的全过程
      • 面向对象特征-多态
      • 强制类型转换
      • Object类
      • 包装类
      • static关键字
      • 单例设计模式
      • main方法
      • 类的成员-代码块
      • final关键字
        • final关键字
        • final修饰类
        • final修饰方法
        • final修饰变量——常量
        • static final:全局常量
        • 【面试题】排错
      • 抽象类与抽象方法
      • 接口
      • 类的成员-内部类
    • 异常处理

  • Java核心基础

  • 设计模式

  • Web开发

  • SpringBoot

  • 微服务

  • Elasticsearch

  • 运维

  • 后端
  • Java入门基础
  • 面向对象
SaulJWu
2020-12-15

final关键字

# final关键字

在Java中声明类、变量和方法时,可使用关键字final来修饰,表示“最终的”

  • final标记的类不能被继承。提高安全性,提高程序的可读性。
    • 例如:String类、System类、StringBuffer类
  • final标记的方法不能被子类重写。
    • 比如:Object类中的getClass()。
      • native是底层C++实现。
  • final标记的变量(成员变量或局部变量)即称为常量。名称大写,且只能被赋值一次。
    • final标记的成员变量必须在声明时或在每个构造器中或代码块中显式赋值,然后才能使用。
      • 成员变量
        • 常量可以显式初始化、代码块初始化、构造器初始化
          • 简单赋值就在显式初始化时赋值
          • 可能抛异常或者调用方法,就在代码块初始化赋值
          • 每个对象都可能不一样,构造器中初始化时赋值
      • final修饰方法体内的局部变量,即成为常量。
        • 尤其是使用final修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参,一旦赋值以后,只能获取,不能修改。
    • static final:全局常量

# final修饰类

final标记的类不能被继承。提高安全性,提高程序的可读性。

final class A{
    
}

//错误,不能继承
class B extends A{
    
}
1
2
3
4
5
6
7
8

# final修饰方法

final标记的方法不能被子类重写。

class A{
    public final void print(){
        System.out.println("A");
    }
}

class B extends A{
    //错误,不能被重写
    public final void print(){
        System.out.println("B");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

# final修饰变量——常量

final标记的变量(成员变量或局部变量)即称为常量。名称大写,且只能被赋值一次。

class A{
    private final String INFO = "info....";
    
    public void print(){
        //错误,常量在初始化后不能修改
        INFO = "test";
    }
}
1
2
3
4
5
6
7
8

常量名要大写,内容不可修改。

# static final:全局常量

关键字final应用举例

publc class Student{
    public static int TOTAL_NUMBER = 5;
    public final ID;
    
    public Student(){
        ID = TOTAL_NUMBER++;
    }
}
1
2
3
4
5
6
7
8

全局常量会在类加载的时候赋值一次,而ID会在每个学生对象实例化时生成。

全局常量会一直存在静态方法区,可以做到自动计算。

而ID会在学生对象实例化时赋值,不可再修改。

# 【面试题】排错

public class Something{
    public int addOne(final int x){
        return ++x;		//编译不通过,常量只能赋值一次
        //return x + 1; //编译通过
    }
}
1
2
3
4
5
6

编译不过,常量只能赋值一次。

public class Somenthing2 {
    public static void main(String[] args) {
        Other o = new Other();
        new Somenthing2().addOne(o);
    }

    public void addOne(final Other o) {
        //o = new Other();
        o.i++; 
    }
}

class Other{
    public int i;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

o不可以变,但是i可以变。

帮我改善此页面 (opens new window)
#final
上次更新: 2020/12/18, 12:50:58
类的成员-代码块
抽象类与抽象方法

← 类的成员-代码块 抽象类与抽象方法→

最近更新
01
zabbix学习笔记二
02-28
02
zabbix学习笔记一
02-10
03
Linux访问不了github
12-08
更多文章>
Theme by Vdoing | Copyright © 2020-2022 Saul.J.Wu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式