Vi、Java、Ant、Junit自学报告
一、 Vi
1.1 Vi的定义
Vi是Linux系统自带的命令行文本编辑器。如果系统没有安装,可以使用如下命令安装:
sudo apt-get install vim
1.2 Vi的三种模式
Vi有命令行、插入、底行三种模式。
模式 | 作用 |
---|---|
命令模式 | 控制屏幕光标的移动,字符、字或行的删除,移动复制某区段等操作。同时也是由这个模式进入其他模式的。基本命令有:[i] 进入插入模式;[G]从文末进入插入模式;[0]从开头进入插入模式。 |
插入模式 | 只有在这个模式下才能进行文字输入。基本操作:[ESC]回到命令模式。 |
底行模式 | 将文件保存或退出 vi,也可以设置编辑环境,如寻找字符串、列出行号等 |
1.3 Vi的基本操作
1.3.1 打开文件
在Linux终端输入Vi myfile便可以用Vi打开文件名为myfile的文件,此时在命令行模式。
1.3.2 输入文字
在1.3.1的命令行模式下按”i”键,进入插入模式,,可以对文件进行编辑。
1.3.3 删除文字
在1.3.2的插入模式下,按”ESC”键回到1.3.1的命令行模式,可以删除文字。
1.3.4 退出编辑
在1.3.1的命令行模式下,按”:”(冒号)进入低行模式,再输入
指令 | 作用 |
---|---|
w filename | 文件以filename为名存盘 |
wq | 存盘并退出Vi(存放文件的位置为一般在你的用户目录下,即$HOME 或~/,同时可以在vim中用命令:pwd查看当前的工作目录。) |
q! | 不存盘强制退出Vi |
1.4 总结
Vi作为最初代的编辑器确实已经达到了一个编辑器该有的功能,但是由于习惯了使用Sublime-Text,所以在编辑代码时候会比较麻烦。
二、Java
2.1 Java环境的配置与安装
在命令行输入如下命令:
sudo apt-get install default-jre
sudo apt-get install default-jdk
进行安装,安装结果通过下面的命令来验证是否安装成功且环境变量配置成功:
java -version
javac -version
2.2 Java的第一个程序:HelloWorld
HelloWorld.java文件内容如下:
public class HelloWorld {
//The first java program
public static void main(String []args) {
System.out.println("Hello World!");
}
}
在该文件所在目录下,按照如下命令进行编译运行:
javac HelloWorld.java
java HelloWorld
运行结果如图所示:
2.3 总结
-
每次需要用到输入功能时候需要在Java文件开头加上import java.util.Scanner,并且在需要调用输入功能的地方新建一个Scanner实例;
-
主类名必须与文件名相同并且首字母大写
-
需要输入字符串时候使用input.next()函数 ; 而输入整数时候必须使用input.nextInt()函数 ; 否则会产生类型不匹配的问题。
-
Java提供自动类型转换,比如字符串加数字输出时候,系统会先将数值转变为字符串随后输出。
-
属于面向对象的编程,Java中并不存在指针,所以在寻址时候就只能按照数组或者容器的地址来进行一次次的顺序访问。
-
在运行一个Java程序时,首先运行main方法,main相当于为Java程序的入口。Java提供了8种基本类型:byte,short,int, long, float,double, boolean, char;还提供了封装好的多个常用类,String,Number,Math
三、 Ant
3.1 Ant的介绍
Ant是一个类似于makefile的集成管理工具,帮助开发者更好的管理Java项目。Ant 的构件文件基于 XML 编写,默认名称为 build.xml。
安装ant在命令行输入如下命令:
sudo apt install ant
安装完成后,使用如下命令查看是否成功:
ant -version
3.1.1 Ant的基本架构
- src存放文件。
- class存放编译后的文件。
- lib存放第三方JAR包。
- dist存放打包,发布以后的代码。
3.1.2 Ant的常用属性
3.1.2.1 project 标签
project 元素是 Ant 构件文件的根元素,Ant构件文件至少应该包含一个 project 元素,否则会发生错误。在每个 project 元素下,可包含多个 target 元素。project有如下属性:
- name 用于指定 project 元素的名称。
- default 表示默认的运行目标,这个属性是必须的。
- basedir 用于指定基路径的位置。该属性没有指定时,使用 Ant 的构件文件的附目录作为基准目录。
3.1.2.2 target 标签
它为 Ant 的基本执行单元,它可以包含一个或多个具体的任务。多个 target 可以存在相互依赖关系。它有如下属性:
-
name 指定 target 元素的名称,这个属性在一个 project 元素中是唯一的。我们可以通过指定 target元素的名称来指定某个 target。
-
depends 用于描述 target 之间的依赖关系,若与多个 target 存在依赖关系时,需要以“,”间隔。Ant 会依照 depends 属性中 target 出现的顺序依次执行每个target。被依赖的 target 会先执行。
-
if 用于验证指定的属性是否存在,若不存在,所在 target 将不会被执行。
-
unless 该属性的功能与 if属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在 target 将会被执行。
-
description 该属性是关于 target 功能的简短描述和说明。
-
target执行顺序
Ant的depends属性指定了target的执行顺序。Ant会依照depends属性中target出现顺序依次执行每个target。在执行之前,首先需要执行它所依赖的target。程序中的名为run的target的depends属性compile,而名为compile的target的depends属性是prepare,所以这几个target执行的顺序是prepare->compile->run。一个target只能被执行一次,即使有多个target依赖于它。如果没有if或unless属性,target总会被执行。
3.1.2.3 property 标签
该元素可看作参量或者参数的定义,project 的属性可以通过 property元素来设定,也可在 Ant 之外设定。
3.1.2.4 mkdir标签
该标签用于创建一个目录,它有一个属性dir用来指定所创建的目录名,其代码如下:
<mkdir dir="${class.root}"/>
通过以上代码就创建了一个目录,这个目录已经被前面的property标签所指定。
3.1.2.5 jar标签
该标签用来生成一个JAR文件,其属性如下:
- destfile 表示JAR文件名
- basedir 表示被归档的文件名。
- includes 表示别归档的文件模式。
- exchudes 表示被排除的文件模式。
3.1.2.6 javac 标签
该标签用于编译一个或一组java文件,其属性如下:
- srcdir 表示源程序的目录。
- destdir 表示class文件的输出目录。
- include 表示被编译的文件的模式。
- excludes 表示被排除的文件的模式。
- classpath 表示所使用的类路径。
- debug 表示包含的调试信息。
- optimize 表示是否使用优化。
- verbose 表示提供详细的输出信息。
- fileonerror 表示当碰到错误就自动停止。
3.1.2.7 java 标签
该标签用来执行编译生成的.class文件,其属性如下:
- classname 表示将执行的类名。
- jar 表示包含该类的JAR文件名。
- classpath 所表示用到的类路径。
- classpathref 是对某处定义的一个类路径的引用。
- fork 表示在一个新的虚拟机中运行该类。
- failonerror 表示当出现错误时自动停止。
- output 表示输出文件。
- append 表示追加或者覆盖默认文件。
3.1.3 Ant 数据类型
3.1.3.1 Path 类型
Path元素用来表示一个类路径,不过它还可以用于表示其他的路径。在用作揖个属性时,路经中的各项用分号或冒号隔开。在构建的时候,此分隔符将代替当前平台中所有的路径分隔符,其拥有的属性如下。
- location 表示一个文件或目录。Ant在内部将此扩展为一个绝对路径。
- refid 是对当前构建文件中某处定义的一个path的引用。
- path表示一个文件或路径名列表。
3.1.3.2 Fileset类型
fileset 数据类型定义了一组文件,并通常表示为fileset元素。不过,许多ant任务构建成了隐式的fileset,这说明他们支持所有的fileset属性和嵌套元素。其属性如下:
- dir表示fileset 的基目录。
- casesensitive的值如果为false,那么匹配文件名时,fileset不是区分大小写的,其默认值为true。
- defaultexcludes 用来确定是否使用默认的排除模式,默认为true。
- excludes 是用逗号分隔的需要派出的文件模式列表。
- excludesfile 表示每行包含一个排除模式的文件的文件名。
- includes 是用逗号分隔的,需要包含的文件模式列表。
- includesfile 表示每行包括一个包含模式的文件名。
3.2 Ant初次尝试
新建一个文件夹:test,进入该目录,新建一个build.xml,内容如下:
<?xml version="1.0"?>
<project name="helloWorld">
<target name="sayHelloWorld">
<echo message="Hello, world!"/>
</target>
</project>
在该目录下运行ant sayHelloWorld:
3.3 Ant构建Java工程HelloWorld:
安装如下目录,新建文件夹和文件:
|__HelloWorld
|__build
|__classes
|__HelloWorld.class
|__src
|__HelloWorld.java
|__build.xml
HelloWorld.java:代码没变。
build.xml代码如下:
<?xml version="1.0"?>
<project name="antstudy" basedir=".">
<target name="clean">
<delete dir="build"/>
</target>
<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes"/>
</target>
<target name="run" >
<java classname="HelloWorld">
<classpath>
<pathelement path="build/classes"/>
</classpath>
</java>
</target>
运行ant命令:
3.4 总结
对Ant的学习也是费了一点功夫的,代码是比较好懂,但是在初次编译运行时候,出现了编译不通过的问题,后来通过询问班里已经完成该部分任务的同学,同学提示是第一行的defalut没有与前面name定义的名称的双引号隔开,导致了default属性被吞噬,所以产生编译错误。所以在实训的过程中,多与同学交流不要自己一个人钻进死胡同还是十分重要的。
四、Junit
4.1 Junit的安装:
JUnit是用来进行样例测试的。JUnit4 是 JUnit 框架有史以来的最大改进,其主要目标便是利用 Java5 的 Annotation 特性简化测试用例的编写。
云桌面已具备安装包,这里就不赘述。
4.2 Juni检测HelloWorld:
HelloWorldTest文件内容如下:
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());
}
}
4.3 Junit和Ant联合使用检测HelloWorld:
build.xml文件内容修改如下:
<?xml version="1.0" ?>
<project name="HelloWorld" default="run">
<path id="classpath">
<fileset dir="lib" includes="*.jar"/>
</path>
<target name="clean">
<delete dir="./build"/>
</target>
<target name="compile" depends="clean">
<mkdir dir="build/classes/"/>
<javac srcdir="src" destdir="build/classes/"/>
</target>
<target name="jar" depends="compile">
<mkdir dir="build/jar"/>
<jar destfile="build/jar/${ant.project.name}.jar">
<manifest>
<attribute name="Main-class" value="HelloWorld"/>
</manifest>
</jar>
</target>
<target name="run" depends="jar">
<java classname="HelloWorld">
<classpath>
<pathelement path="build/classes"/>
</classpath>
</java>
</target>
<target name="compile-test" depends="compile">
<javac srcdir="test" destdir="build/classes" classpathref="classpath"/>
</target>
<target name="test" depends="compile-test">
<mkdir dir="build/report"/>
<mkdir dir="build/test"/>
<junit>
<classpath>
<path location="build/classes"/>
<path refid="classpath"/>
</classpath>
<formatter type="xml"/>
<batchtest fork="yes" todir="build/test">
<fileset dir="build/classes" includes="*Test.class"/>
</batchtest>
</junit>
<junitreport todir="build/test">
<fileset dir="build/test">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="build/report"/>
</junitreport>
</target>
运行ant命令进行测试(由于一些问题Junit未能完整体现):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1svIzVyQ-1604936774058)(/api/users/image?path=7587/images/1602387144042.png)]
4.3 Junit使用总结:
Junit 是为了检测代码中所定义的各类函数是否有 bug。在利用 Junit 进行测试时有如下说明:
- JUnit4 不要求必须继承自 TestCase,而且测试方法不必以 test 开头,只要@Test来描述即可;
- 常用注解:
- Test:把一个方法标记为测试方法
- Before:每一个测试方法执行前自动调用一次
- After:每一个测试方法执行完自动调用一次
- BeforeClass:所有测试方法执行前执行一次,在测试类还没有实例化就已经被加载,所以用static修饰
- AfterClass:所有测试方法执行完执行一次,在测试类还没有实例化就已经被加载,所以用static修饰
- Ignore:暂不执行该测试方法
- Test的两个属性:
excepted:用来测试异常的。
timeout:用来测试性能的,就是测试一个方法能不能在规定时间内完成。 - 所有测试方法返回类型必须为void且无参数。