Java变量的声明和初始化,Java变量的作用域:静态变量、全局变量和局部变量

news2024/12/23 13:58:05

java  语言是强类型(Strongly Typed)语言,强类型包含以下两方面的含义:

  • 所有的变量必须先声明、后使用。
  • 指定类型的变量只能接受类型与之匹配的值。


这意味着每个变量和每个表达式都有一个在编译时就确定的类型。类型限制了一个变量能被赋的值,限制了一个表达式可以产生的值,限制了在这些值上可以进行的操作,并确定了这些操作的含义。

常量和变量是 Java 程序中最基础的两个元素。常量的值是不能被修改的,而变量的值在程序运行期间可以被修改。本文详细介绍 Java 中变量的声明和赋值方法。

声明变量

对开发人员来说,变量是用来描述一条信息的别名,可以在程序代码中使用一个或多个变量。变量中可以存储各种类型的信息,如登录信息、版本名称、文件的大小、某个英文单词以及飞机票价格等。

在 java 中用户可以通过指定数据类型和标识符来声明变量,其基本语法如下所示:

DataType identifier;

或者

DataType identifier=value;


上述语法代码中涉及 3 个内容:DataType、 identifier 和 value,其具体说明如下:

  • DataType:变量类型,如 int、string、 char 和 double 等。
  • identifier:标识符,也叫变量名称。
  • value:声明变量时的值。


变量标识符的命名规范如下:

  • 首字符必须是字母、下划线(―)、美元符号($)或者人民币符号(¥)。
  • 标识符由数字(0~9)、大写字母(A~Z)、小写字母(a~z)、下划线(―)、美元符号($)、人民币符号(¥)以及所有在十六进制 0xc0 前的 ASCII 码组成。
  • 不能把关键字、保留字作为标识符。
  • 标识符的长度没有限制。
  • 标识符区分大小写。


如下代码分别声明了 String、boolean 和 int 类型的变量。

 
  1. String employee; // String 类型的变量
  2. boolean isSave; // boolean 类型的变量
  3. int create_at; // int 类型的变量

变量赋值

初始化变量是指为变量指定一个明确的初始值。初始化变量有两种方式:一种是声明时直接赋值,一种是先声明、后赋值。如下代码分别使用两种方式对变量进行了初始化。

 
  1. char usersex='女'; // 直接赋值

或者

 
  1. String username; // 先声明
  2. username ="琪琪"; // 后赋值


另外,多个同类型的变量可以同时定义或者初始化,但是多个变量中间要使用逗号分隔,声明结束时用分号分隔。

 
  1. String username,address,phone,tel; // 声明多个变量
  2. int num1=12,num2=23,result=35; // 声明并初始化多个变量


Java 中初始化变量时需要注意以下事项:

  • 变量是类或者结构中的字段,如果没有显式地初始化,默认状态下创建变量并默认初始值为 0。
  • 方法中的变量必须显式地初始化,否则在使用该变量时就会出错。

变量的作用域规定了变量所能使用的范围,只有在作用域范围内变量才能被使用。根据变量声明地点的不同,变量的作用域也不同。

根据作用域的不同,一般将变量分为不同的类型:成员变量和局部变量。下面对这几种变量进行详细说明。

成员变量

java  的成员变量有两种,分别是全局变量和静态变量(类变量)。定义在方法体和语句块之外,不属于任何一个方法,作用域是整个类。
 

名称修饰访问生命周期
全局变量(实例变量)无 static 修饰对象名.变量名只要对象被当作引用,实例变量就将存在
静态变量(类变量)用 static 修饰类名.变量名或对象名.变量名其生命周期取决于类的生命周期。类被垃圾回收机制彻底回收时才会被销毁


假设在一个类中声明了 4 个变量,下面编写一个测试类输出引起变量的值改变的示例代码。

变量声明代码如下所示:

 
  1. public class DataClass {
  2. String name; // 成员变量、实例变量
  3. int age; // 成员变量、实例变量
  4. static final String website = "CSDN网"; // 成员变量、静态变量(类变量)
  5. static String URL = "http://csdn.net"; // 成员变量、静态变量(类变量)
  6. }

测试类代码如下所示:

 
  1. public class Test {
  2. public static void main(String[] args) {
  3. // 创建类的对象
  4. DataClass dc = new DataClass();
  5. // 对象名.变量名调用实例变量(全局变量)
  6. System.out.println(dc.name);
  7. System.out.println(dc.age);
  8. // 对象名.变量名调用静态变量(类变量)
  9. System.out.println(dc.website);
  10. System.out.println(dc.URL);
  11. // 类名.变量名调用静态变量(类变量)
  12. System.out.println(DataClass.website);
  13. System.out.println(DataClass.URL);
  14. }
  15. }


