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/30 | 3/7 | 28/28 | |
第二周 | 120/150 | 1/8 | 23/41 |
参考资料
Java学习笔记(第8版)《Java学习笔记(第8版)》学习指导
如何成为 IntelliJ IDEA 键盘流? - 知乎用户的回答
相关文章推荐
- Java中有关Null的9件事
- java排序
- JAVA 3.13
- struts2的action接受参数:可以决定用不用写getter/setter方法(未经过测试)
- [Spring] 声明Bean
- JAVA内存区域
- java并发包
- 20145313张雪纯 《Java程序设计》第2周学习总结
- JDK安装出现1335错误
- java 包和import关键字。
- spring AOP原理
- java Script入门
- Spring依赖注入源码分析
- java 变量的作用域 面向对象的特点
- java内部类详解
- Eclipse安装Spring插件springsource-tool-suite
- 《Java程序设计》第二周学习总结
- 20145329 吉东云《Java程序设计》第二周学习总结
- java高级特性学习笔记
- spring IOC原理