一个学期的java学习总结
前言:经过一个学期的java学习,在老师的讲解下逐渐了解了这门语言并写了许多作业,有简单题也有难题,经历了从无从下手到能简单写些代码,中间也经历了许多bug,有很多都无法独立解决,很多难题也解答不出来。就作业而言,pta的作业总体并不是很难,但是Blog第一次接触很多语法也不会写起来挺困难,总体工作量不是很大,难度比较大,很多时候无法完全独立完成。
一:总体框架如下:

二:作业收货总结:
1.在航空货运系统中对继承,多态,抽象类,接口的使用了解更加深刻。
航空货运系统要求:
- 航空公司提供如下信息:
- 航班信息(航班号,航班起飞机场所在城市,航班降落机场所在城市,航班
- 日期,航班最大载重量)
- 客户填写货运订单并进行支付,需要提供如下信息:
客户信息(姓名,电话号码等)
货物信息(货物名称,货物包装长、宽、高尺寸,货物重量等)
运送信息(发件人姓名、电话、地址,收件人姓名、电话、地址,所选航班号,订单日期)
支付方式(支付宝支付、微信支付) - 一个货运订单可以运送多件货物,每件货物均需要根据重量及费率单独计费
其中,客户的父类为人,即Person,同样人的子类也可以有发件人Sender,收件人Recever等等,货物的父类为物品Object。支付方式为接口Pay,它的实现方式为微信支付,支付宝支付等等。
继承关系如下:

由父类引生出的子类就叫继承,而传参的时候,形参的类型为父类,这就叫多态。
但是在航空货运系统中订单作为所有信息的集合体,除了应该具有客户信息,航班信息,运输信息,支付方式等等信息,也就是具有信息管理职权外,还有计算费用的职权,违反了单一职责原则,即:一个类只能有一个因素能让它改变,但是计算费用是集成在订单类里面的,根据上面所有信息来计算,如果单独做一个类出来,需要额外空间以及增加代码复杂度。所以在集成程度很高的时候,将计算费用作为内部类安置在订单中,每个订单有自己的内部类,根据管理信息的不同,自动计算自己的费率更好一些。
类图如下:

1.在图形卡片分组游戏中对Comparable的使用,以及将Comparable与继承结合更加了解
图形卡片分组游戏要求:
- 实现功能
对各图形信息进行输入并输出;
输入数据的正确性校验;
对输入的图形按照图形类型进行分组并输出,分组原理如下图所示:
对每组内的图形按照面积值降序排序并输出;
求出每组内图形面积的总和;
求出所有组的面积总和的最大值并输出
其中最麻烦的就是比较,因为图形的继承跨度非常大,最终的各种图形是集成在Card中,而到底是各种图形的父类Sharp继承Comparable还是Card继承是有很大区别的,如果是Sharp继承,则在Card中比较的时候传入的对象是图形,最终比较出的也是图形,在最后得出组的大小的时候非常麻烦,而且Card还需要一个引用数组或者ArrayList来储存以比较大小和排序,所以如果求的是组的大小,应该由Card来实现这个接口,那么在最后得出比大小结论的时候和输出的时候就比较方便
三:踩坑心得
最主要的踩坑心得来自于电梯程序设计和字符串捕获。
前者由于对多线程不了解,导致电梯在判断的时候总是无限上下循环。线程安全是一个重要的bug来源。因此在检查bug时,一定要注意对共享对象的访问。为了方便检查,可以把所有对共享对象的访问放到同一个类里,只检查这一个类就好。而且电梯的个数有且仅有一个,不可以在测试类中创建对象,而应该在电梯类这个本身的类中创建实例,然后在测试类或者其他类中引用就可以了,这样既可以保证线程安全,又可以保证实例唯一性。
后者由于只学了基础的正则表达式,所以全是坑,每次捕获都是无条件捕获,前面的修饰符根本就识别不了
四:Bug调试
在确定bug存在的范围的时候,用F9设置断点,然后再测试,用f8一步一步直到错误点,在错误点后设置暂停,然后看错误提示,如果无法调整,就直接捕获这个错误然后跳过,只要程序能运行就行
如果无法确定bug存在,就在不同的类的切入点打断点,然后一个一个试,找出问题类,然后按照上述的方法找到错误点
五;不足之处
- 多线程问题无法解决
- 一些简单算法没有掌握,导致运行时间超时
- 正则表达式掌握不足
- 刷题太少
六:心得
每次复习都是对之前的总结,每次复习都是一次进步和纠正,经常复习才是学习的重中之重。

浙公网安备 33010602011771号