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