基本数据类型与变量
数据类型是用来声明变量的。变量实际上是一个标识符,其指向了内存中的一块区域。声明变量就相当于在内存中分配了一块区域,对变量赋值就相当于给这个变量区域放入相应的值。
Java的基本数据类型如下。
数据类型 | 大小(字节数) |
---|---|
byte | 1 |
short | 2 |
int | 4 |
long | 8 |
char | 2 |
float | 4 |
double | 8 |
boolean |
Java中的char占2个字节,而C/C++中的char只占1个字节。
对于整型常量,其默认类型为int。因此,如果整型常量的字面值超过了int的表示范围,需要在其后加上大写L或小写l。即使是将一个整型常量赋值给long也需要如此。
对于浮点型变量,其默认类型的double。因此将小数常量赋值给float时,需要在其后加上大写F或小写f。
数组类型
Java中的数据定义方式有3中类型。
int[] arr;
int[] arr = {1,2,3};
int[] arr = new int[3];
不同于C/C++,Java中的数组的长度可以动态确定,但在数组声明后其大小便不可以修改。
int[] arr = new int[length]; // length是一个在运行时确定的变量
但是,Java中的数组不可以在给定初始值的同时给定长度。
int[] arr = new int[3]{
1,2,3};
上述情况不被允许。
数组类型变量和基本类型变量在内存分配上有较大的不同。基本类型变量在内存中只有一块对应的内存空间。但是,数据类型变量有两块对应的内存空间,一块是数据名指向的内存空间,用于存放数组保存的内容的起始地址;另一块则用于保存数据的内容。
在Java中,数组类型变量可以相互赋值。
int[] A = {
1,2,3};
int[] B = {
1,2};
A = B; // 在Java中被允许
如果从观点“变量名指向内存中保存的一块地址”来看上述语句,则在A=B;
执行后,变量A指向的内存空间保存的内容不再是数组{1,2,3}
的起始地址,而变成了变量B指向的内存空间的内容,即变量A,B同时指向了数组{1,2}
的起始地址。而数组{1,2,3}
的内存空间由于不再被引用而被进行垃圾回收。
基本运算
Java中的基本运算有以下类型,运算的意义和C/C++完全相同。
+ - * / % ++ --
> >= < <= == !=
& | ! ^
&& ||
? :
条件语句
Java中的条件语句有if
、if-else
、if-else if-else
、switch
类型,语句的逻辑和C/C++基本相同。唯一不同的是,在Java中switch的变量除了整型变量外,还支持枚举类型和String类型。
循环语句
Java的循环有while
、do-while
、for
、for each
4种类型。其中,for-each
的语法如下。
for (type element : aSet) {
...
}
aSet
是集合或数组类型变量,type
是其中保存的元素类型。使用for-each
语法可以不需要使用索引变量,每次循环element
都会更新为aSet
中的下一个element
循环的控制有两个关键字break
,continue
。
函数的用法
在Java中,任何函数都需要放在一个类中,一个类包含多个函数。此时,类中的函数被称为方法。方法的定义方式如下。
修饰符 返回值类型 函数名字(参数类型 参数名字, ...) {
...
return ...;
}
每一个类都有且只有一个main函数,Java程序执行时会寻找这个main函数开始执行。
Java中的函数支持可变长度的参数。
public static int max(int min, int ... a) {
...
}
变量a
是一个数组类型变量,其存放了可变的参数部分,即a
的长度是不确定的,但会在函数调用时确定下来。
函数支持重载,但要求参数列表不一致。在调用重载函数时,Java编译器首先会选择和调用参数完全匹配的函数,如果没有,则编译器会进行隐式类型转换来确定最合适的重载函数。