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.0JVM编码是UTF-16 Big Endian
  • 布尔:boolean类型可表示truefalse,表示逻辑的

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

注释

  • 单行注释://

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

  • javadoc文档注释:/***/

  • 注释注意事项:

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

变量

  • 变量的数值可以在同一类型范围内不断变化
  • 关于变量的命名,一般按照驼峰式(Camel Case)命名的方法,以小写字母开始,并在每个单字开始时第一个字母使用大写。
  • 关于变量的使用,在调用变量之前,一定要对该变量进行初始化,即给变量要指定值后才能使用;如果不想后面的操作对变量的值进行更改,在赋值时应该在赋值语句前加上final,例如:final double PI = 3.141596,则后续的操作就不能对其进行重新赋值,否则编译时会报错。
  • 在表示数字常量时,用0b表示二进制数,用0x表示十六进制数。

运算符

  • 在逻辑运算符中,&&的特点在于如果&&左边为假,则不论右边真值如何,其逻辑判断返回结果为假;
  • 同样的,||的特点在于如果||的左边为真,则不论右边真值如何,其逻辑判断返回结果为真。这在一定的程度上还是能提高代码的编译执行效率。
  • 在递增、递减运算符中,就要注意运算符是放在变量的左边还是右边,如果运算符在变量左边,则先改变变量值再进行运算,如果运算符在变量右边,则先进行运算再对变量进行相应的加减变化。

类型转换

  • 类型与变量看似简单,但是很多时候编译不通过,可能就是这些细节不注意。Java中对变量类型区分是非常严格的,在不特别指明的情况下,整数一般为int类型,小数则默认为double型,如果不特别注意这些就容易犯错,例如: float PI = 3.143.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: 跳过当前循环一次。
  • breakcontinue还可以和标签一起配套使用。break与标签配套时,则结束该标签包含的所有语句;continue与标签配套时,则跳过该标签包含的所有语句。

教材学习中的问题和解决过程

本周学习的难点并不多,关于关键字、标识符、注释、常量与变量、运算符、语句、函数、数组等相关概念在学习C语言的时候已经接触过了,学习的时候进行对比就能够很快上手,在教材学习中遇见的一个比较难理解的问题就是关于printlnprintf的区别,因为在之前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周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. angular2+ 中封装调用递归tree

    子组件  given-person.html <!--权限设置-选择员工--> <li [class.noborder]="!dir.shierarchy" *n ...

  2. 通过SSH连接mysql

  3. 160503、onunload、onbeforeunload事件详解

    最近项目中做到一个功能:在上传页面用户开始上传文件之后用户点击任意跳转都需要弹出提示层进行二次确定才允许他进行跳转,这样做的目的是为了防止用户的错误操作导致这珍贵的UGC 流失(通常用户在一次上传不成 ...

  4. Python--进阶处理4

    #================第四章:迭代器和生成器=================== # 函数 itertools.islice()适用于在迭代器和生成器上做切片操作. import ite ...

  5. Ckeditor事件绑定

    最近有个需求是要在点击CKeditor的时候触发某个判断的事件.试了一些方法都不可行,自己写的onclick时间都会被编辑器屏蔽.可以对对象加载完成绑定事件代码如下. CKEDITOR.instanc ...

  6. Spotlight 连接SuSE11 linux报错的解决方法

    1. 在客户端安装spotlight: 2.在SuSE11中建立新用户,并且安装了sysstat包: 3.使用spotlight连接服务器,连接时提示    errorcode:3114   reas ...

  7. mysql构建一张百万级别数据的表信息测试

    表信息: CREATE TABLE dept( /*部门表*/ deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*编号*/ dname VARCHAR(2 ...

  8. ITL(Interested Transaction List)理解

    一.ITL描述: ITL(Interested Transaction List)是Oracle数据块内部的一个组成部分,位于数据块头(block header),itl由xid,uba,flag,l ...

  9. python16_day26【crm 增、改、查】

    一.增加 二.修改 三.保存

  10. 安装memcached扩展

    1.wget http://pecl.php.net/package/memcache  下载相对应的扩展包 2. tar -zxvf memcache-2.2.7.tgz 3.  cd memcac ...