都说变量有七八种,到底谁是 Java 的亲儿子(二)

简介: 变量是我们经常用到的一种,我在刚学 Java 的时候,也经常被各种变量的概念折磨,当时并没有细抠,但是我在写一篇类似的文章中,想把变量作为一种小标题来简述一下,但是发现,变量这个概念还是比较繁琐的,本篇文章就来深入认识一下 Java 中这些变量的概念。

局部变量

还有一种说法,说 Java 中只有类变量、实例变量和局部变量。这么分也没有问题,可能有人会问到,你把成员变量和常量放在哪了?别着急我们后面会说

先来说一下什么是局部变量

局部变量又称为 Local variables。它指的是在方法中、构造器中或者块代码中定义的变量。局部变量的生命周期随方法、构造器、代码块的执行完毕而销毁。

不管上面的一些变量概念如何变换、局部变量都站如松,坐如钟,行如风,卧如弓,从容应对各种不同文章的比较。真是一个省事的变量。

微信图片_20220414193639.png

那么这么好的东西我们可要仔细研究一下其特点是啥

  • 根据定义可知,局部变量定义在方法、构造器或者代码块中;
  • 然后局部变量的生命周期随方法、构造器、代码块的执行完毕而销毁;
  • 局部变量不能使用访问修饰符,例如如下代码

微信图片_20220414193643.png

  • 局部变量仅在方法的声明、构造函数或者块内可见,局部变量只能在调用这些方法、构造函数或者块的内部使用
  • 局部变量没有默认值,所以局部变量应该在第一次使用或者声明的时候就应该初始化完成

微信图片_20220414193646.png

成员变量

什么?成员变量在 Java 中就是实例变量?这个结论对吗?

常量

微信图片_20220414193650.png

验证过程

为了验证这个结论,我们求助于 stackoverflow 网站

微信图片_20220414193653.png

我们搜索 java member variable and instance variable 就帮我们定位到了这个标题

大致意思是:什么是成员变量?成员变量和实例变量是否相同呢?我们下面有个回答

微信图片_20220414193657.png

第一句就给出,实例变量和类变量都称为成员变量,然后给出了 JDK 官网手册对变量的定义。意思是在 Java 中,只有三种类型的变量

  • 定义在类中的成员变量 --- 被称为属性
  • 定义在方法(包含构造方法)或者块代码中的变量 --- 被称为局部变量
  • 定义在方法定义中的变量 --- 被称为参数

嗯。。。或许还不是很好解决我们的问题,我带着问题再次求助 JDK 官网手册,又看到了关于 Variables 的定义

微信图片_20220414193701.png

意思是在 Java 中,只有下面几种类型的变量(别扯别的了,莫非你比官网还靠谱?)

  • 实例变量(非静态属性) :大致意思就是说

微信图片_20220414193705.png

非静态属性也就被称为实例变量,因为它们的值是相对于每个实例来说的。换句话说,对于每个对象来讲,实例变量的值都是唯一的;

  • 类变量(静态属性):类变量就是使用 static 修饰符声明的字段,这就会告诉编译器:无论该类被实例化了多少次,该变量只存在一个副本。另外,可以添加关键字 final 来表示常量
  • 局部变量:没有特殊的关键字将制定的变量声明为局部变量、确定其声明的完全取决于声明变量的位置。
  • 参数:想一下我们平常用到最多的方法是什么方法?当然是 main 方法啊,main 方法是怎么定义的?
public static void main(String[] args) {}

其中的 args 是不是就是 String 的数组的变量,我们也称其为参数,所以参数也没有关键字进行声明,标识其为参数也只是取决于其声明位置。

bilibili

所以

微信图片_20220414193711.png

我写了一篇文章为了给你讲清楚,现在你应该知道 Java 中到底有哪些变量了吧。

如果你用 static 来定义变量,只能是类变量、或者说静态变量、而且其定义位置只能在类中,方法或代码块外,变量的副本只有一个。

如果你不用 static 来声明变量,那么就会有三种变量的叫法

  • 定义在构造方法、代码块、方法的变量被称为实例变量,实例变量的副本数量和实例的数量一样。
  • 定义在方法、构造方法、代码块的变量被称为局部变量;
  • 定义在方法参数的变量被称为参数。

也就是下面代码所描述的这样

public class VariablesInJava {
 int instanceVariable; // 实例变量
 static String staticVariable; // 类变量
 public void method() {
  String localVariable = "localVariable"; // 局部变量
  System.out.println(localVariable);
 }
 public static void main(String args[]) {} //参数
}
相关文章
|
3月前
|
存储 缓存 安全
除了变量,final还能修饰哪些Java元素
在Java中,final关键字不仅可以修饰变量,还可以用于修饰类、方法和参数。修饰类时,该类不能被继承;修饰方法时,方法不能被重写;修饰参数时,参数在方法体内不能被修改。
41 2
|
4月前
|
Java 编译器
java“变量 x 可能未被初始化”解决
在Java中,如果编译器检测到变量可能在使用前未被初始化,会报“变量 x 可能未被初始化”的错误。解决方法包括:1. 在声明变量时直接初始化;2. 确保所有可能的执行路径都能对变量进行初始化。
335 2
|
13天前
|
Java Linux iOS开发
如何配置 Java 环境变量:设置 JAVA_HOME 和 PATH
本文详细介绍如何在Windows和Linux/macOS系统上配置Java环境变量。
304 12
|
3月前
|
Java 编译器
Java重复定义变量详解
这段对话讨论了Java中变量作用域和重复定义的问题。学生提问为何不能重复定义变量导致编译错误,老师通过多个示例解释了编译器如何区分不同作用域内的变量,包括局部变量、成员变量和静态变量,并说明了使用`this`关键字和类名来区分变量的方法。最终,学生理解了编译器在逻辑层面检查变量定义的问题。
Java重复定义变量详解
|
3月前
|
Java 程序员 容器
Java中的变量和常量:数据的‘小盒子’和‘铁盒子’有啥不一样?
在Java中,变量是一个可以随时改变的数据容器,类似于一个可以反复打开的小盒子。定义变量时需指定数据类型和名称。例如:`int age = 25;` 表示定义一个整数类型的变量 `age`,初始值为25。 常量则是不可改变的数据容器,类似于一个锁死的铁盒子,定义时使用 `final` 关键字。例如:`final int MAX_SPEED = 120;` 表示定义一个名为 `MAX_SPEED` 的常量,值为120,且不能修改。 变量和常量的主要区别在于变量的数据可以随时修改,而常量的数据一旦确定就不能改变。常量主要用于防止意外修改、提高代码可读性和便于维护。
|
4月前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
4月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
130 4
|
6月前
|
存储 Java
02 Java基础语法(变量+数据类型+运算符)(下)
02 Java基础语法(变量+数据类型+运算符)
40 5
|
9月前
|
存储 安全 Java
Java中的变量与数据类型——基本数据类型与引用数据类型深入剖析
Java中的变量与数据类型——基本数据类型与引用数据类型深入剖析
122 1
|
8月前
|
存储 Java
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
51 0