前言
Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在Java中,一共8种基本类型,其中有4种整型、2种浮点型、1种字符串类型char(用于表示Unicode编码的代码单元)和1种用于表示真值的boolean类型。
注释
Java有一个能够表示任意精度的算术包,通常称为"大数"
(big number),它不是一种基本Java类型,而是一个Java对象。
数据类型
整型
Java提供了4种整型,如下表格
类型 | 存储需求 | 取值范围 |
---|---|---|
int | 4字节 | -2147483648~2147483647 |
short | 2字节 | -32768~32767 |
long | 8字节 | -9223372036854775808~9223372036854775807 |
byte | 1字节 | -128~127 |
通常情况下,int
类型最常用,long
类型可以忽略,byte
和short
类型主要用于特定的应用场合,例如,底层的文件处理或者存储空间很宝贵的大数组。
浮点类型
浮点类型用于表示有小数部分的数值。在Java中有两种浮点类型如下
类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | 大约±3.40282347E+38F |
double | 8字节 | 大约±1.79769313486231570E+308 |
double表示双精度浮点型,数值精度是float两倍。在很多情况下,float类型的精度并不能满足需求。实际上,只有很少的情况适合使用float类型,例如,需要单精度数的库,或者需要存储大量数据时。
float类型的数值有一个后缀F或f(例如3.14F)。没有后缀F的浮点数值(如3.14)总是默认为double类型。当然,也可以浮点数值后面添加后缀D或者d(例如3.14D)
- double x1 = 3.14D; // 双精度
- double x2 = 3.14; // 双精度
- float y = 3.14F; // 单精度
有三个特殊的浮点数
Double.POSITIVE_INFINITY
:正无穷大Double.NEGATIVE_INFINITY
:负无穷大Double.NaN
:不是一个数字
char类型
char类型原本用于表示单个字符。如今,有些Unicode字符可以用一个char值描述,另外一些Unicode字符则需要两个char值。
char类型的字面量值要用单引号括起来。例如:'A'
是编码值为65的字符常量。它与"A"
不同,"A"
是包含一个字符A的字符串。char类型的值可以表示为十六进制值
boolean类型
boolean类型有两个值:false和true,用来判断逻辑条件。整型值和布尔值之间不能进行相互转换。注释
在C++中,数值甚至指针可以代替boolean值。值0相当于布尔值false,非0值相当于布尔值true。在Java中则不是这样。因此,Java程序员不会遇到下述麻烦:
if(x = 0)
在C++中这个测试可以编译运行,其结果总是false。而在Java中,这个测试将不能通过编译,其原因是整数表达式x=0不能转换为布尔值。
变量与常量
声明变量
在Java中,每个变量都有一个类型(type)。在声明变量时,先指定变量的类型,然后是变量名,示例如下:
- double salary;
- int vacationDays;
- long earthPopulation;
- boolean done;
注意点
- 变量名必须是一个字母开头并由字母或数字构成的序列。
- 变量名大小写敏感
+
这样的符号不能出现在变量名中,空格也不行- 不能使用Java保留字作为变量名
变量初始化
声明一个变量之后,必须用赋值语句对变量进行显式初始化,千万不要使用未初始化的变量的值。例如,Java编译器认为下面的语句序列是错误的:
报错原因如下:
所以声明变量格式如下:
String student = "jkc";
注意:在Java中,变量的声明尽可能地靠近变量第一次使用的地方
常量
在Java中,利用关键字final
指示常量。例如:
- public class FirstSample {
- public static void main(String[] args) {
- final double CM_PER_INCH = 2.54;
- }
- }
关键字final
表示这个变量只能被赋值1次。一旦被赋值之后,就不能修改了。习惯上,常量名使用全大写。
我们可以看到当我们要修改常量时,就会报错,原因如下:
在Java中,经常希望某个常量可以在一个类的多个方法中使用,通常将这些常量称为类常量。可以使用关键字static final
设置一个类常量。
- public class FirstSample {
- public static final double CM_PER_INCH = 2.54;
- public static void main(String[] args) {
- System.out.println(CM_PER_INCH);
- }
- }
需要注意,类常量的定义位于main方法的外部。因此,在同一个类的其他方法中也可以使用这个常量。而且,如果一个常量被声明为public,那么其他类的方法也可以使用这个常量。
- public class FirstSample {
- public static final double CM_PER_INCH = 2.54;
- public static void main(String[] args) {
- System.out.println(CM_PER_INCH);
- FirstSample.write();
- }
- public static void write() {
- // 在write方法中依然可以使用类变量,因为都是FirstSample这个类中的方法
- System.out.println(CM_PER_INCH);
- }
- }
枚举类型
有时候,变量的取值只在一个有限的集合内。例如,销售的服装或比萨只有小、中、大这三种尺寸。当然,可以将这些尺寸分别编码为1、2、3。但这种设置很容易出错。很可能在变量中保存的是一个错误的值(比如0)。
针对这种情况,可以自定义枚举类型。例如:
enum Size { SMALL, MEDIUM, LARGE };
现在,可以声明这种类型的变量:
Size s = Size.MEDUIM;
Size类型的变量只能存储这个类型声明中给定的某个枚举值,或者特殊值null,null表示这个变量没有设置任何值。