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原创文章,未经本站允许不得转载。