zoukankan      html  css  js  c++  java
  • static关键字

    1 static 的基本用法

         static关键字所表达的意思就是使得被修饰的变量可以直接通过类调用,static 修饰的方法或者变量,不需要依赖对象来访问,只要被类加载,就可以通过类去访问。

    具体一般有静态方法,静态变量,静态代码块。

         静态方法:静态方法里是没有this的,因为不需要依附某个对象访问,静态方法里不能访问非静态成员变量和非静态成员方法,因为非静态需要依赖对象,又可能对象没创建,所以不能访问,但是  反过来,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法和静态成员变量。

         静态变量:静态变量在类初次加载的时候被初始化,只有一个副本,被所有对象共享。static成员变量初始化顺序按照定义的顺序来进行初始化。与非静态变量相比,非静态变量是在创建对象的时候初始化的,存在多个副本,各个对象拥有的副本互相不会影响。

         静态代码块:静态代码块在类初始化的时候去执行,静态初始化块可以置于类中的任何地方,类中可以有多个静态初始化块。 在类初次被加载时,会按照静态初始化块的顺序来执行每个块,并且只会执行一次。用于只需要初始化一次的操作,可以提高程序性能,减少不必要的产生相同对象导致的资源浪费。

    2 static的加载顺序

        如果类还没有被加载: 
           1、先执行父类的静态代码块和静态变量初始化,并且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关。 
       2、执行子类的静态代码块和静态变量初始化。 
       3、执行父类的实例变量初始化 
       4、执行父类的构造函数 
       5、执行子类的实例变量初始化 
       6、执行子类的构造函数 

       如果类已经被加载: 
       则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法。

    3 static在JVM上的表现

       在一个jvm实例的内部,类型信息被存储在一个称为方法区的内存逻辑区中。类型信息是由类加载器在类加载时从类文件中提取出来的。类(静态)变量也存储在方法区中。

    4 static与单例的应用举例

    /**
     * @author admin
     * @version 1.0.0
     * @Description 单例懒汉模式
     * @createTime 2020年10月04日 16:00:00
     */
    public class SingletonLazy {
        private static SingletonLazy singletonLazy = null;
    
        private SingletonLazy() {
        }
    
        public static synchronized SingletonLazy getInstance() {
            synchronized (SingletonLazy.class) {
                if (singletonLazy == null) {
                    singletonLazy = new SingletonLazy();
                }
                return singletonLazy;
            }
        }
    }
    /**
     * @author admin
     * @version 1.0.0
     * @Description 单例饿汉
     * @createTime 2020年10月04日 16:07:00
     */
    public class SingletonHunger {
        private static final SingletonHunger singletonHunger = new SingletonHunger();
    
        private SingletonHunger(){
    
        }
    
        public static SingletonHunger getInstance(){
            return singletonHunger;
        }
    
    }

     

  • 相关阅读:
    docker swarm 集群搭建和臫servoce对服务扩容
    docker 可视化 portainer
    docker Compose
    hadoop2 安装
    y的最大值最小值切割
    滑块图片拼接
    ast 对象还原
    babel/types is判断
    t.isLiteral()
    杂题集合
  • 原文地址:https://www.cnblogs.com/junbaba/p/13754564.html
Copyright © 2011-2022 走看看