前言

在之前的文章中,壹哥给大家讲解了Java的第一个案例HelloWorld,并详细给大家介绍了Java的标识符,而且现在我们也已经知道该使用什么样的工具进行Java开发。那么接下来,壹哥会集中精力带大家学习Java的各种细节内容,比如什么是变量?Java里有哪些数据类型?请大家赶紧拿出小本本,做好笔记哦。

------------------------------前戏已做完,精彩即开始----------------------------

全文大约【4000】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富案例及配图,让你更好地理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考......

一、 变量简介

仔细回想一下,在你还没有学习Java之前,你有没有听过【变量】这个词?第一次听到【变量】这个词是在什么时候?有些童鞋可能会说,我以前没听过【变量】!其实大部分人都听过!我们在中学时,在数学课上就有【变量】这个词了,比如一个常见的方程式y=x2+1。这里的x与y就是变量,请大家回忆一下数学里x变量表示什么含义?

在我们的Java语言中,同样存在着【变量】的概念,并且该概念与数学方程里的变量含义类似。

1. 概念

在Java中,变量是程序里最基本的存储单元,它由变量名、变量类型、作用域组成。从本质上来说,变量其实就是内存里的一小块存储区域,该区域只能存储声明变量时指定类型的数据。我们创建使用每个变量前,必须先声明,在内存中申请空间,然后对其进行初始化赋值,接着就可以通过变量名来访问和使用这块内存区域了。

进一步解释一下,变量其实就是一个可以存储特定类型数据的容器。这个容器在内存中有自己的地址,为了方便地找到这个地址,我们可以给每个地址起个”名字“,这就是”变量名“。每个变量的数据类型都是固定不变的,但变量中对应数据的具体内容,却是可以改变的,所以”变量“指的就是内容可以改变的量。

如果你对上面关于变量的解释还不明白,壹哥再来给你举个更通俗易懂的栗子。

假如我们是搞化学的,现在你手里有很多种化学元素,该如何存储它们?我们知道,这些化学元素的性质各不相同,不能一股脑地都放在一起,必须分类存储。我们可以找到一些适合存储这些化学元素的”瓶子“(容器),每种瓶子只能存储不同类型(数据类型)的化学元素,不能混装,否则就会发生化学反应引起爆炸(报错)。并且每种瓶子都有自己的存储大小(容量),不可能一个瓶子里存储无限多的化学元素。现在的瓶子有很多,你要经常找到并使用这些瓶子,就需要给这些瓶子编号命名(变量名),并且要有对应的存放位置(内存地址),不能随便乱放。

现在你搞懂变量的含义了吗?

2. 分类

在Java中,根据不同的分类标准,变量也被分成了很多种:

● 如果是按照数据类型来划分,变量可以分为基本类型的变量和引用类型的变量

● 如果是按照作用范围来划分,变量可以分为局部变量、成员(实例)变量和类(静态)变量

当然,现在你可能对什么是基本类型、引用类型、局部变量、成员变量、类变量等概念还都很懵逼。请暂时不用管这些,脑子中有个印象即可,壹哥在后面会再详细给你介绍这些概念都是怎么回事,我们先集中精力来学习变量的定义与使用案例。

二、 变量的定义与案例

1. 命名规则与规范

壹哥在前面讲解Java标识符时给大家讲过,Java的标识符有一定的命名规则和规范。并不是你想怎么命名就怎么命名,必须遵循一定的要求。我们再来回顾一下Java标识符的命名规则与规范,规则如下:

①. Java标识符由 字母(含英、中、日、俄等)、数字、下划线"_" 和 美元符号$ (音: dollar)组成,如age、G7、_value、$salary

②. 不能以数字开头,如123abc

③. 严格区分大小写,如class与Class是不同的

④. 长度无限制(一般不要超过15个字符);

⑤. 不能是Java中的保留字和关键字。

Java的变量名也是一种标识符,所以必须遵循以上这些规则!另外还有一些命名规范需要我们尽量遵守,比如:

变量名尽量要做到见名知意。在实际开发时尽量不要写a、b、c这种名称;

变量名的首字母要小写。如果名称由多个单词组成,第一个单词的首字母应小写,剩下的单词首字母应大写(驼峰式命名法),例如 xxxYyyZzz、numCounter。

