经过两个星期四节课的java学习,我也对java这门语言有了一定的认识。刚开始上课的时候,我认为java把C语言中老师所说的模块化编程进行了强调,进行一个类,一个类的编程,在类中构造相应的方法,使用的时候再调用。这样能够减少重复的代码,同时能让代码整体看上去比较整洁。这样写起程序来,调试比较容易,eclipse的自动纠错功能用起来也非常好用,感觉写成一个java的程序在有C语言的基础上还是比较容易完成的。后来慢慢地,老师向我们介绍了面向对象的各类思想以及这些思想在java语言中的使用。后来能够明显感觉到,随着面向对象的各类思想引入以及java语言特点的介绍后,写起程序来难度越来越大了。这是我对面向对象先导课的整体印象。

  这门课让我学到的:

  

  总结一下个人在这次先导课程中所学到的。关于第一节课中的总体内容在第一篇博客中总体已经有所总结,这里对后来所了解到的内容进行补充。

  首先是构造函数,构造函数可以有多种不同的构造函数,这里涉及到老师上课说过的java类中方法名可以相同,但只要参数个数或者参数类型,返回值类型等不同就会被判定成不同的方法。所以经常会存在方法名相同但是参数类型不同的情况,比如说String类型中的indexOf方法,可以是一个参数,也可以是两个参数,都可以实现各自的目标。所以构造方法也可以有多个,构造方法的方法名与类名相同。如果没有定义构造方法的情况下,对象中各属性均初始化为默认值,如integer类型的值初始化为0等。

  java的输入输出也很有特点,刚开始学习C语言的时候,也是先学输出,之后再教输入。但是C语言的输入输出种类并不是很多,java的输入输出种类划分很细,基本能够满足你在C语言中所要实现的输入输出功能。java的输出代码较为简洁,基本几行就可以解决。但输入代码感觉写起来比较繁琐。之后了解到,java的输入输出是基于流的输入输出,这样能够使得程序的输入输出独立于设备,并不关心数据源来自哪里。java的数据流分为字符流和字节流,我们课上所用的一般都是字符流,通过BufferedReader进行相应的输入。

  Java的接口是面向对象的一个重要思想,利用java的接口,我们可以在接口里面定义相应的抽象方法,java接口是java面向对象语言的一个重要机制。利用该机制,我们可以使得代码更加简洁。这些是老师上课所告诉我们的。但上完课后,对于接口的意义还不是很能够理解。这里再对接口的相关内容进行补充。首先因为接口定义的是抽象方法,相应的具体方法在类中还要进行重构,感觉是否有接口的影响应该不大。后来通过上网查阅资料了解到相关内容。理解为什么不直接在类中定义相应方法涉及到抽象类的相关内容。在java程序里面多写一个接口或者是抽象类,是为了多态能够实现,如果不用抽象类或者接口进行多态的实现,那么程序中可能就要重载许多个意义相同的方法,并且每增加一个类,就需要重载相应的方法。代码简介度和维护性过低。利用接口或者抽象类来编写程序的话,就能够编写出实现了多态的程序,大大降低了代码的重复性,使得代码看上去较为简洁。同时能够使得后面如果要进行增加类等操作变得更加方便简单。虽然抽象类的实现与接口的实现非常相似,但抽象类与java接口是java的两种不同机制。抽象类是利用java的继承来进行的,但是java的类不可以多继承,所以这个时候,接口就可以派上用场了。利用接口,java程序可以从别的地方实现实现相应的方法。

  其次是java字符串的处理,java字符串处理是将字符串抽象为类进行管理。通过相应的方法对字符串进行操作,大大简化了程序中字符串处理相关的代码,从中就可以感觉出java中以类进行编程的方法的优势。Java中字符串的处理有很多相应的方法,在我之前所写的博客中有所记录,作业中我们经常用到split方法来进行对字符串的分割。C语言中字符串处理主要是靠对数组进行相应的操作,每次都要进行代码的重写并且还容易出错。而java将字符串抽象为类之后,每次根据要处理的内容主要对方法进行改动即可。仅仅只是对方法进行调用,而不用去管方法背后是如何实现这些操作的。并不像C语言一样,每次都要从头开始写,大大简化了程序对字符串的操作。

  java的运行速度之前是在大一的时候,在学python时所提到过,C语言的运行速度可以说是高级语言里面运行速度最快的语言,而java的速度稍微慢一点,但是也比python快。在进行了先导课的学习之后,了解到了java的运行速度慢的一些原因,java隐藏了指针,所以程序不能够直接对内存分配等进行管理。java就要自动进行频繁的GC活动来对内存进行回收等。尽管这样做使得程序的安全性得到了提高,但是这样也拖慢了程序的运行速度。当然,不管什么语言,数据结构和算法的优劣都会很大程度上影响程序的运行速度。

  作业中所遇到的困难

  而这几次越来越有挑战的作业中遇到的困难,在之前的博客有所提及,这里进行相应的补充。第一次作业根据助教给的说明文档,在写最后一个方法的时候,并没有认识到java中将对象也可以作为返回值使用,所以最后没有能够按照助教所给的说明文档写出相应的方法。java中将各种数据抽象为对象,在java中对对象可以进行很多相应的操作,比如可以将对象作为参数进行传递,将对象作为返回值或者创建对象的数组等相应的操作。第二次作业中,因为之前没怎么接触过输入输出,所以在输入输出方面遇到了比较多的困惑,后来查阅到文件的通过文件进行输入可以采用BufferedReader来进行,而通过控制台进行输入的话,可以采用Scanner这个类来进行输入。Scanner这个类可以直接将控制台的内容读入后进行处理。同时第二次作业写的过程中还充满了对接口的疑惑。后来逐渐了解到,那个作业本身并不是一定需要接口,只是结合第一次作业如果可以用接口实现的话,就可以实现了上文中对接口可以从别的地方实现相应的方法这一个功能,能够对接口有所熟悉。第三次作业并没有其余面向对象思想的介绍,但是在课上自测的时候,遇到了非常严重的BUG。在每一行的字符串处理的时候,都是直接就用了indexOf,并没有进行其他处理,导致如果查找of单词,出现的位置是第一个字符of的位置,而字符of是包含在其他单词中的。后来课下进行debug后明白,应该每次查找位置后,调整每次indexOf起点的位置,是的每个单词查找到之后,就从查找范围内去掉。从这次课上自测可以看出,其实自己很多时候很难发现BUG,即使有时候可能比较明显。所以,每次的课下自测过程其实很重要。最后作业的过程中,HashMap根据网上的教程,使用起来还算好,但是我们的程序怎么组织HashMap一开始比较不知所措。刚开始想定义一个新类,类中有第一个单词和第二个单词两个属性,然后HashMap的Value里面存储该词组出现的次数,后来发现这样进行操作的话,单词的查找等会有挺多有问题的地方,经过了几次尝试之后,采用了最后作业的方法。算是能够看起来输出好像是对的答案了。

  对本课程的建议:

  这次先导课是我第一次接触java,但是上下来之后。我感觉吴老师和助教帮助我们打开了java的大门。也给我们指明了一条顺利度过oo课程的道路。课程整体上给我的感觉是挺好的,强调编程实践,课上老师带着大家编程,课下老师和助教总会在群里帮助大家解决问题。总结上次课的错误等,都可以从中学到很多东西。我想提的一个建议是,每次作业是否可以给我们展示一份完成比较好的优秀作业代码。这样我们可以通过阅读其他写的好的代码了解java的编程习惯和规范等。如果害怕大家直接阅读代码而不自己课下去修改自己程序中原来存在的BUG的话,大可以在课程结束的时候,将所有作业优秀的代码给大家一份,让我们可以有借鉴学习的地方。

