关于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代码块的程序外,别的时候都不会调用了。

时间: 2024-08-15 00:28:24

关于Java static 的学习心得的相关文章

201671010117 2016-2017-2 《Java程序设计》Java第二周学习心得

Java第二周学习心得 这一周老师在周四进行了课堂测验,完全出乎我的意料,我以为老师会在前两周上课讲一下,由于我在课前没有好好准备,反转课堂来的有的措手不及,那些题很多很多都不会,也错了很多,班上有很多表现很好的同学,他们课前准备充分,在课堂上完全没有任何压力,我也意识到了我课前没有花大量时间看书的严重性,所以我下课便去看第三章了,以后也一定要好好看书,找出不懂得问题,课上也要认真向其他优秀同学学习,不懂的问题也要想办法解决. 今天写了PPT上的任务1-9,着实也遇到了很多不会的问题,像是最后的

201671010126 2016-2017-2《JAVA程序设计》学习心得

通过这两周对JAVA程序设计的学习,我对这门课程有了新的认识,每门学科都有其精髓,想要对JAVA有更深的了解,对于初学者的我来说还需付出很多努力. 两周以来尽管伴随着许多疑惑,还是完成了对前三章的学习,通过这短短半个月的时间,发现JAVA的基础知识太过繁多,知识点相对较为零碎,许多东西理解起来有一定难度.所幸JAVA程序设计与上学期所学的C语言有着许多的相似之处,所以就可以借鉴对C语言的学习经验来学习JAVA,尽管能学好C语言不意味着就能学好JAVA,不过相信以前C语言的学习对JAVA这门新课程

201671010106 2016-2017-2 《JAVA程序设计》学习心得4

本章中的学习过程中,我了解到了继承这个概念,继承是Java程序设计中的一项核心技术,用已有类来构建新类的一种机制.当定义了一个新类继承了一个类时,这个新类就继承了这个类的方法和域,同时在新类中添加新的方法和域以适应新的情况. 继承的优点主要有:1:代码的可重用性    2:可以轻松地自定义子类  3:父类的域和方法可用于子类   4:设计应用程序变得更加简单 1:通过扩展超类定义子类时,仅需要指出子类与超类的不同之处.在子类中可以增加域.增加方法或覆盖(override)超类的方法,但绝对不能删

java脚本语言学习心得

第一篇技术博客,一定要认真! 第一篇技术博客,一定要认真! 第一篇技术博客,一定要认真! 好了,进入正题: 一 什么是脚本语言? 程序的运行方式有两种:编译运行和解释运行 1.1 前者的典型代表是java, 从文件角度看分为三步: write[编写]: a.java文件(拿个记事本就能写,扩展名是.java), compile[编译]: 编译(cmd命令是java a.java,ide集成了编译器运行之前自动编译)之后产生了a.class文件(是一堆二进制码,人看不懂,是给虚拟机看的) 运行[r

201671010106 2016-2017-2《Java程序设计》学习心得2

通过对第三章的学习,渐渐的更加了解了java这门课程,这门课程跟我们之前的c语言有相同之处,也有他特有的地方,在本章的学习过程中,我觉得我的课前准备预习工作做的还是不太好,当第一节课课堂检测的时候有些题根本不会,所以说对知识还是有一定的模糊,在看课件的时候也没有那么详细,有些知识点明明就可以在那些资源里找得到,可就是没有用心去看,导致自己很模糊. 这一章的知识点呢和c语言的有一定的相似度,比如在整型的那个里面,加了一个byte类型,这就是独特之处.而且在标识符那里也有独特的地方,从这一章开始自己

java第二周学习心得

时光匆匆,第二周的学习 就过去了,对于java程序的编写还是不怎么熟悉 Java虚拟机JVM是Java语言最大的特点,JVM是一个可运行Java字节码的虚拟计算系统..它有一个解释器组件,可以实现Java字节码和计算机操作系统之间的通信.还包括一组寄存器.一个栈.一个垃圾回收堆和一个存储方法域. JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的字节码,就可以在多种平台上不加修改地运行.这个也是java最大的特色跨平台性,也就是一处编写,处处运行.JVM在执

201671010106 2016-2017-2《Java程序设计》学习心得

这学期我要学一门新的课程JAVA核心技术,虽然之前听过有的学长学姐说起过这门课,心里还是挺想学的,虽然去年一年的编程课成绩不是怎么突出,就像学c语言,学的不是特别精,所以给我这学期的学习带来了一定的压力,但是我觉得我如果跟得上老师的教学进度,这些压力和困扰还是会迎刃而解的. 通过第一章和第二章的学习,我认识到了JAVA的优越性,对于别的语言,它是包容性很强的一门语言,但是也需要我们深入的挖掘这些东西,JAVA这门语言具有简单性,健壮性,安全性可移植性,解释性,高性能,多线程,动态性这些优点.分布

java常用设计模式学习心得

学习自:http://shenzhenchufa.blog.51cto.com/730213/161581 代码来自:http://shenzhenchufa.blog.51cto.com/730213/161581 感谢博主:shenzhenchufa. 学习之余我写一些自己的心得.无心侵犯版权,用于自己学习. ------------------------- strategy(策略模式) -------------------------我们有一个设计原则:找出应用中相同之处,且不容易发生

201671010103 2016-2017-2 《Java程序设计》学习心得

很快,一学期就要结束了,Java的学习也基本上结束了.这周老师也带领我们复习了一遍,七百多页的书,虽然没有刚开学那么可怕了,但想想考试,头还是大了.Java的基本知识基本掌握了,但问题还是全部出在编程上,简单一些的还好,稍微复杂点就编不下去了:有些章节学得挺认真,学的时候还不错,学完就忘了,还有一些是上课没听太懂的,比如异常处理那章,理论知识就没听太懂,编程的时候根本不会,哪些语句该放在try语句块里,哪些放在catch语句块里,自己不会判断.还有后面的十,十一,十二那三章,上课听的时候还不错,