阶段一 Vi,Java,Ant和Junit的自学报告
一、Vi
Vim编辑器是功能强大的跨平台文本文件编辑工具,其最重要也是最简单的开启方法是使用命 vim test.txt 来进入名称为test.txt的文件,进入后处于命令模式中,不能直接进行文本输入。
vim包括三种模式,分别是命令模式、插入模式、和底行模式,它们相应的功能如下:
模式 | 功能 |
---|---|
命令模式(默认) | 刚进入vim的时候,默认就是 命令模式,可以复制行,删除行等。 |
插入模式 | 可以输入内容 |
底行模式 | 将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号等 |
刚启动vim时会处于命令模式,需要输入命令“i”来进入插入模式,点击“Esc”键来退出插入模式,底行模式下的部分指令和功能如下:
指令 | 功能 |
---|---|
:w | 保存 |
:q | 退出 |
:wq | 保存并退出 |
:q! | 强制退出 |
:w! | 强制保存(管理员才有权限) |
二、Java
大二上学期我选修过java的课程,我们知道Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念。这里主要简单介绍下java与C语言和C++的部分区别:
- Java是一种纯面向对象的语言,C++也是面向对象语言,而C语言则是面向过程的语言。这两者的区别在于,作为面向对象语言的Java和C++,它们首先考虑的是如何构造一个对象,然后通过获得对象的信息来进行实现过程的控制或者输出,实现封装、继承、多态等面向对象思想,而作为面向过程语言的C语言,需要思考的是如何在过程中对输入进行运算处理得到输出,它的重点在于算法和数据结构的实现。相比之下,C++是在C的基础上添加了一些特性来进行优化的,所以它在面向对象这方面体现得不够完全,而Java则是比较完全的面向对象语言。
- 由于C++和Java是面向对象语言,它们有类和对象的概念,而C作为面向过程语言,没有类和对象的概念。
- Java相对其它两种语言,出现得稍微晚一点,它在弃除C和C++的一些缺陷上进行发展,使得Java语言的语句比较简明、平稳和安全,也更加好学一点,需要的环境相对简单。
- C和C++中含有指针这种数据类型,比较灵活,但是容易有操作失误的情况出现,导致环境不安全,而Java没有指针的算法,有效地避免了指针操作失误的问题,使程序运行更加安全。
- C++的一个特点是支持多重继承,允许多个父类派生出一个子类,功能比较强大,但是使用相对复杂,不容易实现,而Java则不支持多重继承,但它可以让一个类实现多个接口,这一点使Java既能实现C++多重继承的功能,又在一定程度上避免了多重继承带来的缺陷。
- C和C++语言需要通过程序释放内存资源,使程序的实现相对繁琐,并且有一定的不安全因素,比如释放已释放过的内存块或者释放未分配的内存块都会造成系统崩溃,但如果忘记释放不再使用的内存块则会消耗系统的资源。Java语言的优势是,它会自动将内存进行回收,如果一个对象使用后没有作用了,只要贴上表示删除的标签,后台就会在空闲时间将它删除掉,既节省了系统资源,又不会有容易导致系统容易崩溃的问题。
- 不同平台上的编译器对C语言或C++的简单数据类型可能会分配不同的位数,导致这两种语言的代码数据难以在不同平台上直接转移,而Java使用统一的IEEE标准,使得任何平台的编译器对Java的简单数据类型总是分配相同的位数,其代码数据可以在不同平台上直接进行转移。
- C语言和C++都支持函数的使用,C++相比C语言又多了类的使用,也就是C++可以混合使用函数和类方法,容易使程序变得混杂,而Java语言不能使用函数,程序必须被包括在类里面,也更体现了其完全面向对象的特性。
- C语言和C++没有字符串变量,它们在程序中使用NULL将字符串结束,而Java语言有字符串变量,使功能得到优化,并且可以排除一些运行错误。
- C语言和C++有预处理功能,预处理器是站在开发者的角度去设计的,对于编译者来说则相对麻烦,会使编译更加复杂,而Java不支持预处理,但是拥有和预处理功能类似的import语句。
- 在大程序的运行速度方面,Java则显得略逊一筹。C语言和C++的代码会被直接编译成二进制的形式,可以立即运行,而Java的代码需要在运行前先进行解释,如果程序比较大,可以明显看出Java的运行速度比C语言和C++慢得多。
三、Ant
Ant是一种基于Java的build工具。安装Ant可以选择在网上下载安装包,也可以直接使用命令 $sudo apt get install ant 来安装。
这里简要介绍下ant的常用标签和相应的含义:
标签 | 含义 |
---|---|
<project> | 工程的标签,一个buildfile里面只有一个 |
<target> | 要运行的功能或任务 |
<javac> | 编译操作,和命令行的javac相同 |
<java> | java的运行命令 |
<classpath> | 与<javac> 的classname属性一样 |
<junit> | junit单元测试 |
<path> | 一般用来设置常用的路径或文件包,在<junit> 标签里的<classpath> 下使用则为依赖包 |
<property> | 设置常用的路径或文件包 |
四、Junit
Junit是一个单元测试工具,在编写的过程中要单独编写测试类,通过对比执行结果与预期结果的差异,来判断是否有bug。
在完成本次任务时,如果没有使用eclipse,则需要下载一个junit-4.9.jar文件,跟HelloWorld.java、HelloWorldTest.java这两个文件放在同一个目录下。
以下是我这两个文件的代码。
HelloWorldTest.java:
import static org.junit.Assert.*;
import org.junit.Test;
public class HelloWorldTest {
public HelloWorld helloworld = new HelloWorld();
@Test
public void testHello() {
helloworld.hello();
assertEquals("Hello World!", helloworld.getStr());
}
}
HelloWorld.java:
import java.util.*;
public class HelloWorld {
String str;
public void hello() {
str = "Hello World!";
}
public String getStr() {
return str;
}
}
在该目录下打开终端,执行以下两条指令即可看到执行结果。
javac -classpath .:junit-4.9.jar HelloWorldTest.java
java -classpath .:junit-4.9.jar -ea org.junit.runner.JUnitCore HelloWorldTest