JavaSE:static成员

1、引言

相信大家在学习Java的过程中,面对static成员变量或成员方法,都好像云里雾里的,分不清普通成员和static成员,也不知道该怎么正确使用static,经常在static成员方法中调用了普通成员方法,导致编译出错,这使我们非常的头疼,接下来,就让我来为大家解决static所带来的问题~

2、static的使用场景

我们以一个类来引出static

我们先定义一个学生类,一个学生类当中应该有姓名、性别、年龄、班级等信息:

但是,如果这个类实例化出的所有的对象都在同一个班级,那这个班级的属性并不需要每个学生对象中都存储一份,而是需要让所有的学生来共享,这时就需要static的出场了。

3、static成员内存中的存储位置

当我们用static来修饰成员后(无论是成员变量还是成员方法),他们的位置都存储在方法区

4、static修饰成员变量

如果所有对象的班级是相同的,那我们就可以使用static来修饰班级这个属性:

当普通成员变量被static修饰成为静态成员变量后,这个成员变量就不再属于某一对象的了,而是属于类的,也称为类变量(所有对象共享的变量)。

4.1 访问静态成员变量

访问静态成员变量有两种形式:

1、通过对象的引用进行访问

2、通过类名进行访问

虽然这两种访问形式都可以,但是我们更推荐第二种,通过类名来访问静态成员变量,因为这个成员变量是属于类的,而不是属于对象的。

在这里,我们需要记住一句话:

静态的成员,不依赖与对象。意味着,不需要通过对象的引用来访问。

而且,我们可以发现,对于静态的成员变量,我们根本不需要去实例化出一个对象,我们可以直接通过类名来访问静态成员:

也就是说,静态的成员在类加载的时候就被创建了。

故:当Java虚拟机(JVM)加载类时,它会为静态方法在内存中分配空间,使得静态方法可以在不实例化对象的情况下被调用。

我们可以对静态成员变量总结以下特征:

1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中

2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问

3. 类变量存储在方法区当中

4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

4.2 访问静态成员方法

其实静态成员方法与静态成员变量是类似的,不是属于某一对象的方法,而是属于类的方法,

但是我们需要注意:

在静态方法中不能调用任何非静态方法、不能访问任何非静态成员变量。

解1:这是因为,静态的方法不属于某一对象,而任何的普通方法、普通成员变量都是属于某一对象的,而且普通方法会有默认的this参数(当前对象的引用),而在静态方法中,根本就没有对象之说,更没有对象的引用了,故无法给普通成员变量提供this参数,故在静态方法中不能调用任何非静态方法、也不能访问任何非静态成员变量。

解2:静态方法在JVM加载类时就被分配了内存空间,也就是说先进入了内存,而普通方法还没有进入内存,故在静态方法中不能调用普通方法。

在普通方法中可以调用静态方法。

解:静态方法先进入了内存,已经在内存中存在了,而普通方法后进入内存,后进入内存的也存在了,所以后进入内存的当然可以调用先进入内存的~故普通方法可以调用静态方法。

即:

我们可以对静态成员变量总结以下特征:

1. 不属于某个具体的对象,是类方法

2. 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者

3. 不能在静态方法中访问任何非静态成员变量

OK~本次博客到这里就结束了,

感谢大家的阅读~欢迎大家在评论区交流问题~

如果博客出现错误可以提在评论区~

创作不易,请大家多多支持~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值