首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

变量,常量,静态变量存储的位置

4、全局/静态存储区 全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。...5、常量存储区 这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改)。...例1:C语言程序 int x; void main() { } 变量x存储在内存哪个区域?...答:static全局变量和普通全局变量存储区域相同,不同的是: static全局变量只在声明此static全局变量的文件中有效; 普通全局变量对整个源程序都有效,当此源程序包含多于一个文件的程序时,对其他文件依然有效...答:static局部变量的存储区为静态存储区,普通局部变量的存储区为栈; static局部变量生存周期为整个源程序,但是只能在声明其的函数中调用,并且其值与上一次的结果有关;而普通局部变量的生存周期为声明其函数的周期

1.3K10

关于静态常量类型 修饰 类方法变量的部分理解

分两个部分进行记录 目录 静态(static) 修饰类/方法/变量 静态(static) 修饰类 静态(static) 修饰方法/变量 常量(final) 修饰类/方法/变量 常量(final) 修饰类...静态(static) 修饰方法/变量 静态属性、静态方法和非静态的属性都可以被继承和隐藏而不能被重写{这里之所以不能被重写,是因为重写的目的在与多态的使用,因为是静态的方法,无法实现多态,所以就算重写也是无用的...常量(final) 修饰类/方法/变量 常量(final) 修饰类 final 修饰的类不能被继承。 常量(final) 修饰方法/变量 1.final修饰的成员和成员变量,可以被继承。...final 修饰的成员变量必须在声明的同时赋值,如果在声明的时候没有赋值,那么只有 一次赋值的机会,而且只能在构造方法中显式赋值,然后才能使用。...final 修饰的局部变量可以只声明不赋值,然后再进行一次性的赋值。

88920
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    变量的属性: 不可变(immutable), 可变(mutable), 重定义(shadowing), 常量(const), 静态(static)

    注意:变量类型和可变性都可以变。 // 变量 x 从整数数据类(i32)型变成了字符串数据类型(String)。 // 变量 x ,因为声明了 mut ,可变性也变成可变的。...("{}", x); } 重定义特性的其它特点: 重定义特性可以作用于不可变变量 重定义特性可以作用于可变变量 重定义特性不可以作用于 static 变量 重定义特性不可以作用于 const 常量 常量...注意:这种 copy 也会发生在外部包被编译的场合。因此,一定要确保你的常量不会在后续的开发中发生变化。 静态(static) 一个静态变量在应用中拥有唯一的内存地址。...大多数场合,静态变量会被定义为可变的。 在 Rust 的安全哲学中静态变量不是线程安全的,所以可变的静态变量在被读和写的场合,都需要标识 unsafe。...数据占有内存比较大的场合,使用静态变量; 程序需要变量的地址属性的情况下,使用静态变量; 变量需要是可变的情况下,使用静态变量; 其它场合,推荐使用常量; 参照 官方文档: Constant Items

    1.3K20

    面试题系列第5篇:JDK的运行时常量池、字符串常量池、静态常量池,还傻傻分不清?

    【番外篇】本篇核心:JDK各个版本中JDK的运行时常量池、字符串常量池、静态常量池的功能及存储位置。 在写本系列文章时,发现一旦追究起底层实现都会涉及到一些内存结构的问题。...了解了JVM内存结构,那么运行时常量池、字符串常量池、静态常量池对于的都位于JVM的什么区域呢?先来看看它们的定义及功能。...class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池(Constant pool table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入运行时常量池中存放...在JDK1.7字符串常量池和静态变量被从方法区拿到了堆中,运行时常量池剩下的还在方法区, 也就是hotspot中的永久代。 ?...总结一下就是:静态变量处于编译器,存在于class文件内,可通过javap verbose命令查看字符串合并时查看的是静态常量池里面的内容;字符串常量池曾经属于运行时常量池的一部分,位于方法区,但随着JVM

    6.4K20

    java学习之路:14.类的构造方法,静态变量,常量和方法,类的主方法

    构造语法如下: public Book() { //构造方法体 } 在构造方法中可以为成员变量赋值,这样当实例化一个本类的对象时,相应的成员变量也将被初始化, 如果类中没有明确定义构造方法,...2.静态变量,常量与方法 由static关键字修饰的变量,常量与方法被称做静态变量,常量与方法。 静态变量,常量与方法被称为静态成员,静态成员属于类所有。...静态数据与静态方法的作用通常时为了提供共享数据或方法, public class array{//定义一个类 final static douoble PI =3.1415926;//在类中定义静态常量.../调用静态变量 array.fun1(); //调用静态方法 } } 虽然静态成员也可以使用“对象.静态成员”的形式进行调用,但是不建议这样做,因为这样容易混淆静态和非静态成员。...需要注意的点: 在静态方法中不可以使用this关键字。 在静态方法中不可以直接调用非静态方法。 java规定不能将方法体内局部变量声明为static。

    94141

    在项目中使用js声明一些全局的静态常量并且不可改变

    我们会遇到这样一个场景, 系统中有5个角色, A,B,C,D,E 角色值是1,2,3,4,5 因为角色这个变量,在路由里有用到,权限管理中有用到,还有一些业务场景处有用到,我们不能用到的时候 就直接这样写...)){ // 业务代码 } 这样写是非常不稳健的, 首先,在这里看到的1,2,3,没有明确的定义,单纯看这段代码,不清楚1,2,3代表什么, 其次,假如A角色的值某一天改了一下, 那这么才能找到所有用到...A角色的代码(当然改变角色值得情况很少,但并不排除) 最后,假如我们现在加了一个角色,那我们快速知道应该修改哪些代码,使业务场景覆盖到这个新的角色 这个角色是不会变的,我们也不允许它们改变, 如果我们使用的是...mounted() { console.log(ROLE.ROLE_A) ROLE.ROLE_A = 2 console.log(ROLE.ROLE_A) } 被const创建的变量...而且鼠标放上去会直接显示定义的代码和注释, 让人一目了然 这种变量声明的方式可以用于系统中的角色, 会员等级,版本,产品线,等一旦定义了不会再变的常量

    95610

    方法区元空间实现之jdk7和8字符串常量池、运行时常量池、静态变量到底在哪?

    储存已加载的类型信息、常量、静态变量、即时编译器编译后的代码等数据; 2、常量池:编译器生成的各种字面量和符号引用; 3、关于字符串常量池和运行时常量池的位置说明: JDK版本 方法区实现 变化 jdk1.6...永久代 字符串常量池、运行时常量池、静态变量都是在永久代中 jdk1.7 永久代 字符串常量池和静态变量被移动到了堆当中,运行时常量池还是在永久代中 jdk1.8 元空间 字符串常量池和静态变量仍然在堆当中...个人的理解:对于字符串常量这种创建完成用几次就不被使用的对象,是很容易被回收的。而要进行频繁垃圾回收的地方是堆空间, 这样在JDK7就把字符串常量池移动到堆空间中就是很明智和有必要的选择了。...这样就避免了放到不频繁进行垃圾回收的元空间中应该被垃圾回收的对象而不能及时进行垃圾回收的浪费空间的现象出现。 思考:那么静态变量为什么也要在JDK7和字符串常量池一起移动到堆空间中呢?...静态变量是不是和类一样的生命周期吗?

    58800

    Java动态绑定与静态绑定之胡思乱想

    Java动态绑定与静态绑定的实现原理  关于实现原理,规范且准确的解释,在这里可以找到。  下面我想用自己的话概括一下,从而使自己更好的理解。 ...为了更好理解,放两张图吧:  第一张是常量池的图:    在这个常量池中,有28项,每一项都称之为一个常量表,都有相应的结构。...5.你前面都在说方法,那你知道变量是静态连接还是动态连接的吗?  答:先说答案,变量采用的是静态连接。这正是开篇讲的写程序时遇到的困扰我的问题,也正是由于此,我才想到了要学习静态绑定与动态绑定。...答:根据5中的分析,由于变量采用静态绑定,并且是隐藏,所以,子类可以完全自由的用和父类变量一样的变量名字,并且采用不同的修饰符,静态绑定会确保正确性。...7.通过学习静态绑定与动态绑定的原理,你也应该能很准确的解释 为什么你声明为哪个类,就只能执行这个类中拥有的方法(因为常量池解析时是根据你声明的类型的方法表来做的,而不是根据实际类型!)

    1.1K40

    Java | 字段(Field)

    在类中有下列几种变量(Variable): 类中的成员变量,称为字段。 代码块中的变量,称为局部变量。 方法和构造方法声明中的变量,称为参数。 局部变量和参数始终被归类为“变量”(而不是“字段”)。...一些自动生成的名称中可能会包含美元符(请参阅 nested(String) 示例),但变量名应始终避免使用它。 下划线(_):按惯例,变量名不使用下划线。下划线只用于常量字段名。 不允许使用空格符。...如前面示例中的 CONSTANT_FIELD 字段。 静态字段(Static Field):声明为 static 的字段。常量字段和类变量都属于静态字段。...非静态字段(Non-Static Field):没有声明为 static 的字段。又可称为实例变量。 成员变量(Member Variable):除常量字段外的其他所有字段。...提示:声明为 final 的成员变量,类似于常量,可作为对成员变量值的一种限定和保护。 访问字段 字段通过其名称进行访问。在访问时,必须使用明确无误的名称。

    2.6K11

    C++中Const常量机制分析

    我们来看看0x4008c8是位于程序的的哪个段。 执行命令 readelf -s msgq 看到符号var地址和程序输出的完全一致。...我们来看看0x4008c8是位于程序的的哪个段。 执行命令 readelf -s msgq 看到符号var地址和程序输出的完全一致。...结论: 对于全局变量,局部静态变量,全局静态变量,存储在程序的只读数据段,不能被修改。 2,如果const变量被修改,会出现什么问题? 在问题1中已经得到了结论和验证。...3,C和C++中实现机制一样吗? 3.1不同点: 对于局部const变量,C++在变量具体使用地方通过常量替换实现。C语言中表示只读的变量。 3.2 相同点: 都不能对只读数据段的常量进行修改。...特别注意点: 对于头文件定义字符串指针常量的正确定义如下: const char * const constCharPtr="hello const"; 表示指针常量,则可以放在头文件。

    2.4K151

    【计算机本科补全计划】Java学习笔记(三) 数据类型

    ,Java的字符串常量也是包含在两个引号之间的字符序列。...下面是字符串型字面量的例子: "Hello World" "two\nlines" "\"This is in quotes\"" 字符串常量和字符常量都可以包含任何Unicode字符。...10、类变量(静态变量) 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外。 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。...静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。 静态变量储存在静态存储区。...经常被声明为常量,很少单独使用static声明变量。 静态变量在程序开始时创建,在程序结束时销毁。 与实例变量具有相似的可见性。

    68841

    【JAVA-Day07】深入了解Java中的常量、变量以及作用域规则

    ⌨ 希望本文能够给您带来一定的帮助文章粗浅,敬请批评指正! 深入了解Java中的常量、变量以及作用域规则 在Java编程中,了解常量和变量以及它们的作用域是非常重要的。...本文将深入探讨Java中常量、变量的定义、属性,以及它们的作用域范围,同时提供了丰富的示例代码来帮助您更好地理解Java编程语言。...; // 字符串字面量 字面量通常用于初始化变量或在表达式中使用。...一旦一个变量被声明为final,它的值将不能被修改。例如: final int MAX_VALUE = 100; MAX_VALUE被定义为一个常量,其值不能被修改。...了解这些概念对于编写可维护的Java代码至关重要。通过使用常量和变量,我们可以存储和操作数据,而通过作用域,我们可以控制变量的可见性和生命周期。

    14610

    CC++ 学习笔记二(变量、表达式)

    在计算机中提供给变量两个信息 变量地址 ,操作系统给变量分配的若干内存的首地址 变量的值 ,内存单元中存放的数据 从变量的存储位置进行区分,可分为 内存 和 CPU的寄存器 两类 从变量的生命周期进行区分...而在C语言提供4种存储类型 1.auto 自动 2.static 静态 3.register 寄存器 4.extern 外部 外部变量和内部变量的区别 ?...在C语言中,可以使用static声明一个静态变量,也可以在函数外声明一个全局变量,其他文件使用extern对该变量进行访问。他们两者的存储方式都是使用静态存储方式,存储在内存的静态存储区。...const其实提供了一种保护机制,保证变量只能从数据段中读取数据,确保了他不被改变。 表达式 表达式是由常量、变量、函数和运算符构成的。...typedef 是一种类型的新别名, 而宏是简单字符串替换 宏定义的作用时间是在 预处理阶段 typedef 的作用时间是在 编译阶段 在使用宏定义期望替换类型时,切记不可同一行类声明两个变量 typedef

    1.1K00

    Java核心-核心类与API(1)

    因此,JVM为了提升性能和减少内存开销,内置了一块特殊的内存空间即常量池,以此来避免字符串的重复创建。...类的非静态成员变量也放在堆区,其中基本数据类型是直接保存值,而复杂类型是保存指向对象的引用,非静态成员变量在类的实例化时开辟空间并且初始化。要知道类的几个时机,加载-连接-初始化-实例化。...常量池在编译期间就将一部分数据存放于该区域,包含基本数据类型如int、long等以final声明的常量值,和String字符串、特别注意的是对于方法运行期位于栈中的局部变量String常量的值可以通过...4)静态域 位于方法区的一块内存。存放类中以static声明的静态成员变量。...5)方法区 是各个线程共享的内存区域,它用于存储class二进制文件,包含了虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。

    34421

    【测开技能】Java语言系列(三)变量和数据类型

    例如,引用类型最常用的就是String字符串: String s = "hello 北京"; 常量 定义变量的时候,如果加上final修饰符,这个变量就变成了常量: final double PI =...针对局部变量,实例变量,类变量的总结如下: Java 局部变量 局部变量声明在方法、构造方法或者语句块中; 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁; 访问修饰符不能用于局部变量...实例变量 实例变量声明在一个类中,但在方法、构造方法和语句块之外; 当一个对象被实例化之后,每个实例变量的值就跟着确定; 实例变量在对象创建的时候创建,在对象被销毁的时候销毁; 实例变量的值应该至少被一个方法...无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。 静态变量除了被声明为常量外很少使用,静态变量是指声明为 public/private, final 和 static 类型的变量。...静态变量初始化后不可改变。 静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量。 静态变量在第一次被访问时创建,在程序结束时销毁。 与实例变量具有相似的可见性。

    17710

    笔记(一 )——Java零碎知识摘录

    8、字符串在Java生产开发中的使用频率是非常高的,字符串对于我们而言非常关键。在C中是没有String类型的,那么C语言要想实现字符串就必须使用char数组,通过一个个的字符来组拼成字符串。...字符串一定会被保存到常量池中,且Java虚拟机如果发现常量池中已经存在需要创建的字符串中,它就不会重复创建,而是指向那个字符串即可,(深入Java源码剖析之字符串常量)这就类似于如下操作。...10、java中声明了一个变量,便会给这个变量分配内存空间,且被声明的变量会对应有一个内存地址生成。...字符串常量(例如:String a="123")和final修饰的基本数据类型常量。 非RAM(随机存取存储器)存储:硬盘等永久存储空间 ?...每个静态变量内存地址是唯一的,UserBean类中有一个name静态变量,不管new UserBean()多少个实例,name变量所指向的内存地址是唯一的(也就是说m1.name、m2.name和UserBean.name

    54820

    CC++中哪些数据存放于栈区、堆区、静态区、常量区的详细说明

    栈区(Stack) 栈区用于存放局部变量和函数调用信息,它的内存由编译器自动分配和释放,具有自动管理的特点。栈区的内存分配遵循先进后出的原则,生命周期是非常短暂的。...静态区(Static) 静态区用于存放全局变量、静态变量(static关键字修饰的变量)和静态成员变量。这些变量在程序开始时分配内存,并在程序结束时释放,具有全局的生命周期。...存储内容: 字符串常量:例如const char* str = “hello”;中的"hello"字符串存放在常量区。...这种分配是由编译器自动管理的,栈主要用于存储局部变量、函数调用帧(包括函数参数、返回地址等)。 分配与释放:栈上的内存分配和释放是自动的,随着函数的调用与返回,内存会自动进行分配和回收。...栈 指针 pChar3 是局部变量,在栈上分配。 *pChar3在哪里? 选项:D. 代码段(常量区) pChar3 指向的是一个字符串常量 “abcd”,而字符串常量存储在代码段(常量区)。

    27510

    C++复习笔记——C++ 关键字

    被其修饰的变量(外部变量)是静态分配空间的,即程序开始时分配,结束时释放。用其声明的变量或函数应该在别的文件或同一文件的其它地方定义(实现)。在文件内声明一个变量或函数默认为可被外部使用。...在 C++ 类的成员变量被声明为static(称为静态成员变量),意味着它被该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见;而类的静态成员函数也只能访问静态成员...类的静态成员变量必须在声明它的文件范围内进行初始化才能使用,private类型的也不例外。...mutable mutable(易变的)是 C++ 中一个不常用的关键字。只能用于类的非静态和非常量数据成员。...它提供了一种简洁的书写,并且能够生成效率更好的代码。但是,switch 后面的判断只能是int(char也可以,但char本质上也是一种int类型)。

    1.3K30

    C内存管理一 概述

    2.同学请说说一个函数在堆栈中调用过程(首先要知道函数过程是保存在什么中的)。 3.静态变量、全局变量、局部变量、常量等哪些是保存在堆中,哪些是栈中,哪些是静态区域中。...看它的定义:栈是一种先进后出的线性表,只要符合先进后出的原则的线性表都是栈。 而堆是一种二叉树,有最大推、最小堆,我们常用的什么冒泡、选择等可以用于堆排序。...例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间例如:声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间 2、堆区(heap): 一般由程序员分配释放, 若程序员不释放...3、全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。...(程序结束后有系统释放 ,即生命周期) 4、文字常量区 —常量字符串就是放在这里的。 5、程序代码区—存放函数体的二进制代码。

    46710
    领券