美文网首页
java - 关键字 static

java - 关键字 static

作者: 司鑫 | 来源:发表于2017-08-08 10:53 被阅读12次
一 static 代表着什么

在 java 中,static 表示静态的意思,并不是全局的意思,在 java 中不存在所谓的全局变量的概念。static 可以用来修饰成员变量、成员方法和代码块。当 JVM 加载一个类的时候,若该类中含有静态的成员变量或成员方法时,那么这些变量和方法就会被保存在一个“方法区”中,供全局调用,只有一份。

二 堆栈、堆、方法区(范围和存储信息)

堆栈

  • 每个线程包含一个堆栈,其中存放的是基本数据的对象和自定义对象的引用(引用不是对象本身)
  • 每个栈中的数据都是私有的,其它线程无法访问

  • 堆中存储的全部都是对象,每个对象都包含一个与之对应的 class 的信息(为了获取 class 的操作指令)
  • JVM 只有一个堆,被所有线程共享

方法区/静态区

  • 方法区中包含所有的 class 和 static 变量
  • 方法区和堆一样只有一个,被所有线程共享
三 static 的使用

static 成员变量

static 变量会随着类的加载被初始化,它在内存中只存在一份,可以通过类名直接来访问。

static 成员方法

static 的初始化和 static 成员变量一样。static 方法不可以被 abstract 修饰,因为 static 方法在类加载的时候就已经存在了。

static 代码块

static 代码块也被称为是静态代码块,随着类的加载而被执行,可以放在类中的任何位置。
static 代码块和 static 方法最大的不同就是

  • static 方法是在被调用的时候才会被执行
  • static 代码块是在类的加载的时候就会被执行
四 对象的初始化顺序

先来看段代码

class Parent {
    static String name = "hello";

    {
        System.out.println("parent block");
    }

    static {
        System.out.println("parent static block");
    }

    public Parent() {
        System.out.println("parent constructor");
    }
}

class Child extends Parent {
    static String childName = "hello";

    {
        System.out.println("child block");
    }

    static {
        System.out.println("child static block");
    }

    public Child() {
        System.out.println("child constructor");
    }
}

public class StaticIniBlockOrderTest {

    public static void main(String[] args) {
        new Child();//语句(*) 
    }
}
/**output
 parent static block
 child static block
 parent block
 parent constructor
 child block
 child constructor
**/

顺序:

  1. 执行父类中的静态代码块
  2. 执行本类中的静态代码块
  3. 执行父类中的非静态代码块
  4. 执行父类中的构造方法
  5. 执行本类中的非静态代码块
  6. 执行本类中的构造方法

相关文章

  • Java基础系列-static关键字

    原创文章,转载请标注出处:《Java基础系列-static关键字》 一、概述 static关键字是Java诸多关键...

  • Static关键字

    C语言中的static关键字和Java的static关键字意义不一样。 1 用static修饰函数 static用...

  • Java 面向对象2

    Java 面向对象 1. static 和 final static关键字---修饰成员变量 用static修饰的...

  • 1.3 static 关键字

    static 关键字 《Java编程思想》 中:static方法就是没有this的方法 static 修饰的方法或...

  • Java static关键字

    声明static属性 static是Java中定义的一个关键字,主要是描述全局的概念,所以利用static关键字可...

  • 代码查错

    Something1.java 5。 static关键字 static修饰成员变量 用static修饰的成员变量不...

  • Java static关键字

    Java之美[从菜鸟到高手演变]之Java中static关键字

  • Java:3分钟带你全面了解Static静态关键字

    前言 在Java中,静态 Static关键字使用十分常见 本文全面 & 详细解析静态 Static关键字,希望你们...

  • java面试问题总结与分享,很乱

    java中static关键字的作用 在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员...

  • 《九》、static关键字及代码块

    一、static关键字    static关键字在Java程序开发过程之中主要进行属性和方法的定义。 1、stat...

网友评论

      本文标题:java - 关键字 static

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