java先导课程学习总结的更多相关文章

  1. 扎西平措 201571030332 《面向对象程序设计(java)课程学习进度条》

    <2019面向对象程序设计(java)课程学习进度条> 周次 (阅读/编写)代码行数 发布博客量/评论他人博客数量 课余学习时间(小时) 学习收获最大的程序 阅读或编译让我 第一周 20/ ...

  2. 2019面向对象程序设计(java)课程学习进度条

    2019面向对象程序设计(java)课程学习进度条 周次 (阅读/编写)代码行数 发布博客量/评论他人博客数量 课余学习时间(小时) 学习收获最大的程序阅读或编程任务 1 20/10 1/0 5 九九 ...

  3. 201871010106-丁宣元 《2019面向对象程序设计(java)课程学习进度条》

    <2019面向对象程序设计(java)课程学习进度条> 周次 (阅读/编写)代码行数 发布博客量/评论他人博客数量 课余学习时间(小时) 学习收获最大的程序阅读或编程任务 1 25/10 ...

  4. 201871010135 张玉晶 《2019面向对象程序设计(java)课程学习进度条》

    <2019面向对象程序设计(java)课程学习进度条> 周次 (阅读/编写)代码行数 发布博客量/评论他人博客数量 课余学习时间(小时) 学习收获最大的程序 阅读或编译让我 第一周 25/ ...

  5. 201771010135 杨蓉庆《2018面向对象程序设计(java)课程学习进度条》

                                                                                                        ...

  6. java入门经验分享——记面向对象先导课程学习感想

    选择在暑期学习面向对象先导课程的初衷是为大二下学期面向对象课程做一些铺垫,接触入门java语言.在接触java的过程中,就编程语言的学习方法而言,我从刚入学时的手慌脚乱四处寻求帮助到现在慢慢养成了自己 ...

  7. Java期末课程学习汇总。

    本学期面向对象与Java程序设计课程已经结束了,给自己学习来个总结. 本学期过的非常快,不得不说这一学期学到的东西很少,感觉自己的进步很小. 而且感觉自己总少了点什么,在写这篇总结前,我认真想了,很多 ...

  8. 《2019面向对象程序设计(java)课程学习进度条》

    学习资源 1.教材P28-P76 2.第3章教学课件3.1-3.8 3.corejava.zip中第3章示例程序3-1—3-5 4.Eclipse简明教程.pdf 5.MOOC & 视频:浙江 ...

  9. 《2019面向对象程序设计(java)课程学习进度条

    周次 (阅读/编写)代码行数 发布博客量/评论他人博客数量 课余学习时间(小时) 学习收获最大的程序 阅读或编译让我 第一周 20/5 1/0 4 编译九九乘法表 第二周 100/10 2/0 5 第 ...

