Java变量理解
成员变量VS局部变量的区别
- 语法形式:从语法形式上看,成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被
public
,private
,static
等修饰符所修饰,而局部变量不能被访问控制修饰符及static
所修饰;但是,成员变量和局部变量都能被final
所修饰。 - 存储方式:从变量在内存中的存储方式来看,如果成员变量是使用
static
修饰的,那么这个成员变量是属于类的,如果没有使用static
修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。 - 生存时间:从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动生成,随着方法的调用结束而消亡。
- 默认值:从变量是否有默认值来看,成员变量如果没有被赋初始值,则会自动以类型的默认值而赋值(一种情况例外:被
final
修饰的成员变量也必须显式地赋值),而局部变量则不会自动赋值。
为什么成员变量有默认值?
-
先不考虑变量类型,如果没有默认值会怎样?变量存储的是内存地址对应的任意随机值,程序读取该值运行会出现意外。
-
默认值有两种设置方式:手动和自动,根据第一点,没有手动赋值一定要自动赋值。成员变量在运行时可借助反射等方法手动赋值,而局部变量不行。
-
对于编译器(javac)来说,局部变量没赋值很好判断,可以直接报错。而成员变量可能是运行时赋值,无法判断,误报“没默认值”又会影响用户体验,所以采用自动赋默认值。
成员变量与局部变量代码示例:
public class VariableExample {// 成员变量private String name;private int age;// 方法中的局部变量public void method() {int num1 = 10; // 栈中分配的局部变量String str = "Hello, world!"; // 栈中分配的局部变量System.out.println(num1);System.out.println(str);}// 带参数的方法中的局部变量public void method2(int num2) {int sum = num2 + 10; // 栈中分配的局部变量System.out.println(sum);}// 构造方法中的局部变量public VariableExample(String name, int age) {this.name = name; // 对成员变量进行赋值this.age = age; // 对成员变量进行赋值int num3 = 20; // 栈中分配的局部变量String str2 = "Hello, " + this.name + "!"; // 栈中分配的局部变量System.out.println(num3);System.out.println(str2);}
}
静态变量的作用
静态变量也就是被 static
关键字修饰的变量。它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。也就是说,静态变量只会被分配一次内存,即使创建多个对象,这样可以节省内存。
静态变量是通过类名来访问的,例如StaticVariableExample.staticVar
(如果被 private
关键字修饰就无法这样访问了)。
通常情况下,静态变量会被 final
关键字修饰成为常量。
public class StaticVariableExample {// 静态变量public static int staticVar = 0;// 常量public static final int constantVar = 0;
}
字符型常量和字符串常量的区别
- 形式 : 字符常量是单引号引起的一个字符,字符串常量是双引号引起的 0 个或若干个字符。
- 含义 : 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置)。
- 占内存大小:字符常量只占 2 个字节; 字符串常量占若干个字节。
⚠️ 注意 char
在 Java 中占两个字节。
字符型常量和字符串常量代码示例:
public class StringExample {// 字符型常量public static final char LETTER_A = 'A';// 字符串常量public static final String GREETING_MESSAGE = "Hello, world!";public static void main(String[] args) {System.out.println("字符型常量占用的字节数为:"+Character.BYTES);System.out.println("字符串常量占用的字节数为:"+GREETING_MESSAGE.getBytes().length);}
}
输出结果:
更多消息资讯,请访问昂焱数据。昂焱数据
相关文章:

Java变量理解
成员变量VS局部变量的区别 语法形式:从语法形式上看,成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰…...
西南科技大学信号与系统A实验二(信号频谱分析)
一、实验目的 1.掌握用 matlab 软件绘制信号频谱的方法; 2.进一步理解抽样定理; 3.理解傅里叶变换的性质(频移特性). 二、实验原理 (一)fft 函数的调用 matlab 提供 fft 函数来计算信号 x(n)的快速离散傅里叶变换 (FFT). z 格式:y=fft(x) 计算信号 x 的快速离散傅里叶…...
C++-youtube cherno C++视频的一些知识点
对函数的调用在汇编中对应一句call func语句,其中func是一个函数的签名(signature)对程序而言,即使只有一个文件,链接器也需要链接,因为它需要链接程序入口点(entry point)一个程序的…...

sed命令
目录 一、sed 1.sed命令选项 2.语法选项 3.sed脚本格式 4.搜索替代 5.分组后向引用 1.提取版本号: 2.提取IP地址 3.提取数字权限 6.变量 二、免交互 1.多行重定向 2.免交互脚本 总结:本章主要介绍了seq和免交互的用法及相关知识 一、sed s…...

