Java程序员的日常 —— static的用法讲解实践
2016-05-14 22:36
435 查看
之前文章说过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中都是属性先进行初始化,然后再执行构造器方法!相关文章推荐
- 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
- 机器学习常见面试题
- 软件众包 业余主义的复兴
- iOS面试题 汇总
- 软件众包 业余主义的复兴
- Java多线程和并发基础面试问答
- Android 面试题
- Java 常用排序算法/程序员必须掌握的 8大排序算法
- 65 个职场很有技巧的回答
- Java多线程和并发基础面试问答
- web前端面试题集锦
- java面试
- 阿里巴巴前端岗位面试题
- 【36】按层打印二叉树
- iOS_面试题
- 程序员常用网站
- 事务-程序员的必经之路
- 软考程序员随笔-----7
- 笔试面试题12--字符串拷贝、链接、比较无库函数实现
- 笔试面试题11--整数与字符串转化