Java变量:声明、作用域和命名约定

news2024/12/23 18:45:24

Java变量:声明、作用域和命名约定

什么是变量?
在Java中,变量是保存特定数据类型值的内存位置的名称。它是java编程中的一个基本概念,允许您在程序执行期间存储和操作数据。

Java中的变量可以保存各种类型的数据,包括整数、浮点数、字符和布尔值。还可以使用变量来保存更复杂的数据类型,如数组、对象和字符串。

变量是与可以更改的值相关联的名称。例如,当我写int I=10时;这里的变量名是i,其值为10,int是一种数据类型,表示该变量可以包含整数值。我们已经在本教程中介绍了数据类型。在本教程中,我们将讨论变量。

Java变量声明:语法和最佳实践在Java中,可以使用以下语法声明变量:

data_type variable_name = value;

这里的值是可选的,因为在java中,您可以先声明变量,然后再将值分配给它。

这里,data_type表示变量将保存的数据类型,如int、double、String、boolean等variable_name是要给变量的名称。

例如:在下面的代码中,num是一个变量,int是一个数据类型。您可以在此处阅读数据类型。

int num;

同样,我们可以在声明变量的同时将值分配给变量,如下所示: 

char ch = 'A';
int number = 100;
char ch;
int number;
...
ch = 'A';
number  = 100;

 

局部变量声明的语法:

在方法或块内部声明的变量。例如

int myAge;
double mySalary;
String myName;

实例变量的Syntax声明:

这些变量在类内部声明,但在方法或块外部声明。例如:

public int myAge;
private double mySalary;
String myName;

 

类变量的Syntax声明:

这些也称为静态变量。这些变量在类中声明,但在任何方法或块之外。点击此处了解更多关于静态变量的信息。

public static int counter;
private static double rateOfInterest;

Java变量命名约定:可读和可维护代码的最佳实践
变量命名不能包含空格,例如:int num ber=100;无效,因为变量名中有空格。
变量不应以数字开头,也不应包含特殊字符,如@、#、$、%、^、&、*、(,)、-、+、/、\、|、?、:或
根据java编码标准,变量名应该以小写字母开头,例如int数字;对于包含多个单词的冗长变量名称,请这样做:int smallNumber;int bigNumber;(第二个单词以大写字母开头)。
常量(其值在运行时不会更改的变量)应全部用大写字母书写,并用下划线分隔单词。例如:MAX_VALUE,PI。
在Java中,变量名区分大小写。例如,变量myNum和myNum是两个不同的变量。
变量不应使用保留关键字或类名作为其名称。例如,不应将变量命名为“int”或“String”。

Java变量的默认值
在Java中,如果变量未明确初始化,则会自动为其分配默认值。默认值取决于变量的数据类型,如下表所示:

 

例如,如果在未初始化的情况下声明一个整数变量,则会为其分配默认值0:

int num;
System.out.println(num); // prints 0

 类似地,如果您在未初始化的情况下声明布尔变量,则会为其分配一个默认值false:

Java中的变量类型
Java中有三种类型的变量。

静态(或类)变量
全局变量(实例变量)
局部变量

1.静态(或类)变量
静态变量也称为类变量,因为它们与类相关联,并且对类的所有实例都是公共的。要在Java中声明静态变量,请在类定义中变量的数据类型之前使用static关键字,如下所示:

public class MyClass {
    static int myStaticVariable = 100;
}

可以使用类名而不是实例名来访问静态变量,如下所示:

int num = MyClass.myStaticVariable;

例如,如果我创建一个类的三个对象并访问这个静态变量,那么它对所有对象都是相同的,使用其中一个对象对变量所做的更改将反映出您通过其他对象访问它的情况。

public class StaticVarExample {
   public static String myClassVar="class or static variable";
	
