Static变量和方法的一些理解

  静态变量:static,用static修饰符修饰的域是仅属于类的静态变量。静态变量是类中每个对象共享的变量,他们是类的变量,不属于任何一个类的具体对象,是一个公共的存储单元,任何一个类的对象访问它时,取到的都是相同的数值。

  静态初始化器:static,静态初始化器是又static关键字引导的一对大括号括起的语句组,其作用是在加载的时候,初始化类的静态变量。

  与构造函数的相同,都是为了初始化,但是又有所不同

  1.构造函数时对每个新创建的对象进行初始化,而静态初始化器是对类自身进行初始化。

  2.构造函数在用new运算符产生新对象时由系统自动执行,而静态初始化器则是在它所属的类加载到内存时由系统调用执行。

  3.不同于构造函数,静态初始化器不是方法,没有返回值,方法名,和参数。

  当在一个类中定义构造函数和静态初始化器时的调用顺序为,先调用静态初始化器,然后再调用构造函数

  当子类和父类都含有各自的构造函数和静态初始化器时,先调用父类的静态初始化器,然后调用子类的静态初始化器,接着再调用父类的构造函数,最后调用子类的构造函数。

 2 
 3 public class StaticMethod {
 4     public StaticMethod()
 5     {
 6         System.out.println("StaticMethod construter");
 7         
 8     }
 9     
10     static{
11         System.out.println("StaticMethod static method");
12     }
13     public static void main(String[] args) {
14         StaticMethod sm = new StaticMethod();
15     }

结果为:

StaticMethod static method
StaticMethod construter

当有子类和父类时情况如下:

 1 public class StaticMethod {
 2     public StaticMethod()
 3     {
 4         System.out.println("StaticMethod construter");
 5         
 6     }
 7     
 8     static{
 9         System.out.println("StaticMethod static method");
10     }
11 
12 
13 }
14 public class StaticSun extends StaticMethod {
15     public StaticSun()
16     {
17         System.out.println("Sun construter");
18     }
19     static{
20         System.out.println("Sun static method");
21     }
22 
23     public static void main(String[] args) {
24         // TODO Auto-generated method stub
25         StaticMethod sm = new StaticSun();
26 
27     }
28 
29 }

结果为:

StaticMethod static method
Sun static method
StaticMethod construter
Sun construter
原文地址:https://www.cnblogs.com/luoweiKnowledge/p/4208194.html