static

作者: 编码之路从零开始 | 来源:发表于2019-05-14 21:39 被阅读0次
  1. static关键字
    作用:
    1. 方便在没有创建对象的时候调用方法或者对象
    2. 被static变量修饰的变量,代码块,方法只会在类初始化的时候加载一次
    3. 被static变量修饰的变量,代码块,方法在内存(运行时常量池中)中只会生成一个副本
    4. 使用 static final 进行 常量传播优化,在使用 static final 修饰的变量时不会进行类的初始化
public class ConstClass{
    static {
        System.out.println("ConstClass init!");
    }
    public static final String HELLOWORLD = "hello world";
}

public class NotInitialization{
    public static void main(String[] args){
        System.out.println(ConstClass.HELLOWORLD);
    }
}

  1. static代码块

  1. static变量

  1. static方法

    1. static方法会随着类的初始化而被装载到内存(运行时常量池中类对应的Class对象)中。所以static方法在内存中有且仅有一个内存空间。
    2. 因为static方法中只能存在静态成员变量,所以任意一个对象对静态成员变量的修改都会影响其他对象。

每一个被虚拟机加载类在运行时常量池中都有且仅有一个对应的Class对象


  1. static类
    静态内部类不依附与外部类(不能在静态内部类中使用 外部类.this

静态内部类和普通内部类区别
1. 表面区别:普通内部类可以调用外部类的任意变量/方法,静态内部类只能调用静态变量/方法
2. 本质区别普通内部类会维护一个外部类的this变量(也就是和当前内部类对象相关联的外部类实例),这也就是为什么实例化(new)普通内部类先实例化(new)一个外部类的原因。
而静态内部类没有维护该this变量,意味着静态内部类和外部类没有强关联关系(这也就意味着静态内部类和外部类相当于是借鸡下蛋的关系,看着属于外部类,其实本质上没有任何关系,静态内部类相当于普通类)。


这是最简单的一个普通内部类示例

public class OuterClass {
    public class InnerClass{
    }
}

使用javap -c进行编译

普通内部类
public class OuterClass {
    public static class InnerClass{
    }
}
静态内部类 外部类

other
静态内部类可以实例化多个对象(内存空间不一样)

相关文章

网友评论

      本文标题:static

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