本章目录:
1.标识符(identifier)
2.Java关键字/保留字(Keyword)
3.变量(Variable)
4.常量(Constant)
5.数据类型(Data Type)
1.标识符(identifier)
作用:常量、变量、方法、类和包等的名称。
命名规则:
- 标识符由字母、数字、下划线_、美元符$构成,但是必须以字母、下划线、美元符开头,其它部分可以是字母、下划线、美元符任意组合;一般情况下,我们推荐使用字母开头。
- 标识符大小写敏感,长度无限制。
- 命名时尽量做到见名知意,例如student,不推荐使用缩写stu;如果标识符由多个单词组成一般采用驼峰命名法,即第一个单词小写,从第二个单词开始首字母大写,例如studentName。
- 不可以是Java的关键字。
注意:Java采用unicode这样的标准的国际字符集。因此,这里的字母的含义:英文、汉字等等。(不建议大家使用汉字来定义标识符!)
2.Java关键字/保留字(Keyword)
Java关键字是Java语言保留供内部使用的,如class用于定义类。 其中关键字const和goto是保留字。true、false和null看着像是关键字,其实是字面量,也不能作为标识符。Java关键字都是小写。
3.变量(Variable)
3.1 定义
变量本质上就是代表一个“可操作的存储空间”,空间位置是确定的,但是里面放置什么值不确定。我们可通过变量名来访问“对应的存储空间”,从而操纵这个“存储空间”中存储的值。
Java是一种强类型语言,在声明变量时,都必须在变量名之前声明其数据类型。数据类型决定了变量占据数据存储空间的大小。例如,int a = 3;表示a变量的空间大小为4个字节。
变量作为程序中最基本的存储单元,其要素包括变量名、数据类型和作用域。变量在使用之前必须对其先声明,才能为变量分配相应长度的存储空间。
3.2 变量声明
变量的声明,格式如下:
Type varName [=value][, varName[=value]…];
数据类型 变量名 [=初始值][, 变量名[=初始值]…];
说明:[] 中的内容为可选项,即可有可无
示例:声明变量
double salary;
long earthPopulation;
int age;
不同数据类型的变量在内存中分配不同的空间,如图,内存分配示意图:
注意事项:
- 每个变量都有数据类型,数据类型可以是基本类型,也可以是引用类型
- 变量名必须是合法的标识符
- 变量声明是一条完整的语句,因此每一个声明都必须以分号结束
- 在一行可以声明多个变量,但是不提倡这种风格。逐一声明每个变量可以提高程序的可读性。
3.3 变量初始化
声明一个变量后,必须用赋值语句对变量进行显示初始化,千万不能使用未被初始化的变量,否则Java编译器报错。
如果对一个已经声明过的变量进行赋值,需要将变量名放在等号(=)左侧,相应取值的Java表达式放在等号右侧。
int age;
age = 12;
也可以将变量声明和初始化放在同一行:
int age = 12;
在Java中,变量的声明尽可能地靠近变量第一次使用的地方,这是一种良好的编程习惯。
3.4 变量分类
从整体上可以分为:局部变量、实例变量和静态变量。
Instance Variables(Non-Static Fields)实例变量(非静态域也叫作成员变量 member variable)方法外部,类的内部定义,并且不使用static声明的变量。从属于对象,生命周期伴随对象始终。
实例变量如果未自行初始化,Java会自动初始化该变量为相应数据类型的默认初始值:
Class Variables(Static Fields)类变量,类内部使用static修饰的任何字段。无论类实例化多少个对象,该变量只有一个。从属于类,生命周期伴随着类始终,从类被加载到卸载。
如果未自行初始化,与成员变量相同会自动初始化为该数据类型的默认初始值。
Local Variables局部变量,在方法或语句块中声明的变量,其作用域仅限于方法内部,不能被方法外部调用。所以生命周期就是从声明位置开始到方法或语句块执行完毕为止。
局部变量在使用前必须先声明并初始化。
4.常量(Constant)
在Java中,利用关键字final定义常量,并且final修饰的变量只能被赋值一次;也就是常量一旦被初始化后不能在修改其值。
在Java中,如果希望某个常量可以在一个类中多个方法中使用,通常将这些常量称为类常量。可以使用关键字static final修饰一个类常量。常量的命名一般使用大写字母和下划线,MAX_VALUE。
使用final变量的好处,如下:
- 可以集中管理常量值
- 程序变得易读
5.数据类型(Data Type)
Java是一种强类型语言,这就意味着每一个变量都必须声明其数据类型。Java数据类型可分为两大类:基本数据类型(The Primitive Type)和引用数据类型(Reference Data Type)。
基本数据类型可分为三类:数值型、字符型和布尔型。
整型(integral type)
整型用于表示没有小数部分的数值,它允许是负数。整型的范围与运行Java的机器无关,这正是Java程序具有很强的可移植性的原因之一。Java提供了4种整型,具体如下:
Java语言整形常量的四种表示形式
• 十进制整数,如:99, -500, 0
• 八进制整数,要求以 0 开头,如:015
• 十六进制数,要求 0x 或 0X 开头,如:0x15
• 二进制数,要求 0b 或 0B 开头,如:0b01110011
Java语言的整型常数 int型,声明long型常量可以在后面加‘l’或‘L’ ‘(建议使用大写,小写容易误认为数字1),如:
long a = 55555555; // 不出错,在Int表示的范围内(21亿内)。
long b = 55555555555;// 不加L出错,已经超过int表示的范围。
浮点型
浮点型用于表示有小数部分的数值。在Java中有两种浮点型,可以分为float类型和double类型,如下表:
• float类型:单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。
• double类型:双精度类型 精度是float类型的两倍,绝大部分应用程序都采用double类型。
浮点常量默认为double。要变为float,需在后面增加F/f. 如:3.14F
• 浮点数存在舍入误差,很多数字不能精确表示。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
绝大部分应用程序都采用double类型。
浮点类型常量
• 十进制数形式,例如: 3.14 314.0 0.314
• 科学记数法形式,如
// 314e2 314E2 314E-2
double f = 314e2; // 314*10^2-->31400.0
double f2 = 314e-2; // 314*10^(-2)-->3.14
字符型
char类型用于表示单个字符,常用来表示字符常量,例如’A’。字符型在内存中占两个字节。
单引号用来表示字符常量。例如‘A’是一个字符,它与“A”是不同的,“A”表示含有一个字符的字符串。
• char 类型用来表示在Unicode编码表中的字符。
• Unicode编码被设计用来处理各种语言的所有文字,它占2个字节,可允许有65536个字符;ASCII码占1个字节,可允许有128个字符(最高位是0),是Unicode编码表中前128个字符。
• Java 语言中还允许使用转义字符 ‘\’ 来将其后的字符转变为其它的含义:
char c2 = '\n'; // 代表换行符
• char类型在内存中存储的是该字符的Unicode编码值,所以char类型可以当做int类型来处理:
布尔型
- boolean类型有两个值,true和false,在内存中占一位(不是一个字节byte)。
- boolean 类型用来判断逻辑条件,一般用于程序流程控制。
- 整型值和布尔值不能相互转换,不可以使用0和1的整数替代true和false,与C语言有区别。
补充:在数字字面量之间使用下划线
在Java SE7以及更高的版本中,数字字面量的数字之间可以使用任意多的下划线。这一特性可以分割数字字面量,提高可读性。
例如,你的代码中包含很多的数字,你可以使用下划线对数字进行三个一组的分隔,就像使用逗号,空格作为分隔符一样。如下所示:
long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumber = 999_99_9999L;
float pi = 3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xCAFE_BABE;
long maxLong = 0x7fff_ffff_ffff_ffffL;
byte nybbles = 0b0010_0101;
long bytes = 0b11010010_01101001_10010100_10010010;
注意:下划线只能使用在数字之间,不能使用在其他地方,例如:
- 数字的开头或者结尾
- 浮点数的小数点前后
- 在F或L后缀之前
- 在数字字符串中
具体如下:
// Invalid: cannot put underscores
// adjacent to a decimal point
float pi1 = 3_.1415F;
// Invalid: cannot put underscores
// adjacent to a decimal point
float pi2 = 3._1415F;
// Invalid: cannot put underscores
// prior to an L suffix
long socialSecurityNumber1 = 999_99_9999_L;
// OK (decimal literal)
int x1 = 5_2;
// Invalid: cannot put underscores
// At the end of a literal
int x2 = 52_;
// OK (decimal literal)
int x3 = 5_______2;
// Invalid: cannot put underscores
// in the 0x radix prefix
int x4 = 0_x52;
// Invalid: cannot put underscores
// at the beginning of a number
int x5 = 0x_52;
// OK (hexadecimal literal)
int x6 = 0x5_2;
// Invalid: cannot put underscores
// at the end of a number
int x7 = 0x52_;