前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java程序员的日常 —— static的用法讲解实践

Java程序员的日常 —— static的用法讲解实践

作者头像
用户1154259
发布2018-01-17 14:52:59
6950
发布2018-01-17 14:52:59
举报

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

代码

代码语言:javascript
复制
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);
    }
}

执行结果

代码语言:javascript
复制
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中都是属性先进行初始化,然后再执行构造器方法!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-05-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码
  • 执行结果
  • static修饰的变量
    • 应用场景
    • static修饰的方法
      • 应用场景
      • static块
        • 应用场景
        • 关于属性的初始化
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档