Java入门最小必要知识:变量及其本质

编程语言是与计算机交流的桥梁,而在编程世界中,变量是这座桥上不可或缺的砖石。

从本质上,可以把复杂的编程工作简化为两件事

  • ①定义变量
  • ②操作变量

可见,变量之于编程的重要性。

对于Java开发者,理解和掌握变量是必不可少的,重要的知识通常是简单的,从以下几个方面学习变量,就可以快速掌握变量:

  • ①概念
  • ②本质
  • ③变量的类型
  • ④变量的生命周期与作用域

1. 变量的定义

在Java中,变量是程序中存储数据的最基本单元,❶它有一个特定的数据类型(如int、double等),❷并被赋予一个标识符(即变量名),用于在程序的不同部分引用该存储位置的数据。

可以将其想象成一个容器,用来存放各种类型的信息,这些信息在程序执行过程中可能会发生变化。

示例

int age = 25; // 定义了一个名为age的整型变量,并初始化为25

age = 38; // 定义变量后,在变量的生命周期和作用域内,可以修改变量的值

2. 变量的本质

变量的本质在于其背后的内存管理

当你在Java中声明一个变量时,编译器会在内存中为其❶分配一块空间。这块空间的❷大小由变量的数据类型决定。变量名则是一个地址标签,指向这块内存空间。赋值操作实际上是将值存入这个内存地址中。因此,❸改变变量的值,实际上是改变了该内存地址所存储的内容。

为了加深理解,结合编译后的字节码,分析变量在运行时的本来面目。

以代码int number = 38;为例,要查看其字节码,可以编写一个Variable的类:
在这里插入图片描述
然后使用javac编译代码:

javac Variable.java

对于编译结果,使用JDK自动的反编译命令javap:

javap -c Variable

执行这个命令后,可以看到如下输出,红框部分是int number = 38;的字节码:
其可能的字节码如下:

0: bipush 38:这将数字 38 推入操作数栈。
2: istore_1:这将操作数栈顶的值(即数字 38)存储到局部变量表中索引为 1 的位置。

下图画出了这行代码运行时涉及的两个内存区域,sipush对应图中①,表示把38这个数字存放到操作数栈的栈顶,注意,操作数栈也是内存。

istore_1对应图中②,表示把38这个数字从操作数栈弹出,存入内存的局部变量表区域,1表示变量序号,因为我们只定义了变量,编译器给这个变量分配的序号就是1。特别说明,在实例方法中,序号0默认存储this变量。从这里可以看出,运行过程中,变量名会被替换为序号。
在这里插入图片描述

3. 变量的类型

在Java中,有三种变量类型:

在这里插入图片描述
① 实例变量。直接定义在类中,但在任何方法之外的变量。其至少由三部分构成:访问修饰符、变量类型、变量名。
② 静态变量。和实例变量一样,直接定义在类中,但在任何方法之外的变量。区别在于,定义时多了static关键字。其至少由三部分构成:访问修饰符、变量类型、变量名、static关键字。
③ 局部变量。在方法、构造器或块中定义的变量,没有访问修饰符。其至少由两部分构成:变量类型、变量名。

4. 变量的生命周期与作用域

生命周期

变量的生命周期指的是从创建到销毁的整个过程。在Java中,变量的生命周期与其所在的作用域紧密相关。

  • 局部变量:在方法、构造器或块中定义的变量,其生命周期始于所属代码块的执行开始,止于该代码块执行完毕。每次方法调用都会创建新的局部变量副本。
  • 实例变量:其生命周期与对象的生命周期相同,即从对象创建时开始,至对象被垃圾回收时结束。
  • 静态变量(类变量):使用static关键字定义的变量,属于类而不是对象。这类变量在类加载时创建,在类卸载时销毁,只有一份,被所有实例共享。

作用域

作用域决定了变量的可见性和可访问性。

  • 局部作用域:局部变量只在其声明的方法、构造器或代码块内可见。
  • 类作用域:实例变量在整个类中都可见,但要通过对象实例访问。
  • 全局作用域(静态作用域):静态变量在整个类中都可见,可以通过类名直接访问,无需实例化对象。

