Blog作业2
(1) 前言:一:聚合关系:聚合是一种特殊的关联形式。
它是两个类之间的关系,如关联,但它是一个方向关联,并且这意味着它是非常严格地是单向关联的。例如学生和他的地址之间就存在一种聚合关系。
它代表了一种HAS-A关系。补充一下,聚合是一种关联关系,是很强的关联关系。
二:正则表达式:正则表达式定义了字符串的模式。
正则表达式可以用来搜索、编辑或处理一些文本,这是非常方便的。
正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别,我们这里只聊java.
java.util.regex 包主要包括以下三个类: (1)Pattern 类(2) Matcher 类(3) PatternSyntaxException:这是一种非强制性异常类,用他可以表示Java中的语法错误。
三:Java的封装性: 成员变量和其中的成员方法的定义都是包装于类定义之中;类的定义可以视为将构成类的成员变量和方法全都封装起来;这就是最宏观的封装。到了这里,我们必须要谈一谈修饰词了,正是有这些修饰词的存在,类与类之间的访问才变得不是随意的。如;private 就是让类有了封装性,他的存在就只允许本类访问他,别的休想。这样就完成了封装性。还有Java的public 这个是都可见的。既然这样,那这样做是否有他的道理呢,是否有一些好处呢?答案是肯定的。封装性可以避免一些不必要的麻烦
四:Java的继承:
1.从子类父类之间的关系理解
子类继承父类可以使用父类中所有的属性和方法,注意是所有哦。
子类继承父类后可以声明自己的属性和方法,所以严格上说继承是对类功能的补充吧,有错请指正。
2.继承的单词:extends 如 CLASS A EXTENDS B
3.一个子类只能继承一个父类,看清楚。但是一个父类却可以同时被多个子类继承
五:接口:接口就是一个约定成俗的规范,就好比于硬件上面的接口,在电脑主板上的PCI插槽的规范就类似于Java接口。接口就是某个事物对外提供的一些功能的一些说明。我们还可以利用接口实现多态功能,同时接口也弥补了Java单一继承的弱点,也就是类可以实现多个接口的功能。接口有点类似抽象类,但却是抽象类的变体。
(2) 设计与分析:重要代码如下;
public int getYear() {
return year;
}
public int getMonth() {
return month;
}
public int getDay() {
return day;
}
public DateUtil getNextNDays(int n)
{
int year = this.year;
int month = this.month;
int day = this.day;
for (int i = 0; i < n; i++) {
day++;
if (day > getDayOfMonth(year, month)) {
month++;
day = 1;
if (month > 12) {
month = 1;
year++;
}
}
}
return new DateUtil(year, month, day);
}
//前n 天的日期
public DateUtil getPreviousNDays(int n)
{
int year = this.year;
int month = this.month;
int day = this.day;
for (int i = 0; i < n; i++) {
day--;
if(day < 1) {
month--;
if (month < 1) {
year--;
month = 12;
}
day += getDayOfMonth(year, month);
}
}
return new DateUtil(year, month, day);
}
public boolean compareDates(DateUtil date)
{
if (this.year > date.year) {
return true;
}
if (this.year == date.year) {
if (this.month > date.month) return true;
if (this.month == date.month) {
if (this.day >= date.day) return true;
}
}
return false;
}
private static final int[] mon = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
public int getDaysofDates(DateUtil date)
{
DateUtil dateUtil1 = this;
DateUtil dateUtil2 = date;
if (this.compareDates(date)) {
dateUtil1 = date;
dateUtil2 = this;
}
int days;
int leapYearNum = 0;
for (int i = dateUtil1.getYear(); i < dateUtil2.getYear(); i++) {
if (isLeapYear(i)) {
leapYearNum++;
}
}
days = 365 * (dateUtil2.getYear() - dateUtil1.getYear()) + leapYearNum;
int d1 = mon[dateUtil1.getMonth() - 1] + dateUtil1.getDay() + (dateUtil1.getMonth() > 2 && isLeapYear(dateUtil1.getYear()) ? 1 : 0);
int d2 = mon[dateUtil2.getMonth() - 1] + dateUtil2.getDay() + (dateUtil2.getMonth() > 2 && isLeapYear(dateUtil2.getYear()) ? 1 : 0);
return days - d1 + d2;
}
public String showDate()
{
return year + "-" + month + "-" + day;
}
public boolean equalTwoDates(DateUtil date)
{
if (date != null) {
if (year == date.year && month == date.month && day == date.day) {
return true;
}
}
return false;
}
}
这里:我主要看题目集5日期的类图:
题目集5的聚合的代码复用性更高,提高了效率。
2.题目集4的图形继承分析,用class Ball,class rectangle,class Circle 都是继承shape 类。这里shape是父类,也是抽象类。
题目集6的7-5,7-6的图形的继承类中class Ball,class rectangle,class Circle 都是继承shape 类。这里shape是父类,也是抽象类,没有具体的方法。其中每一个类都对父类的信息做出不同的反应。如在输入数据的个数,判断数据是否合法的方法,求面积的方法各有所不同。
3.正则表达式的技术分析:题目集4的水文检验题:
需要采用分隔合法,。对各数据进行分别进行合法检验,如果返回值为真进行,加入总流量中。
还有字符的操作:
对于输入的字符串我们可以这样处理,第一我们要检验字符串非空,然后才好进行下一步操作,如:通过判断字符串长度是否为0,接下来,可以选择跳出此处循环,或继续执行下一行代码,这就是这道题的主要思路,接下来老老实实的完成代码就行了。
题目集5统计关键字出现的次数:设计好相应的类来统计关键字,还要注意注释部分的不要统计,这里配合循环,利用正则表达式就可以了,我的代码是:
for( int i = 0;i<sk.length;i++)
{
for( j=0;j<key.length;j++)
if(sk[i].equals(key[j]))//sk 是自己设的数组,这里就不详细解释了
{ flag=map.get(key[j]);
map.put(key[j],flag+1);
}
4.题目集5(7-4)中Java集合框架应用的分析总结 :Java集合框架应用,使得我们可以翻遍的使用接口与类,这样一来我们的效率就得到大大的提升。
(3) 采坑心得:数据的存入需要注意:如
还有:
需要注意语法上的错误,if 语句有错。
(4) 改进建议:题目集5,6的代码复用性还有待提高,但也不必过于追求。
(5) 总结:在这三次题目集的学习过程中,我了解了Java的继承,多态,接口的使用,概念,还有如何调试代码,具体的就是接口的使用:接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误,这个需要特别注意!不足之处就是正则表达式的使用不熟练,存在诸多问题,还需继续学习。接下来的学习,我希望作业,课程难度不要设的那么高,主要是为知识的运用服务。