议static关键字(超详细)

static关键字在我们平常的开发过程中经常使用,但是我们真的有去思考为什么在某些场景中需要使用static关键字,它的作用是什么?下面这篇文章给大家分析一下static关键字

一、static关键字的使用场景

修饰变量:使其成为静态变量

作用一:作为共享变量使用

public class StaticDemo {

    private static final int MAX_NUMBER = 100;

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数字");
        int a = scanner.nextInt();
        if (a > MAX_NUMBER) {
            System.out.println("你输入的数字大于100为: " + a);
        } else {
            System.out.println("你输入的数字小于100为: " + a);
        }
    }
}

作用二:减少对象的创建

public class StaticDemo {

    private static final Logger LOG = LoggerFactory.getLogger(StaticDemo.class);

}

这句代码基本在每个类中都会有,声明一个Logger变量,实际上将static去掉也可以,比如:

public class StaticDemo {

    private final Logger LOG = LoggerFactory.getLogger(StaticDemo.class);

}

这样就会导致每一个StaticDemo的实例化对象都会拥有一个Logger实例,如果创建了1000个StaticDemo实例,就会多出1000个Logger实例,造成资源的浪费,声明为static,减少内存资源的占用。

作用三:保留唯一副本:

最经典的莫过于单例模式,单例模式要求全局只保留唯一副本,比较适合使用

修饰方法:使其成为静态方法

将一个方法加上static关键字后,这个方法就成为了静态方法

区别:普通方法既可以访问静态成员又可以访问非静态成员,而静态方法只能访问静态成员

原因:静态方式和静态成员会随着类的定义被分配和加载到内存中,和普通属性只有实例化的时候才会被加载到内存

场景:通常是为了方便在不创建对象的情况下调用,不如一些工具类等

静态代码块

作用:静态代码块的作用通常来说是为了对静态变量进行一些初始化操作

代码:比如单例模式的类的实例化

public class Singleton {
    private static Singleton instance;
 
    static {
        instance = new Singleton();
    }
 
    private Singleton() {}
 
    public static Singleton getInstance() {
        return instance;
    }
}

场景:需要对一些值赋予初始化的时候可以使用

静态导入

作用:一般用于导入某个类或者某个包中的静态方法或者静态变量,不是很常用

二、static变量和普通成员变量的区别

所属不同:static变量属于类,不属于任何对象,而普通变量属于某个对象

存储区域不同:static变量位于方法区,普通成员变量位于堆区

生命周期不同:static变量生命周期与类的生命周期相同,而普通与其某个实例相同

序列化时不同:在对象序列化时,static变量会被排除在外

三、总结

希望能帮助到大家,谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值