java中的静态变量的作用域_详解JAVA中static的作用

article/2025/11/8 18:59:47

1、深度总结

引用一位网友的话,说的非常好,如果别人问你static的作用;如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的;如果是说 可以构成 静态代码块,那别人认为你还可以; 如果你说可以构成 静态内部类, 那别人认为你不错;如果你说了静态导包,那别人认为你很OK;

那我们就先在这几方面一一对static进行总结;然后说一些模糊的地方,以及一些面试中容易问道的地方;

1)static方法

static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。举个简单的例子:

dc71742dad8a9c6f1a5c32dc0267d330.png

在上面的代码中,由于print2方法是独立于对象存在的,可以直接用过类名调用。假如说可以在静态方法中访问非静态方法/变量的话,那么如果在main方法中有下面一条语句:

MyObject.print2();

此时对象都没有,str2根本就不存在,所以就会产生矛盾了。同样对于方法也是一样,由于你无法预知在print1方法中是否访问了非静态成员变量,所以也禁止在静态成员方法中访问非静态成员方法。

而对于非静态成员方法,它访问静态成员方法/变量显然是毫无限制的。

因此,如果说想在不创建对象的情况下调用某个方法,就可以将这个方法设置为static。我们最常见的static方法就是main方法,至于为什么main方法必须是static的,现在就很清楚了。因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。

2)static变量

static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本【存放在方法区】,它当且仅当在类初次加载时会被初始化【加final和不加final的static变量初始化的位置不一样】。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

static成员变量的初始化顺序按照定义的顺序进行初始化。

3)static代码块

static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次【根据class加载原理 每个类加载一次 使用双亲委托加载】。

初始化的顺序 静态代码块 > 构造代码块 > 构造函数

public class Client {

{//构造代码块

System.out.println("执行构造代码块");

}

}

为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。下面看个例子:

class Person{

private Date birthDate;

public Person(Date birthDate) {

this.birthDate = birthDate;

}

boolean isBornBoomer() {

Date startDate = Date.valueOf("1946");

Date endDate = Date.valueOf("1964");

return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;

}

}

isBornBoomer是用来这个人是否是1946-1964年出生的,而每次isBornBoomer被调用的时候,都会生成startDate和birthDate两个对象,造成了空间浪费,如果改成这样效率会更好,其实就是利用了静态代码块在内存中值加载一次的机制:

