关于Java static 的学习心得

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Java static 的学习心得相关的知识,希望对你有一定的参考价值。

static,大家都很熟悉。但是要说真的懂,那就很少了。(当然我也不是很懂,但不妨碍学习吗。)

 首先,我认为static修饰的成员就是属于类本身的成员。如果你加了一个static修饰符,好吧,那就相当于表面这是属于大家(所有该类的实例)共享的,属于公共资源。这一些想必大家都有这个意思。但是,对于那些静态成员的初始化是在什么时候呢?这个其实还是没有多少人去详细关注的。下面我就试验一下。

首先写一个类——FirstTest,它包括一个静态变量var,静态内部类BaseInnerClass

 

public class FirstTest {
    static{
        System.out.println("Load FirstTest static");
    }
    final static public String var = "FirstTest static var";
    
    public static void show()
    {
        System.out.println("FirstTest show()");
    }
    
    public FirstTest(){
        System.out.println("FirstTest constructor");
    }
    
    static class BaseInnerClass{
        static{
            System.out.println("Inner class static");
        }
        
        public BaseInnerClass(){
            System.out.println("InnerClass constructor");
        }
        
        public static void show()
        {
            System.out.println("InnerClass show()");
        }
    }

}

 

 

 

 

下面测试当访问它的静态成员变量var,静态内部类的方法show,以及它的构造器

public class Second {
    public static void main(String[] args)
    {
        System.out.println(FirstTest.var);
        FirstTest.show();
        FirstTest.BaseInnerClass.show();
        new FirstTest();
    }

}

 

  实验结果如下:

FirstTest static var
Load FirstTest static
FirstTest show()
Inner class static
InnerClass show()
FirstTest constructor

可以发现:当我们取final修饰的静态成员变量的值时,并不会条用static块中的程序;但是一旦调用它的静态方法或者静态成员时就会调用static块中的程序。所以我觉得static代码块是首次使用这个类时执行的,其后并不会执行。而内部静态类等价于一个final static 修饰的成员,static代码并不会在构建内部类时执行。

总而言之,内部静态类和final修饰的static变量是最先构造的。final修饰的成员必须初始化,因为FirstTest类有一个静态的内部类,所以FirstTest类需要在内部类BaseInnerClass构造完成后才能构造,所以会先执行内部类中的静态方法。然后还有一点static代码块只执行一遍,所以可以用来为类的静态变量初始化。而其余非静态成员全部共享这些数据,即除第一次实例化某个对象时会执行static代码块的程序外,别的时候都不会调用了。

 

以上是关于关于Java static 的学习心得的主要内容,如果未能解决你的问题,请参考以下文章

关于JVM了解学习心得总结记录

关于Java三阶段的学习心得

关于Java三阶段的学习心得

暑假自学JAVA Web心得

关于python语言学习心得

Javalucene4.0学习心得