【java】static关键字

简介: 【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)存储内容描述如下:它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等。

此时考虑一个问题,所有方法都会被加载到方法区吗?

回答:不是,首先我们可以确定,所有的静态方法都被加载到了方法区,其次,所有被实例化了类中的方法也都加载到了方法区。

目录
相关文章
|
16天前
|
存储 Java
Java 中的静态(static)
【10月更文挑战第15天】静态是 Java 语言中一个非常重要的特性,它为我们提供了一种方便、高效的方式来管理和共享资源。然而,在使用过程中,我们需要谨慎考虑其优缺点,以确保代码的质量和可维护性。
|
28天前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
25 3
|
1月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
21 5
|
1月前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
174 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
2月前
|
存储 Java
Java之静态(static)与实例(instance)
Java之静态(static)与实例(instance)
|
3月前
|
Java
【Java基础面试四十一】、说一说你对static关键字的理解
这篇文章主要介绍了Java中static关键字的概念和使用规则,强调了类成员与实例成员的区别及其作用域的限制。
|
3月前
|
存储 Java 对象存储
【Java基础面试四十三】、 static和final有什么区别?
由于网络原因,我无法获取到您提供的链接内容。如果需要我解析该网页,请确保链接有效并重试,或者提供其他问题,我会尽力帮助您。
|
3月前
|
Java
【Java基础面试四十二】、 static修饰的类能不能被继承?
这篇文章讨论了Java中static关键字修饰的类是否可以被继承,解释了静态内部类的概念、规则以及如何实例化。
|
3月前
|
Java
【Java】static 类方法中注意事项
【Java】static 类方法中注意事项
|
3月前
|
Java
【Java】static 修饰成员方法
【Java】static 修饰成员方法