复习完变量的命名规则与规范后,我们就开始定义变量吧。

2. 基本语法

在Java语言中,所有的变量在使用前都必须先声明再使用,否则就会报错。一般定义变量的基本语法格式如下:

type 变量名1 [ = value1][, 变量名2 [= value2] ...] ;

这里的type表示Java的数据类型,同一条语句中可以用逗号隔开多个同类型的变量。这里的”=“等号表示赋值,不是通常数学里等号的意思,其作用是把”=“后面的值赋给前面的变量。语句的最后使用英文的 ";" 分号来表示语句结束。

3. 实现步骤

根据上面的定义语法,我们定义一个变量的基本步骤可以分成如下3步:

1. 声明变量,就是申请一块内存地址;

2. 变量初始化,就是给变量赋值;

3. 使用变量。

虽然变量的定义步骤,基本上就是以上这3步,但在实际开发时却也有几种不同的具体写法,接下来壹哥就通过几个案例来给大家展示不同的变量定义写法。

3.1 定义方式一

我们首先来看第一种写法,这种写法完全符合变量定义的3步走策略,但是写起来有点啰嗦。

public class VariableDemo {

	public static void main(String[] args) {
//注意:在java中,变量一定要初始化后才能使用! //变量声明方式1:
//1.声明变量
int a; //2.给变量初始化赋值,初始化的意思是第一次给某个变量赋值
a = 10; //3.使用变量
System.out.println(a);
} }

在上面的代码中,我们定义了一个int整型的变量,变量名称为a,初始值为10。如果我们不写初始值,就相当于系统给它指定了默认值,默认值是0。但我们在使用变量之前,必须要给变量进行初始化赋值,否则编译器就会自动检测出错误,从而会报错!错误信息如下所示:The local variable a may not have been initialized

3.2 定义方式二

下面是第二种定义变量的写法,相比第一种写法简单一些,直接把变量的声明和初始化放在一起,所以这种方式用的较多。

public class VariableDemo {

	public static void main(String[] args) {
// 注意:在java中,变量一定要初始化后才能使用! //变量声明方式2:
//1.声明变量和初始化
int a = 10; //2.使用变量
System.out.println("a的值为:" + a);
} }

3.3 定义方式三

我们也可以采用以下写法,即在一条语句中连续定义多个变量。但大家要注意,我们在一条语句中连续定义多个变量时,应该给每个变量都进行初始化赋值,否则在编译之前开发工具就会直接报错!

public class VariableDemo {

	public static void main(String[] args) {
// 注意:在java中,变量一定要初始化后才能使用! //变量声明方式3
//连续定义多个变量
int a = 1,b = 3,c = 10;
System.out.println("a的值为:"+a);
System.out.println("b的值为:"+b);
System.out.println("c的值为:"+c);
} }

3.4 定义方式四

我们可以在第3种定义变量的写法基础上进一步简化。同样是把多个变量定义在一条语句内,但a、b变量未初始化,c变量进行了初始化。这种写法在语法上是没问题的。但a和b这两个变量不能直接使用,因为没有初始化,如果直接使用会产生错误。c变量可以直接使用,因为进行了初始化赋值!

public class VariableDemo {

	public static void main(String[] args) {
// 注意:在java中,变量一定要初始化后才能使用! //变量声明方式4
//连续定义多个变量
int a,b,c = 10;
//a、b变量未初始化,如果直接使用会报错
//System.out.println("a的值为:" + a);
//System.out.println("b的值为:" + b); //c变量初始赋值为10,可以直接使用
System.out.println("c的值为:"+c);
} }

通过上面几个小案例,壹哥给大家讲解了变量定义的4种写法。至于你愿意用哪种写法,其实都可以,这个主要是看个人的写作习惯,它们之间并没有特别大的性能差异。

4. 进阶案例

学习完上面几个最基本的案例之后,壹哥再给大家设计几个进阶案例,进一步加深对于变量的掌握。

4.1 变量重新赋值

壹哥在前面跟大家说过,变量就是值可以被改变的量,所以变量的一个重要特点就是可以重新赋值!例如,我们先给变量x赋值100,再赋值200。

