Java中static的作用

    static表示“静态”或者“全局”的意思,用来修饰成员变量和成员方法,也可以形成静态的static代码块,但是Java语言中没有全局变量的概念。
    
    被static修饰的成员变量和成员方法独立于该类的任何对象,也就是说,不依赖类特定的实例,被类的所有实例共享。

    只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何的对象。

    static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名访问,

    类名.静态方法(参数)

    类名.静态变量

    所有的类的实例共享静态变量。

    static和final一块用表示什么

    static和final用来修饰成员变量和成员方法,可简单的理解为“全局常量”

    对于变量,表示一旦给值就不可以修改,并且通过类名访问。

    对于方法,表示不可覆盖,并且可以通过类名直接访问。

    要理解Java语言为什么这么设计通常要结合实际的例子要进行考虑。

    比如当你设计一些工具类,你希望这些工具类中的方法被其他类引用,但是你又不希望创建工具类的实例,这时候你就可以将工具类中的方法修饰为static,然后通过 类名.静态方法(参数)的形式去引用它,这样就非常的方便。又比如说,Java的底层定义了很多方法供开发者使用,但是他又不希望开发者复写(override)该方法(他觉得自己已经写的很好了,不希望别人乱改),所有他只好用static final修饰该方法,然后通过 类名.静态方法(参数)引用,这样开发者既能很方便地引用该方法,同时也不会因为其他的原因可能改动该方法(因为人家在设计这个方法的时候压根就不想让你改)。
    
    static修饰成员变量是,比如说创建了一个类,这个类是人。如果你涉及的人都是中国人,那么你可以将这个类的国籍这个成员变量修饰为static,并给它一个默认值为“中国”。那么无论你创建多少个该类的实例,这些实例的国籍属性都是中国,而且它们都指向同一块内存区域。一旦在某个实例中修改了国籍这个属性,其他所有的实例也随之修改。因为它们共享同一块内存区域。如果你不希望这个变量被修改,也不希望后来的开发者乱改,你可以直接将之定义为static final,表示所有的实例都共享这个变量,并且都不允许修改。(你要是改了编译器肯定会报错)
    
    总结,static表示静态的意思。要理解静态要跟动态结合起来,动态是指在运行的过程中可以改变变量的类型和值,那么静态就是指在JVM加载之前就已经定义好了该变量。
    final是指不希望被修改,要是用了final修饰就是指,你最好别再动我了!
    
    最后,不讲为什么这么设计,直接讲就该这么设计的都是耍流氓!
    

























原文地址:https://www.cnblogs.com/fengmanlou/p/4533682.html