Java final与static区别
Java final与static介绍以及区别通过下面2个方面来简述:
1. 当final和static同时使用的时候,我们所熟知的“全局常量”就出现了:一个可以到处使用并且不可以改变的属性,比如我们熟知的Math.PI,Math.E。
public class FinalStatic { private final static double PI = 3.14; private final static double E; private final static double C ; //这里会报错 static {
E = 2.71;
} public FinalStatic(double c){
C = c; //PI = C; 这里会报错 }
}
对于静态final变量,我们可以直接初始化,或者使用静态代码块。而不可以使用构造函数或者构造代码块。
因为static要求在编译期间就确定值,然后放入静态区。而构造函数和构造代码块发生在运行期间。所以不存在空白静态final。
2. 很多时候会容易把static和final关键字混淆,static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变。看下面这个例子:
<span style="font-size:18px;">public class Test { public static void main(String[] args) { MyClass myClass1 = new MyClass(); MyClass myClass2 = new MyClass(); System.out.println(myClass1.i); System.out.println(myClass1.j); System.out.println(myClass2.i); System.out.println(myClass2.j); } } class MyClass { public final double i = Math.random(); public static double j = Math.random(); }</span>
运行这段代码就会发现,每次打印的两个j值都是一样的,而i的值却是不同的。
版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。