当前位置: 首页 > news >正文

Java学习笔记14——常量与变量

曾和儿子分享过所谓计算机程序,都是编写代码进行“数据处理和处理数据”而已。任何编程语言编写何种应用,数据都必须以某种方式表示。掌握变量和常量的用法,可以使代码的可维护性、可读性大大提高。

一、常量

常量就是在程序中固定不变的量,一旦被定义,它的值就不能再被改变。

1、声明常量

在定义常量时需要对常量进行初始化,初始化后,常量的值是不允许再进行改变的。在Java语言中,为了区别常量与变量,常量名称通常用大写字母。声明常量使用final关键字,语法为:

final  数据类型 常量名称  [= 初始化的值 ]

2、常量应用示例

当常量用于一个类的成员变量时,必须给常量赋值,否则会出现编译错误。

如下代码示例,在类中声明一个常量PRICE,并在main()方法中打印它的值。

public class Zoo {static final float PRICE = 2.5F;public static void main(String[] args) {System.out.println("动物园门票价格是:" + PRICE + "元。");}
}

上面代码中,定义了常量PRICE,并赋给初始值,在主函数中打印PRICE的值。

二、变量

在程序中存在大量的数据来代表程序的状态,其中有些数据的值在程序的运行过程中会发生改变,这种数据被成为变量。在程序中通过改变变量的值来实现程序的逻辑功能。

1、声明变量

在Java语言中,所有的变量在使用前必须先声明,声明多个变量时使用逗号隔开(建议每行声明一个变量),分号结尾,基本格式如下:

类型  变量名 [ = value], 变量名 [ = value], 变量名 [ = value] ;

int x,y,z;                  // 声明3个int类型变量:x,y,z
int a = 3, b = 4, c = 5;    // 声明3个整数a、b、c变量并赋初始值
byte z = 22;                // 声明并初始化字节型变量z
String s = "Java example";  // 声明并初始化字符串型变量s
double pi = 3.14;           // 声明双精度浮点数变量pi,并赋值
char x = 'a'                // 声明字符型变量x,并赋值‘a’,使用单引号

一个知识点:

声明一个变量时,编译程序会在内存里开辟一块足以容纳这个变量的内存空间给它。不管变量的值如何改变,都永远使用相同的内存空间。因此,要学会使用变量,它是一种节省内存的方式。常量是不同于变量的一种类型,它的值是固定的,如整数常量、字符串常量。通常给变量赋值时,会将常量赋值给它。

2、变量的分类

变量是有作用范围的,一旦超出它的范围,就再无法使用这个变量(被分配的内存会给回收)。

按照作用范围进行划分,Java中的变量分为成员变量、局部变量和类变量。

1)成员变量

成员变量声明在一个类中,在方法、构造方法和语句块之外。它的作用范围是整个类,也就是在这个类中都可以访问。当一个对象被实例化之后,每个成员变量的值就跟着确定。

成员变量在对象建立的时候创建,在对象被销毁的时候销毁。成员变量可以直接通过变量名访问,但在静态方法以及其它类中,就要通过类的引用访问。

成员变量的值应该至少被一个方法、构造函数或者语句块引用,使得外部能够通过这些方式获取成员变量的信息。

访问修饰符可以修饰成员变量,成员变量对于类中的方法、构造函数或者语句块是可见的。一般情况下应该把成员变量设为私有(private)。通过使用访问修饰符可以使成员变量对子类可见(public,protected)。

成员变量具有默认值,数值型变量的默认值是0,布尔型变量默认值是false,引用类型变量的默认值是null。

成员变量的值可以在声明时指定,也可以在构造方法中指定。如果没有指定,则使用默认值;如果通过上面方式指定(初始化),则对象创建时,默认值是初始值。

public class MemberVar {private int age; // 声明私有的成员变量,仅在该类中可见public void setAge(int a) {age = a;}public void printMember() {System.out.println("我儿子的年龄是:" + age);}public static void main(String[] args) {MemberVar emp = new MemberVar();emp.setAge(19);emp.printMember();;}}

上面代码声明的成员变量age,使用了private修饰符,它只能在MemberVar类中访问。但是可以在MemberVar类中定义相关方法,通过此类创建的对象来访问。

2)局部变量

