变与不变——Java中的变量、常量


前言

接上篇:Java中的数据类型

一个衣柜,规定这个衣柜里得装衣服,但是他具体是装耐克的还是阿迪的还是地摊货,这个我管不着,这叫变量(就是具体值未知的可变化的量)。而我有一件衣服,我规定这个衣柜里只能放这件衣服,从这个衣柜出厂那一刻到送入垃圾站销毁都只允许放这一件衣服进去,这就叫常量(就是不是变量的量,就是不变量)

大多数程序设计语言都提供了“作用域”(Scope)的概念。对于在作用域里定义的名字,作用域同时决定了它的“可见性”以及“存在时间”。在 C,C++和 Java 里,作用域是由花括号的位置决定的。

在这里插入图片描述


一、变量

1. 变量的使用

  • 变量就是可以变化的量!
  • Java是一种强类型语言,每个变量都必须声明其类型。
  • Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。

用法(伪代码)

type varName [= value] [{, varName [= value]}];
// 数据类型 变量名 = 值;
// 可以使用逗号隔开来声明多个同类型变量,但不建议这么做。

注意事项:

  1. 每个变量都有类型,类型可以是基本类型,也可以是引用类型。
  2. 变量名必须是合法的标识符。
  3. 变量声明是一条完整的语句,因此每一个声明都必须以分号结束。

2. 变量的类型及作用域

一般来说,变量分为实例变量、局部变量和类变量三种:

public class HelloWorld {
    private int a;  //成员变量
    private static String str;  //静态变量(类变量)

    public int print() {
        int b = 2;  //局部变量
        return b;
    }

    public static void main(String[] args) {
        HelloWorld test = new HelloWorld();
        System.out.println(HelloWorld.str);  //调用类变量
        System.out.println(test.str);  //调用成员变量
        System.out.print(test.print());  //打印局部变量
    }
    //此处变量都使用private修饰而不使用public是为了减少代码的耦合。
}

运行结果:null null 2

三种变量在各个方面均有不同:

实例变量局部变量类变量
别名域、成员变量、属性、字段静态变量、静态成员变量
修饰关键字static
作用域类的实例,所作用于所在的整个类在某个范围有效和变量前的权限修饰符有关(如private、public等)
存储位置对象在堆里,对象中的内容就是各种字段。如果是基本类型,会把值直接存储在栈;如果是引用类型,会把其对象存储在堆,而把这个对象的引用(指针)存储在栈主流观点是静态成员变量存放在方法区。JDK8之前,静态成员变量确实存放在方法区;【但JDK8之后就取消了“永久代”,取而代之的是“元空间”,永久代中的数据也进行了迁移,静态成员变量迁移到了堆中(方法区是JVM的规范,永久代是方法区的具体实现)】
初始值无须赋初始值,系统自动默认初始值。基本数据类型中,整数型是0,浮点型是0.0,字符型是\u0000,布尔值是false。引用数据类型(如String)均为null必须赋初始值才能使用,不然报空指针同实例变量
调用方式通过对象名调用,改变量也属于对象通过方法名调用属于类,可以直接通过类名或对象名调用
生命周期对象的创建而创建,对象消失则此变量也消失被调用时产生,方法调用结束则变量消失随着类的加载而存在,随着类的消失而消失

对于Java虚拟机的堆区、栈区和方法区。这张图比较清晰的画了出来:

在这里插入图片描述

注:

  1. 静态成员变量、常量池由方法区迁移到堆
  2. 元空间在本地内存

(感谢作者蝉蝉提供的知识,受教,点击查看原文

其实还有性能良好的临时变量,如

// 1
for (int i = 0; i < 10; i++) {}
// 2
return a+b

但这种变量从作用上来讲并不算严格意义上的变量,因为它所储存的内容并没有太多的实际意义,或者根本就没有一个变量名保存了这个变量。所以不在此讨论。

二、常量

  • 常量,就是”不变量“。初始化之后不能再改变值。
  • 所谓常量可以理解成一种特殊的变量,他的值被设定后,在程序运行过程中不允许被改变。

用法(伪代码)

final name = val;
// final 常量名 = 值
// final double PI = 3.14

注意事项:常量名一般使用大写字符

三、补充:变量的命名规范

  • 所有变量、方法、类名需要做到见名知意
  • 类成员变量:首字母小写+驼峰原则:monthSale
  • 局部变量:规范同上
  • 常量:大写字母+下划线:MIN_VALUE
  • 类名:首字母大写+驼峰原子:GoodMan
  • 方法名:首字母小写+驼峰原则:doSearch()

总结

本文借鉴了部分博主的文章,在此统一致谢,如果您还喜欢,麻烦点个赞。 您的支持就是我更新的动力。

下一篇:Java之数据的桥梁——运算符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远哥挺乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值