示例

public class ScopeDemo {
    static int globalVar = 10; // 静态变量,全局作用域

    public void method() {
        int localVar = 5; // 局部变量,仅在此方法内有效
        System.out.println(globalVar); // 可以访问全局变量
        System.out.println(localVar); // 访问局部变量
    }
    
    public static void main(String[] args) {
        ScopeDemo demo = new ScopeDemo();
        demo.method(); // 调用method,局部变量localVar被创建并使用后销毁
        System.out.println(globalVar); // 可以直接访问静态变量
    }
}

通过上述内容,我们简要探讨了Java中变量的定义、本质、生命周期以及作用域。理解这些基础概念,不仅能够帮助我们写出更清晰、高效的代码,也是深入学习面向对象编程、数据结构和算法等高级主题的基石。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/619646.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自动土壤墒情监测仪

TH-GTS04随着科技的快速发展,自动土壤墒情监测仪已成为现代农业、园林、城市绿化等领域不可或缺的重要工具。其中,管式土壤墒情监测仪以其独特的优势,受到了广大用户的青睐。本文将详细阐述管式土壤墒情监测仪的优势,以便读者更好…

【AI+漫画】程序员小李解决疑难杂症BUG的日常

周末花了点时间制作的AI漫画。 感慨一句,程序人生, 相伴随行。 原文链接:【AI漫画】程序员小李解决疑难杂症BUG的日常

java sql中 大于 小于 大于等于 小于等于 代替符号

在写java时sql会经常会忘记大于小于号的表示方法导致无法运行&#xff0c;总结一下 第一种方法&#xff1a; < &#xff1a;< < &#xff1a; < &#xff1a;> &#xff1a; > sql如下&#xff1a; create_at > #{startTime} and create_at < #{end…

AI图书推荐:利用生成式AI实现业务流程超自动化

《利用生成式AI实现业务流程超自动化》&#xff08;Hyperautomation with Generative AI&#xff09;这本书探索了广泛的用例和示例&#xff0c;展示了超自动化在不同行业、领域和特定部门的多样化应用&#xff0c; 让您熟悉UiPath、Automation Anywhere和IBM等流行工具和平台&…

vue3中的toRef、toRefs和toRaw

1.toRef toRef 的作用是将一个响应式对象中的属性转换成单独的响应式引用。转换后的响应式引用会跟踪原始属性的变化。转换后的响应式可以被用于计算属性及监听器中。 如果原始对象是非响应式的则不会更新视图&#xff0c;数据会改变。 接收两个参数&#xff1a; 参数一&…

DDS块集是如何工作的?

DDS块集使你能够在Simulink中创建DDS应用程序。如果你有一个在Simulink中建模的应用程序&#xff0c;希望能够使用DDS&#xff0c;则可以使用DDS块集轻松连接到DDS中间件平台。 DDS块集将DDS概念引入Simulink环境&#xff0c;在Simulink应用程序中对这些概念进行建模&#xff0…

一个注解实现SpringBoot接口请求数据和返回数据加密,提高系统安全性!

注解实现接口加密 1、前言1.1、前端必看1.2、后端必看 2、后端注解实现2.1、实现流程2.2、开始实现2.2.1、 pom2.2.2、 注解2.2.3、 加密工具类2.2.3、 定义切面(注意切点包名)2.2.4、 定义加密基类与各种入参VO2.2.5、写两个Controller 3、参考文章 1、前言 起因是公司给人开发…

Python | Leetcode Python题解之第79题单词搜索

题目&#xff1a; 题解&#xff1a; class Solution:def exist(self, board: List[List[str]], word: str) -> bool:def dfs(i, j, k):if not 0 < i < len(board) or not 0 < j < len(board[0]) or board[i][j] ! word[k]: return Falseif k len(word) - 1: r…

linux性能监控之lsof

