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

相关文章
|
6月前
|
存储 Java 对象存储
【Java基础面试四十三】、 static和final有什么区别?
由于网络原因,我无法获取到您提供的链接内容。如果需要我解析该网页,请确保链接有效并重试,或者提供其他问题,我会尽力帮助您。
|
6月前
|
Java
【Java基础面试四十二】、 static修饰的类能不能被继承?
这篇文章讨论了Java中static关键字修饰的类是否可以被继承,解释了静态内部类的概念、规则以及如何实例化。
|
9月前
|
存储 缓存 Java
从static说起
从static说起
58 0
|
druid Java 编译器
Java的第七篇文章——面向对象接口(包含了接口、static修饰符、final修饰符、main方法、内部类等知识点)
Java的第七篇文章——面向对象接口(包含了接口、static修饰符、final修饰符、main方法、内部类等知识点)
|
设计模式 存储 Java
static和final关键字 学习 demo练习
static和final关键字 学习 demo练习
83 2
|
Java Android开发
java基础篇 之 再探内部类跟final
java基础篇 之 再探内部类跟final
96 0
java基础篇 之 再探内部类跟final
|
设计模式 Java
java面对对象(下.1)(java关键字理解:static final main)
当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上 的对象,只有通过 new 关键字才会产生出对象,这时系统才会分配内存空间给对象, 其方法才可以供外部调用。
java面对对象(下.1)(java关键字理解:static final main)
|
存储 Java 编译器
【叁】了解对象与类(面向对象思想、final、static静态域和方法)
【叁】了解对象与类(面向对象思想、final、static静态域和方法)
112 0
|
Java
Java常用关键字(final,abstract,instanceof,static)简介
1.final关键字 1.1final关键字基本介绍 (1)用来修饰类,在JDK中,被设计为final类的有String、System等。 当用final修改类时,该类成为最终类,无法被继承。简称为“断子绝孙类”。 (2)用来修饰一个方法 当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。 (3)final修饰变量, ①如果是基本数据类型的变量,则其数值一旦在初始化之后便不能改变; ②如果是对象类型的变量,只能保证它的引用不变,但对象的内容是可以改变的
163 0
|
存储 Java 编译器
Java面向对象——封装、构造方法、private、static
Java面向对象——封装、构造方法、private、static
408 0
Java面向对象——封装、构造方法、private、static