程序运行前的两个区域

程序运行前

当我们在电脑上写了一个程序,比如一个游戏或者一个计算器,写完之后,我们需要让电脑能够理解这个程序,这个过程叫做“编译”。编译之后,电脑就会得到一个叫做“exe”的文件,这个文件就像是游戏的启动按钮,我们点击它,程序就开始运行了。

两个区域

在程序开始运行之前,电脑里有两个特别的地方用来存放程序需要的东西:

  1. 代码区:想象一下,如果电脑是一个大工厂,那么代码区就像是工厂里的机器和机器的工作指令。这些机器会按照一定的步骤来工作,这些步骤就是“机器指令”。所有的机器指令都放在代码区里。代码区是“共享”的:如果有很多机器要做一样的事情,它们可以共用一个做这件事的机器指令,这样就不用每个机器都复制一份相同指令了,节省空间。代码区是“只读”的:就像图书馆里的书,我们只能看,不能写,这样是为了防止有人不小心改了机器的工作步骤,让机器不能正常工作。

  2. 全局区:这个区域就像是工厂的仓库,用来存放一些在整个游戏或者程序运行过程中都需要用到的东西。比如,工厂里可能会有一些固定的材料,或者一些标记了重要信息的牌子,类似游戏里的角色可能会一直用到的一些道具。在程序里,这些东西就是“全局变量”、“静态变量”、“字符串变量”和“其他常量”。这些东西在程序开始的时候放到仓库里,当程序结束了,工厂关门了,仓库里的东西就会被清理掉,这样为下一次使用做好准备。

所以,代码区和全局区是电脑程序运行前,电脑内存里的两个很重要的地方。代码区存放了程序的指令,全局区存放了程序运行过程中需要用到的一些数据。

全局区中:

  • 全局变量:在整个程序中都有效,可以在任何地方被读取和修改。
  • 静态变量:只在程序的某个部分有效,但即使那个部分结束了,它们的值也会保持不变,直到被再次修改。(static修饰)
  • 常量:它们的值一旦设定就永远不能改变,用来表示那些在程序中始终保持一致的值。(字符串常量、const修饰的全局变量(常量))

不在全局区中:

  • 局部变量:只在程序的一小部分中使用,它们的值可以在那部分程序中被改变。
  • const 修饰的局部常量:也只在程序的一小部分中使用,但它们的值是固定的,一旦设置就不能被改变。

const 修饰的变量

当我们说一个变量是 const 修饰的,无论是局部变量还是全局变量,都意味着这个变量的值在初始化之后不能被改变。这个特性使得 const 修饰的变量可以被视为常量。

为什么使用 const

使用 const 的主要目的是:

  1. 防止修改:确保变量的值在初始化之后不会被意外地改变。
  2. 提高代码可读性:当看到 const 修饰的变量时,其他程序员可以立即明白这个变量不应该被改变。
  3. 提供编译时检查:如果代码尝试修改一个 const 变量,编译器会给出错误,这样可以避免运行时的错误。

例子

假设有一个表示游戏最高得分的变量:const int MAX_SCORE = 10000;

这里,MAX_SCORE 是一个 const 修饰的全局变量(或常量),它表示游戏的最高得分上限。由于它是 const,所以在整个程序中,无论是哪个部分,都不能改变 MAX_SCORE 的值。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java程序运行时会在内存中分配不同的区域来存储不同的数据和代码。Java的内存模型可以分为以下几个部分: 1. 方法区(Method Area):用于存储类的结构信息,如类的字段、方法、构造器等,以及常量池等。它是所有线程共享的区域。 2. 堆(Heap):用于存储对象实例和数组。堆是被所有线程共享的一块内存区域,Java堆是垃圾收集器管理的主要区域,被称为GC堆。Java堆可以细分为新生代(Young Generation)、老年代(Old Generation)和永久代(Permanent Generation)等不同的区域。 - 新生代:存放新创建的对象,被分为Eden区和两个Survivor区(一般是from和to)。大部分对象在新生代被创建后很快就会被回收掉。 - 老年代:存放经过多次垃圾回收仍然存活的对象。老年代的空间相对较大,用于存放长时间存活的对象。 - 永久代:存放类的元数据,如类的结构信息、方法等。在Java 8及以后版本中,永久代被元数据区(Metaspace)取代。 3. 栈(Stack):栈用于存储方法的调用和局部变量,以及方法调用的上下文等。每个线程在执行方法时都会创建一个栈帧(Stack Frame),存储方法参数、局部变量和临时数据等。 4. 本地方法栈(Native Method Stack):用于存储Java程序调用本地方法(Native Method)的相关信息。 5. 程序计数器(Program Counter):记录当前线程执行的字节码指令的地址。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值