Java程序员的日常 —— static的用法讲解实践
2024-08-27 02:11:47
之前文章说过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中都是属性先进行初始化,然后再执行构造器方法!
最新文章
- javaSE第三篇
- 15个nosql数据库
- HTC Vive开发笔记之UI Guideline
- android改变字体的颜色的三种方法
- Java内存溢出的详细解决方案
- PHP利器-WAMPServer
- cocoapod升级版本
- hdu4027线段树
- SQL中游标的用法
- 编译错误:expected an indented block
- What is the difference between __str__ and __repr__ in Python
- 在新建的python3环境下运行jupyter失败的原因
- SATA主机协议的FPGA实现之物理层设计
- Ajax(Asynchronous JavaScript )and xml
- mysql导入慢解决方法
- ActiveReports 报表应用教程 (15)---报表换肤
- MySQL数据库----函数
- Flask系列(二)Flask基础
- Ruby:对象模型(又称八卦模型)笔记
- 第二百五十六节,Web框架
热门文章
- ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆AnalyzerTool分词工具.非常实用!
- (十) 一起学 Unix 环境高级编程 (APUE) 之 线程控制
- servlet二
- jzoj[1438]NOIP2013火柴排队
- [DiocpRPC]介绍与安装
- [转载]提高rails new时bundle install运行速度
- 乐视云计算基于OpenStack的IaaS实践
- sed初学
- [php-src]一个Php扩展的结构
- 第六次课:springMVC与spring的集成