之前文章说过Java中static的作用,有朋友想看个例子。于是便抽空写了个小栗子

代码

package xing.test.thinking.chap5;
class A{
public A() {
System.out.println("A constructor");
}
} class VarTest{
static A a = new A();
public static int b = 0;
public int c = 0;
static{
System.out.println("VarTest static");
}
public VarTest() {
System.out.println("VarTest constructor");
}
public static void test(){
System.out.println("in static test func");
}
}
public class StaticTest {
public static void main(String[] args) {
System.out.println("start testing!");
System.out.println("如果不new VarTest或者使用VarTest的静态内容,就不会触发VarTest静态块的执行");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
VarTest.test();//也会触发静态块的执行 VarTest testa = new VarTest();
VarTest testb = new VarTest();
System.out.println("testa.b: "+testa.b);
System.out.println("testb.b: "+testb.b);
System.out.println("testa.c: "+testa.c);
System.out.println("testb.c: "+testb.c);
//如果修改b属性的值,所有对象的内容都会改变
testa.b = 3;
System.out.println("testa.b: "+testa.b);
System.out.println("testb.b: "+testb.b);
}
}

执行结果

start testing!
如果不new VarTest或者使用VarTest的静态内容,就不会触发VarTest静态块的执行
A constructor
VarTest static
in static test func
VarTest constructor
VarTest constructor
testa.b: 0
testb.b: 0
testa.c: 0
testb.c: 0
testa.b: 3
testb.b: 3

static修饰的变量

首先先来说说静态修饰的变量,使用static修饰的变量会有两个效果:

  • 第一,就是可以通过类直接访问这个对象,而不需要创建对象
  • 第二,就是所有的创建的对象,都指向同一份对象,也就是这个静态对象是所有的类对象共享的。因此修改它的值,相当于修改了所有对象的变量。

应用场景

通常用于存储类公用的属性,如logger。

static修饰的方法

静态修饰的方法,可以直接通过类来使用。如上面的VarTest的test方法,直接基于Class就可以访问。

应用场景

通常用于编写工具类方法,如FileUtil、BeanUtil等。

static块

static另一个应用场景就是写静态块,如上面的static{}。这部分静态块会在第一次加载使用类的时候执行一次,仅仅会执行一次!

加载的方式有两种,一种是new对象;另一种就是访问类的静态内容。

如上面的例子中,就是访问了类的静态方法。

应用场景

这种静态块一般用于某些线程池或者连接池的初始化,比如JDBC连接池。

关于属性的初始化

在Java中都是属性先进行初始化,然后再执行构造器方法!

最新文章

  1. javaSE第三篇
  2. 15个nosql数据库
  3. HTC Vive开发笔记之UI Guideline
  4. android改变字体的颜色的三种方法
  5. Java内存溢出的详细解决方案
  6. PHP利器-WAMPServer
  7. cocoapod升级版本
  8. hdu4027线段树
  9. SQL中游标的用法
  10. 编译错误:expected an indented block
  11. What is the difference between __str__ and __repr__ in Python
  12. 在新建的python3环境下运行jupyter失败的原因
  13. SATA主机协议的FPGA实现之物理层设计
  14. Ajax(Asynchronous JavaScript )and xml
  15. mysql导入慢解决方法
  16. ActiveReports 报表应用教程 (15)---报表换肤
  17. MySQL数据库----函数
  18. Flask系列(二)Flask基础
  19. Ruby:对象模型(又称八卦模型)笔记
  20. 第二百五十六节,Web框架

热门文章

  1. ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆AnalyzerTool分词工具.非常实用!
  2. (十) 一起学 Unix 环境高级编程 (APUE) 之 线程控制
  3. servlet二
  4. jzoj[1438]NOIP2013火柴排队
  5. [DiocpRPC]介绍与安装
  6. [转载]提高rails new时bundle install运行速度
  7. 乐视云计算基于OpenStack的IaaS实践
  8. sed初学
  9. [php-src]一个Php扩展的结构
  10. 第六次课:springMVC与spring的集成