1.变量
计算机处理数据,变量被用来存储处理的数据,之所以叫做变量因为你可以改变存储的值。更确切的说,一个变量指向着一块存储特定类型值的地址,换句话说,一个变量有名称、类型和值。一个变量有一个名称,例如radius、area、age和height,每个变量的名称都是唯一的,这边可以方便我们设置和获取变量的值。
一个变量有一种类型,下面是Java类型的列子:
- int: 表示整数例如123和-456
- double: 表示浮点数例如3.1416、-55.66、1.2e3和-4.5E-6
- String: 表示文本例如"Hello"、“Good Morning!”,文本通常嵌入在双引号里面
- char: 表示单个字符例如’a’,‘8’,单个字符通常嵌入在单引号里面。
变量存储特定类型的值,编程中要特别注意变量类型,举例:一个int变量存储整数123,但是不能存储浮点数12.34,同样也不能存储文本"Hello"。
早期的编程语言中引入了类型的概念来解释二进制01数据,类型定义了数据的结构、大小、范围以及针对该类型的一系列操作。
2.名称
需要唯一的标识来命名变量,Java遵循以下标识的命名方式:
- 标识由大小写字母、数字、下划线和$的任意长度的字符序列组成。
- 空白 (空格、制表符、换行符)和其他特殊字符 (如+ - * / @ &, 等)是不允许的,错误的命名方式:maxvalue和max-value。
- 标识符不能以数字(0-9)开头必须以字母(a-z, A-Z)、下划线(_)和 开 头 , 系 统 保 留 以 开头,系 统保留以 开头,系统保留以开头的标识。
- 标识符不能使用关键字和预留字段 (例如:clas s,int,double,if,else,for,true,false,null)。
- 标识符是区分大小写的,rose、Rose和ROSE是3个不同的变量。
使用驼峰给变量命名:theFontSize、roomNumber、xMax、yMin、xTopLeft和thisIsAVeryLongVariableName, 可以参考下面的建议:
- 选择一个有意义的变量名是非常重要的,建议使用numberOfStudents和numStudents来表示学生人数,而不是n或x。
- 这些变量名a, b, c, d, i, j, k, i1, j99毫无意义
- x通常用作异常,y、z用来表示坐标,i表示循环索引。
- 对单复数变量加以区分,row表示单行,rows表示多行。
3.定义变量
需要定义变量的名称和类型才能在程序中使用变量,你可以使用下面的其中一种语法:
// 定义特定类型的变量, type identifier
int option;
// 定义多个同类型变量,变量之间用逗号分在这里插入代码片隔,type identifier1, identifier2, ..., identifierN
double sum, difference, product, quotient;
// 定义变量并初始化, type identifier = initialValue
int magicNumber = 88;
// 定义多个同类型变量并初始化, type identifier1 = initValue1, ..., identifierN = initValueN
String greetingMsg = "Hi!", quitMsg = "Bye!";
注意:
- Java是强类型的语言,一个变量对应着一种类型,变量声明后不能存储其它类型的数据。
- 每个变量只能声明一次。
- 使用前你可以在程序的任意位置进行声明。
- 变量声明之后它的类型不能更改。
- 一个变量声明的语句以类型开始,变量自始自终都为这种类型服务,一个变量声明的语句只能使用单一的类型。
4.常量
常量的命名规范:使用大写的单词,多个单词使用下划线连接,例如:MIN_VALUE,MAX_SIZE。
常量是不可变的,使用关键字final进行声明,常量声明后需要初始化
final double PI = 3.1415926;
5.表达式
表达式是由运算符和操作数组合而成,通过计算可以输出单个类型的值,例如
1 + 2 * 3 // 计算得到7
int sum, number;
sum + number // 计算得到一个int值
double principal, interestRate;
principal * (1 + interestRate) // 计算得到一个double值
6.赋值
指派一个右操作数赋值给左操作数,例如:x=1。
计算表达式的值并赋值给左操作数,例如:x=(y + z) / 2。
赋值语句的语法:
// 直接赋值, variable = literalValue
number = 88;
// 计算表达式之后赋值, variable = expression
number = number + 1; // 计算表达式number+1,最后将结果赋值给number
8 = number; // 错误的使用
number + 1 = sum; // 错误的使用
7.基本类型
在Java中有两种类型:基本类型 (int、double等)和引用类型 (类和数组)。
- byte: 8位有符号整型取值范围:[-2^7, 2^7-1] = [-128, 127]。
- short: 16位有符号整型取值范围:[-2^15, 2^15-1] = [-32768, 32767]。
- int: 32位有符号整型取值范围:[-2^31, 2^31-1] = [-2147483648, 2147483647] (≈9
digits)。 - long: 64位有符号整型取值范围:[-2^63, 2^63-1] = [-9223372036854775808,
+9223372036854775807] (≈19 digits)。 - float: 32位单精度浮点数(≈6-7位小数, 取值范围:±[≈10^-45, ≈10^38])。
- double: 64位双精度浮点数(≈精确到14-15位小树, 取值范围:±[≈10^-324, ≈10^308])。
- char: 表示16位Unicode编码,取值范围:’\u0000’ 到 ‘\uFFFF’, 可以理解成16位无符号整型,取值范围:[0,
65535]。 - boolean: 布尔取值只能是true或false,布尔数据类型的大小在Java虽然没有定义, 但是至少需要1比特。
内建的基本类型
基本类型内建在程序语言中,从上面的图中我们可以看出Java有8种基本类型。
- 有4种有符号的整型:8位byte,16位short,32位int,64位long。
- 32位单精度类型float,float近似的取值范围±1.40239846×10-45到±3.40282347×1038。
- 64位双精度类型double, double近似的取值范围
- ±4.94065645841246544×10-324到±1.79769313486231570×10308。
- char表示单个字符,例如’0’, ‘A’,
‘a’,在Java中,char采用16位Unicode(UCS-2格式)来支持国际化(i18n)。 - Java中引入了二进制的布尔类型,它只能包含true和false两个值。
例子:下面的程序用来输出打印基本类型的最大值、最小值和比特长度。
/*
* 输出基本类型的最大值、最小值和比特长度
*/
public class PrimitiveTypesMinMax {
public static void main(String[] args) {
// int (32位有符号整型)
System.out.println("int(min) = " + Integer.MIN_VALUE);
System.out.println("int(max) = " + Integer.MAX_VALUE);
System.out.println("int(bit-length) = " + Integer.SIZE);
// byte (8位有符号整型)
System.out.println("byte(min) = " + Byte.MIN_VALUE);
System.out.println("byte(max) = " + Byte.MAX_VALUE);
System.out.println("byte(bit-length)=" + Byte.SIZE);
// short (16位有符号整型)
System.out.println("short(min) = " + Short.MIN_VALUE);
System.out.println("short(max) = " + Short.MAX_VALUE);
System.out.println("short(bit-length) = " + Short.SIZE);
// long (64位有符号整型)
System.out.println("long(min) = " + Long.MIN_VALUE);
System.out.println("long(max) = " + Long.MAX_VALUE);
System.out.println("long(bit-length) = " + Long.SIZE);
// char (16位字符或者16位无符号整型)
System.out.println("char(min) = " + (int)Character.MIN_VALUE);
System.out.println("char(max) = " + (int)Character.MAX_VALUE);
System.out.println("char(bit-length) = " + Character.SIZE);
// float (32位浮点数)
System.out.println("float(min) = " + Float.MIN_VALUE);
System.out.println("float(max) = " + Float.MAX_VALUE);
System.out.println("float(bit-length) = " + Float.SIZE);
// double (64位浮点数)
System.out.println("double(min) = " + Double.MIN_VALUE);
System.out.println("double(max) = " + Double.MAX_VALUE);
System.out.println("double(bit-length) = " + Double.SIZE);
}
}
int(min) = -2147483648
int(max) = 2147483647
int(bit-length) = 32
byte(min) = -128
byte(max) = 127
byte(bit-length)=8
short(min) = -32768
short(max) = 32767
short(bit-length) = 16
long(min) = -9223372036854775808
long(max) = 9223372036854775807
long(bit-length) = 64
char(min) = 0
char(max) = 65535
char(bit-length) = 16
float(min) = 1.4E-45
float(max) = 3.4028235E38
float(bit-length) = 32
double(min) = 4.9E-324
double(max) = 1.7976931348623157E308
double(bit-length) = 64
String不是基本类型,是另外一种常用的类型,它表示文本内容,在Java中字符串使用双引号。
String message = "Hello, world!"; // 字符串使用双引号
char gender = 'm'; // 字符使用单引号
为变量选择数据类型
开发中需要设计合适的变量类型,多数时我们不难选择,你可以用int来存储整型,用float来存储有小数的数值,用String来存储文本,用char来存储单个字符和用boolean来存储二元结果。
经验法则
- 由于int类型非常精确、运行效率高,因此常被用作计数和索引。
- 尽可能的使用int类型。