Java中的static关键字整理

版权声明:转载请请标明出处。 https://blog.csdn.net/AnIllusion/article/details/80876893

特点:

被static修饰的方法或变量在内存中只有一个副本,被所有对象共享。
不依赖于任何对象就可以进行访问。

使用

  • static变量

    1. 当且仅当类加载时被初始化
    2. 初始化顺序按照定义的顺序初始化
  • static方法

    1. 不能访问非静态成员变量和非静态成员方法
    2. main方法
      程序在执行main方法是没有创建任何对象,因此只有通过类名访问
    3. 静态方法与实例方法区别:
      (1)Java中“静态”有多个意思,至少包括以下两点:一是在Java语言中使用static修饰方法时,表示“静态方法”。二是一个方法调用到底能否在运行前就确定一个固定的目标(即早绑定和晚绑定),静态方法属于早绑定。
      (2)在概念中的JVM上的区别:
      Java虚拟机规范第二版中这样描述它们局部变量区的不同:

    The Java virtual machine uses local variables to pass parameters on method invocation. On class method invocation any parameters are passed in consecutive local variables starting from local variable 0. On instance method invocation, local variable 0 is always used to pass a reference to the object on which the instance method is being invoked (this in the Java programming language). Any parameters are subsequently passed in consecutive local variables starting from local variable

    调用类方法时,所有参数按顺序存放于被调用方法的局部变量区中的连续区域,从局部变量0开始;在调用实例方法时,局部变量0存放传入该方法所属的对象实例(Java中的”this”),所有参数从局部变量1开始存放在局部变量区的连续区域中。
    从效果上看,这就等于在调用实例方法时总是把”this”作为第一个参数传入被调用的方法。

  • static代码块

    1. 特性:只在类加载的时候执行一次。
    2. 类初始化顺序:
      Java中类初始化顺序,依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。
      值得注意的是:
      (1)static final 变量在赋值时,值必须编译前就明确了. 若采用 static 变量进行赋值,—— 只能static 代码块中进行赋值(class文件中的实现方式)。
      (2)成员变量赋值时引用了其它变量时,都会在构造器中被赋值(class文件中的实现方式)。

参考

http://www.cnblogs.com/dolphin0520/p/3799052.html
http://rednaxelafx.iteye.com/blog/652719
https://blog.csdn.net/csdnno/article/details/52495891

猜你喜欢

转载自blog.csdn.net/AnIllusion/article/details/80876893