美文网首页Java学习笔记
深入理解Java-static 关键字的理解

深入理解Java-static 关键字的理解

作者: 289346a467da | 来源:发表于2018-04-22 13:25 被阅读10次

static 关键字的理解

通常来说,当创建一个类时,就是在描述那个类的对象的外观与行为。除非用new创建那个类的对象,否则,实际上并未获得任何对象。当执行new来创建对象时,数据存储空间才会被分配,其类中的方法才供外界调用。

有两种情形用上述方法是无法解决的。

  • 一种情形是,只想为某个特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建任何对象。
  • 另一种情形是,希望某个方法不与包含它的类的任何对象关联在一起。

也就是说,即使没有创建对象,也能够调用这个方法。

如何解决这两种情形呢?通过static关键字可以满足这两方面的需要。

当声明一个事物是static时,就意味着这个域或方法不会与包含它的那个类的任何对象实例相关联。也就是说,即使从未创建某个类的任何对象,也可以调用其static方法或访问static域。

==注意==: 通常我们访问某个类的方法或数据,非static域或方法必须与某一个特定对象关联。由于在用static方法前不需要创建任何对象,所以对于static方法,不能简单的通过调用其他非static域或方法而没有指定某个命名对象,来直接访问非static域或方法。

如何使用static关键字呢?只须将static关键字放在定义之前。

public class StaticTest {
    static int i = 47;
}

创建两个StaticTest 对象

 StaticTest staticTest1 = new StaticTest();
 StaticTest staticTest2 = new StaticTest();

根据上述的理解,用static修饰的事物,会分配到一个特定的存储空间中,而不是两个StaticTest对象分配的存储空间,也就是说StaticText.i 只有一个存储空间,这两个对象共享同一个i.

 StaticTest.i ++;

staticTest1.i 和 staticTest2.i 都变成了48

总结

尽管static作用于某个字段时,肯定会改变数据创建的方式,因为一个static字段对每个类来说都只有一份存储空间,而非static字段则是每个对象有一个存储空间,static常常拿来做‘牧羊人’的角色,负责看护与其隶属同一类型的实例群。

扩展及应用

理解了static关键字,通常会用于定义一个全局的变量或作用于一个类、作用于方法。

作用于类的最常见的就是单例模式,常见的单例模式,用static作用于这个类,这个类只需实例化一次。

public class StaticTest {
    private static StaticTest instance;

    public static StaticTest getInstance(){
        if (instance == null){
            synchronized (StaticTest.class){
                if (instance == null){
                    instance = new StaticTest();
                }
            }
        }
        return instance;
    }
}

synchronized关键字的用于看这里

相关文章

  • 深入理解Java-static 关键字的理解

    static 关键字的理解 通常来说,当创建一个类时,就是在描述那个类的对象的外观与行为。除非用new创建那个类的...

  • 【Java基础】- 内存模型(转载)

    建议和我的另一篇博文一起阅读,深入理解。深入理解volatile关键字 理解Java内存模型是深入学习Java并发...

  • 2018-11-14号相关学习资料

    java中final关键字的作用深入理解Java中的final关键字java中的final如何使用和理解PPT和1...

  • volitle 与 LongAdder

    深入理解Java中的volatile关键字-HollisChuang’s Blog volatile volati...

  • 深入理解final 关键字

    深入理解final 关键字 [http://www.importnew.com/7553.html] final ...

  • 让你彻底理解volatile,面试不再愁

    1. volatile简介在上一篇文章中我们深入理解了java关键字 这篇文章带你彻底理解synchronized...

  • 深入理解final关键字

    final关键字特性 final关键字在java中使用非常广泛,可以申明成员变量、方法、类、本地变量。一旦将引用声...

  • 深入理解copy关键字

    我们在声明NSString、NSArray等具有可变子类的属性时,一般都会用copy关键字来指定它的特质。 为什么...

  • 深入理解static关键字

    提到static关键字,相信大家都不陌生,这是相对比较难以理解的一个关键字,相信各位也都能深深感受的到!本篇文章将...

  • 深入理解static关键字

    提到static关键字,相信大家都不陌生,这是相对比较难以理解的一个关键字,相信各位也都能深深感受的到!本篇文章将...

网友评论

    本文标题:深入理解Java-static 关键字的理解

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