阿里巴巴开发手册: 若是 static 成员变量,必须考虑是否为 final ?

简介: 阿里巴巴开发手册: 若是 static 成员变量,必须考虑是否为 final ?

阿里巴巴开发手册为啥推荐:若是 static 成员变量,必须考虑是否为 final ?



18. 【推荐】final 可以声明类、成员变量、方法、以及本地变量,下列情况使用 final 关键字: 
1. 不允许被继承的类,如:String 类。  
2. 不允许修改引用的域对象,如:POJO 类的域变量。  
3. 不允许被重写的方法,如:POJO 类的 setter 方法。  
4. 不允许运行过程中重新赋值的局部变量。  
5. 避免上下文重复使用一个变量,使用 final 描述可以强制重新定义一个变量,方便更好 地进行重构。

final


  • final类不能被继承,没有子类,final类中的方法默认是final的
  • final方法不能被子类的方法覆盖,但可以被继承
  • final成员变量表示常量,只能被赋值一次,赋值后不能再被改变
  • final不能用于修饰构造方法
  • private不能被子类方法覆盖,private类型的方法默认是final类型的


static


static表全局静态的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。

被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。

用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。


static和final一起使用


static final用来修饰成员变量和成员方法,可以理解为“全局变量”。

  • 对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
  • 对于方法,表示不可覆盖,并且可以通过类名直接访问。

对于被static和final修饰过的实例常量,实例本身不能再改变了,但对于一些容器类型(比如,ArrayList、HashMap)的实例变量,不可以改变容器变量本身,但可以修改容器中存放的对象


例子


static int a=1;
static final b=1;

这里a和b的区别在于,a在程序里可以被重新赋值为2或3或等等的整数,而b在程序里不能被重新赋值,b永远都为1,也就是说b是一个常量。


final int c=1;
static final b=1;


这里c和b的区别在于,b存放在静态空间,不会在程序运行时被释放,它永远占着内存直到程序终止,而c在程序用完它而不会再用到它的时候就会被自动释放,不再占用内存。

当一个常数或字符串我们需要在程序里反复反复使用的时候,我们就可以把它定义为static final,这样内存就不用重复的申请和释放空间。

相关文章
|
22天前
|
Java
JavaSE——面向对象高级一(1/4)-static修饰成员变量、应用场景,static修饰成员方法、应用场景
JavaSE——面向对象高级一(1/4)-static修饰成员变量、应用场景,static修饰成员方法、应用场景
9 0
|
11月前
|
Java
JAVA中static、final、static final的区别
JAVA中static、final、static final的区别
|
8月前
|
druid Java 编译器
Java的第七篇文章——面向对象接口(包含了接口、static修饰符、final修饰符、main方法、内部类等知识点)
Java的第七篇文章——面向对象接口(包含了接口、static修饰符、final修饰符、main方法、内部类等知识点)
|
9月前
|
存储 Java
【JAVASE】static成员
【JAVASE】static成员
|
9月前
|
编译器 C++
C++11新特性探究:显式override和final
C++中,我们一般可以以基类声明纯虚函数,然后让派生类继承并重写这个虚函数,用override表示显示覆盖基类方法,但一直没有提供一种方法来阻止派生类继承基类的虚函数。
|
11月前
|
设计模式 存储 Java
static和final关键字 学习 demo练习
static和final关键字 学习 demo练习
47 2
|
编译器 C++
【C++11】final与override关键字和类的新功能
#「持之以恒」挑战赛-30天技术创作养成记!# 目录 一、final与override关键字 1.1 final 1.2 override 二、类的新功能 2.1 默认成员函数 2.2 类成员变量初始化 2.3 default关键字 2.4 delete关键字
83 0
【C++11】final与override关键字和类的新功能
|
Java Android开发
java基础篇 之 再探内部类跟final
java基础篇 之 再探内部类跟final
66 0
java基础篇 之 再探内部类跟final
|
算法 Java 关系型数据库
Java进阶部分详解(一)--->final 关键字、Object、String与内部类
从本章节开始就是Java进阶部分内容,从本章节开始开发Java使用 IDEA 开发工具!
107 0
|
设计模式 Java
java面对对象(下.1)(java关键字理解:static final main)
当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上 的对象,只有通过 new 关键字才会产生出对象,这时系统才会分配内存空间给对象, 其方法才可以供外部调用。
java面对对象(下.1)(java关键字理解:static final main)