您的位置:首页 > 编程语言 > Java开发

20145328 《Java程序设计》第2周学习总结

2016-03-13 17:34 190 查看

20145328 《Java程序设计》第2周学习总结

教材学习内容总结

掌握了上周没有学会的IDEA的用法

掌握了一些快捷键用法,在用IDEA编写程序的过程中的体验比直接使用cmd进行编写方便很多,以下附上IDEA设置完成后当天对IDEA编程的尝试(Hello World)





java中的基本类型

整数:可细分为
short(占2字节)
int(占4字节)
long(占8字节)


字节:
byte
,若用于表示整数,
byte
可表示
-128~127
的整数

浮点数:主要用于存储小数数值,可分为
float(占4字节)
double(占8字节)


字符:
char
,汉字、英文字符都是双字节的,
Java
字符编码是
Unicode6.2.0
JVM
编码是
UTF-16 Big Endian


布尔:
boolean
类型可表示
true
false
,表示逻辑的


int可储存的整数范围为
-2147483648~2147483647


注释

单行注释:
//


多行注释:
/*
*/
,编译程序会忽略
/*
*/
之间的文字

javadoc文档注释:
/**
*/


注释注意事项:

- 给函数和全局数据加上注释
- 要澄清情况,不要添乱子
- 不要大谈明显的东西
- 不要注释差的代码,重写它
- 不要与代码矛盾(javadoc)

变量

变量的数值可以在同一类型范围内不断变化

关于变量的命名,一般按照驼峰式
(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语言的时候已经接触过了,学习的时候进行对比就能够很快上手,在教材学习中遇见的一个比较难理解的问题就是关于
println
printf
的区别
,因为在之前C语言的学习中并没有这方面的差异。

该问题在调试如下程序时得到了解决

public class Comparison {
public static void main(String[] args) {
System.out.printf("10 >  5 结果 %b%n",10 > 5);
System.out.printf("10 >= 5 结果 %b%n",10 >= 5);
System.out.printf("10 <  5 结果 %b%n",10 < 5);
System.out.printf("10 <= 5 结果 %b%n",10 <= 5);
System.out.printf("10 == 5 结果 %b%n",10 == 5);
System.out.printf("10 != 5 结果 %b%n",10 != 5);
}
}

下面是程序运行的结果



而将上面的程序中所有的
printf
改成
println
之后的运行结果如下所示



有了上述例子进行对比之后,才理解了


println是用于输出参数内容,然后换行,其参数个数固定为一个,而printf是用于输出带各种数据类型的占位符的参数,其参数个数是不定的


这段话的含义

代码调试中的问题和解决过程

在九九乘法表程序中,书上的程序如下所示

public class NineNineTable {
public static void main(String[] args) {
for(int j = 1; j < 10;j++){
for(int i = 2; i < 10;i++){
System.out.printf("%d*%d=%2d ",i,j,i*j);
}
System.out.println();
}
}
}

其运行结果如下



虽然输出的结果是正确的,但是为什么在第二个
for
循环中为什么
int i=2
,如果将
int i=2
改成
int i=1
会出现什么样的结果,修改后的程序如下

public class NineNineTable {
public static void main(String[] args) {
for(int j = 1; j < 10;j++){
for(int i = 1; i < 10;i++){
System.out.printf("%d*%d=%2d ",i,j,i*j);
}
System.out.println();
}
}
}

运行结果如下



对比后可发现,若i从2开始,则打印出来的九九乘法表是9行8列的,若i从1开始,打印出来的九九乘法表则是9行9列的,若是将
for(int i = 1; i < 10;i++)
修改成
for(int i = 1; i <= j;i++)
,则可打印出如下图所示的阶梯形九九乘法表,就观感体验上来说比前面两个要简洁得多



阶梯形九九乘法表程序如下

public class NineNineTable {
public static void main(String[] args) {
for(int j = 1; j < 10;j++){
for(int i = 1; i <= j;i++){
System.out.printf("%d*%d=%2d ",i,j,i*j);
}
System.out.println();
}
}
}

书上还有另外一种只利用一个
for
循环就完成九九表打印的例子如下

public class NineNineTable2 {
public static void main(String[] args) {
for(int j = 1,i = 2; j < 10; i = (i==9)?((++j/j)+1):(i+1)){
System.out.printf("%d*%d=%2d%c",i,j,i*j,(i==9 ? '\n' :' '));
}
}
}

研究之后可知
System.out.printf("%d*%d=%2d%c",i,j,i*j,(i==9 ? '\n' :' '));
这一句是对i的值进行判断,若
i=9
就在算式后打印换行符,否则打印空格。

而循环条件中
i = (i==9)?((++j/j)+1):(i+1)
的意思是每进行一次
for
循环之后,对i值进行判断,若
i=9
执行
j+1后整除j的所得数+1
,否则
i+1


编译执行结果与前面第一个九九表相同,也算是理解了为什么只用一个
for
循环就可以打印九九表,不过这样一来程序的可读性要比之前的两个
for
循环的差上不少。

学习感悟

就现阶段的学习而言,对着教材敲代码的确是一个学习的好方法,不过也不能只敲书上有的代码,对于一些代码不理解的地方,以及一些不能理解的概念,尝试着对代码进行修改,然后对比运行结果,这样对于理解为什么代码要这么用有很大的帮助

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行40篇500小时
第一周30/303/728/28
第二周120/1501/823/41

参考资料

Java学习笔记(第8版)

《Java学习笔记(第8版)》学习指导

如何成为 IntelliJ IDEA 键盘流? - 知乎用户的回答
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: