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

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

  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

市值飙升!超微软、苹果,英伟达成为全球市值最高上市公司

KlipC报道:当地时间6月18日,英伟达股价再度大涨,盘后股价上涨3.51%,总市值达3.335万亿美元,报135.58美元再刷历史新高,超微软、苹果成为全球市值最高的上市公司。 值得一提的是,在本月初&#x…

记录一次mysql长事务的经历

目录 一.项目介绍 二.问题暴漏 三.问题排查 1.连接池方向 2.数据库方向 四.代码模拟 五.错误原因分析 1.MySQL参数优化 2.代码优化 六.总结 一.项目介绍 项目是springbootnacos的微服务架构,商城购物类系统,分多个服务,问题出现在众多服务中的单个服务 二.问题暴漏…

【AI学习】LLaMA 系列模型的进化(一)

一直对LLaMA 名下的各个模型关系搞不清楚,什么羊驼、考拉的,不知所以。幸好看到两篇综述,有个大致了解,以及SEBASTIAN RASCHKA对LLaMa 3的介绍。做一个记录。 一、文章《Large Language Models: A Survey》中对LLaMa的介绍 论文…

解决 执行 jar 命令 控制台乱码

Springboot项目,编码为utf8 打包后,为了在控制台运行时不乱码,需要在控制台中依次执行以下命令: 第一步: chcp 65001第二步: java -jar -Dfile.encodingutf-8 你的.jar

【GUI软件】小红书蒲公英数据批量采集!高效筛选优质博主,助力品牌商

文章目录 一、背景介绍1.0 爬取目标1.1 演示视频1.2 软件说明 二、代码讲解2.0 关于接口2.1 爬虫采集模块2.2 cookie获取2.3 软件界面模块2.4 日志模块 三、获取采集软件 一、背景介绍 1.0 爬取目标 众所周知,蒲公英是小红书推出的优质创作者商业合作服务平台&…

《庆余年》在前,《玫瑰的故事》在后,阅文发现“新大陆”?

奋笔疾书的网文作家,即将迎来网络文学的高光时代。 近日,阅文集团于安徽省举办2024阅文创作大会。现场数据显示,2023年阅文活跃作家平均收入增长32%,创造近五年最大增幅。其中,中位数作家收入增幅达135%,已…

SSH 远程执行任务

SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是太浪费啦!SSH 命令可是完成远程操作的神器啊,借助它我们可以把很多的远程操作自动化掉!下面就对 SSH 的远程操作功能进行一个小小的总结。 远程执行命令 如…

ThreeJS-截屏下载pdf或者图片时白屏

JS-页面截图下载为pdf 关于如何下载为 pdf 在上面的这篇文章中有写,大家可以看下,下载图片代码在最下面 这时我们发现 three 部分是空白的如下: 这就多少有点尴尬了,这时我们习惯性的看下后台报错 是不是发现了惊喜,…

操作系统 内存管理

实验目的: 理解虚拟内存在内存管理中的核心作用。掌握常见的内存分配回收算法思想。 实验内容: 编程模拟实现内存伙伴buddy分配器。 实验步骤: 1.理解Buddy分配算法原理: 在开始编码之前,先要深入理解Buddy分配算法的原理。…

Web应用安全测试-综合利用(二)

Web应用安全测试-综合利用(二) Host头攻击 漏洞描述 Web应用程序获取网站域名一般是依赖HTTP Host header(比如在JSP里通过request.getHeader()获取),这里的header很多情况下是不可靠的。 攻击者恶意利用HTTP Host h…

小米HyperOS 澎湃os机型免答题 免社区等级 秒接bl锁操作步骤解析【二】

前面两期博文; 小米HyperOS 澎湃os机型免答题 免社区等级 秒接bl锁操作步骤解析 小米机型解锁bl 绕过社区等级5才可以解锁的限制的教程_没有五级社区怎么解锁bl-CSDN博客 小米对米粉解锁bl是越来越苛刻了。目前社区等级 答题 审核等等步骤越来越繁琐。而且通过率很低。知名开…

细说MCU输出互补型PWM波形时设置死区时间的作用

目录 一、工程背景 二、死区时间的作用 一、工程背景 在作者的文章里建立工程时,为配置输出互补型PWM波形曾经设置了死区时间,DEAD100个定时器的时间周期(简称实例1):细说MCU输出互补型PWM波形的实现方法-CSDN博客 …

计算机行业的现状与未来之2024

年年都说编程好,编程工资涨不了。 人家骑车送外卖,月入两万好不好。 一、计算机专业的背景与现状 在过去几十年里,计算机科学相关专业一直是高考考生的热门选择。无论是计算机科学与技术、软件工程,还是人工智能与大数据&#xff…

数据链路层知识分享【计算机网络】【以太网帧 | MTU的影响 | ARP技术】

博客主页:花果山~程序猿-CSDN博客 文章分栏:Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 前文 一, 以…

《算法笔记》总结No.2——模拟

一.简单模拟 考察代码能力,不涉及算法:一类题目怎么说你就怎么做的类型~ 巴音布鲁克比赛,以车队为基准评选冠军。业务要求是:第一行输入正整数N,代表车手的总个数;接下来的N行每行键入两个数字&#xff1a…

在同一个 Blazor 应用中结合 SQL-DB 和 MongoDB

介绍 传统上,在单应用程序中,我们对整个应用程序使用单个数据库服务器。但是,我将 SQL 数据库和 MongoDB 结合在同一个应用程序中。此应用程序将是 RDBMS 和 No SQL 数据库的组合。我们将从头开始创建一个 Blazor 应用程序,并使用…

全域外卖系统源码部署怎么做,外卖市场新机遇!

随着本地生活下半场的到来,全域外卖逐渐成为众多创业者关注的焦点,再加上抖音关于新增《【到家外卖】内容服务商开放准入公告》的意见征集通知(以下简称“通知”)的发布,更是将当前全域外卖赛道重点入局方式之一的全域…

《无与伦比》Centos7 扩容到已有逻辑卷

命令可以查找硬盘和分区情况 fdisk -l lsblk

MyBatis的配置文件,即:src->main->resources的配置

目录 1、properties 标签 1.1 mybatis-config.xml 1.2 db.properties 1.3 在SqlMapConfig.xml 中 引入数据库配置信息 2、typeAliases 标签 2.1 定义别名 2.2 使用别名 3、Mappers标签 作用:用来在核心配置文件中引入映射文件 引入方式,有以下…

RocketMQ源码学习笔记:源码启动NameServer,Broker

这是本人学习的总结,主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、Overview2、NameServer2.1、源码启动NameServer 3、Broker启动过程 1、Overview 这篇文章的源码的版本是release-4.9.8。在启动各个模块之前应该先对项目进行打包mvn install -Dmaven.te…