   public static void main(String args[]){
      StaticVarExample obj = new StaticVarExample();
      StaticVarExample obj2 = new StaticVarExample();
      StaticVarExample obj3 = new StaticVarExample();
      
      //All three will display "class or static variable"
      System.out.println(obj.myClassVar);
      System.out.println(obj2.myClassVar);
      System.out.println(obj3.myClassVar);

      //changing the value of static variable using obj2
      obj2.myClassVar = "Changed Text";

      //All three will display "Changed Text"
      System.out.println(obj.myClassVar);
      System.out.println(obj2.myClassVar);
      System.out.println(obj3.myClassVar);
   }
}

输出结果:

class or static variable
class or static variable
class or static variable
Changed Text
Changed Text
Changed Text

正如您所看到的,无论通过哪个实例访问,所有三个语句都显示相同的输出。这就是为什么我们可以在不使用以下对象的情况下访问静态变量:

 请注意,只有静态变量才能像这样访问(不使用对象)。这不适用于实例变量和局部变量。

2.全局变量或实例变量
全局变量也称为实例变量。它是在类级别声明的,类中的所有方法和构造函数都可以访问它。

类的每个实例(对象)都有自己的实例变量副本。与静态变量不同,实例变量有自己独立的实例变量副本。

在以下示例中,我们更改了对象obj2的实例变量myInstanceVar值,当我们使用所有三个对象显示变量时,只有obj2值发生了更改,其他值保持不变。这表明它们有自己的实例变量副本。

实例变量示例

public class InstanceVarExample {
   String myInstanceVar="instance variable";
	
   public static void main(String args[]){
	InstanceVarExample obj = new InstanceVarExample();
	InstanceVarExample obj2 = new InstanceVarExample();
	InstanceVarExample obj3 = new InstanceVarExample();
		
	System.out.println(obj.myInstanceVar);
	System.out.println(obj2.myInstanceVar);
	System.out.println(obj3.myInstanceVar);

		
	obj2.myInstanceVar = "Changed Text";

		
	System.out.println(obj.myInstanceVar);
	System.out.println(obj2.myInstanceVar);
	System.out.println(obj3.myInstanceVar);
   }
}

结果: 

instance variable
instance variable
instance variable
instance variable
Changed Text
instance variable

3.局部变量
在Java中,局部变量是在方法、构造函数或代码块中声明的变量,并且只能在该块中访问。它们的作用域仅限于方法,这意味着您不能更改它们的值并在方法之外访问它们。

局部变量用于存储在方法或块中执行特定任务所需的临时值。它们的作用域和生存期有限,一旦方法或块完成执行,就会被销毁。

以下是在方法中声明的局部变量的示例:

public void myMethod() {
    int num = 100;
    System.out.println(num);
}

在上面的例子中,变量num是在myMethod()方法内部声明的局部变量。它被分配了值100,该值使用println()方法打印到控制台。一旦该方法完成执行,变量就会被销毁,并且其值不再可访问。

局部变量示例

public class VariableExample {
   // instance variable
   public String myVar="instance variable";
    
   public void myMethod(){
    	// local variable
    	String myVar = "Inside Method";
    	System.out.println(myVar);
   }
   public static void main(String args[]){
      // Creating object
      VariableExample obj = new VariableExample();
    	
      /* We are calling the method, that changes the 
       * value of myVar. We are displaying myVar again after 
       * the method call, to demonstrate that the local 
       * variable scope is limited to the method itself.
       */
      System.out.println("Calling Method");
      obj.myMethod();
      System.out.println(obj.myVar);
   }
}

Java中全局变量与局部变量的区别
在Java中,全局变量是在类级别声明的变量,类中的所有方法和构造函数都可以访问该变量。另一方面,局部变量是在方法或块中声明的变量,并且只能在该方法或块内访问。

以下是全局变量和局部变量之间的一些关键区别:

作用域:全局变量的作用域更广,因为它们可以在整个类中访问。另一方面,局部变量的作用域较窄,因为它们只能在声明它们的方法或块中访问。
生存期:全局变量的生存期更长,因为它们是在对象实例化时创建的,而在对象销毁时销毁。局部变量的生存期较短,因为它们是在执行方法或块时创建的,并在方法或块退出时销毁。
访问:全局变量可以从类中的任何方法或构造函数访问,这意味着它们可以由任何有权访问它们的方法或构造函数修改。局部变量只能在声明它们的方法或块中访问。
初始化:如果没有提供显式初始化,全局变量将初始化为默认值(例如,0表示数字类型,false表示布尔值,null表示对象)。必须先显式初始化局部变量,然后才能使用它们。

 