在本例的第一段代码中定义了 4 个成员变量,由输出结果可以看出,name 和 age 显示系统默认初始化的值,website 和 URL 显示初始化的值。且用 static final 修饰的变量必须赋予初始值。

局部变量

局部变量是指在方法或者方法代码块中定义的变量,其作用域是其所在的代码块。可分为以下三种:

  • 方法参数变量(形参):在整个方法内有效。
  • 方法局部变量(方法内定义): 从定义这个变量开始到方法结束这一段时间内有效。
  • 代码块局部变量(代码块内定义):从定义这个变量开始到代码块结束这一段时间内有效。


局部变量在使用前必须被程序员主动初始化值。

1)方法局部变量

声明两个局部变量并输出其值,其实现代码如下:

 
  1. public class Test2 {
  2. public static void main(String[] args) {
  3. int a = 7;
  4. if (5 > 3) {
  5. int s = 3; // 声明一个 int 类型的局部变量
  6. System.out.println("s=" + s);
  7. System.out.println("a=" + a);
  8. }
  9. System.out.println("a=" + a);
  10. }
  11. }

上述实例中定义了 a 和 s 两个局部变星,其中 int 类型的 a 的作用域是整个 main() 方法,而 int 类型的变量 s 的作用域是 if 语句的代码块内,其执行结果如图 2 所示:
 

运行结果


图 2  运行结果


如果在 if 方法外调用变量 s,则会报无法解析该变量的错误。

2)方法参数变量

作为方法参数声明的变量的作用域是整个方法。

声明一个方法参数变量,实现代码如下:

 
  1. public class Test3 {
  2. public static void testFun(int n) {
  3. System.out.println("n=" + n);
  4. }
  5. public static void main(String[] args) {
  6. testFun(3);
  7. }
  8. }

在上述实例中定义了一个 testFun() 方法,该方法中包含一个 int 类型的参数变量 n,其作用域是 testFun() 方法体内。当调用方法时传递进了一个参数 3,因此其输出控制台的 n 值是 3。

3)代码块局部变量

代码块局部变量常用于 try catch 代码块中,成为异常处理参数变量。

异常处理参数变量的作用域是在异常处理块中,该变量是将异常处理参数传递给异常处理块,与方法参数变量类似。

声明一个异常处理语句,实现代码如下:

 
  1. public class Test4 {
  2. public static void test() {
  3. try {
  4. System.out.println("Hello!Exception!");
  5. } catch (Exception e) { // 异常处理块,参数为 Exception 类型
  6. e.printStackTrace();
  7. }
  8. }
  9. public static void main(String[] args) {
  10. test();
  11. }
  12. }

在上述实例中定义了异常处理语句,异常处理块 catch 的参数为 Exception 类型的变量 e,作用域是整个 catch 块。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.springcloudalibaba项目搭建(基于alibaba2021.0.5.0版本)

文章目录 [TOC](文章目录) 前言一、项目配置1.1 pom配置1.2 nacos新建命名空间1.3 项目配置1.4 nacos上配置配置文件1.5 代码新增测试读取服务配置代码1.6 启动类增加注解 二、启动服务并测试2.1 启动服务,查看是否注册成功2.2 测试是否读取到了nacos上的配置 总结 …

嵌入式系统中的加密性能:第2部分

本系列的第1部分讨论了影响系统级密码性能的硬件和软件变量。现在,在第2部分中,我们将重点介绍两种用于测量高级后备加速器性能的方法:1)驱动器级加速器测试以识别加速器或SoC内存带宽约束,以及2)应用程序/…

什么是电商 API接口 以及电子商务网站为何使用它们

从技术上讲,API是应用程序编程接口的首字母缩写,被认为是构建应用软件的一组协议。实际上,API 是让人们保持数字联系的大部分基础。 从我们手机上的应用程序到复杂的飞行控制系统,API 将原本完全不同的系统组合在一起以创建单一…

睿趣科技:抖音店铺怎么取名受欢迎

抖音作为国内最大的短视频平台,其商业价值不容忽视。许多商家和创作者都在抖音上开设了自己的店铺,而一个富有创意和吸引力的店铺名字,往往能带来更多的客流量。那么,如何为抖音店铺取个好名字呢?以下是一些有用的建议。 明确定位…

Linux配置SSH允许TCP转发

#编辑SSH配置文件 vi /etc/ssh/sshd_config #重启SSH服务 systemctl restart sshd.service AllowTcpForwarding yes

MES生产执行解决方案提供商,可定制工厂MES精益制造管理系统-亿发

亿发智能制造MES系统:驱动制造业创新,实现数字化生产和管理 MES管理系统以实时协同思想为核心,着重于精益生产计划的实施和车间实时调度。对生产现场和业务经营的数据进行全面的系统化管理,以数据分析的结果为基础,协助…

