美文网首页JDK源码分析
java之static、static final、final的区

java之static、static final、final的区

作者: Sophie12138 | 来源:发表于2018-09-05 19:58 被阅读16次

    static

    static可修饰属性、方法、内部类、代码段
    static强调的是只有一份,且可改变,但是在原有的地址空间上进行改变。
    如:
    static修饰属性

    public class Test {
        //当加载类时就会优先初始化t变量,所以是在运行期前初始化空间。
        //在此之后使用Test.t = "test2"这样的语句,可以修改成功。
        private static String t = "test";
    }
    

    static修饰方法:

    public class Test {
        // 可以通过Test.main()来进行调用。也是在加载字节码时初始化。
        public static void main(String[] args) {
            ...
        }
    }
    

    static修饰的内部类:

    public class Test {
        //  修饰静态内部类(ps内部类分为:成员内部类、局部内部类、静态内部类、匿名内部类)
        static class StaticInnerClass {
        }
    

    static修饰的代码片段:

    public class Test {
        // 修饰静态方法
        static void fun() {
        }
    

    jvm内存主要分为

    • stack segment
    • heap segment
    • code segment
    • data segment
      static作为类共享的修饰符,可以被类中任何地方调用访问。static修饰的变量存放在code segment。而一般的变量存在实例中,实例存在于heap segment,变量的引用存放在stack segment中。

    final

    • final修饰的类不能被继承
    • final修饰的方法,无法被子类重写
    • final修饰的变量,无法修改值,final String a;,因为在初始化时没有赋值,之后a变量不能再赋值修改。

    static final

    static final和final static没什么区别,一般static写在前面。

    • 常量,在加载时不依赖类,即在常量是在加载类之前加载的,加载常量后,才加载类,所有的常量会维护在常量池中。

    相关文章

      网友评论

        本文标题:java之static、static final、final的区

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