class Person{

private Date birthDate;

private static Date startDate,endDate;

static{

startDate = Date.valueOf("1946");

endDate = Date.valueOf("1964");

}

public Person(Date birthDate) {

this.birthDate = birthDate;

}

boolean isBornBoomer() {

return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;


http://chatgpt.dhexx.cn/article/fuLeRwhh.shtml

相关文章

express.static 作用及用法

express相信是很多人用nodejs搭建服务器的首选框架&#xff0c;相关教程有很多&#xff0c;也教会了大家来如何使用。如果你想更深的了解他的细节&#xff0c;不妨和我一起来研究一下。 先来看一个每个人都用到的方法app.use(express.static(__dirname/public)); 你肯定在你的a…

java static的作用

static是什么 static是java中的关键字&#xff0c;static表示”全局”、“静态”的意思&#xff0c;用来修饰成员变量和成员方法&#xff0c;定义的变量&#xff0c;我们通常将用static修饰的成员称为静态变量&#xff0c;静态方法或者静态成员。 static的作用 被static修饰…

static的作用有哪些?

C语言中的static的作用有&#xff1a;1.修饰局部变量。2.修饰全局变量。3.修饰函数。 1.修饰局部变量。 如图&#xff1a; 当只用int 定义变量a时,此时程序运行结果为&#xff1a; 程序运行结果为10个2&#xff0c;这是为什么呢&#xff1f;&#xff1f; 原因是此时的变量a为…

C语言中 static作用

在C语言中&#xff0c;static的字面意思很容易把我们导入歧途&#xff0c;其实它的作用有三条。隐藏保持数据持久初始化为0 该图是下面文字的总结&#xff1a; 1.先来介绍它的第一条也是最重要的一条&#xff1a;隐藏。 当我们同时编译多个文件时&#xff0c;所有未加static前…

C语言中static作用

1,static修饰局部变量 在局部变量之前加上关键字static&#xff0c;局部变量就被定义成为一个局部静态变量。 特点如下: 1&#xff09;存储区&#xff1a;由于栈变为静态存储区rw data&#xff0c;生存期为整个源程序&#xff0c;只能在定义该变量的函数内使用。退出该函…

对DSP的基本了解(一)--DSP是什么?

Preface&#xff1a;在学习一个新东西之前&#xff0c;我们需要对一些基本概念或者专业术语进行基本的理解&#xff0c;这样才能扫除壁垒&#xff0c;让学习更加高效。因此&#xff0c;DSP学习系列首先会比较注重对DSP相关术语上的理解。所以最开始&#xff0c;我们先来学习一些…

DSP学习

DSP数字电源学习一 软件环境搭建相关硬件资源TMS320C28x 32 位 CPU可编程控制律加速器 (CLA)片上存储器时钟和系统控制1.2V 内核、3.3V I/O 设计系统外设通信外设模拟系统 软件相关控制算法数据记录功能代码示例MathWorks Simulink 模型文档 由于最近工作需要&#xff0c;需要学…

DSP/BIOS详解入门

DSP/BIOS详解入门 百度百科DSPBIOS DSP/BIOS是TI公司特别为其TMS320C6000TM&#xff0c;TMS320C5000TM和TMS320C28xTM系列DSP平台所设计开发的一个尺寸可裁剪的实时多任务操作系统内核&#xff0c;是TI公司的Code Composer StudioTM开发工具的组成部分之一。 DSP/BIOS 实时操作…

DSP基础知识回顾

文章目录 1. 什么是DSP2. DSP与其他主流芯片的区别2.1 DSP与MCU的区别2.2 DSP与ARM的区别2.3 DSP与FPGA的区别 3. TI公司DSP具体型号的含义4. TMS320x2814的片内外设4.1 事件管理器4.2 模拟量转换为数字量的ADC采样模块4.3 串行通信接口SCI4.4 串行外围设备接口SPI4.5 局域网通…

DSP学习 -- 前言

已经换工作20天了&#xff0c;感觉又是换行业了一样。跳入DSP和FPGA的大坑了。 除了C语言基础还算可以&#xff0c;其他要学的东西太多了。 也是&#xff0c;终于可以又回到那种能学习和吸取新鲜知识的节奏了。相对来说虽然很累&#xff0c;但是我还是比较喜欢这种状态。总比吃…

最强ADI SHARC系列DSP:ADSP-SC589的开发入门详解

作者的话 ADI的SHARC系列DSP&#xff0c;现阶段最强的型号是SC589&#xff0c;那么我就以SC589为例&#xff0c;写一点资料&#xff0c;让新手能够比较便捷的熟悉开发环境&#xff0c;软硬件&#xff0c;顺利的进入开发。 文档解决的是入门的问题&#xff0c;所以不会深入去写…

嵌入式开发之DSP学习

一、ARM、DSP、FPGA ARM具有比较强的事务管理功能&#xff0c;可以用来跑界面以及应用程序等&#xff0c;其优势主要体现在控制方面&#xff1b;ARM是32位的单片机&#xff0c;其内部硬件资源的性能较高&#xff0c;可以加载操作系统成为其主要特点&#xff0c;有了操作系统&am…

[培训-DSP快速入门-2]:C54x DSP处理器的架构

作者主页(文火冰糖的硅基工坊)&#xff1a;https://blog.csdn.net/HiWangWenBing 本文网址&#xff1a;https://blog.csdn.net/HiWangWenBing/article/details/118889692 目录 1. C54x芯片的总体基本架构 1.1 冯诺依曼结构 1.2 哈佛结构 1.3 混合结构 1.4 C54x芯片结构 …

dsp基础算法

【小编】发现好文一篇&#xff0c;让大家对DSP中的基础算法和模型有一个初步的了解。 &#xff08;转载请保留原文链接 http://www.techinads.com/archives/41authored by 江申_Johnson&#xff09; 美国有一家很优秀的DSP公司–M6D&#xff08;m6d.com&#xff09;&#xff0c…

初学DSP(1)-TMS320F280049C入门

目录 前提 知识点 深入了解DSP和ARM的关系&#xff08;相同与区别&#xff09; DSP CMD学习笔记&#xff08;连接物理存储和逻辑存储&#xff09; CMD文件详解与DSP存储空间 DSP 程序远程升级 / Bootloader设计指南&#xff08;一&#xff09;—— 初识Bootloader/DSP引导…

【FPGA-DSP】第一期:DSP基础

目录 1. DSP基础 1.1 DSP基本概念 1.2 FPGA实现DSP的特点 2. DSP硬核的结构与使用 3. FPGA设计DSP技术 3.1. 浮点数与定点数的表示与转换 3.1.1. 双精度浮点数表示 3.1.2. 双精度浮点数与定点数的转换 本章作为FPGA数字信号处理的入门介绍课程&#xff0c;将介绍DSP的…

DSP基础知识

1.定义 数字信号处理器&#xff08;英文&#xff1a;Digital Signal Processor&#xff09;是集成电路芯片组成的用来完成数字信号处理任务的处理器。 2.功能 2.1ANR/ANC 其原理是降噪系统电路产生降噪MIC接收的外界环境噪音相等的反相信号&#xff0c;将噪声抵消。实现50-2K…

DSP的入门学习(一)

#硬件讲解与分类 1.DSP DSP&#xff08;digital signal processor&#xff09;是一种独特的微处理器&#xff0c;是以数字信号来处理大量信息的器件。其内部采用程序和数据分开的哈佛结构&#xff0c;具有专门的硬件乘法器&#xff0c;广泛采用流水线操作&#xff0c;提供特殊…

DSP-BIOS使用入门

从环境说到搭建第一个工程 请注意&#xff0c;此文默认读者已经对DSP及CCS V3.3环境有一定的了解了&#xff0c;知道cmd文件的配置&#xff0c;知道新建工程&#xff0c;编译并连接仿真器下载&#xff01;如果你对这些还都不熟悉&#xff0c;请先熟悉这些&#xff01;当然&…

【DSP】【第一篇】开始DSP学习

2022年6月14日 1. 部署开发环境 略。工作需要&#xff0c;TMS320C6678。 从今天开始学习DSP的知识。 后面会补充如何安装部署环境。 1.1 组件 1.1.1 SDK MCSDK&#xff08;CCSv5,CCSv6&#xff09;Path(全英文路径&#xff0c;无中文&#xff0c;无空格) 安装完之后&#xf…