一、基本程序设计结构:
Java的基本程序结构、关键字、操作符都和C/C++非常相似,以下为主要的几点区别:
1. Java的原始数值型数据类型中不包含无符号类型,如c中的unsigned int。
2. 在进行移位运算时,当向左边移动时,如1 << 35, 对于int类型,由于其占有4个bytes(32bits), 因此在Java中,大于32的移位将对32取模,即1 << 35的结果等于1 << 3,以此类推,long将会对64取模。对于int类型而言,如果确实需要获取32位以上的移位,需要将返回值的类型提升到long即可。
3. 在c语言中,可以通过判断一个数值是否为0来代替布尔中的false,其他的数值均表示为true。该写法可应用于if和while等子句中,如 if (i) {....}, 当i的值不为0时,该条件可为真,或者是在判断指针对象是否为NULL时,也可作为if和while的条件,因此很容易出现将if (i == 9) {...}写成if (i = 9) {...}的低级错误,在Java中禁止了该类转换,既if和while中条件必须是布尔类型,如果在Java中写成 if (i = 9) {...}将会直接导致编译错误,从而更好的避免了该类问题的发生。
4. Java中去除了goto字句,但是仍然视为保留字。然而Java中的break字句,新增了带标签的break [label],可以使break语句直接跳出指定的循环,而不仅仅是缺省的最内层循环。注:标签必须放在希望跳出的最外层循环之前,并且紧跟一个冒号。如:
2 int n;
3 read_data:
4 while (...) {
5 for (...) {
6 System.out.print("Enter a number >= 0: ");
7 n = in.nextInt(); 8 if (n < 0)
9 break read_data;
10 }
11 }
12 //下面的代码将会被立即执行,当break跳出最外层的循环之后。
13 if (n < 0) {
14 ...
15 } else {
16 ...
17 }
18 }
5. Java中支持0长度的数组定义,如int et = new int[0]; 在C/C++中,该写法将会导致编译错误。
6. 多维数组的两种常用访问方式。
3 {
4 {16,3,2,13},
5 {5,10,11,8},
6 {9,6,7,12},
7 {4,15,14,1}
8 };
9 // 通过普通的for循环访问
10 for (int i = 0; i < magicSquare.length; ++i) {
11 for (int j = 0; j < magicSquare[i].length; ++j) {
12 System.out.printf("%s ",magicSquare[i][j]);
13 }
14 System.out.println();
15 }
16 // 通过普通的for each循环访问17 for (int[] row : magicSquare) {
18 for (int col : row) {
19 System.out.printf("%s ",col);
20 }
21 System.out.println();
22 }
23 }
24 /*两次输出结果均为:
25 16 3 2 13
26 5 10 11 8
27 9 6 7 12
28 4 15 14 1 */
7. Java中的不规则二维数组。
2 int[][] odds = new int[NMAX+1][];
3 for (int n = 0; n <= NMAX; ++n)
4 odds[n] = new int[n + 1];
5
6 for (int n = 0; n < odds.length; ++n) { 7 for (int k = 0; k < odds[n].length; ++k)
8 odds[n][k] = n * k;
9 }
10 }
C/C++中对应于Java的不规则二维数组的表示方式。
2 int** odds = new int*[10];
3 for (int n = 0; n < 10; ++n) {
4 if (n == 0)
5 odds[n] = new int;
6 else
7 odds[n] = new int[n + 1];
8 }
9
10 for (int n = 0; n < 10; ++n) {
11 for (int k = 0; k < n + 1; ++k)
12 odds[n][k] = n * k;
13 }
14 //注:C/C++代码部分需要自行释放分配的内存。
15 for (int n = 0; n < 10; ++n) {
16 if (n == 0)
17 delete odds[n];
18 else
19 delete [] odds[n];
20 }
21 delete [] odds;
22 }