美文网首页
关于JAVA中的static变量/方法/代码块

关于JAVA中的static变量/方法/代码块

作者: Tan_233 | 来源:发表于2019-03-25 10:57 被阅读0次

静态变量

  在类成员变量中可以分为静态变量(也叫类变量, 有static修饰)实例变量(没有static修饰).

  对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
  对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。

静态方法

  静态方法的调用是不依赖于实例对象的, 而是直接通过类来调用. 但是实例方法或者实例变量的调用, 是依赖于实例对象的, 静态方法或静态变量中并没有实例对象的创建, 所以是不能通过静态来调用非静态的.
  另外, 由于静态方法不依赖于实例对象的调用, 而且this/super这样的关键字指的就是调用方法的对象的引用, 所以在静态方法中是不能使用this/super关键字的.
  static方法和变量是不能被继承的, 子类是不继承父类的static变量和方法的。因为这是属于类本身的。但是子类是可以访问的.而且, 子类和父类中同名的static变量和方法都是相互独立的,并不存在任何的重写的关系。因此, 静态方法也是不能使用abstract关键字修饰的.

静态成员变量和静态代码块的执行顺序:
  两者没有优先级的差别, 根据从上往下的顺序来执行
注意: 如果是下面的情况, 静态代码块中的a是不可以在静态代码块中进行运算(使用)的, 因为a还没有真正的被实际创建出来.

    // 静态代码块
    static {
        a = 2;
    }
    private static int a = 1;

静态代码块&&非静态代码块

  首先, 接口中是不能写静态代码块和非静态代码块的


image.png
静态代码块和非静态代码块的执行顺序
image.png

可以看出:

  1. 在两次创建Zi类对象时, 静态代码块中的内容只执行了一次, 非静态代码块的内容执行了两次.
  2. 静态代码块中的内容总是先于非静态代码块执行, 父类的(非)静态代码块总是先于子类的执行.
静态代码块和非静态代码块以及构造方法的执行先后顺序
image.png

  创建对象时会执行构造方法, 如图所示, 每一次创建对象时, 执行到的当前类的非静态代码块是优先于当前类的构造方法的, 说的就是下面这样的结果.

xxxx not static
xxxx constructor

  静态代码块是在类加载时自动执行的,非静态代码块是在创建对象时自动执行的代码,不创建对象不执行该类的非静态代码块

综上, 类的执行顺序是:
父类静态代码 → 子类静态代码 → 父类非静态代码块 → 父类构造 → 子类非静态代码块 → 子类构造

资料参考:
[1] https://www.cnblogs.com/DreamDrive/archive/2011/11/15/3917139.html
[2] https://www.cnblogs.com/chengpeng15/p/9336761.html

相关文章

  • Java中static的用法

    在Java中,static可以修饰成员变量、成员方法、代码块和内部类。 1. static修饰成员变量 stati...

  • 关于JAVA中的static变量/方法/代码块

    静态变量   在类成员变量中可以分为静态变量(也叫类变量, 有static修饰)和实例变量(没有static修饰)...

  • static

    static,字面意思是静态,在java中可以用来修饰变量、方法、类,也可以形成静态代码块。static修饰的字段...

  • 如何理解Java中的final、static、final sta

    在Java中这几个关键字常常被混用。 可修饰部分 static:成员变量、方法、代码块(静态代码块)、内部类(静态...

  • Static的使用场景

    在java中static可以用来修饰:内部类、变量、代码块、方法 1.修饰内部类 2.修饰变量 3.修饰方法 4....

  • Java Static关键字

    在java中,static是一个修饰符,用于修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程...

  • static作用与用法

    目录一、static变量二、static方法三、static代码块四、static class static表示“...

  • java程序执行顺序

    Java 类中代码的执行顺序深入了解Java程序执行顺序 单个类: static变量—>Static代码块—> m...

  • Java修饰符static、final、abstract、tra

    1、static static可修饰:类、成员变量、方法、代码块(stati...

  • Java中静态代码块,构造代码块,构造函数代码块

    Java中静态代码块,构造代码块,构造函数代码块,普通代码块 静态代码块 : static代码块指的是static...

网友评论

      本文标题:关于JAVA中的static变量/方法/代码块

      本文链接:https://www.haomeiwen.com/subject/kmnmvqtx.html