public class VariableDemo02 {

	//进阶案例
public static void main(String[] args) {
//定义int类型变量x,并赋初始值100
int x = 100;
//打印该变量的值,观察是否为100
System.out.println("x原值="+x); //重新给x变量赋值为200,改变x的值
x = 200;
//打印该变量的值,观察是否为200
System.out.println("x新值="+x);
} }

我们第一次定义变量x时,需要指定变量的类型int,因此定义语句是int x = 100;。而第二次重新赋值时,因为变量x已经存在了,不用再重复定义,因此不用再重复指定变量类型int,直接使用语句x = 200;即可。

4.2 变量之间赋值

变量不但可以重新赋值,还可以把一个变量赋值给另外的变量,我们来看下面的例子:

public class VariableDemo02 {

  	//进阶案例
public static void main(String[] args) {
//定义变量x,同时赋值为100
int x = 100;
//打印x的值
System.out.println("x = " + x); //变量x赋值给另一个变量y
//int y = x;
//打印y的值
//System.out.println("y = " + y); //变量x同时赋值给多个变量
int y = x, z = x;
System.out.println("y = " + y+",z = "+z);
} }

三、变量原理

通过上面的几个案例,你现在应该对变量的使用有了基本的掌握。在搞清楚变量该怎么用之后,壹哥再简单给大家分析一下变量在内存中的分配情况,这也是变量的基本工作原理,我们求职时面试官就喜欢考察这一块的内容哦。

回想一下,我们之前定义变量的基本过程,比如int x=100;:

1. 首先需要指明该变量的数据类型,比如本文中说到的int整型;

2. 然后要给该变量设置一个变量名,比如变量名称x;

3. 接着我们还要给变量赋值,比如 x=100。

在以上定义变量并赋值的过程中,x是变量名。JVM虚拟机会给该变量在内存中分配一个位置0x002(这个地址值是我随便写的,计算机底层会按自己的规律生成),然后计算机底层就会根据该位置来找到x变量的真实存储位置。这个内存中的地址值,相当于是x变量的”门牌号“,别人可以根据这个地址值找到x变量。对于基本类型的x变量来说,它的整型值100会存储在一个叫做”栈“的结构里,关于”栈“的详细内容,壹哥会在后面的文章中再单独说明。一句话,创建变量时,需要在内存中申请一块空间。内存管理系统会根据变量的类型来为变量分配存储空间,分配的空间只能用来储存该类型数据。大家可以参考壹哥绘制的示意图来理解整型变量x的内存结构:

------------------------------正片已结束,来根事后烟----------------------------

四、 结语

至此,壹哥就把变量的基本内容给大家讲解完了,最后我们再来总结一下今天的重点:

变量是存放在内存中的一个存储区域,该区域有自己的名称和类型;

变量由变量名、变量类型、作用域组成;

变量需要先声明、初始化后再使用;

注意变量的命名规则和规范;

掌握定义四变量的几种实现写法;

理解变量的内存分配。

如果你还有其他疑问,可以在评论区留言~

五、 今日作业

第一题

变量使用的三要素是什么? 请在评论区给出你的答案。

第二题

变量的命名规则有哪些?请在评论区给出你的答案吧。

第三题

编写几段代码,定义几个变量并赋值,输出结果看看是否正确。

