码迷,mamicode.com
首页 > 编程语言 > 详细

关于Java static 的学习心得

时间:2016-09-01 17:58:10      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

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 的学习心得

标签:

原文地址:http://www.cnblogs.com/GaryWant/p/5830553.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!