public class JavaExample {
  private int myGlobalVariable = 100;

  //a method
  public void myMethod() {
    int myLocalVariable = 100;

    myGlobalVariable++; //global variable increment
    myLocalVariable++; //local variable increment

    System.out.print("Global variable: " + myGlobalVariable);
    System.out.println(" Local variable: " + myLocalVariable);
  }
  public static void main(String args[]){
    JavaExample obj = new JavaExample();

    obj.myMethod();  // Output: Global variable: 101 Local variable: 101
    obj.myMethod();  // Output: Global variable: 102 Local variable: 101
    obj.myMethod();  // Output: Global variable: 103 Local variable: 101

  }
}

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

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

相关文章

【ai】tx2-nx:配置tritonserver2.17.0-jetpack4.6 环境并运行例子

2.17.0 for jetpack 4.6运行需要 如果在jetson上构建Triton : Note: When building Triton on Jetson, you will require a newer version of cmake. We recommend using cmake 3.21.0. Below is a script to upgrade your cmake version to 3.21.0. You can use cmake 3.18.4…

金融居间CRM系统赋能金服企业精细化管理客户

金融居间CRM系统可以帮助金融服务企业实现精细化管理客户。通过CRM系统,企业可以更好地了解和跟踪客户需求、行为和历史记录。以下是一些具体的赋能方式: 1. 客户数据集成与管理 将客户的个人信息、财务状况、交易历史等数据集成到一个统一的平台中&…

三步问题00

题目链接 三步问题 题目描述 注意点 n范围在[1, 1000000]之间结果可能很大,需要对结果模1000000007 解答思路 动态规划的思想根据dp[i - 1]、dp[i - 2]、dp[i - 3]推出dp[i]需要注意的是结果可能很大,在计算的过程中需要模1000000007防止越界 代码…

华为数通——OSPF

正掩码:/24 255.255.255.0 反掩码: 255.255.255.255 -255.-255.-255.0 0.0.0.255 例如掩码:255.255.252.0 反掩码:0.0.3.255 在反掩码里面,0 bit 表示精确匹配,1…

2024年有什么赚钱的副业推荐半年还清贷款,成功变现12.3w的全套玩法都放这里了!!!

要说推荐副业,我是最有发言权了。普通打工人一个,年轻不懂事,经常超前消费,欠了一屁股债,没得办法,就只能到处找能赚钱的门路。 尝试了30的副业,就发现能赚钱的不是太辛苦,就是需要…

目标检测——SCUT-HEAD:大规模人头检测数据集的深度剖析

引言 亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 在…

Unity3D 八叉树划分空间和可视化

