BLOG-2

一、前言

在这三次题目集中,题量越少,题目越难。这三次题目集所涉及的知识较之前三次题目集与java语言关系更加深,所以难度也要比前三次更难。在这三次题目集中涉及到的知识内容有正则表达式、类的定义与引用、类的继承、接口、字符串的操作、arraylist的应用等。

二.设计与分析

①题目集4(7-2)、题目集5(7-4)两种日期类聚合设计的优劣比较

第四次题目集7-2和第五次题目集7-4两种日期类聚合设计的比较:
日期聚合(一)中在设计Day、Year、Month、DateUtil等类的时候,Month的成员变量中含有Year类型的变量,Day中含有Month类型的成员变量,DateUtil类中含有Day类型的成员变量;
而在日期聚合(二)中,Day类、Month类、Year类之间互不相干,只在DateUtil类含有其它三个类的类型变量,相比较之下,日期类聚合设计(二)的耦合度要更加低,在需要修改Day、Month、Year类其中一项时只需要另外在DateUtil中做出相应修改即可,而在日期类聚合(一)中,若是需要做出修改则其它也包含该类变量的类也要做出修改,相比较于日期类聚合(二)所需要做出的修改要更多,故日期类聚合(二)要更加利于后期代码的修改。此外聚合(二)在DateUtil类中调用Month、Year类中成员变量或者方法也更加简单,聚合(一)比较容易混淆。
类图对比如下:

从两类图中可以看出,日期类聚合(一)中DateUtil、Day、Month类每个类都和其下面定义的所有类都有关联,而在聚合(二)中Day、Month、Year类都分别只和DataUtil类有关联,它们三个类之间互不相干。

②题目集4(7-3)、题目集6(7-5、7-6)三种渐进式图形继承设计的思路与技术运用(封装、继承、多态、接口等)
7-3
创建若干数量的三角形、矩形、圆形并输入相应的半径,边长等,对得到每个图形的面积再对得到的所有面积进行排序。首先定义一个抽象类Shape之后再分别定义Circle、Triangle、Rectangle类均继承与Shape类,在类中定义所继承的抽象类中的抽象方法,之后在主函数中编写相应的代码,将对面积排序放在Main函数中。

在这两道题目,我能感觉到继承作用最明显,大大减少了代码量,并且使得代码的可读性和可维护性大大提高了许多,同时由于继承使的拥有相同属性和方法的代码内容不用重新写即可通过从父类哪里继承就可以使用,从而大大减少了代码的重复率、


③对三次题目集中用到的正则表达式技术的分析总结
正则表达式常用的知识点总结:

. 匹配除换行符以外的任意字符

\w 匹配字母或数字或下划线

\s 匹配任意的空白符

\d 匹配数字

\b 匹配单词的开始或结束

^ 匹配字符串的开始

$ 匹配字符串的结束

  • 重复零次或更多次
  • 重复一次或更多次

? 重复零次或一次

n 重复n次

{n,} 重复n次或更多次

{n,m} 重复n到m次

\W 匹配任意不是字母,数字,下划线,汉字的字符

\S 匹配任意不是空白符的字符

\D 匹配任意非数字的字符

\B 匹配不是单词开头或结束的位置

[^x] 匹配除了x以外的任意字符

[^asdf] 匹配除了asdf这几个字母以外的任意字符
Pattern 类:

pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

Matcher 类:

Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

public boolean lookingAt()
尝试将从区域开头开始的输入序列与该模式匹配。

public boolean find()
尝试查找与该模式匹配的输入序列的下一个子序列。

public boolean find(int start)
重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。

public boolean matches()
尝试将整个区域与模式匹配。

public String replaceAll(String replacement)
替换模式与给定替换字符串相匹配的输入序列的每个子序列。

public String replaceFirst(String replacement)
替换模式与给定替换字符串匹配的输入序列的第一个子序列

④题目集5(7-4)中Java集合框架应用的分析总结

题目集5(7-4)
题目主要使用了正则表达式,就是对正则表达式的考察。使用的String[]数组,储存String类型,还是用了Int[]数组,还是用了stringBulider,和String最大的区别就是,字符串可变,但是必须通过appeng进行赋值。次次题目就是将53个关键子字符全部储存在String[]中去,然后将输入的源代码分割成一个一个的单词,然后去匹配string[],看是否存在于sring[]中,如果存在,即表示是关键子,让后是对应位置的int[]加一。

三、采坑心得

正则表达式不够熟练,让我吃了不少苦头。
在很多特殊输入的情况下,需要多次判断猜测会出现的格式,比如是0 0 0 0 还是一行空格
super()构造方法必须出现在子类构造方法的第一行。
由于super()和this()都要求在方法的第一行,所以不能同时在一个方法中使用。
子类中通过super关键字调用超类的成员
一个类中没有定义构造器,会生成一个默认无参构造器,否则不会
多态机制使得对象变量可以引用子类的对象,但是不能引用超类的对象

四、改进建议

java最核心的核心就是面向对象思想,只要能够掌握好面向对象这一核心概念,就能学得更好
通过这几次的作业,我觉的自己对正则表达是的使用更加灵活了,对正则表达式的理解也更加深入。这是我最大的收获,
其次就是对类的使用也更加灵活了,从最开始的不知道怎么使用,不知道生么时候使用,不知道在哪里使用,
到现在十分习惯使用,并且充分理解到了继承,类的好处,继承可以大大减少代码的重复性
老师的教学方法很有趣,并不是死讲语法,而是对思想和原理着重开发,让我们学得更加深入,而非浅尝辄止。
与此同时,作业的布置也比较合理。

慕课的学习是基础,课堂的学习是升华。

posted @ 2021-11-13 14:33  触碰雨  阅读(67)  评论(0编辑  收藏  举报