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

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

变量汇总

所以,到底有哪些变量的概念呢?距今为止,目前已知的变量主要有

  • 实例变量
  • 全局变量
  • 静态变量
  • 类变量
  • 局部变量
  • 成员变量
  • 常量

下面我们就采用各个击破的方式来认识每个概念

实例变量

实例变量又被称为Instance variables。不使用 static 关键字定义,并且在任何方法、构造方法、块之外的变量都是实例变量。实例变量都是基于特定实例的,实例变量不会在实例之间共享,也就是说,每一个对象的实例都有自己的一个实例变量。下面是实例变量的一个例子

class Fruits {
  public String fruitName; // 具有公共访问权限的 fruitName;
  private int fruitNum;   // 具有私有访问权限的 fruitNum;
}

你可以使用下面这种方式进行实例变量的调用

public class Fruits {
    public String fruitName;
    private int fruitNum;
    public static void main(String[] args) {
        Fruits fruits = new Fruits();
        fruits.fruitName = "strawberry";
        fruits.fruitNum = 100;
    }
}

如何识别实例变量

那么我如何知道一个变量它是实例变量呢?下面是一些关于实例变量的定义规则

  • 实例变量可以使用四种访问修饰符进行修饰:public、protected、default、private
  • 实例变量可以使用 transient、final 关键字进行修饰
  • 实例变量不可以使用 abstract、synchronized、strictfp、native、static关键字进行修饰

实例变量带有默认值,也就是说,实例变量不用初始化就能使用。下面是常用实例变量的初始值

微信图片_20220414193502.png

实例变量的特点

上面我们了解了实例变量的基本特征和如何区分实例变量,下面我们来讲一下实例变量的特点。

  • 实例变量的只能在类中声明,但是在方法、构造函数或任何块之外。
  • 当在为堆中对象分配空间时,将为每个实例变量分配一块区域。
  • 实例变量只能通过创建对象来使用,当使用 new 关键字进行创建对象时,实例变量同时也被创建,当垃圾回收器回收对象时,实例变量也会被销毁。
  • 实例变量可以使用访问修饰符来修饰
  • 实例变量不用强制初始化,它有自己的默认值。
  • 每个对象都有自己的一个实例变量的副本,因此在一个对象中修改变量不会对其他对象中的实例变量造成影响
  • 实例变量只能通过创建对象引用来使用。

全局变量

全局变量又被称为Global variables。如果你有其他语言的编程经验,比如 C、C++ 的话,你会接触到全局变量这个概念,你可以使用下面代码来创建全局变量

#include<stdio.h>
 // 全局变量
 int A;
 int B;
 int Add()
 {
  return A + B;
 }

但是在 Java 中,是不存在全局变量的。因为 Java 是一门面向对象的编程语言,所有的内容都是属于类的一部分。Java 这么做的原因是为了防止数据和类成员被其他程序的其他部分有意或者无意的修改。所以在 Java 中,使用 静态变量 来起到全局访问的目的。

静态变量

静态变量又被称为Static variables。静态变量的定义比较简单,静态变量是属于该的变量,它是由 static 关键字来修饰的。static 修饰的变量属于静态变量,它只能定义在类的内部、方法的外部。

静态变量的特点

  • 静态变量只能使用 static 关键字进行修饰,它不能在方法中进行声明,不论是静态方法还是非静态方法。

微信图片_20220414193512.png

  • 静态变量会在程序运行前进行初始化,并且只初始化一次。静态变量会有一个初始化顺序,我们后面说
  • 静态变量的所有实例共享同一个副本。也就是说,静态变量只有一个,它不会随着对象实例的创建而进行副本拷贝
  • 静态变量可以通过类名.变量名 进行访问,并且不需要创建任何对象就能访问。
public class Fruits {
    public String fruitName;
    private int fruitNum;
    static String fruitType;
    public static void main(String[] args) {
        Fruits.fruitType = "apple"; // 类名.变量名
        System.out.println(fruitType);
    }
}
  • 可以在非静态方法 中使用静态变量

类变量

类变量又被称为 Class variables在 Java 中,类变量就是静态变量,它们都用 static 关键字进行修饰,所以,如果你再听到说静态变量的时候,它也就是类变量。

相关文章
|
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