【java】static关键字

static可以修饰的内容如下:
● 变量
● 方法
● 代码块
● 内部类

那就有一个问题,为什么static不能修饰外部类?

我们首先看一下static的作用是什么?
先看看其他人怎么解释的:
A static method can be accessed without creating an object of the class first:

The static variable can be used to refer to the common property of all objects (which is not unique for each object), for example, the company name of employees, college name of students, etc. The static variable gets memory only once in the class area at the time of class loading.

In the Java programming language, the keyword static means that the particular member belongs to a type itself, rather than to an instance of that type. This means we’ll create only one instance of that static member that’s shared across all instances of the class.

被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。

总结一下,我认为static作用有两个

  1. 节省空间,修饰方法或变量或内部类时可以不经过实例化直接访问
  2. 静态变量是所有实例共有的。

此时插入一下最开始的问题,为什么static不能修饰外部类?

回答:没有必要,static是为了暴露出内部的内容,使外部可以直接使用,外部类本来就可以直接使用,不需要点出来。

被static修饰的变量和方法会在类初次被加载时初始化,而不是实例被创建时。
如图:
在这里插入图片描述

那么静态方法保存在哪里呢?
答案:方法区
方法区在1.8之前的实现是永久代,1.8之后叫元空间metaspace
另外,普通方法其实也保存在方法区。

方法区还存了啥呢?
注意,方法区是《Java虚拟机规范》的规范,永久代或者元空间是对规范的实现。
《深入理解Java虚拟机》书中对方法区(Method Area)存储内容描述如下:它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等。

在这里插入图片描述在这里插入图片描述

此时考虑一个问题,所有方法都会被加载到方法区吗?
回答:不是,首先我们可以确定,所有的静态方法都被加载到了方法区,其次,所有被实例化了类中的方法也都加载到了方法区。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盖丽男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值