局部变量是在方法、构造函数或者语句块中声明,它们在所在方法、构造方法、语句块被执行的时候创建,当该方法、构造方法、语句块执行完毕后,变量将会被销毁。访问修饰符不能用于局部变量,局部变量只在声明它的方法、构造方法、语句块中可见。

系统不会给局部变量没有默认值,所以局部变量被声明后,必须经过初始化进行赋值后才能使用,否则会出现编译错误。

3)类变量(静态变量)

类变量,也称为静态变量,在类中使用static关键字声明,但必须在方法、构造方法、语句块之外。无论一个类创建多少个对象,类只拥有静态变量的一份拷贝(只在内存中有一个地址指引)。静态变量的访问格式一般是:

类名.类变量名

类变量和成员变量特别相似,一旦声明(未赋值),会有默认值。数值型变量的默认值是0,布尔型变量默认值是false,引用类型变量的默认值是null。

类变量的值可以在声明时指定,也可以在构造函数中指定(赋值)。除此之外,还可以在静态语句块中初始化(使用static 关键字和{} 中定义的代码块,会在类初次加载时运行)。

在当前类中访问类变量(静态成员变量)可以不加类名直接访问,也可以使用“类名.静态成员变量名)方式访问。但是其它类想要访问静态变量,必须使用“类名.静态变量名”来引用。

3、Java中静态变量(类变量)和成员变量的区别

Java中静态变量(类变量)和成员变量的区别是否被static关键字修饰,被static关键字修饰的叫静态变量(类变量),否则即成员变量。两者的区别是:

(1)静态变量在内存中只有一份拷贝(节省内存),JVM只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配及初始化默认值,可以通过类名直接访问。

(2)成员变量是每创建一个对象,就会为成员变量分配一次内存。创建多个对象,成员变量就有多个拷贝,互不影响。成员变量属于每个对象,而静态变量属于这个类创建的所有对象共享。

