《Java程序设计》第三章-基础语法
20145221《Java程序设计》第三章-基础语法 总结
教材学习内容总结
类型、变量与运算符
类型
- Java可区分为基本类型(Primitive Type)和类类型(Class Type),其中类类型也叫参考类型(Reference Type)。
- 字节类型,也叫byte类型,长度为1字节,一般在需要逐字节处理数据时(如图形处理、编码处理等)。
- 整数又可细分为4种,按照在内存中占用空间的大小可分为:short整数(占2字节)、int整数(占4字节)与long整数(占8字节)。例如,int类型的十进制3其实是以000000000 00000000 00000000 00000000 00000011形式存储在内存中。
- 浮点数用来表示小数,可分为float型(占4字节)和double型(占8字节)。
- 字符char类型则用来存储一些字符符号,每个字符占2字节,汉字字符与英文字符在Java中都是用双字节储存。
- 布尔:只有true和false两种表示。
- 在JDK5之后,有了printf(),这比较类似C语言中的打印输出语句,其用法也和C语言中的基本一致,需要通过一些格式控制符号来对输出的格式类型进行设置。
变量
- 变量也好理解,就是在内存中取一个空间,并对其声明类型和命名,而这个空间就是我们说的变量,可以储存相应类型的数据。
- 关于变量的命名,一般按照驼峰式(Camel Case)命名的方法,以小写字母开始,并在每个单字开始时第一个字母使用大写。
- 关于变量的使用,在调用变量之前,一定要对该变量进行初始化,即给变量要指定值后才能使用;如果不想后面的操作对变量的值进行更改,在赋值时应该在赋值语句前加上final,例如:final double PI = 3.141596,则后续的操作就不能对其进行重新赋值,否则编译时会报错。
- 在表示数字常量时,用0b表示二进制数,用0x表示十六进制数。
运算符
- 在逻辑运算符中,&&的特点在于如果&&左边为假,则不论右边真值如何,其逻辑判断返回结果为假;同样的,||的特点在于如果||的左边为真,则不论右边真值如何,其逻辑判断返回结果为真。这在一定的程度上还是能提高代码的编译执行效率。
- 在递增、递减运算符中,就要注意运算符是放在变量的左边还是右边,如果运算符在变量左边,则先改变变量值再进行运算,如果运算符在变量右边,则先进行运算再对变量进行相应的加减变化。
类型转换
- 类型与变量看似简单,但是很多时候编译不通过,可能就是这些细节不注意。Java中对变量类型区分是非常严格的,在不特别指明的情况下,整数一般为int类型,小数则默认为double型,如果不特别注意这些就容易犯错,例如: float PI = 3.14,3.14默认为double型,不能把double型的小数赋给float型,这样就会丢失精度,编译时就会报错。
- 另一种情况,就是不同类型的操作数在进行运算时要遵循一些原则。如果操作数都是不大于int的整数,则自动全部提升为int类型进行运算;如果运算时,类型不相同,则运算时会以最长的类型为主。
流程控制
if...else条件式
- 需要注意的是一定要把执行的语句用花括号括起来,否则,默认的是只执行if后的第一句。
switch条件式
- switch有点像多个分支的if语句,但在某些情况下,用switch可以提高代码的效率,书本上也有相应的例子,不用进入每个if语句去判断,可以通过待判断的值直接进入相应的case,只是注意switch一般都会配以break一起使用,编写代码时不能忘记这一点。
for循环
- 与C语言中的for循环基本一样,写代码时养成先写##for(;😉##的习惯,这样不会漏必要的元素,如果判断部分没有任何说明,则默认是true,即是一个无限循环。
while循环
- 当型循环:while(条件式){描述句},先判断条件式的布尔类型,如果成立,则执行描述句。
- 直到型循环:do{描述句}while(条件式);,特点是先执行一遍描述句,再判断条件,如果条件成立就再执行一遍描述句,直到条件不成立为止。
- 需要注意的是:while的两种类型的区别,在写法上,注意当型while后没有分号,第二种有分号。
break continue
- break:结束当前循环。
- continue: 跳过当前循环一次。
- break、continue还可以和标签一起配套使用。break与标签配套时,则结束该标签包含的所有语句;continue与标签配套时,则跳过该标签包含的所有语句。
教材学习中的问题和解决过程
- 这一章内容还算基础,很多地方可以类比C语言进行学习。
- 在本章开始讲述变量类型时,可能因为没学数据结构的原因,对字节了解的还不是很清楚,所以就在百度百科上了解了一下字节的定义,然后又通过Java的学习视频,学习与字节相关的课程。在课程中,毕老师把一个字节比做一个碗,存储变量体现为盛饭这一过程,很好的解释了字节的含义,又有助于帮助我理解丢失精度溢出等概念。
- 在介绍break和continue与标签搭配使用这一功能时,还不能太理解,不知道书本上文字描述是什么意思。所以,我照着书上的代码敲在了电脑上,通过不同的搭配(break和continue与标签搭配),反复的编译执行,从屏幕上打印的结果,明白了这些功能的异同。
代码调试中的问题和解决过程
九九乘法表
- 代码:
public class TimeTable{
public static void main(String[] args){
int i,j;
for(j = 1; j < 10; j++){
for(i = 1; i <= j ; i++){
System.out.printf("%d*%d=%2d ",i,j,i*j);
}
System.out.println();
}
}
}
-
运行结果:
-
总结:两个for循环的嵌套使用,使打印形式呈现乘法口诀表的格式。由于前面几条口诀乘法(3*3之前)的结果为个位数,与后面的十位数相比差一位,为了左右能对整齐显得美观,故选择控制为%2d,使得不论结果是几位数,都使其占用2个字符的宽度。
课后操作题1
- 代码:
public class Gcd{
public static void main(String[] args){
int m = 1000, n = 495, temp;
while(n != 0){
temp = m % n;
m = n;
n = temp;
}
System.out.println("The gcd of 1000 and 495 is : "+m);
}
}
-
运行结果:
-
总结:以辗转相除法为程序的算法,通过中间变量temp使除法反复执行,最后选取m为最大公因子的值。其中输出语句可以这样输出,也可以通过printf();控制输出格式来输出。
课后操作题2
- 代码:
public class AmstrongNum{
public static void main(String[] args){
int i, j, k;
System.out.print("All of the Amstrong Numbers : ");
for(int num = 100; num < 1000; num++){
i = num / 100;
j = (num / 10) % 10;
k = num % 10;
i = i * i * i;
j = j * j * j;
k = k * k * k;
if(i + j + k == num){
System.out.print(num+" ");
}
}
System.out.println();
}
}
-
运行结果:
-
总结:通过类型转换中的一些特点,提取出任意一个三位数的各位数字,然后再对这些数字进行相应运算,用if语句控制输出,满足条件则输出;否则,进入下一个循环。
其他
- 这一章的内容总体比较简单,可以类比C语言的知识进行学习。只是要仔细区别两者的异同,不能混淆。对不熟练的知识点要反复巩固,反复练习。
- C语言中我们一般这样写表示无限循环“while(1)”,因为之前有了“非零为真”这一观念。但在Java中,这样写了编译时则会报错,提示“错误: 不兼容的类型: int无法转换为boolean”,所以在Java程序设计中,条件式一定要是布尔型,非true即false。如果要无限循环,可以这样写“while(true)”。
- 对书中描述不是很清楚的地方,完全可以把代码敲在电脑上,自己编译几遍,就能弄懂相应的知识点了。如果没有代码,可以自己设置一个情景,编写一个简单的代码,来验证书中的知识点,既学到了知识,也熟练了编程这一过程。