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. weex环境搭建

    1. 安装weex-toolkit sudo npm install -g weex-toolkit 装完之后就可以使用weex命令了.输入weex命令可以看到: weex test.we --qr ...

  2. Perl/Nagios – Can’t locate utils.pm in @INC

    While trying to use a Nagios plugin I got an error saying that “Can’t locate utils.pm in @INC”. Foll ...

  3. VB CreateObject转C#

    C#调用方法.函数获取属性大致流程如下: System.Type oType = System.Type.GetTypeFromProgID("SomeClass"); objec ...

  4. Google副总裁的管理经验

    一.拥挤其实是创新.拥挤喧闹的工作环境会引燃更多的创意火花.办公室应该充满能量和互动,而不是条块分割和等级分化. 二.战略和策略并举.许多人不懂得战略和策略的区别,或者他们认为自己只需要其中一样,其实 ...

  5. 初转java随感(一)程序=数据结构+算法

    大学刚学编程的时候,有一句很经典的话程序=数据结构+算法 今天有了进一步认识. 场景: 1.当前局面 (1)有现成的封装好的分页组件 返回结果是page.类型为:Page.包括 page 分页信息,d ...

  6. undefined reference to `_init'问题解决

    今天利用CDT 的eclipse调试程序,遇到下面的问题: d:/plugin/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi ...

  7. SVN设置钩子

    在post-commit 文件后增加两行: WEB_DIR="/data/www/wb.abc.cn/2.4" /usr/bin/svn update $WEB_DIR --use ...

  8. springmvc登陆拦截案例

    一.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...

  9. 如何在Visual Studio里面查看程序的汇编代码?

    开发工具:Visual Studio 2015 1,在源代码中设置至少一个断点,目的让我们进入调试模式. 2,启动调试,当程序进入调试模式,停留在我们设定的断点处时候,使用快捷键"ALT+8 ...

  10. JS设计模式--简单工厂模式

    在JS中创建对象会习惯的使用new关键字和类构造函数(也是可以用对象字面量). 工厂模式就是一种有助于消除两个类依赖性的模式. 工厂模式分为简单工厂模式和复杂工厂模式,这篇主要讲简单工厂模式. 简单工 ...