也许更好的阅读体验 成果展示 代码 OctreeNode using System.Collections; using System.Collections.Generic; using UnityEngine; public class OctreeNode {//空间内包含的物体public List<GameObject> areaObjects;//空间中心public Vector3 center;//空间大小pub…

MySQL:SELECT list is not in GROUP BY clause 报错 解决方案

一、前言 一大早上测试环境&#xff0c;发现测试环境的MySQL报错了。 SELECT list is not in GROUP BY clause and contains nonaggregated column二、解决方案 官方文档中提到&#xff1a; 大致意思&#xff1a; 用于GROUP BY的SQL / 92标准要求满足以下条件&#xff1a; SE…

RA6M1语音识别演示板

介绍&#xff1a; 本应用说明解释了瑞萨电子语音识别演示的硬件规格 主板RTK0EA0004D00001BJ&#xff0c;采用RA6M1 应用图示&#xff1a; 开发板如图所示&#xff1a; 原理图&#xff1a; 学下布局&#xff1a;

如何在软件开发时代实现技术+业务的双重突破?【含资源】

在当前的软件开发时代&#xff0c;许多企业面临着核心技术缺失、专业人才短缺以及产品能力单一等问题&#xff0c; 迫切需要加强技术实力&#xff0c;补充和扩展原有的业务和行业能力。 将技术与业务需求深度结合&#xff0c;构建适应时代需求的技术业务模式&#xff0c;成为软…

EulerOS 安装docker 拉取opengauss 、redis镜像

#下载docker包 wget https://download.docker.com/linux/static/stable/x86_64/docker-18.09.9.tgz #解压 tar zxf docker-18.09.9.tgz #移动解压后的文件夹到/usr/bin mv docker/* /usr/bin #写入docker.service cat >/usr/lib/systemd/system/docker.service <<E…

“2024国际数字能源展”推动绿色低碳发展,助力实现“双碳”目标

随着全球气候变化问题的日益严峻&#xff0c;构建现代能源体系、推动绿色低碳发展已成为各国共同的使命和追求。在这一背景下&#xff0c;我国提出了“四个革命、一个合作”的能源安全新战略&#xff0c;旨在推动能源生产消费革命&#xff0c;保障国家能源安全&#xff0c;助力…

避雷!紧急停止投稿,毕业神刊Aging危险了,被数据库“On Hold“!

本周投稿推荐 SSCI • 中科院2区&#xff0c;6.0-7.0&#xff08;录用友好&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; CNKI • 7天录用-检索&#xff08;急录友好&#xff09; SCI&EI • 4区生物医学类&#xff0c;0.5-1.0&#xff08;录用…

惠普8596E频谱分析仪

8590E系列频谱分析仪具有各种各样的性能、功能&#xff0c;其价格亦是为适应用户的承受能力而确定的。用户可以从价格低廉、具有基本性能的分析仪直至高性能分析仪中进行挑选&#xff0c;无论选择哪种分析仪&#xff0c;都会感受到8590系列频谱分析仪便于使用且高度可靠。这些仪…

ICC2如何写DCG需要的floorplan信息

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 DCG需要哪些floorplan信息呢? 1)fixed属性的port和mem / ip / io 2)boundary信息 3)电源域形状 前两条都可以写到def里,电源域需要用脚本处理,这里分享一下脚本。 set_fixed_objects [ge…

简易在线浮动客服-网站右侧悬停浮动在线客服代码

本文将介绍如何制作一个简单的在线浮动客服&#xff0c;这是一个网站右侧悬浮窗的在线客服&#xff0c;并分享完整的代码实现。 CSS /* 基础样式重置 */body, html {margin: 0;padding: 0;font-family: Arial, sans-serif;}/* 固定小部件位置 */.fixed-widget {position: fixe…

Day14—基于Langchain-chatchat搭建本地智能

一、基于Langchain-chatchat搭建本地智能 知识问答系统 1、项目介绍 基于 ChatGLM 等大语言模型与 Langchain 等应用框架实现&#xff0c;开一种利用 langchain 思想实现的基于本地知识库的问答应用&#xff0c;目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知…

fastapi给文档页面docs/加锁

加锁后效果如下&#xff1a; 如图docs/页面打开默认是茶壶&#xff0c;需加上定制参数才能正常访问 &#xff1a; 具体实现如下&#xff1a; 1. 安装依赖包&#xff1a; pip install fastapi-cdn-host>0.5.2 || pip install --upgrade gitssh://gitgithub.com/waketzheng…

XGBoost算法详解

XGBoost算法详解 XGBoost&#xff08;Extreme Gradient Boosting&#xff09;是一种高效的梯度提升决策树&#xff08;GBDT&#xff09;实现&#xff0c;因其高性能和灵活性在机器学习竞赛中广泛使用。本文将详细介绍XGBoost算法的原理&#xff0c;并展示其在实际数据集上的应…

hbuilderx如何打包ios app,如何生成证书

hbuilderx可以打包ios app, 但是打包的时候&#xff0c;却需要两个证书文件&#xff0c;我们又如何生成这两个证书文件呢&#xff1f; 点击hbuilderx的官网链接&#xff0c;教程是需要使用mac电脑苹果开发者账号去创建这两个文件&#xff0c;可是问题来了&#xff0c;我们没有…