【经验分享】开发问题记录总结(持续更新)
目录 工具开发 界面类继承某自定义界面类时,出现布局混乱或者所有控件集中在左上角? 在继承自定义界面之后,以诸如 on_xxx_clicked() 模式设计的槽函数失效了? 使用pugi接口取出文本数据后,为什么该变量无法进行字符串比较&…...
MySQL导出数据库中每个表前 3000 条数据
以下是一个 Bash 脚本,它会连接到 MySQL 数据库,获取所有表名,并对每个表导出前 3000 条数据: #!/bin/bashUSERNAME"citycard" PASSWORD"密码" DATABASE"citycard" LIMIT3000# 导出数据库结构 mys…...
Spring事件注解@EventListener【观察】
一、背景 在开发工作中,我们常常会遇到这样一种情况:完成一项任务后,需要向其他模块广播消息或通知,以触发其他事件的处理。逐个发送请求固然可行,但更好的方式是采用事件监听,它是设计模式中的发布-订阅模…...
玩转Spring中强大的spel表达式!
玩转Spring中强大的spel表达式!值得推荐的好文:https://zhuanlan.zhihu.com/p/174786047...
HTTPS攻击原理 被攻击该如何防护
简单来说,HTTPS HTTP SSL/TLS。 在 HTTP 协议中,客户端通过网络传输消息与服务器进行通信。但该消息采用明文的原始格式。坏人(攻击者)很容易窃听消息。这就是我们需要 SSL/TLS 的原因。 HTTPS是一种安全的HTTP协议,…...
【.NET Core】委托(Delegate)应用详解
【.NET Core】委托(Delegate)应用详解 文章目录 【.NET Core】委托(Delegate)应用详解一、概述二、委托(Delegate)定义三、基础委托(Delegate) - 无返回值委托四、基础委托(Delegate) - 有返回值委托五、Mu…...

【LeetCode:1457. 二叉树中的伪回文路径 | 二叉树 + DFS +回文数】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...

《golang设计模式》第三部分·行为型模式-06-备忘录模式(Memento)
文章目录 1. 概述1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述 备忘录(Memento)用于在不破坏目标对象封装特性的基础上,将目标对象内部的状态存储到外部对象中,以备之后恢复状态时使用。 1.1 角色 Originato…...

Cache学习(4):Cache分配策略Cache更新策略Cache逐出策略
Cache的数据流 常用名词 Allocation 分配Eviction 驱逐分配策略和更新策略分别为当产生Cache miss和Cache hit的时候数据流的具体行为 1 Cache分配策略(Cache Allocation Policy) Cache的分配策略是指不同情况下为数据分配Cache Line的不同行为。Cac…...
角色管理--产品经理岗
研发组织管理--角色管理--产品经理岗 定位 相对稳定和简单产品的独立产品打造者,复杂产品的辅助者 所需资质 校招新人,拥有灵性拥有基础的产品力(认知,设计,创新,推进,学习)Axur…...
SQL数据迁移实战:从产品层级信息到AB测试表
文章目录 创建表插入数据清空数据表数据迁移和筛选查询数据结论 创建表 首先,代码中定义了两个表格:dim_prod_hierarchy_info 和 app_abtest_product_info,都位于 test 数据库中。 dim_prod_hierarchy_info 表用于存储产品层级信息…...
VMware系列:VMware安装Android虚拟机
VMware系列:VMware安装Android虚拟机 一. 下载镜像这里提供了三种下载镜像方式,也就是三个下载链接,这里推荐百度网盘下载二. 使用VMware Workstation Pro 创建新的虚拟机操作系统应该可以选择任意一个,笔者只试过下图中,如果读者感兴趣可以多试几个,但笔者不保证每个都可…...

链接1:编译器驱动程序
文章目录 GNU编译器示例编译 GNU编译器 GNU编译器(GNU Compiler)是由自由软件基金会(Free Software Foundation,FSF)开发和维护的一套编译器集合。这些编译器主要用于编译各种编程语言的源代码,将其转换为…...

经典滑动窗口试题(二)
📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、水果成篮1、题目讲解2、讲解算法思路3、代码实现 二、找到字符串中所有字母异位词1、题目…...

easyexcel指定sheet页动态给行列加背景色
需求 1、easyexcel,有多个sheet页,某些sheet页的行、列动态需要加背景色。 2、扩展支持cellStyle标记单元格超过64000 import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.write.handler.…...
设计模式在实际业务中应用 - 模版方法
1. 业务背景 作者在工作中主要主导 A 业务线的系统建设,A 业务线主要是零售场景酒水的售卖与即时配送服务。为了方便运营在自研系统中对多平台商品进行管理而开发的三方平台商品管理功能,本次介绍的模版方法模式则是在该功能开发过程中的落地实践。 2.…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...