Java中Static关键字的使用

1.Static关键字的用途

1.1 Static修饰成员变量

1.1.1 Static修饰成员变量的需求

当我们在代码中出现一个成员变量在我们每次创建不同的对象时,所赋值都一样,我们就可以把它放在一个公共区域内,不管几个对象都可以操作使用,而不在自己的对象保存数据,可以节约空间

1.1.2 静态成员变量使用注意事项

1. 静态成员变量是使用static修饰的成员变量,定义在内存的数据区
2. 静态成员变量不推荐使用类对象调用,会提示警告,使用static修饰的类内的成员变量,应该通过静态方式访问
3. 静态成员变量使用类名调用是没有任何的问题。强烈推荐方式
4. 在代码中没有创建对象时,可以通过类名直接使用静态成员变量,和对象无关
5. 代码中对象已经被JVM的GC销毁时,依然可以通过类名调用静态成员变量,和对象无关
6. 不管通过哪一种方式调用静态成员变量,修改对应的静态成员变量数据,所有使用到当前静态成员变量的位置,都会受到影响。


1.1.3 静态成员变量和对象无关

1. 从内存角度出发分析
    静态成员变量是保存在内存的数据区
    类对象占用的实际内存空间是在内存的堆区
    这两个区域是完全不同的,所有可以说静态成员变量和对象没有关系 【没有对象】

2. 从静态成员变量以及类对象生命周期来分析
    静态成员变量是随着类文件(.class) 字节码文件的加载过程中,直接定义在内存的数据 区。静态成员变量从程序运行开始就已经存在。
    类对象是在代码的运行过程中,有可能被创建的。程序的运行过中,有可能会被JVM的CG垃圾回收机制销毁,程序在退出之前一定会销毁掉当前Java程序使用到的所有内存。
    静态成员变量在程序退出之后,才会销毁
    静态成员变量的生命周期是从程序开始,到程序结束
    类对象只是从创建开始,而且随时有可能被JVM的GC销毁
    生命周期不在同一个时间线上,所以静态成员变量和类对象无关,【没有对象】

在这里插入图片描述

1.2 Static修饰成员方法

1.2.1 静态成员方法注意事项

1. 静态成员方法推荐使用静态方式调用,通过类名调用 【强烈推荐】
    不推荐使用类对象调用,因为 【没有对象】
2. 静态成员方法中不能使用非静态成员 ==> (非静态成员方法和非静态成员变量)
    因为 【没有对象】
3. 静态成员方法中不能使用this关键字
    因为 【没有对象】
4. 静态成员方法中可以使用类内的其他静态成员 【难兄难弟】
5. 静态成员方法中可以通过new 构造方法创建对象
    单身狗可以找对象
    不能挖墙脚但是能自己找


1.2.2 静态成员方法特征解释

1. 静态成员方法加载时间问题
    静态成员方法是随着.class字节码文件的加载而直接定义在内存的【方法区】,而且此时的静态成员方法已经可以直接运行。可以通过类名直接调用,而此时没有对象存在。 【没有对象】
2. 为什么静态成员方法不能使用非静态成员
    非静态成员变量和非静态成员方法时需要类对象调用的,在静态成员方法中,是可以通过类名直接执行的,而此时是 【没有对象】
3. 为什么静态成员方法不能使用this关键字
    this关键字表示的是调用当前方法的类对象,但是静态成员方法可以通过类名调用,this不能代表类名,同时也是 【没有对象】
4. 静态成员方法可以使用其他静态成员
    生命周期一致,调用方式一致


1.3 类变量和类方法

类变量 == >静态成员变量
类方法 ==> 静态成员方法
类成员 ==> 静态成员变量和静态成员方法

1.4 静态代码块

static {
	// 静态代码块
}

只要类文件加载,当前静态代码块中的内容就一定会执行,并且有且只执行一次。
整个类的初始化过程

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值