static 关键字的用法?

目录

1. static 的基本介绍

2. static 修饰成员变量

3. static 修饰方法

4. static 的注意事项


1. static 的基本介绍

static 是Java语言中一个非常重要的关键字,static 表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量。

2. static 修饰成员变量

被 static 修饰的成员变量,被称为静态变量,一旦被 static 修饰,那么该变量会有以下特点

(1)被该类创建的所有对象共享;

(2)它不属于对象,而是属于该类,但可以被该类的对象调用;

(3)随着类的加载而加载,优于对象存在;

我来简单解释一下,我们都知道,JVM内存主要分 方法区,虚拟机栈,本地方法栈, 程序计数器,堆 五部分,这里简单介绍,想进一步了解的同学可以看我的另一篇文章

浅谈JVM内存模型与GC垃圾回收_程序猿ZhangSir的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_70325779/article/details/132622805?spm=1001.2014.3001.5501

对于我们Java程序员来说,着重需要知道 方法区,堆 和 虚拟机栈 这三部分,这也是面试JVM内存模型常常被问到的知识点;

堆:主要存放对象;

虚拟机栈:运行我们的程序,将所需要的方法和方法的局部变量依次进栈出栈;

方法区:存放静态方法信息(修饰符、方法名、返回值、参数等)以及类的所有信息;

在JDK8以前,静态变量和静态方法都存放在方法区中,而在JDK8以后,将静态变量移入堆中,并在堆中单独开辟了一处空间叫静态区,专门用来存放静态变量。

静态变量和静态方法,它会随着类的字节码文件加载而立刻加载到堆中的静态区;这也就是为什么静态变量是优先于对象存在,因为它在类加载之后马上就会跟着加载到堆中的静态区

静态变量被该类所有对象共享,那么所有对象都可以调用使用该静态变量,调用方式主要分为两种

(1)类名.静态变量(推荐使用的调用方式)

(2)对象.静态变量(这种方法也可以,但不推荐)

因为静态变量是属于类的,不属于某一个对象所有,因此使用 类名.静态变量 的调用方式在逻辑上更说得通,反之 对象.静态变量 这种调用方式就不太好,逻辑上说不通,但也可以这样调用。

3. static 修饰方法

static 不仅可以修饰的成员变量,也可以修饰方法,一旦方法被 static 修饰,那么它就叫静态方法,静态方法有以下特点:

(1)多用在测试类和工具类中;

(2)JavaBean类中很少使用;

调用方法也很简单,如果实在静态方法所在的类调用,则直接写方法名即可调用;

如果是调用别的类中的静态方法,则可以使用 类名.方法名 的方式调用;

4. static 的注意事项

(1)静态方法中只能访问静态方法或者静态变量;

(2)非静态方法可以访问静态变量和静态方法,也可以访问非静态的成员变量和非静态的成员方法;

(3)静态方法中没有 this 关键字;

我们应该知道,在成员方法中,其实都是有一个隐含的 this 的,这个 this 指向调用者的地址值,在成员方法中,我们可以通过 this 获取到调用此方法的变量的地址值,从而获取相应的属性。

但是在静态方法中,由于静态方法是共享的,它不属于某一个对象,因此在静态方法中是没有 this 这一概念的。这也是为什么在静态方法中不能调用非静态变量的原因。

静态变量和静态方法是在字节码加载之后就马上直接加载到JVM内存中,只有静态变量和静态方法加载完成,此时对象还尚未创建,自然不可以调用对象和对象的相关属性,而静态变量与静态方法是一同加载的,可以互相调用;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值