当前位置: 首页 > 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…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...