java静态final

public static final double  PI = 3.141592653589793

此变量被标记为public,因此可供各方读取。

此变量被标记为static,所以你不需要Math的实例。

此变量被标记为final,因为圆周率是不变的。

常数变量的名称应该要都是大写字母!


静态初始化程序(static initializer)是一段在加载类时会执行的程序代码。它会在其他程序使用该类之前就执行。所以很适合放静态final变量的起始程序。

class Foo{

    final static int x;

    static{

        x = 42;

    }

}

静态final变量的初始化:

1、声明的时候:

public class Foo{

    public static final int FOO_X = 25;  // 注意这个命名惯例——应该都是大写,并以下划线字符分割。

}

2、在静态初始化程序中:

public class Bar{

    public static final double BAR_DING;

    static{

        BAR_DING = (double)Math.random();  //这段程序会在类被加载时执行。

    }

}

final不止用在静态变量上。。。。

你也可以用final关键字来修饰非静态的变量,这包括了实例变量、局部变量或是方法的参数。不管哪一种,这都代表它的值不能变动。但你也可以用final来防止方法的覆盖或创建子类。

fianl的变量代表你不能改变它的值。

final的method代表你不能覆盖掉该method。

final的类代表你不能继承该类(也就是创建它的子类)。

非静态final变量

class Foof{

    fianl int size = 3; //size将无法改变

    fianl int whuffle;

    Foof(){

        whuffle  = 42;   // whuffle不能改变。

    }

    void doStuff(final int x){

        //不能改变x

    }

    void doMore{

        final int z = 7;

        //不能改变z

    }

}

final的method

class Poof{

    final void calcWhuffle(){

        //绝对不能被覆盖过

    }

}

final的class

final class MyMostPerfectClass{

        //不能被继承过

}

静态(static)的方法不能调用非静态变量

静态的方法是在无关特定类的实例情况下执行的。因为静态的方法是通过类的名称来调用,所以静态的方法无法引用到该类的任何实例变量。在此情况下,静态的方法也不会知道可以使用那个实例变量值。

public class Duck {
private int size;
public static void main(String[] args) {
System.out.println("Size of duck is" + size);  //哪一个Duck?此时我们无法得知堆行是否有Duck
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}

静态的方法也不能调用非静态的方法

public class Duck {
private int size;
public static void main(String[] args) {
System.out.println("Size of duck is" + getSize);  //调用getSize()会需要用到size实例变量,到底要谁的size?
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}

}

静态变量它的值对所有的实例来说都相同。

静态变量是共享的。

同一类所有的实例共享一份静态变量。

实例变量:每个实例一个。

静态变量:每个类一个。

总结:

1、静态的方法应该用类的名称来调用,而不是用对象引用变量。

2、静态的方法可以直接调用而不需要堆上的实例。

3、静态的方法是一个非常实用的方法,它不需要特别的实例变量值。

4、静态的方法不能存取非静态的方法。

5、如果类只有静态方法,你可以将构造函数标记为private的以避免被初始化。

6、静态变量为该变量所属类的成员所共享。静态变量只会有一份,而不是每个实例都有自己的一份。

7、静态方法可以存取静态变量。

8、在Java中的常量是把变量同时标记为static和final的。

9、final的静态变量值必须在声明或静态初始化程序中赋值:

    static{

        DOG_CODE = 452;

    }

10、常量的命名惯例是全部使用大写字母。

11、final值一旦被赋值就不能更改。

12、final的方法不能被覆盖。

13、final的类不能被继承。

14、静态的方法不能调用非静态变量





猜你喜欢

转载自blog.csdn.net/swy18929564409/article/details/80701300
今日推荐