20145328 《Java程序设计》第2周学习总结
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 |
参考资料
20145328 《Java程序设计》第2周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- 深入分析Cocos2d-x 2.0中的“纹理”
对CCImage的绘制是通过CCTexture2D来实现的(OPENGL es)通过纹理绘制到某个面. (本文中所提到的方法在cocos2d2.0中部分有调整,请应用时候具体察看源码)1. 首先来了解 ...
- Code Forces Bear and Forgotten Tree 3 639B
B. Bear and Forgotten Tree 3 time limit per test2 seconds memory limit per test256 megabytes inputst ...
- 不想分页怎么办??-->页面数据的滚动加载
在前几天的一次前台数据展示的时候 为了更好的用户的体验 就想着做一个数据的滚动加载功能 于是简单的查询了网上的实现方式 基本都是在页面加载的时候绑定scroll事件 然后判断页面触底的时候 进行aja ...
- Microsoft Excel 标题栏或首行锁定
Microsoft Excel 标题栏或首行锁定 在进行Excel编辑的时候,希望在浏览的时候,第一行或者第一列能够始终显示. 需要做的是:在Excel中选择 "视图"->& ...
- Android 关于异步Http请求,以及编码问题
大家都知道可以使用一个继承了AsyncTask的类去实现异步操作,再有个Http请求的类就可以解决了,现在我说下里面的细节问题,比如长时间无反应,编码问题,以及一些HTML相关的处理. 首先说下长时间 ...
- ActiveMQ 详解
1. 如何同步索引库 方案一: 在taotao-manager中,添加商品的业务逻辑中,添加一个同步索引库的业务逻辑; 缺点:业务逻辑耦合度高,业务拆分不明确; 方案二: 业务逻辑在taotato-s ...
- d3.js:数据可视化利器之 修改文档:DOM操作符
style: CSS样式操作符 style()操作符用来设置或获取选择集中各DOM元素的CSS样式: selection.style(name[,value[,priority]]) style()操 ...
- Golang&Python测试thrift
接上篇,安装好之后,就开始编写IDL生成然后测试. 一.生成运行 参考 http://www.aboutyun.com/thread-8916-1-1.html 来个添加,查询. namespace ...
- Python作用域-->闭包函数-->装饰器
1.作用域: 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我要理解两点:a.在全局不能访问到局部 ...
- restfull规范
web服务交互 我们在浏览器中能看到的每个网站,都是一个web服务.那么我们在提供每个web服务的时候, 都需要前后端交互,前后端交互就一定有一些实现方案,我们通常叫web服务交互方案. 目前主流的三 ...