美文网首页
JAVA中静态变量、静态方法解析

JAVA中静态变量、静态方法解析

作者: 囧略囧 | 来源:发表于2018-09-26 16:23 被阅读0次

    一、静态变量

    静态变量,被static修饰的变量,也称为类变量。静态变量不属于某个实例,而是属于类。只要程序加载了类,不需要创建任何实例,静态变量便可以被分配空间,且在内存中只分配一个地址。而实例变量需要在创建了实例对象后才会被分配内存,且创建一个实例对象便会分配不同的内存用来存放不同的实例变量。

    在该程序中,不论创建多少个实例对象,instanceVar始终为1,而staticVar在每创建一个实例对象时就会加1。

    静态变量位于方法区,被类的所有实例共享。(这点需要注意!在LeetCode等提交代码时,若使用了静态变量一般会报错,因为不同测试用例共享了静态变量)

    在分配内存空间的顺序上,先分配静态对象的空间,继而分配实例对象的空间。

    那么静态对象有什么好处呢?

    1、全局唯一性。可以被全部实例对象使用并保持值的唯一性。

    2、使用便利。直接“类名.静态对象名”便可对其进行操作,无需get、set等方法。

    PS:final定义常量,static加final修饰组合可以定义全局常量,关于final的总结由于时间原因推迟到以后。

    二、静态方法

    静态方法可以被直接使用而不需要建立任何实例对象(注意,跟类是否有static修饰无关)

    但是,静态方法的使用也需注意一些事项。

    1.静态方法仅能调用其他的静态方法。

    2.静态方法想要直接访问本方法外的变量时,该变量必须为静态变量。

    3.静态方法不能以任何方式饮用this或super。

    三、静态块

    静态块仅在该类被加载时执行一次(注意,仅这一次)。静态块执行的级别是比较高的,要高于构造函数。

    如:

    public class Test {
    public Test() {// 构造方法
    System.out.println("我是构造方法”);
     }
    static {
    System.out.println("我是静态块“);
     }
    }
    

    之后我们创建一个Test类的时候

    new Test(); //输出为"我是构造方法”、"我是静态块“

    new Test(); //输出为"我是构造方法”
    这说明,静态块先于构造函数执行,且只会被执行一次。

    四、静态内部类

    静态内部类指在一个类内部又定义了一个由static修饰的类。为什么要定义内部类,因为其于外部类有一定的关系,并且往往只有外部类会调用该内部类,因为没有必要单独用一个java文件存放该类。

    静态内部类要求使用静态对象和静态方法,静态内部类随着外部类的加载而产生(不是随着实例对象的建立),可以使用类名加静态成员名获得,也就是说它可以通过外部类名+内部类名访问。如:

    public class Build {
         public static class VERSION {
            public static final String RELEASE = getString("ro.build.version.release");
          }
    }
    

    在外部可以直接通过Build.VERSION.RELEASE来访问。

    相关文章

      网友评论

          本文标题:JAVA中静态变量、静态方法解析

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