Lab2的要求看得我一头雾水,又是接口又是不变量的,往日中学时代被老师手把手教的日子果真一去不复返了,不过这种大学的学习方式可能更接近于以后人生中的独自上下求索的艰辛历程吧……
Interface 接口
根据百度百科
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。
静态方法和非静态方法
在外部调用静态方法时,可以使用”类名.方法名”的方式,也可以使用”对象名.方法名”的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。
constructor(创造器)
构造器最大的用处就是在创建对象时执行初始化,当创建一个对象时,系统会为这个对象的实例进行默认的初始化。如果想改变这种默认的初始化,就可以通过自定义构造器来实现。例如软件构造实验中需要写一个ConcreteEdgesGraph1
2
3
4
5
6 // TODO constructor
/**
* construct a empty graph
*/
public ConcreteEdgesGraph() {
}
Assert (断言)
(1)assert [boolean表达式]
如果表达式为true,程序继续执行,若为false则抛出AssertionError,并终止执行。
(2)assert [boolean 表达式:错误表达式(日志)]
如果表达式为true,程序继续执行。如果为false,则程序抛出java.lang.AssertionError,输出[错误信息]。
Iterator迭代器
就是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露该对象容器的内部细节。详见迭代器
而对应于SC实验中,对边的遍历涉及到迭代器的使用1
2
3
4
5List<Edge> iteratorEdges = new ArrayList<Edge>(edges);
for(Edge i : iteratorEdges) {
if(i.getSource().equals(vertex) || i.getTarget().equals(vertex))
edges.remove(i);
}
声明
简而言之就是可以存在这个东西,如果没有此声明的话会出错-没有实例化。1
2private final String label;
private final Map<String, Integer> toVertex; //声明存在合法变量
对应于以下的实例化1
toVertex = new HashMap<String, Integer>();
泛型
Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全监测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
在软件工程课程里面Poetic WalksP3应用到了泛型。1
2
3
4class Vertex<L> {
private final L label;
private final Map<L, Integer> toVertex; //声明存在合法变量
}