关于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. ...
随机推荐
- JSBinding / Testing
Unity version compatibilities 5.3.5 5.2.0 5.1.5 5.0.4 4.7.2 4.7.0 4.6.9 4.6.0 4.5.5 Platform compati ...
- easycwmp的交叉编译
原创作品,转载请注明出处 copyright:weishusheng 2015.3.18 email:642613208@qq.com 平台: Linux version 2.6.32-279.e ...
- 从css谈模块化
模块化是现今我们随处都可以听到的一个名词,什么是模块化?为什么我们需要模块化?这是本系列文章我们要弄明白的一个问题.我们也借这部分内容,顺带回顾一下前端的发展历程. 说实话,模块化这个主题有点大,我一 ...
- python使用xlrd模块读写excel
1.行列索引均从0开始2.int数据被读成float数据,解决办法,if type(value) == float and value%1 == 0,value= int(value)模块读 #!/u ...
- jquery深拷贝和浅拷贝
var obj1 = { a: 1 };var obj2 = { b: {bbb: 2} };function Clone(){//浅拷贝 拷贝到obj1值会被改变 在一个栈中 $.extend(ob ...
- 查询01_DML锁和DDL锁的处理
一.摘要 Oracle的手册上关于锁的分类说明如下: 1. DML锁:Date lock.执行DML时保护数据的锁.Row Lock(TX)保护特定行,Table Lock(TM)保护整个表,可以通过 ...
- Visual Studio远程调试
Visual Studio支持调试远程机器上的程序,经过简单设置后,就像调试本地代码一样方便. 第一步:将vs工具里的Remote Debugger文件夹拷贝到目标机器.大致的目录应该是:D:\Pro ...
- Hololens开发笔记之Gesture手势识别(Manipulation手势控制物体旋转)
Manipulation gesture:保持点击手势,在3D世界中绝对运动 当你想要全息图像1:1响应用户手部移动时,操纵手势能被用于移动.缩放或旋转全息图像.如此的一个用处是使得用户可以在世界中绘 ...
- Spring自定义缓存管理及配置Ehcache缓存
spring自带缓存.自建缓存管理器等都可解决项目部分性能问题.结合Ehcache后性能更优,使用也比较简单. 在进行Ehcache学习之前,最好对Spring自带的缓存管理有一个总体的认识. 这篇文 ...
- java编译后字节码解析
java编译后字节码解析 参考网摘: https://my.oschina.net/indestiny/blog/194260