Java关键字staticfinal

Static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,被static修饰的成员变量和成员方法独立于该类的任何对象。

也就是说,它不依赖类特定的实例,被类的所有实例共享。只要该类加载,JVM虚拟机就能根据类名在运行时数据区的方法区内找到他们。因此,static对象可以在它的任

何对象创建之前访问,无需引用任何对象。

1、static修饰类的成员方法或者成员变量,我们通常称该方法是静态方法,该方法是静态变量;

若用public修饰static成员方法或者成员变量,表示该方法或该变量是全局的,可以在其他类中通过类名直接调用;

若用private修饰static成员变量,表示该变量只能在该类的成员方法中使用,并且可以在该类的静态代码块中使用;

在静态方法或者静态代码块中只能调用静态变量,但在非静态方法或者代码块中可以调用静态和非静态的变量。

2、静态代码块 非静态代码块 构造函数的加载顺序

    静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次

    非静态代码块,在创建对象的时候(即new一个对象的时候)执行,每次创建对象都会执行一次

1 public class StaticTest {

2    static {

3        System.out.println("static function...");

4    }

5    {

6        System.out.println("unstatic function...");

7    }

8    public StaticTest(){

9        System.out.println("construct function...");

10    }

11    public static void main(String[] args) {

12        new StaticTest();

13    }

14 }

    运行结果:



    所以这三者的加载顺序是 静态代码块>非静态代码块>类构造函数

    注:非静态代码块在不new类的时候是不是执行的。

      如果有多个静态代码块,执行顺序是按照代码块的先后顺序执行。

2、静态变量

  

public class StaticTest {

    static String a="string-a";

    static String b;

    String c = "string-c";

    String d;

    static{

        System.out.println("----------------------------");

    }

    static {

        System.out.println("static function...");

        privateStaicString("befor static");

        b="string-b";

        privateStaicString("after static");

    }

    {

        System.out.println("unstatic function...");

        privateStaicString("befor unstatic");

        b="string-b";

        privateStaicString("after unstatic");

    }

    public StaticTest(){

        System.out.println("construct function...");

        privateConstructtring("befor construct");

        d="string-d";

        privateConstructtring("after construct");

    }

    public static void privateStaicString(String title) {

          System.out.println("---------" + title + "---------");

          System.out.println("a="+a);

          System.out.println("b="+b);

    }

    public void privateConstructtring(String title) {

          System.out.println("---------" + title + "---------");

          System.out.println("a="+a);

          System.out.println("b="+b);   

          System.out.println("c="+c);

          System.out.println("d="+d);

    }

    public static void main(String[] args) {

        new StaticTest();

    }

}

  运行结果:


3、static和final一块使用

  static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!

    (1)对于变量,表示一旦给值就不可修改,并且通过类名可以访问

    (2)对于方法,表示不可覆盖,并且可以通过类名直接访问。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章