关于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 的学习心得的更多相关文章
- 20165221 JAVA第一周学习心得及体会
JAVA入门的理论学习 在JAVA2使用教程的网课学中,分为以下几个模块讲解的 JAVA的地位 JAVA的特点 安装JDK(Java Develepement Kit) Java程序的开发步骤 简单的 ...
- Java线程池学习心得
一.普通线程和线程池的对比 new Thread的弊端如下: a. 每次new Thread新建对象性能差.b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或o ...
- java常用设计模式学习心得
学习自:http://shenzhenchufa.blog.51cto.com/730213/161581 代码来自:http://shenzhenchufa.blog.51cto.com/73021 ...
- java编程思想--学习心得
学习Java编程思想,需要了解语言特性,对于各种名词,能够借助项目代码,解释其含义,不借助搜索工具,明白其在什么样场景下使用,会带来什么样的问题,能否避免这类问题. 学习的过程,与软件开发相同,一样是 ...
- Java static 关键字学习
static:意为静态的,简单理解就是公共的.独立于实例变量之外的1.概述:static是Java中常用的关键字,一般用于变量.方法.静态代码块.内部类上.静态导包2.用法: a.用于变量上表示该变量 ...
- 20165221 JAVA第二周学习心得及体会
基本数据类型与数组理论学习 根据第二章的网课链接,归纳出以下板块: 知识框架 标识符与关键字 1.标识符 其本质是文件名字 标识符的第一个字符不能为数字,标识符不能为关键字(如inter) 标识符不能 ...
- 201671010142 <java程序设计>初次学习心得与感悟
从开始对JDK的配置就遇到了问题,从这点就可以知道自己知识的薄弱.又知道了在控制台下一些常用命令的掌握.对知识的理解挺艰难,比如遇到一个新的问题就不知道该从哪里入手,有时候还不知道到底问题是啥.接受能 ...
- 20165221 JAVA第四周学习心得
教材内容总结 子类与继承 子类与父类 定义的标准格式为 class 子类名 extends 父类名 { ... } 如果一个类的声明中,没有使用extends关键字,则默认为Object类. 子类的继 ...
- 老鸟谈谈JAVA EE的学习
老鸟谈谈JAVA EE的学习 因为出差和项目的原因,有将近一个月的时间没有更新博客了,今天终于得闲,和兄弟们分享一下JAVA EE的学习心得.书中带过,直入主题,下面我们首先看看什么是JAVA EE. ...
随机推荐
- 自己编写的一个有关安卓应用开发培训PPT
这个是我自己编写的一个有关安卓应用开发培训PPT,适合新手. 在这里下载PPT
- Centos下安装和配置SVN
1.安装SVN服务 #检查现有版本 rpm -qa subversion #如果存储旧版本,卸载旧版本SVN yum remove subversion #安装SVN yum install subv ...
- 在Linux操作系统下备份恢复技术的应用 转自https://yq.aliyun.com/articles/50205?spm=5176.100239.blogcont24250.9.CfBYE9
摘要: 安全防护:在Linux操作系统下备份恢复技术的应用 原文参见:http://linux.chinaunix.net/techdoc/system/2005/12/19/925898.shtm ...
- 关于FPGA学习路线
1.参考FPGA厂商的参考资料,将某系列FPGA所有芯片资料下载下来,有针对性的做参考. 2.参考FPGA厂商开发板以及相应的参考设计,在开发板里有众多的外围接口电路,基本涵盖了常用的应用场合.同时也 ...
- 【java】之3种方式实现Object和Map之间的转换
利用commons.BeanUtils实现Obj和Map之间转换,这种是最简单,也是最经常用的 public static Object mapToObject(Map<String, Obje ...
- OAF_开发系列17_实现OAF数组应用Vector / Hashmap / Hashtable / Arraylist(案例)
20150506 Created By BaoXinjian
- project euler 开坑
pe76: 要把100写成至少2个数的和的形式,有多少种方案数 整数拆分 f(i,j)表示把i拆分成不超过j的数的和的方案数 f(i,j) = f(i-j,j) + f(i,j-1) j <= ...
- 浏览器内核控制Meta标签
国内的主流浏览器都是双核浏览器:基于Webkit内核用于常用网站的高速浏览.基于IE的内核用于兼容网银.旧版网站.以360的几款浏览器为例,我们优先通过Webkit内核渲染主流的网站,只有小量的网站通 ...
- Windows下python virtualenv使用,镜像源设置,批量安装,安装scipy,numpy
镜像源设置 在C:\Users\Administrator\下建立pip文件夹,然后在里面创建了一个pip.ini 内容为: [global]index-url = https://pypi.tuna ...
- [源码]String StringBuffer StringBudlider(1String部分)
String /** The value is used for character storage. */ private final char value[]; /** Th ...