public class QuBieVar {private static int staticInt = 0;  // 定义静态变量,并赋值0private int random = 0;  // 定义成员变量,并赋值0public QuBieVar() {  // 构造方法中初始花静态变量和成员变量staticInt++;  // 静态变量自加1random++;     // 成员变量自加1System.out.println("静态变量staticInt的值:" + QuBieVar.staticInt);System.out.println("成员变量random的值:" + random);System.out.println("");}public static void main(String[] args) {QuBieVar test1 = new QuBieVar();QuBieVar test2 = new QuBieVar();}}

运行上面代码的结果是:

静态变量staticInt的值:1
成员变量random的值:1

静态变量staticInt的值:2
成员变量random的值:1

在上面代码中,无论创建多少个类QuBieVar的对象,永远都只分配一个staticInt变量,所有对象都共享这个变量(对应的同一个内存地址),所有对象修改这个静态变量,都将发生变化;但是创建的任何类的对象,都会分配一个专属的成员变量random,互不影响,因为被分配在不同的内存,有不同的内存指引。

相关文章:

Java学习笔记14——常量与变量

曾和儿子分享过所谓计算机程序,都是编写代码进行“数据处理和处理数据”而已。任何编程语言编写何种应用,数据都必须以某种方式表示。掌握变量和常量的用法,可以使代码的可维护性、可读性大大提高。 一、常量 常量就是在程序中固定不变的量…...

代码随想录算法训练营第四十四天 | 卡码网52. 携带研究材料 ,LeetCode 518. 零钱兑换 II , 377. 组合总和 Ⅳ

题目链接&#xff1a;52. 携带研究材料&#xff08;第七期模拟笔试&#xff09; (kamacoder.com) #include<bits/stdc.h> using namespace std;int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n,v;cin>>n>>v;vector<int> dp(v1,…...

Android Kotlin知识汇总(四)Kotlin 协程实践

Kotlin的重要优势及特点之——结构化并发 Kotlin 协程是一种并发设计模式&#xff0c;可以在 Android 平台上让异步代码像阻塞代码一样易于使用。协程可大幅简化后台任务管理&#xff0c;例如网络调用、本地数据访问等任务的管理。 简单来说&#xff0c;协程就是一种轻量级的非…...

python基础篇--学习记录2

1.深浅拷贝 l1 ["张大仙","徐凤年",["李淳刚","邓太阿"]] # 变量名对应的就是内存地址,这里就是将l1的内存地址给了l2 # 现在两个变量指向同一个内存地址,l1变化l2也会变化 l2 l1 现在的需求是l2是l1的拷贝版本,但是两者是完全分割…...

自动化运维工具Ansible

一.Ansible基本内容 1.定义 Ansible是基于模块工作的&#xff0c;只是提供了一种运行框架&#xff0c;本身没有完成任务的能力&#xff0c;真正操作的是Anisble的模块。每个模块都是独立的、实现了批量系统配置、批量程序部署、批量运行命令等功能。 2.特点与优势 优势&…...

VR全景在智慧园区中的应用

VR全景如今以及广泛的应用于生产制造业、零售、展厅、房产等领域&#xff0c;如今720云VR全景更是在智慧园区的建设中&#xff0c;以其独特的优势&#xff0c;发挥着越来越重要的作用。VR全景作为打造智慧园区的重要角色和呈现方式已经受到了越来越多智慧园区企业的选择和应用。…...

用信号的方式回收僵尸进程

当子进程退出后&#xff0c;会给父进程发送一个17号SIGCHLD信号&#xff0c;父进程接收到17号信号后&#xff0c;进入信号处理函数调用waitpid函数回收僵尸进程若多个子进程同时退出后&#xff0c;这是切回到父进程&#xff0c;此时父进程只会处理一个17号信号&#xff0c;其他…...

计算机服务器中了locked勒索病毒怎么解密,locked勒索病毒解密流程

科技的发展带动了企业生产&#xff0c;越来越多的企业开始利用计算机服务器办公&#xff0c;为企业的生产运营提供了极大便利&#xff0c;但随之而来的网络安全威胁也引起了众多企业的关注。近日&#xff0c;云天数据恢复中心接到许多企业的求助&#xff0c;企业的计算机服务器…...

【C语言刷题】——初识位操作符

【C语言刷题】——初识位操作符 位操作符介绍题一、 不创建临时变量&#xff08;第三个变量&#xff09;&#xff0c;实现两个数的交换&#xff08;1&#xff09;法一&#xff08;2&#xff09;法二 题二、 求一个数存储在内存中的二进制中“一”的个数&#xff08;1&#xff0…...

Python 对Excel工作表中的数据进行排序

在Excel中&#xff0c;排序是整理数据的一种重要方式&#xff0c;它可以让你更好地理解数据&#xff0c;并为进一步的分析和报告做好准备。本文将介绍如何使用第三方库Spire.XLS for Python通过Python来对Excel中的数据进行排序。包含以下三种排序方法示例&#xff1a; 按数值…...

Python对头发二维建模(考虑风力、重力)

目录 一、背景 二、代码 一、背景 数值方法被用于创建电影、游戏或其他媒体中的计算机图形。例如&#xff0c;生成“逼真”的烟雾、水或爆炸等动画。本文内容是对头发的模拟&#xff0c;要求考虑重力、风力的影响。 假设&#xff1a; 1、人的头部是一个半径为10厘米的球体。…...

Python基础快速入门

Python基础快速入门 前置知识 Python Python是一种广泛使用的高级编程语言&#xff0c;以其易于学习和使用的语法而闻名。以下是Python的一些主要特点&#xff1a; 高级语言&#xff1a;Python是一种高级语言&#xff0c;这意味着它提供了较高层次的抽象&#xff0c;使编程更…...

C++的学习

代码练习 输入一个字符串&#xff0c;统计其中大写字母、小写字母、数字、空格以及其他字符的个数 #include <iostream>using namespace std;int main() {cout << "请输入一个字符串" << endl;string str;getline(cin,str);int capital 0;int l…...

工地安全反光衣穿戴监测报警摄像机

工地安全反光衣穿戴监测报警摄像机是为了提高工地施工人员的安全意识和监管效率而设计的。这种设备结合了反光衣、监测系统和报警摄像机的功能&#xff0c;可以有效减少工地事故的发生。 首先&#xff0c;工地安全反光衣是一种具有高度可见度的服装&#xff0c;能够使穿戴者在夜…...

UNIAPP微信小程序中使用Base64编解码原理分析和算法实现

为何要加上UNIAPP及微信小程序&#xff0c;可能是想让检索的翻围更广把。&#x1f607; Base64的JS原生编解码在uni的JS引擎中并不能直接使用&#xff0c;因此需要手写一个原生的Base64编解码器。正好项目中遇到此问题&#xff0c;需要通过URLLink进行小程序跳转并携带Base64参…...

人工智能|机器学习——K-means系列聚类算法k-means/ k-modes/ k-prototypes/ ......(划分聚类)

1.k-means聚类 1.1.算法简介 K-Means算法又称K均值算法&#xff0c;属于聚类&#xff08;clustering&#xff09;算法的一种&#xff0c;是应用最广泛的聚类算法之一。所谓聚类&#xff0c;即根据相似性原则&#xff0c;将具有较高相似度的数据对象划分至同一类簇&#xff0c;…...

注意力、自注意力和多头注意力的区别

本文作者&#xff1a; slience_me 注意力、自注意力和多头注意力的区别 理解注意力&#xff08;Attention&#xff09;、自注意力&#xff08;Self-Attention&#xff09;和多头注意力&#xff08;Multi-Head Attention&#xff09;之间的区别非常重要&#xff0c;因为它们是自…...

FTP,SFTP,FTPS,SSL,TSL简介,区别,联系,使用场景说明

文章目录 简介FTPFTPSSFTP加密场景选择FTPS还是SFTPFTP、SFTP、FTPS区别、联系和具体使用场景如何使用FTP、SFTP和FTPSSSLTLSSSL和TLS区别和联系&#xff0c;以及使用场景SSL和TLS技术上的区别一些问题隐式的TLS&#xff08;FTPS/SSL&#xff09;或者显式的TLS&#xff08;FTPS…...

路由算法与路由协议

路由选择协议的核心是路由算法&#xff0c;即需要何种算法来获得路由表中的各个项目。 路由算法的目的很简单&#xff1a;给定一组路由器以及连接路由器的链路&#xff0c;路由算法要找到一条从源路由器到目标路由器的最佳路径。通常&#xff0c;最佳路径是指具有最低费用的路…...

dubbo接口自动化用例性能优化

前言 去年换了一个新部门&#xff0c;看了下当前的自动化用例的情况&#xff0c;发现存在三类性能问题&#xff1a; 本地调试运行时等待时间较长&#xff0c;就算是一个简单的case&#xff0c;执行时间都需要1分钟以上单用例执行时间比较长&#xff0c;部分用例执行时间超过2…...

终极指南:如何用Obsidian PDF++插件将PDF阅读效率提升300%

终极指南&#xff1a;如何用Obsidian PDF插件将PDF阅读效率提升300% 【免费下载链接】obsidian-pdf-plus PDF: the most Obsidian-native PDF annotation & viewing tool ever. Comes with optional Vim keybindings. 项目地址: https://gitcode.com/gh_mirrors/ob/obsid…...

Xilinx Video IP(二)AXI4-Stream视频数据流与FIFO深度优化

1. AXI4-Stream视频数据流基础 第一次接触Xilinx的Video IP时&#xff0c;很多人会被AXI4-Stream接口搞得一头雾水。其实把它想象成一条传送带就很好理解了——视频数据就像流水线上的包裹&#xff0c;按照固定节奏从源头运送到目的地。这条"传送带"有几个关键特性&a…...

仅限首批200名AI基础设施工程师:Cuvil 2024Q3内部编译诊断工具集(含AST可视化插件与算子融合热力图)

第一章&#xff1a;Cuvil编译器在Python AI推理中的定位与价值Cuvil编译器是一个面向AI推理场景的轻量级、Python原生友好的编译框架&#xff0c;专为优化动态图模型&#xff08;如PyTorch TorchScript子集、ONNX子图及自定义算子图&#xff09;在CPU/GPU边缘设备上的执行效率而…...

Modbus RTU vs ASCII模式详解:如何为你的串口通信项目选择正确协议格式

Modbus RTU与ASCII模式深度解析&#xff1a;工业通信协议选择的黄金法则 在工业自动化领域&#xff0c;Modbus协议就像一位沉默的协调者&#xff0c;让各种设备能够顺畅交流。而在这位协调者的工具箱里&#xff0c;RTU和ASCII两种串口传输模式如同不同的方言&#xff0c;各有其…...

十大排序算法详解:从原理到实战,苹果群控系统游戏运营如何实现自动执行任务。

排序算法概述 排序算法是将一组数据按照特定顺序&#xff08;如升序或降序&#xff09;重新排列的算法。根据时间复杂度、空间复杂度、稳定性等特性&#xff0c;排序算法可分为比较排序和非比较排序两大类。常见算法包括冒泡排序、快速排序、归并排序、堆排序、计数排序等。比较…...

FLUX.1-dev旗舰版画质巅峰:多组高清AI绘画作品效果对比

FLUX.1-dev旗舰版画质巅峰&#xff1a;多组高清AI绘画作品效果对比 1. 光影质感革命&#xff1a;FLUX.1-dev的视觉突破 当第一次看到FLUX.1-dev生成的图像时&#xff0c;大多数人都会产生同一个疑问&#xff1a;这真的是AI画的吗&#xff1f;作为当前开源界最强的Text-to-Ima…...

AgentCPM历史记录功能:自动保存所有研报,构建个人知识库

AgentCPM历史记录功能&#xff1a;自动保存所有研报&#xff0c;构建个人知识库 1. 为什么需要研报历史记录功能 1.1 研究工作的连续性挑战 专业分析师和研究人员每天都会产生大量研究内容&#xff0c;但传统工作方式存在明显痛点&#xff1a; 内容分散&#xff1a;不同日期…...

LFM2.5-1.2B-Thinking-GGUF效果展示:32K上下文下跨段落信息关联与归纳能力实测

LFM2.5-1.2B-Thinking-GGUF效果展示&#xff1a;32K上下文下跨段落信息关联与归纳能力实测 1. 模型核心能力展示 1.1 32K上下文处理实测 LFM2.5-1.2B-Thinking-GGUF最突出的能力是其32K超长上下文处理能力。在实际测试中&#xff0c;我们输入了一篇约2万字的技术文档&#x…...

基于Qt框架的桌面应用开发:集成nli-distilroberta-base实现本地文本分析工具

基于Qt框架的桌面应用开发&#xff1a;集成nli-distilroberta-base实现本地文本分析工具 1. 引言&#xff1a;当桌面应用遇上NLP模型 最近在开发一个跨平台的文本分析工具时&#xff0c;遇到了一个有趣的需求&#xff1a;如何让传统桌面应用具备自然语言理解能力&#xff1f;…...

打造沉浸式智能AI问答助手:Vue + UniApp 全端实战(支持 Markdown/公式/多模态交互)畔

OCP原则 ocp指开闭原则&#xff0c;对扩展开放&#xff0c;对修改关闭。是七大原则中最基本的一个原则。 依赖倒置原则&#xff08;DIP&#xff09; 什么是依赖倒置原则 核心是面向接口编程、面向抽象编程&#xff0c; 不是面向具体编程。 依赖倒置原则的目的 降低耦合度&#…...