lsof&#xff1a;list open files&#xff0c;显示所有打开的文件以及进程信息&#xff0c;我们通常用来检查特定的文件被哪些进程打开 [rootk8s-master ~]# lsof --help lsof: illegal option character: - lsof: -e not followed by a file system path: "lp" lso…

《软件方法(下)》8.3.3 泛化的一些重点讨论(202405更新)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 8.3 建模步骤C-2 识别类的关系 8.3.3 泛化的一些重点讨论 8.3.3.1 子集的不相交和完整 泛化是集合关系&#xff0c;在建模泛化关系时&#xff0c;我们对泛化关系中的子类&#xff0…

【随笔】Git 高级篇 -- 远程跟踪分支 git checkout -b | branch -u(三十五)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

Postman基础功能-常见类型的接口请求

天空灰暗到一定程度&#xff0c;星辰就会熠熠生辉。大家好&#xff0c;之前给大家分享了关于 Postman 工具的介绍以及安装&#xff0c;在当今数字化的时代&#xff0c;接口请求在软件开发和系统集成中扮演着至关重要的角色。而 Postman 作为一款强大且广受认可的接口测试工具&a…

【系统架构师】-案例篇(一)UML用例图

1、概述 用于表示系统功能需求&#xff0c;以及应用程序与用户或者与其他应用程序之间的交互关系。 2、组成 参与者&#xff08;Actors&#xff09;&#xff1a;与系统交互的用户或其他系统。用一个人形图标表示。用例&#xff08;Use Cases&#xff09;&#xff1a;系统需要…

OpenAI 今日(北京时间 5 月 14 日凌晨两点)将发布的大更新,不是 GPT-5,也不是搜索引擎

&#x1f989; AI新闻 &#x1f680; OpenAI 今日&#xff08;5月13日&#xff09;将发布的大更新&#xff0c;不是 GPT-5&#xff0c;也不是搜索引擎 摘要&#xff1a;OpenAI 预计即将推出一款新的 AI 语音助手&#xff0c;该助手不仅可以进行语音和文字交流&#xff0c;还能…

如何利用AI提高内容生产效率与AIGC典型案例分析

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

Spring Boot:让微服务开发像搭积木一样简单!

带你一探 Spring Boot 的自动配置和 Starter POMs 的神奇之处&#xff0c;展示如何通过几个简单的步骤就能让你的微服务应用在云端翱翔&#xff01; 文章目录 1. 引言1.1 简述Spring框架的起源与重要性1.2 阐述文章目的&#xff1a;深入解析Spring核心功能与应用实践2. 背景介绍…

Attention Sink

论文发现自回归LLM存在的一个有趣现象&#xff1a;对于输入文本最靠前的少量几个token&#xff0c;无论它们在语义上与语言建模任务的相关性如何&#xff0c;大量的注意力分数都会分配给他们&#xff0c;如下图所示&#xff1a; 模型的前两层还能保持attention score更多分配给…

Angular入门

Angular版本&#xff1a;Angular 版本演进史概述-天翼云开发者社区 - 天翼云 安装nodejs&#xff1a;Node.js安装与配置环境 v20.13.1(LTS)-CSDN博客 Angular CLI是啥 Angular CLI 是一个命令行接口(Angular Command Line Interface)&#xff0c;是开发 Angular 应用的最快、最…

C++/Qt 小知识记录6

工作中遇到的一些小问题&#xff0c;总结的小知识记录&#xff1a;C/Qt 小知识6 dumpbin工具查看库导出符号OSGEarth使用编出的protobuf库&#xff0c;报错问题解决VS2022使用cpl模板后&#xff0c;提示会乱码的修改设置QProcess调用cmd.exe执行脚本QPainterPath对线段描边处理…

python实现幸运大转盘 python实现抽奖

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.总结 一.前言 幸运大转盘是一种活动形式,广泛应用于各种场合,如商业促销、展览活动、企业庆典以及体育课堂等,旨在增加活动的趣味性和参与度。以下是对幸运大转盘的详细介