阿里巴巴开发手册: 若是 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,这样内存就不用重复的申请和释放空间。

相关文章
|
编译器
【面试题精讲】构造方法有哪些特点?是否可被 override?
【面试题精讲】构造方法有哪些特点?是否可被 override?
|
4月前
|
存储 Java 对象存储
【Java基础面试四十三】、 static和final有什么区别?
由于网络原因,我无法获取到您提供的链接内容。如果需要我解析该网页,请确保链接有效并重试,或者提供其他问题,我会尽力帮助您。
|
4月前
|
Java
【Java基础面试四十二】、 static修饰的类能不能被继承?
这篇文章讨论了Java中static关键字修饰的类是否可以被继承,解释了静态内部类的概念、规则以及如何实例化。
|
7月前
|
Java
【JAVA学习之路 | 基础篇】static静态方法(类方法)
【JAVA学习之路 | 基础篇】static静态方法(类方法)
|
6月前
|
Java
JavaSE——面向对象高级一(1/4)-static修饰成员变量、应用场景,static修饰成员方法、应用场景
JavaSE——面向对象高级一(1/4)-static修饰成员变量、应用场景,static修饰成员方法、应用场景
25 0
|
7月前
|
存储 缓存 Java
从static说起
从static说起
47 0
|
druid Java 编译器
Java的第七篇文章——面向对象接口(包含了接口、static修饰符、final修饰符、main方法、内部类等知识点)
Java的第七篇文章——面向对象接口(包含了接口、static修饰符、final修饰符、main方法、内部类等知识点)
|
存储 Java
【JAVASE】static成员
【JAVASE】static成员
|
设计模式 存储 Java
static和final关键字 学习 demo练习
static和final关键字 学习 demo练习
73 2
|
Java
Java面向对象进阶1——static修饰符
无static修饰的成员变量或者成员方法,称为实例变量,实例方法,实例变量和实例方法必须创建类的对象,然后通过对象来访问,且必须用对象来调用
124 0
Java面向对象进阶1——static修饰符