文章目录
基本数据类型简介和变量
本文为书籍《Java编程的逻辑》1和《剑指Java:核心原理与应用实践》2阅读笔记
1.1 基本数据类型和变量
数据类型用于对数据归类,以便于开发人员理解和操作。对Java
语言而言,有如下基本数据类型。
- 整数类型:有
4
种整型byte/short/int/long
,分别有不同的取值范围; - 浮点类型:有两种类型
float/double
,有不同的取值范围和精度; - 字符类型:
char
,表示单个字符; - 布尔类型:
boolean
,表示真假。
基本数据类型都有对应的数组类型,数组表示固定长度的同种数据类型多条记录集合,这些数据在内存中连续存放。比如,一个自然数可以用一个整数类型数据表示,100
个连续的自然数可以用一个长度为100
的整数数组表示。一个字符可以用一个char
类型数据表示,一段文字可以用一个char
数组表示。
Java
是面向对象的语言,除了基本数据类型,其他都是对象类型。对象到底是什么呢?简单地说,对象是由基本数据类型、数组和其他对象组合而成的一种复合的数据类型,以方便对其整体进行操作。比如,一个学生对象,可以由如下信息组成。
- 姓名:一个字符数组;
- 年龄:一个整数;
- 性别:一个字符;
- 入学分数:一个小数。
日期在Java
中也是一个对象,内部表示为整型long
。
世界万物都是由元素周期表中的基本元素组成的,基本数据类型就相当于化学中的基本元素,而对象就相当于世界万物。
为了操作数据,需要把数据存放到内存中。所谓内存在程序看来就是一块有地址编号的连续的空间,数据放到内存中的某个位置后,为了方便地找到和操作这个数据,需要给这个位置起一个名字。编程语言通过变量这个概念来表示这个过程。声明一个变量,比如int a
,其实就是在内存中分配了一块空间,这块空间存放int
数据类型,a
指向这块内存空间所在的位置,通过对a
操作即可操作a
指向的内存空间,比如a=5
这个操作即可将a
指向的内存空间的值改为5
。之所以叫“变”量,是因为它表示的是内存中的位置,这个位置存放的值是可以变化的。虽然变量的值是可以变化的,但变量的名字是不变的,这个名字应该代表程序员心目中这块内存空间的意义,这个意义应该是不变的。比如,变量int second
表示时钟秒数,在不同时间可以被赋予不同的值,但它表示的始终是时钟秒数。之所以说应该,是因为这不是必需的,如果一定要为一个名为age
的变量赋予身高的值,计算机也拿你没办法。
变量就是给数据起名字,方便找不同的数据,它的值可以变,但含义不应变。再比如说一个合同,可以有4
个变量:
first_party
:含义是甲方;second_party
:含义是乙方;contract_body
:含义是合同内容;contract_sign_date
:含义是合同签署日期。
这些变量表示的含义是确定的,但对不同的合同,它们的值是不同的。初学编程的人经常使用像a
、b
、c
、hehe
、haha
这种无意义的名字。在此建议为变量起一个有意义的名字吧!通过声明变量,每个变量赋予一个数据类型和一个有意义的名字,我们就告诉了计算机要操作的数据。
1.2 变量命名:标识符
1.2.1 关键字、保留字和特殊值
高级编程语言由一系列单词和符号组成,并且能与计算机进行交互,实现逻辑功能。为了让程序员与计算机能够进行更好的交互,会提前给一些单词赋予特殊的含义,这些在程序语言中具有特殊含义的单词叫作关键字。其中有一部分关键字在Java
中并没有使用,暂时没有赋予特殊含义,这部分称为保留字。
在Java 8
中共包含了50
个关键字(包含保留字),在之后的版本中根据语法的需要,增加了不少其它关键字。
用于定义数据类型的关键字 | |||||
---|---|---|---|---|---|
class | interface | enum | byte | short | int |
long | float | double | char | boolean | void |
用于定义流程控制的关键字 | |||||
if | else | switch | case | default | while |
do | for | break | continue | return | |
用于定义访问权限修饰符的关键字 | |||||
private | protected | public | |||
和多线程有关的关键字 | |||||
synchronized | volatile | ||||
用于定义类与类之间关系的关键字 | |||||
extends | implements | ||||
用于定义建立实例、引用实例及判断实例的关键字 | |||||
new | this | super | instanceof | ||
用于异常处理的关键字 | |||||
try | catch | finally | throw | throws | |
用于包的关键字 | |||||
package | import | ||||
修饰类、方法、变量的关键字 | |||||
abstract | final | static | native | transient | strictfp |
和测试有关的关键字 | |||||
assert |
在关键字中,还有一些单词在Java
中没有正式使用,但是为了Java
与底层系统(如C
语言)的交互,Java
保留了一些关键字,称为保留字。目前,保留字有如下两个。
goto
。goto
语句在其他语言中叫作“无限跳转”语句。Java
语言不再使用goto
语句,这是因为goto
语句会破坏程序结构。在Java
语言中可以通过break
、continue
和return
实现“有限跳转”。const
。const
在其他语言中是声明常量的关键字,在Java
语言中使用final
方式声明常量。
除了关键字和保留字。语言规范(The Java® Language Specification Java SE 8 Edition
)中特别说明了三个特殊值:true
、false
、null
。这三个特殊值看起来像是关键字,但实际上是字面量值。
在给标识符命名时,都应该避免使用关键字(包含保留字)和特殊值。
1.2.2 标识符
标识符是Java
对各种变量、方法和类等要素命名时使用的字符序列。凡是需要命名的类名、接口名、变量名、方法名、包名等统称为标识符。
1.2.2.1 标识符的命名规则
所谓的规则,是指必须遵守的原则。如果不遵守原则,那么编译或运行结果就会报错。Java
标识符的命名规则有如下几个。
- 每个标识符只能包含数字、字母、下画线和美元符号。
- 不能以数字开头。
- 不能使用关键字和保留字作为标识符。
- 标识符不能包含空格。
- 严格区分大小写。
例如,HelloWorld
、String
、MAX_VALUE
、name
、age
、main
、System
、$out
、println
、args
等都是符合上述命名规则的合法标识符,而7Hello
(以数字开头)、public
(关键字)、static
(关键字)等都不能作为合法的标识符。
1.2.2.2 标识符的命名规范
所谓规范是指建议大家遵守的规则,相当于约定成俗的习惯,类似于潜规则。如果不遵守规范,编译不会报错,但会影响代码的阅读性和团队协作的效率。Java
语言对标识符的命名做了规范。标识符命名规范如下表所示:
标识符 | 规范 | 举例 |
---|---|---|
类名 | 遵循 Pascal 命名法,由多个单词组成,每个单词的首字母大写、其他字母小写 | ArrayList、ClassNameDemo等 |
接口名 | Comparator、Iterator 等 | |
变量名 | 遵循 Camel 命名法,由多个单词组成,第一个单词的字母全都小写,从第二个单词开始,每个单词的首字母大写、其他字母小写 | age、mathScore等 |
方法名 | getMax、addElement 等 | |
包名 | 由多个单词组成时,所有字母都小写。多层包结构中间用小圆点“.”隔开,并且采用域名倒置的命名法 | com.ieening.demo |
常量名 | 所有字母都大写,由多个单词组成时每个单词用下画线连接 | MAX_VALUE |
除表格中的命名规范,还需要注意以下几点:
- 在起名时,为了提高阅读性,要尽量“见名知意”。例如:
User
、Person
、addNameToClazz
等,不建议用a1
、a2
、b1
、b2
等。 Java
采用Unicode
字符集,因此标识符也可以使用汉字声明,但是不建议使用。
1.3 变量的使用
数学中列方程式和解方程式时有变量的概念,例如:
y
=
2
x
y=2x
y=2x 方程中的
x
x
x和
y
y
y就是变量,代表某个数值:当
x
=
1
x=1
x=1时,
y
y
y的值就是
2
2
2;当
x
=
3
x=3
x=3时,
y
y
y的值就是
6
6
6。Java
中也有变量的概念,它也代表某个数值。例如,变量age
代表年龄值,变量name
代表姓名值。如果从计算机存储的角度来说,变量实质上就是内存中的一块数据存储区域,该区域有自己的名称(变量名)和类型(数据类型),Java
中的每个变量都必须先声明后使用,该区域的数据可以在同一类型范围内不断变化。
Java
的变量包含三个要素,分别是:数据类型、变量名和变量值。数据类型决定了这个变量中要存储的数据值的类型及保存数据内存的大小,如存储一个整数10
和存储一个小数1.5
在内存中所需要的大小与存储方式是不同的。变量名就是一个标识符,方便在程序中使用。变量值就是这个变量具体存储的值。例如,int age=18
这个语句说明了age
变量的数据类型是整型int
,存储的值是18
。
1.3.1 变量的声明与使用
变量的使用步骤可以具体分为声明、赋值、使用三步,下面是这三个步骤的详细介绍。
1.3.1.1 声明
变量的声明相当于向JVM
申请一部分指定数据类型大小的内存。不同的数据类型,需要占用的内存大小是不同的。另外,JVM
中每字节的内存都有自己的地址,称为内存地址,但是在程序中直接使用内存地址是极其不方便的,因此需要给这部分内存命名,方便在程序中对这部分内存进行访问和使用。
变量声明如下图所示:

变量声明的语法格式如下所示:
数据类型 变量名;
示例代码:
int age;
double weight;
int
和double
是数据类型,age
和weight
是变量名。
1.3.1.2 赋值
声明变量之后,就在内存分配了一块位置,但这个位置的内容是未知的,赋值就是把这块位置的内容设为一个确定的值。

变量赋值的语法格式如下所示:
变量名 = 值
示例代码:
age = 19;
weight = 20.01;
需要注意的是,声明和赋值这两步往往会合二为一。变量声明和赋值合二为一的语法格式如下所示:
数据类型 变量名=变量值;
示例代码:
int age = 19;
double weight = 20.01;
1.3.1.3 使用
所谓使用,是指在变量的作用域内将变量中的值拿出来进行打印、运算、比较等。
public class VarDemoTest{
public static void main(String[] args){
int age = 19;
double weight = 102.5;
System.out.println("age = + age);
System.out.println("weight = + weight);
}
}
使用时应该注意:
- 必须先声明再使用;
- 变量必须在初始化后才能使用;
- 变量有作用域,并且在同一个作用域中不可以重复命名;
- 变量的值可以变化,但必须在变量声明的数据类型范围内;