static JAVA

static 关键字:
使用static修饰的变量是类变量,属于该类本身,没有使用static修饰符的成员变量是实例变量,属于该类的实例。
由于同一个JVM内只对应一个Class对象,因此同一个JVM内的一个类的类变量只需要一块内存空间,但对应实例变量而言,该类每创建一次实例,就需要为实例变量分配一块内存空间.

实例变量的初始化时机:

1.定义实例变量时进行初始化;2,非静态初始化块中对实例变量指定初始值;3,构造器总对实例变量指定初始值。

非静态初始化块将先获得执行的机会,在构造器执行之前执行。

 1 public class InitTest
 2 {
 3 
 4     public static void main(String[] args)
 5     {
 6         Cat cat = new Cat("Kitty",2);
 7         System.out.println(cat);
 8         Cat c2 = new Cat("Jatfield",3);
 9         System.out.println(c2);
10     }
11 }
12 
13 class Cat
14 {
15     String name;
16     int age;
17     
18     public Cat(String name,int age)
19     {
20         System.out.println("执行构造器!");
21         this.name =name;
22         this.age= age;
23     }
24     
25     //非静态初始化块总是在构造器执行之前获得执行。
26     {
27         System.out.println("执行非静态初始化块");
28         weight=2.0;
29         age =0;
30         //System.out.println("weight =:"+weight);
31     }
32     
33     double weight = 2.3;
34     public String toString()
35     {
36         return "cat [name =  "+name+" age = "+age+" ,weight = "+weight+"]";
37     }
38     
39 }

运行:

  执行非静态初始化块
  执行构造器!
  cat [name = Kitty age = 2 ,weight = 2.3]
  执行非静态初始化块
  执行构造器!
  cat [name = Jatfield age = 3 ,weight = 2.3]

隐式调用和显式调用:

当调用某个类的构造器来创建JAVA对象时,系统总是会先调用父类的非静态初始化块进行初始化,这个调用是隐式执行的,而且父类的静态初始化块总是会先执行,接着会调用父类的一个或多个构造器执行初始化,这个调用既可以通过super显式调用,也可以隐式调用。

     类的继承关系: Object <---Parent<----Mid<---- Sub

程序会按如下步骤进行初始化:

  1),执行Object类的非静态初始化块(如果有的话)

  2),隐式或显式调用Object类的一个或多个构造器进行初始化,

  3),执行Parent累非静态初始化块(如果有的话)

  4),隐式或显式调用Parent类的一个或者多个构造器进行初始化,

  5),执行Mid类非静态初始化块(如果有的话)

  6),隐式或显式调用Mid类的一个或多个构造器执行初始化,

  7),执行Sub类非静态初始化块(if have)

  8),隐式或显式调用Sub类的一个或多个构造器执行初始化。

只要在程序创建java对象,系统总会先调用最顶层父类的初始化操作,包括初始化块和构造器,然后依次向下调用所有父类的初始化操作,最终执行本类的初始化操作返回本类的实例。对于调用父类的哪个构造器进行初始化,则分:

  1),子类构造器执行体的第一行代码使用super显式调用父类的 构造器,系统将根据super调用里出传入的实参列表来确定调用父类的哪个构造器;

  2),子类构造器中使用this显式调用本类中重载的构造器,系统将根据this调用里传入的实参列表来确定本类的另一个构造器;

  3),子类构造器中 既没有super 也没有this调用,系统将会在执行子类构造器之前,隐式调用父类无参数的构造器。

原文地址:https://www.cnblogs.com/happinessqi/p/3439163.html