当前位置: 首页 > news >正文

【JavaSE】Java基础语法(十四):Static

文章目录

  • 概述
  • 特点与应用
  • 注意事项
  • 为什么一个静态方法中只能访问用static修饰的成员?

在这里插入图片描述



在这里插入图片描述

概述


Java中的static是一个修饰符(也可称关键字),可以用于修饰变量、方法和代码块。


特点与应用


static修饰的成员具有以下特点:
  • 被类的所有对象共享
    是我们判断是否使用静态关键字的条件

  • 随着类的加载而加载,优先于对象存在
    对象需要类被加载后,才能创建

  • 可以通过类名调用
    也可以通过对象名调用

  • 静态变量(是类级别的变量):不属于任何实例对象,而是属于整个类,在内存中只有一份拷贝。被static修饰的变量也称为类变量或者静态变量。可以通过“类名.静态变量”的方式访问。

  • 静态方法(是类级别的函数):不依赖于任何实例对象,使用时直接通过“类名.静态方法”的方式调用即可。静态方法只能访问其他静态成员(包括静态变量和静态方法),并且不能访问非静态的实例成员(如对象属性)。

  • 静态代码块(用于初始化静态变量):在类加载时执行,且仅会执行一次。常用于初始化静态变量。
    static修饰符的作用:

  • 实现数据共享:因为静态变量是类级别的,所以它们可以被所有对象共享。

  • 方便访问:通过“类名.静态成员”的方式访问比创建对象再访问更加简单方便。

  • 类工具:静态方法通常用于创建工具类或者实现算法,因为它们不依赖于对象状态。

  • 初始化操作:静态代码块在类加载时执行,常用于初始化静态变量和执行静态方法。


注意事项

  • 静态方法只能访问静态的成员
  • 非静态方法可以访问静态的成员,也可以访问非静态的成员
  • 静态方法中是没有this关键字

静态成员(包括静态变量和静态方法)可以直接访问类级别的数据,但不能访问实例级别的数据。原因是两者的生命周期不同,实例化对象时才能为其分配内存空间;而静态成员在类加载时就已经被生成,此时还没有对象建立。
静态成员只随所属类的变量和方法调用而加载,而非随着类的实例化而加载。
静态成员存放在类加载的静态存储区,在程序运行结束时回收。
在多线程环境下,由于静态成员共享,可能会发生并发问题,需要进行适当的并发控制处理。


为什么一个静态方法中只能访问用static修饰的成员?

1、静态数据成员在定义或说明时前面加关键字static。

2、静态成员初始化与一般数据成员初始化不同。
这表明:
(1) 初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。
(2) 初始化时不加该成员的访问权限控制符private,public等。
(3) 初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。

3、静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。

4、引用静态数据成员时,采用如下格式:
程序最终都将在内存中执行,变量只有在内存中占有一席之地时才能被访问。因为静态是针对类的,而成员变量为对象所有。静态成员函数不属于任何一个类对象,没有this指针,而非静态成员必须随类对象的产生而产生,所以静态成员函数”看不见”非静态成员,自然也就不能访问了类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。

在这里插入图片描述

http://www.lryc.cn/news/89653.html

相关文章:

  • 1.Linux初识
  • 进程(二)
  • 《消息队列高手课》课程笔记(二)
  • 以“智”提质丨信创呼叫
  • Pool与PG的说明以及Ceph的IO流程
  • 20230529_Hadoop_集群操作命令
  • 边缘计算AI硬件智能分析网关V1版的接入流程与使用步骤
  • 【redis】Stream、String 超详细介绍
  • 算法基础学习笔记——⑫最小生成树\二分图\质数\约数
  • 了解信号的传输方式、编码与调制、信道的极限容量
  • SpringBoot自动配置原理总结
  • 【LeetCode: 410. 分割数组的最大值 | 暴力递归=>记忆化搜索=>动态规划 】
  • 内核对象和两种同步
  • 水表远程监控系统有什么功能吗?
  • zabbix自定义监控
  • 【AUTOSAR】Com通讯栈配置说明(四)---- Nm模块
  • IMG CXM GPU:面向复杂消费级设备的无缝视觉体验
  • Kafka如何保证数据高可靠
  • OpenWRT 中修改SSID的文件
  • 如何在 Linux 中进行网络地址转换 (NAT)?
  • redis的使用第一章
  • 基于springboot+vue的校园二手交易市场
  • 【CH32】| 01——新建工程 | 下载 | 运行 |调试
  • 【Netty】Promise 源码分析(十七)
  • 测牛学堂:2023最新自动化软件测试教程之python基础(字符串常用api总结)
  • 【信号变化检测】使用新颖的短时间条件局部峰值速率特征进行信号变化/事件/异常检测(Matlab代码实现)
  • MQTT GUI 客户端 可视化管理工具
  • 计算机硬件系统 — 冯诺依曼体系结构运行原理解析
  • 10.Linux查看文件内容
  • API接口测试—详情版(拼多多根据ID取商品详情)