随机推荐

  1. 学习笔记之form表单

    form表单提交的数据 是字典类型 这样 方便在create时候 直接解压

  2. python深浅copy探究

    引入 在python程序中,如果我们操作一个变量的值去做运算,而又想在下次调用时,仍使用原来的变量的值去做运算,那么我们我们就需要将这个变量去做备份,这就是本文所要探究的问题. 开始 变量-对象-引用 ...

  3. JavaScript——根据数组中的某个值进行排序

    我这里是根据次数进行倒叙,可根据自己情况进行修改 function sortKey(array,key){ return array.sort(function(a,b){ var x = a[key ...

  4. day30 小面试题 去重 (考核 __eq__ 以及 __hash__ )

    # 小面试题,要求将一个类的多个对象进行去重 # 使用set方法去重,但是无法实现,因为set 需要依赖eq以及hash, # hash 哈希的是内存地址, 必然不一样 # eq 比较的也是内存地址, ...

  5. MT【215】集合中元素个数

    设$M=\{1,2,3\cdots,2010\}$,$A$是$M$的子集且满足条件:当$x\in A$时$15x\notin A$,则$A$中的元素的个数最多是______ 分析:由于$x,15x,( ...

  6. MT【22】一道分母为混合型的放缩

    评:指数函数增长>幂函数增长>对数函数增长.

  7. TensorFlow分布式计算机制解读:以数据并行为重

    Tensorflow 是一个为数值计算(最常见的是训练神经网络)设计的流行开源库.在这个框架中,计算流程通过数据流程图(data flow graph)设计,这为更改操作结构与安置提供了很大灵活性.T ...

  8. Java 实现金额转换 代码示例

    金额转换,阿拉伯数字的金额转换成中国传统的形式如: (¥1011)→(壹仟零壹拾壹元整)输出. 分析: 金额转换,在开发财务相关软件时会经常用到,也是软件本地化的一个需要.一般开发公司或者团队都有相应 ...

  9. cf1063B Labyrinth (bfs)

    可以证明,如果我搜索的话,一个点最多只有两个最优状态:向左剩余步数最大时和向右剩余步数最大时 然后判一判,bfs就好了 dfs会T惨... #include<bits/stdc++.h> ...

  10. bzoj1494 生成树计数 (dp+矩阵快速幂)

    题面欺诈系列... 因为一个点最多只能连到前k个点,所以只有当前的连续k个点的连通情况是对接下来的求解有用的 那么就可以计算k个点的所有连通情况,dfs以下发现k=5的时候有52种. 我们把它们用类似 ...