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 的学习心得的更多相关文章

  1. 20165221 JAVA第一周学习心得及体会

    JAVA入门的理论学习 在JAVA2使用教程的网课学中,分为以下几个模块讲解的 JAVA的地位 JAVA的特点 安装JDK(Java Develepement Kit) Java程序的开发步骤 简单的 ...

  2. Java线程池学习心得

    一.普通线程和线程池的对比 new Thread的弊端如下: a. 每次new Thread新建对象性能差.b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或o ...

  3. java常用设计模式学习心得

    学习自:http://shenzhenchufa.blog.51cto.com/730213/161581 代码来自:http://shenzhenchufa.blog.51cto.com/73021 ...

  4. java编程思想--学习心得

    学习Java编程思想,需要了解语言特性,对于各种名词,能够借助项目代码,解释其含义,不借助搜索工具,明白其在什么样场景下使用,会带来什么样的问题,能否避免这类问题. 学习的过程,与软件开发相同,一样是 ...

  5. Java static 关键字学习

    static:意为静态的,简单理解就是公共的.独立于实例变量之外的1.概述:static是Java中常用的关键字,一般用于变量.方法.静态代码块.内部类上.静态导包2.用法: a.用于变量上表示该变量 ...

  6. 20165221 JAVA第二周学习心得及体会

    基本数据类型与数组理论学习 根据第二章的网课链接,归纳出以下板块: 知识框架 标识符与关键字 1.标识符 其本质是文件名字 标识符的第一个字符不能为数字,标识符不能为关键字(如inter) 标识符不能 ...

  7. 201671010142 <java程序设计>初次学习心得与感悟

    从开始对JDK的配置就遇到了问题,从这点就可以知道自己知识的薄弱.又知道了在控制台下一些常用命令的掌握.对知识的理解挺艰难,比如遇到一个新的问题就不知道该从哪里入手,有时候还不知道到底问题是啥.接受能 ...

  8. 20165221 JAVA第四周学习心得

    教材内容总结 子类与继承 子类与父类 定义的标准格式为 class 子类名 extends 父类名 { ... } 如果一个类的声明中,没有使用extends关键字,则默认为Object类. 子类的继 ...

  9. 老鸟谈谈JAVA EE的学习

    老鸟谈谈JAVA EE的学习 因为出差和项目的原因,有将近一个月的时间没有更新博客了,今天终于得闲,和兄弟们分享一下JAVA EE的学习心得.书中带过,直入主题,下面我们首先看看什么是JAVA EE. ...

随机推荐

  1. 远程调试js注意事项

    1:使用host切换工具,先注释掉93服务器的地址,打开链接,点击高级选项,进去后登陆账号密码(如果不行重启浏览器): 2:进入后,增加93服务器上的host地址,重启浏览器,css样式生效: 3:使 ...

  2. Postgresql FATAL: could not create semaphores: No space left on device

    昨天安装完成pg 9.5后,启动报错: FATAL:  could not create semaphores: No space left on device DETAIL:  Failed sys ...

  3. Python set集合类型操作总结

    Python中除了字典,列表,元组还有一个非常好用的数据结构,那就是set了,灵活的运用set可以减去不少的操作(虽然set可以用列表代替) 小例子 1.如果我要在许多列表中找出相同的项,那么用集合是 ...

  4. appsrequest v3 发布了

    程序猿们,想做windows app 不知道做什么项目的人可以上这个交流平台,获得创意,免费的:www.appsrequest.net

  5. asp.net mvc js 获取model值。

    cshtml页面部分代码: div class="col-sub">          @using (Html.BeginForm("SaveTTMallConf ...

  6. VR外包团队:VR和AR技术已经红得发紫

    近6个月以来,VR和AR技术已经红得发紫. 不管是创业公司还是互联网巨头,如果不在VR领域有所涉猎,都不好意思跟外界打招呼.最近,阿里巴巴公布VR战略并推出了一条VR购物的视频,更是给业界打了满满一碗 ...

  7. ios7 tableview scrollsToTop 不执行处理方法

    ios7中调用[self.tableview scrollsToTop] 没有效果(ios8中也没有效果) stackflow 处理方法: [self.tableviewscrollRectToVis ...

  8. 黄聪:C#带cookie模拟登录百度

    #region 同步通过POST方式发送数据 /// <summary> /// 通过POST方式发送数据 /// </summary> /// <param name= ...

  9. Bar菜单

    简介 BarButtonItem:元素(按钮.子菜单.标签.编辑器等) this.barButtonItem3 = new DevExpress.XtraBars.BarButtonItem(); B ...

  10. go 版本 gRPC 环境搭建(3.0正式版)

    之前装过 gRPC 的各个测试版本,有些残余的文件,正式版的安装和之前残留的清除整理如下:   安装 go 版本的 gRPC go 的安装略过.需要 go 1.5 以上版本. $ go version ...