小程序搭建的技巧|网站建设|软件定制APP开发

小程序搭建的技巧|网站建设|软件定制APP开发 首先,我们要知道小程序是一个非常方便的工具,它可以让我们在手机上运行一些应用,不用下载安装,非常方便。小程序可以分为两种:一种是代码开发,另一种是模板开发…

抖音手机实景无人直播间怎么搭建?

手机无人直播已成为用户直播和商家直播带货的一项热门技术趋势,为消费者提供了全新的观看体验。无人直播,顾名思义,即通过无人直播软件或数字人来进行无人直播。这一技术的广泛应用,不仅为短视频渠道带来了更丰富的玩法&#xff0…

MySQL 主从同步(读写分离)

Spring Cloud 微服务系列文章,点击上方合集↑ 1. 开头 在生产环境中,为了应对大量的读写请求并减轻数据库的负载压力,常常会使用MySQL主从同步来实现读写分离的架构。通过这种架构,主数据库负责处理写操作,而从数据库…

知识增强语言模型提示 零样本知识图谱问答10.8

知识增强语言模型提示 零样本知识图谱问答 摘要介绍相关工作方法零样本QA的LM提示知识增强的LM提示与知识问题相关的知识检索 摘要 大型语言模型(LLM)能够执行 零样本closed-book问答任务 ,依靠其在预训练期间存储在参数中的内部知识。然而&…

el-table 设置最大高度且能刚好撑满

max-height"calc(90vh - 120px)"90vh视口高度的90%自行调整即可

【NLTK系列02】NLTK库应用:使用 NLTK 进行情绪分析

使用 NLTK 进行情绪分析 上篇:【NLTK系列】:nltk库介绍(01)_无水先生的博客-CSDN博客 一、说明 上篇《NLTK库介绍》介绍了NLTK的基本用法,本篇介绍NLTK的一个具体应用:“使用 NLTK 进行情绪分析”&#xf…

C++QT-day2

#include <bits/stdc.h>/*自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c;定义公有成员函数:初始化函数:void init(int w, int h)更改宽度的函数:set_w(int w)更改高度的函数:set_h(int h)输出该矩形的周长和面积函数:void sho…

安卓端App页面狂刷问题记录

一、场景 App基于webview混合开发&#xff0c;业务主要为前端h5实现&#xff0c;其中有一个功能为消息中心&#xff0c;当从通知栏点击消息跳转到指定页面时&#xff0c;前端会不停地刷新页面&#xff0c;一遍又一遍地重复同一批请求。 二、问题分析 1、刚开始怀疑是否前端里…

Mac电脑专业的任务管理软件 Omnifocus Pro 3中文 for mac

OmniFocus Pro是一款针对Mac平台的高效任务管理软件&#xff0c;它可以帮助用户处理日常事务、安排计划任务&#xff0c;同时提高用户的工作效率。该软件具有简单、直观、易于使用的特点&#xff0c;与其他电子任务清单工具相比&#xff0c;OmniFocus Pro更加专注于细节和定制化…

【postgresql】

看到group by 1&#xff0c;2 和 order by 1&#xff0c; 2。看不懂&#xff0c;google&#xff0c;搜到了Stack Overflow 上有回答 What does SQL clause “GROUP BY 1” mean? 大概意思就是&#xff0c;group by&#xff0c; order by 后面跟数字&#xff0c;指的是 selec…

漏刻有时数据可视化大屏(16)数据指标KPI和柱图折线图混排

CSS样式表 /*面板*/ .pannel {width: 100%;margin-top: 30px;clear: both; }.item_l {float: left;width: 20%; /*3格60%*/margin: 0; }.item_r {float: left;width: 10%; /*4格40%*/margin: 0; }.item_child {float: left;width: 50%; }.item_child_b {float: left;width: 10…

OLED透明拼接屏,在包头市的市场表现与应用领域

包头&#xff0c;作为内蒙古自治区的重要城市之一&#xff0c;以其丰富的煤炭资源和快速发展的经济而闻名于世。 包头拥有着独特的地理位置和良好的交通条件&#xff0c;吸引了大量的投资和企业进驻&#xff0c;推动了城市的不断发展和现代化建设。 随着科技的不断进步&#…

深度学习基础知识 使用torchsummary、netron、tensorboardX查看模参数结构

深度学习基础知识 使用torchsummary、netron、tensorboardX查看模参数结构 1、直接打印网络参数结构2、采用torchsummary检测、查看模型参数结构3、采用netron检测、查看模型参数结构3、使用tensorboardX 1、直接打印网络参数结构 import torch.nn as nn from torchsummary im…