• java中static关键字的作用


    java中static关键字主要有两种作用:

    第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。

    第二,实现某个方法或属性与类而不是对象关联在一起

    简单来说,在Java语言中,static主要有5中使用情况:成员变量、成员方法、代码块,内部类和静态导包。

    基本用法:

    1. static修饰成员变量:该成员变量属于类变量,可以通过 ClassName.attributeName 直接引用,而不需要new出类的实例。
    2. static修饰成员方法:该方法属于类的方法,可以通过 ClassName.methodName 直接引用,而不需要new出类的实例。
    3. static修饰代码块:仅在类初始化的时候执行一次,且加载顺序是严格按照类中静态资源的定义顺序来加载的;静态代码块对于定义在它之后的静态变量,可以赋值,但是不能访问。;父类代码块->子类代码块。
    4. static修饰内部类:static不能修饰普通类,只能修饰内部类,被static修饰的内部类的创建方式: new OuterClass.InnerClass()。
    5. static导入包:语法“import static java.lang.Math.*”,这样在类中就可以直接使用Math类中的静态方法而不需要写类名,个人认为,在频繁使用某个类的时候比较方便,但是降低了可读性。并且不建议导入*

    下面分别举例说明static的各种用法

    static修饰成员变量和成员方法

      几个结论:

    /**
     *
     * Created by ascend on 2017/6/9 13:51.
     */
    public class Test {
        public static void main(String[] args) throws ClassNotFoundException {
            Class.forName("net.liebao.test.A");
        }
    }
    
    class A {
        static {
            System.out.println("A.static initializer");
        }
    
        public A() {
            System.out.println("A.A");
        }
    }

    输出:

    A.static initializer

      结论一:静态资源属于类,但是独立于类,静态资源在类初始化的时候被加载(早于new),比如通过:Class.forName(“xxx”)可以加载一个类的静态资源,但是没有new。

      结论二:静态资源(静态成员变量,静态成员方法,下同)不能访问非静态资源,非静态资源是new时候才会产生,所以不能访问,反之,非静态资源则可以访问静态资源。

      结论三:静态资源可以访问静态资源,但是需要注意的是,静态资源可以为定义在它之后的静态资源赋值,但是不能访问定义在它之后的静态资源

    另外一个常见的用途是static实现单例模式

      我们都知道,单例模式的特点是该类只能有一个实例,为了实现这一功能,必须隐藏类的构造函数,即把构造函数声明为private,并提供一个创建对象的方法,由于构造对象被声明为private,外界无法直接创建这个类型的对象,只能通过该类提供的方法来获取类的对象,要达到这样的目的只能把创建对象的方法声明为static,程序实例如下:

    class Singleton {
        private static Singleton instance = new Singleton();
        //私有化构造函数
        private Singleton(){}
        public static Singleton getInstance(){
            return instance;
        }
    }  

     上面的单例模式是饿汉模式;

    码字不易,尊重原创,转载请注明:http://www.cnblogs.com/adeng/p/6971366.html 

  • 相关阅读:
    Software_programming_automation_selenium
    Software_programming_EnterpriseArch_ServiceWithSingleTonFactory
    web-bootstrap-button
    Software--C#--grammer_Delegate--Event
    Software_C#_grammer_Deletegate--Strategy
    Software--BigData--StreamingData
    线程死锁和递归锁
    同步锁Lock(互斥锁)
    GIL计算python 2 和 python 3 计算密集型
    什么是python的全局解释锁(GIL)
  • 原文地址:https://www.cnblogs.com/adeng/p/6971366.html
Copyright © 2020-2023  润新知