一文带你搞懂java中的变量的定义是什么意思的更多相关文章

  1. 一文带你看懂Java中的Lock锁底层AQS到底是如何实现的

    前言 相信大家对Java中的Lock锁应该不会陌生,比如ReentrantLock,锁主要是用来解决解决多线程运行访问共享资源时的线程安全问题.那你是不是很好奇,这些Lock锁api是如何实现的呢?本 ...

  2. 一文彻底搞懂Java中的环境变量

    一文搞懂Java环境变量 记得刚接触Java,第一件事就是配环境变量,作为一个初学者,只知道环境变量怎样配,在加上各种IDE使我们能方便的开发,而忽略了其本质的东西,只知其然不知其所以然,随着不断的深 ...

  3. 轻松搞懂Java中的自旋锁

    前言 在之前的文章<一文彻底搞懂面试中常问的各种“锁”>中介绍了Java中的各种“锁”,可能对于不是很了解这些概念的同学来说会觉得有点绕,所以我决定拆分出来,逐步详细的介绍一下这些锁的来龙 ...

  4. 一文搞懂--Java中重写equals方法为什么要重写hashcode方法?

    Java中重写equals方法为什么要重写hashcode方法? 直接看下面的例子: 首先我们只重写equals()方法 public class Test { public static void ...

  5. 一文搞懂 Java 中的枚举,写得非常好!

    知识点 概念 enum的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum关键字修饰的类型就是枚举类型.形式如下: enum Color { RED, ...

  6. 来吧,一文彻底搞懂Java中最特殊的存在——null

    没事的时候,我并不喜欢逛 P 站,而喜欢逛 programcreek 这些技术型网站,于是那天晚上,在夜深人静的时候,我就发现了一个专注基础但不容忽视的主题.比如说:Java 中的 null 到底是什 ...

  7. 一篇文章让你搞懂Java中的静态代理和动态代理

    什么是代理模式 代理模式是常用的java设计模式,在Java中我们通常会通过new一个对象再调用其对应的方法来访问我们需要的服务.代理模式则是通过创建代理类(proxy)的方式间接地来访问我们需要的服 ...

  8. 来吧,一文彻底搞懂Java中的Comparable和Comparator

    大家好,我是沉默王二,今天在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题.比如说:Java 的 Comparable 和 Comparator 是兄弟俩吗?像这类灵魂拷问 ...

  9. 【springcloud】一文带你搞懂API网关

    作者:aCoder2013 https://github.com/aCoder2013/blog/issues/35 前言 假设你正在开发一个电商网站,那么这里会涉及到很多后端的微服务,比如会员.商品 ...

  10. 一文带你搞懂 Kafka 的系统架构(深度好文,值得收藏)

    Kafka 简介 Kafka 是一种高吞吐.分布式.基于发布和订阅模型的消息系统,最初是由 LinkedIn 公司采用 Scala 和 java 开发的开源流处理软件平台,目前是 Apache 的开源 ...

随机推荐

  1. Hive. 函数 instr 的用法

    INSTR(C1,C2,I,J) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置; C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1 J 出现的位置,默认为1 sel ...

  2. ssh 修改端口号 --centos 7

    1 vim /etc/ssh/sshd_config Port   XXXXX #XXXXX 为要修改的端口号,默认是22,直接在新的行添加Port   XXXXX即可. 2 systemctl re ...

  3. Android自动化测试

    一.环境搭建 必备软件: Windows或MacOS系统的电脑 python pycharm Android SDK(需要配置环境变量,网上有教程) Appium客户端(需要配置Android SDK ...

  4. 注释中的Unicode编码也会被转义

    现象 public class Unicode { public static void main(String[] args) { // \u000d System.out.println(&quo ...

  5. Alibaba Cloud Linux 3.2104 64位安装nginx-1.16.1

    1   下载nginx 从nginx官网 http://nginx.org/ 下载新的稳定版本nginx 并上传到linux服务器  2  安装nginx 所需要的扩展 yum -y install ...

  6. JAVA、Tomcat服务器

    JAVA如何配置服务器 Tomcat服务器: 1.Web开发中的常见概念: (1)B/S系统和C/S系统 Brower/Server:浏览器 服务器 系统 ----- 网站 Client/Server ...

  7. hdu:Shape of HDU(判断多边形凹凸)

    Problem Description话说上回讲到海东集团推选老总的事情,最终的结果是XHD以微弱优势当选,从此以后,"徐队"的称呼逐渐被"徐总"所取代,海东集 ...

  8. IT工具知识-08:如何使用Openwrt下的SMB服务(第一次使用时)?

    0.背景知识 使用固件:Lean的R20.5.9由flippy打包 需要软件:ssh客户端(我用的xshell),浏览器(最好是chrome内核) 1.使用教程 1.1 注释掉SAMBA模板中的某条指 ...

  9. 双调排序--GPU/AIPU适合的排序【转载】

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入 双调排序是data-indepen ...

  10. MySQL数据库性能优化的八种方式

    1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽 ...