7-10周JAVA学习总结

  • 前言

这段时间,我们学习了接口、泛型、Builder、Bridge Patte、软件测试技术、Set、Map、链表、Lambda、Stream、JavaFX等内容。

接口: 接口是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

  • 接口不能用于实例化对象。
  • 接口没有构造方法。
  • 接口中所有的方法必须是抽象方法。
  • 接口不能包含成员变量,除了 static 和 final 变量。
  • 接口不是被类继承了,而是要被类实现。
  • 接口支持多继承。

泛型:泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法。

    泛型类型用于类的定义中,被称为泛型类。通过泛型可以完成对一组类的操作对外开放相同的接口。

    泛型类,是在实例化类的时候指明泛型的具体类型;泛型方法,是在调用方法的时候指明泛型的具体类型。

建造者(Builder)模式:使用场景:多个部件或者零件,都可以装配到一个对象中,但是产生的运行结果又相同。产品类非常复杂,或者产品类中调用顺序不同产生了不同的作用。初始化一个对象特别复杂,如使用多个构造方法,或者说有很多参数,并且都有默认值时。

Bridge Pattern(桥接模式):将抽象部分与它的实现部分分离,使它们都可以独立地变化。

软件测试技术:

黑盒测试BlackBox Testing

Input-> Process-> Output   (proccess看不见)

测试用例 TestCase

(1) 输入数据

(2) 预期输出结果

  1. 代码开发之后进行测试用例设计,进行测试:UDD UseCase
  2. 先设计测试用例,开发程序,然后测试:TDD

Set:Set是一种叫做集合的数据结构

  • 集合是由一组无序且唯一的项组成的
  • Set,类似于数组,但是成员的值都是唯一的,没有重复的值
  • Set本身是一个构造函数,用来生成Set数据结构的

Map:Map是一种叫做字典的数据结构

集合和字典的区别:
共同点:集合,字典可以存储不重复的值
不同点:集合是以[值,值]的形式存储元素,字典是以[键,值]的形式存储

Lambda表达式:

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。

Stream :是处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。

  • 直接阅读代码的字面意思即可完美展示无关逻辑方式的语义
  • Stream流把真正的函数式编程风格引入到Java中
  • 惰性求值,流在中间处理过程中,只是对操作进行了记录,并不会立即执行,需要等到执行终止操作的时候才会进行实际的计算。
  • 不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。

 

  • 设计与分析

 

java如何传递泛型class java泛型接口继承泛型类_泛型

在该题目中,需要学会运用抽象类、继承与多态、接口。

其中Circle类、Rectangle类、Trapezoid类、Triangle类继承于Shape类。子类需要继承抽象类中的抽象方法,每个子类的实现方法不同,体现了多态的意义。例如:

java如何传递泛型class java泛型接口继承泛型类_多态_02

Comparable 接口的应用: 

需要实现 Comparable 接口中的 CompareTo()方法

java如何传递泛型class java泛型接口继承泛型类_java如何传递泛型class_03

to string方法:

java如何传递泛型class java泛型接口继承泛型类_链表_04

ArrayList的应用:

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口。

 

在图形类的改进题中,需要多定义几个ArrayList对象。

java如何传递泛型class java泛型接口继承泛型类_泛型_05

 

链表:

链表是一个线性结构,但是存储的数据可以是非线性的。链表由一个个子节点构成,每个节点有两个部分:数据域和指针域,数据域就是实际存储数据的,指针域可以有一个和两个,单链表就是单个指针域指向后一个节点,双链表就是节点有两个指针域,分别指向前一个和后一个节点。

list方法 遍历思想:从最小不间断的考虑到最大--->链表为0,1,2,3...n个节点分别要做什么

 

点与线(类设计):

java如何传递泛型class java泛型接口继承泛型类_多态_06

在该题目中,需要设计Point类与Line类,体现了JAVA设计原则中的单一职责原则。

其中,输出格式保留两位小数可以用String类中的方法。

java如何传递泛型class java泛型接口继承泛型类_泛型_07

 点线面问题重构(继承与多态):

java如何传递泛型class java泛型接口继承泛型类_多态_08

在该题中,需要对上一题中的类设计进行改进,添加抽象类Element,并定义一个Element类的引用,分别使用该引用调用以上四个对象的display()方法,从而实现多态特性。

java如何传递泛型class java泛型接口继承泛型类_链表_09

点线面问题再重构(容器类)

java如何传递泛型class java泛型接口继承泛型类_多态_10

在点线面问题重构(继承与多态)的基础上,本题添加了容器概念ArrayList的应用,添加了GeometryObject类。

 

  • 采坑心得

在这些程序设计题目中,曾遇到了许多困难,例如在图形类设计中,我开始时并未注意to string方法,导致输出结果乱码,后面再对to string方法进行补充,问题才得以解决。

java如何传递泛型class java泛型接口继承泛型类_链表_04

还有Comparable 接口中的 CompareTo()方法,一开始并不清楚Compare To方法的使用,后面查询资料后得以了解。

java如何传递泛型class java泛型接口继承泛型类_java如何传递泛型class_03

 

 

总结

在今后的学习中,我应该更自主地学习JAVA内容,并对自己认为较难的部分(如链表)的设计多复习巩固,去搞清楚每一个知识点。并且在上课的过程中,应该更认真地进行学习,课后也要及时进行复习,对课内内容进行练习。

在这几周的学习中,我对JAVA有了更深一步的了解与学习,我学习了接口、泛型、Builder、Bridge Patte、软件测试技术、Set、Map、链表、Lambda、Stream、JavaFX等内容。其中,对于设计模式和链表的设计需要多加复习,并通过练习加深理解,Lambda、Stream、JavaFX部分的内容需要自己在日后学习中更深一步的了解。