1.Vi的学习:
1.1 安装vi
ubuntu默认安装了Vi,如果没有安装,在命令行使用如下命令进行安装:
sudo apt-get install vim
出现确认的时候,输入y确认就行。
1.2 常用命令和使用
1.2.1 vi的工作模式
(1)命令模式:使用vi打开一个文件首先进入命令模式,是使用vi的入口,通过命令对文件进行常规的编辑操作,如:定位、复制、粘贴、翻页、删除等。
(2)末行模式:用于执行保存、退出等操作。要退出vi,需要在末行模式下输入命令,末行模式是vi的出口。(在命令模式下按”:"便进入末行模式,可通过相应命令执行相应的结果,按"Esc"便可退回到命令模式)
命令如下:
命令 | 功能 |
---|---|
w | 保存 |
q | 退出,若有更改没保存不允许 |
q! | 强制退出,不保存直接退出 |
wq | 保存并退出 |
x | 保存并退出 |
(3)编辑模式:用于正常的文字编辑。(在命令模式下按"i"便可进入编辑模式,按"esc"便可退回到命令模式)
1.2.2 vi打开文件
命令:
vi filename //打开filename文件
1.2.3 vi进行复制、粘贴
在命令行模式下:
yy //将当前行复制到缓存区
nyy //将当前行向下n行复制到缓冲区
yw //复制从光标开始到词尾的字符
nyw //复制从光标开始的n个单词
y^ //复制从光标到行首的内容
y$ //复制从光标到行尾的内容
p //粘贴剪切板里的内容在光标后(小写)
P //粘贴剪切板里的内容在光标前(大写)
2.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的自学总结:
一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。在运行一个Java程序时,首先运行main方法,main相当于为Java程序的入口。Java提供了8种基本类型:byte,short,int, long, float,double, boolean, char;还提供了封装好的多个常用类,String,Number,Math。而Java的运算符,循环结构,条件语句等与C++相差不大,但在对象和类这方面有不小的差别。
3.Ant的学习:
3.1 Ant的安装
在命令行输入如下命令:
sudo apt install ant
安装完成后,使用如下命令查看是否成功:
ant -version
结果:
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基本元素:
- project元素:
project元素是Ant构件文件的根元素,Ant构件文件至少应该包含一个project元素,否则会发生错误。在每个project元素下,可包含多个target元素。project元素包含多个属性:
1)name属性:用于指定project元素的名称。
2)default属性:用于指定project默认执行时所执行的target的名称。
3)basedir属性:用于指定基路径的位置。该属性没有指定时,使用Ant的构件文件的附目录作为基准目录。
- target元素:它为Ant的基本执行单元,它可以包含一个或多个具体的任务。多个target可以存在相互依赖关系。它有如下常用属性:
1)name属性:指定target元素的名称,这个属性在一个project元素中是唯一的。我们可以通过指定target元素的名称来指定某个target。
2)depends属性:用于描述target之间的依赖关系,若与多个target存在依赖关系时,需要以“,”间隔。Ant会依照depends属性中target出现的顺序依次执行每个target。被依赖的target会先执行。
- property元素:该元素可看作参量或者参数的定义,project的属性可以通过property元素来设定,也可在Ant之外设定。若要在外部引入某文件,例如build.properties文件,可以通过如下内容将其引入:<property file=” build.properties”/>
3.3 Ant构建Java工程HelloWorld:
安装如下目录,新建文件夹和文件:
|__HelloWorld
|__build
|__classes
|__HelloWorld.class
|__src
|__HelloWorld.java
|__build.xml
HelloWorld.java:代码没变。
build.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorld" default="run">
<!-- essential properties to refer to -->
<property name="build.classes.dir" location="build/classes"/>
<property name="src.dir" location="src" />
<!-- target is a task, can build, change directory, Junit and so on -->
<!-- clean up the class files that compiled last time -->
<target name="clean">
<delete dir="${build.classes.dir}" />
<mkdir dir="${build.classes.dir}"/>
</target>
<target name="compile" depends="clean">
<javac srcdir="${src.dir}" destdir="${build.classes.dir}" classpathref="compile.path" includeantruntime="true">
</javac>
<javac srcdir="${test.dir}" destdir="${build.classes.dir}" classpathref="compile.path" includeantruntime="true">
</javac>
</target>
<!-- auto run after a compilation -->
<target name="run" depends="compile">
<java fork="true" classname="HelloWorld">
<classpath path="${build.classes.dir}" />
</java>
</target>
</project>
运行ant命令:
3.4 Ant总结:
Ant的使用是为了方便我们部署和编译Java工程,其作用就相当于makefile对于c和c++的作用。常见的模板便是上面的HelloWorld的build.xml。在使用过程中,遇到一个问题便是:在运行ant命令后,java程序有运行,但是GUI界面没有弹出,在咨询TA后解决,需要在Java运行的目标内增加fork = true,这个属性。这是因为Ant默认行为是调用运行Ant本身的JVM,然而如果你想要单独地调用编译器,则需要设置fork属性为true。
4.Junit的学习:
4.1 Junit的安装:
下载junit-4.10.jar包,并在编译时加入该依赖
4.2 Junit和Ant联合使用检测HelloWorld:
按照如下目录存放文件:
|__HelloWorld
|__build
|__classes
|__HelloWorld.class
|__lib
|__junit-4.10.jar
|__src
|__HelloWorld.java
|__test
|__HelloWorldTest.java
|__build.xml
HelloWorldTest.java内容如下:
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
public class HelloWorldTest{
PrintStream console = null;
ByteArrayOutputStream bytes = null;
HelloWorld te;
@org.junit.Before
public void setUp() throws Exception {
te = new HelloWorld();
bytes = new ByteArrayOutputStream();
console = System.out;
System.setOut(new PrintStream(bytes));
}
@org.junit.After
public void tearDown() throws Exception {
System.setOut(console);
}
@Test
public void evaluatesExpression() {
String arge[]=new String[50];
te.main(arge);
String s1 = new String("Hello World!\n");
assertEquals(s1, bytes.toString());
}
}
build.xml文件内容修改如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorld" default="junit">
<!-- essential properties to refer to -->
<property name="build.classes.dir" location="build/classes"/>
<property name="src.dir" location="src" />
<property name="test.dir" location="test" />
<property name="lib.dir" location="lib" />
<path id="compile.path">
<pathelement location="${lib.dir}/junit-4.10.jar" />
</path>
<!-- target is a task, can build, change directory, Junit and so on -->
<!-- clean up the class files that compiled last time -->
<target name="clean">
<delete dir="${build.classes.dir}" />
<mkdir dir="${build.classes.dir}"/>
</target>
<target name="compile" depends="clean">
<javac srcdir="${src.dir}" destdir="${build.classes.dir}" classpathref="compile.path" includeantruntime="true">
</javac>
<javac srcdir="${test.dir}" destdir="${build.classes.dir}" classpathref="compile.path" includeantruntime="true">
</javac>
</target>
<!-- auto run after a compilation -->
<target name="run" depends="compile">
<java fork="true" classname="HelloWorld">
<classpath path="${build.classes.dir}" />
</java>
</target>
<!-- tests the methods in HelloWorld.java -->
<target name="junit" depends="compile">
<junit printsummary="true">
<classpath path="${build.classes.dir}">
<path refid="compile.path" />
</classpath>
<test name="HelloWorldTest" />
</junit>
</target>
</project>
运行ant命令进行测试:
4.3 Junit使用总结:
Junit 是为了检测代码中所定义的各类函数是否有 bug。在利用 Junit 进行测试时有如下说明:
1、JUnit4 不要求必须继承自 TestCase,而且测试方法不必以 test 开头,只要@Test来描述即可;
2、常用注解:
@Test:把一个方法标记为测试方法
@Before:每一个测试方法执行前自动调用一次
@After:每一个测试方法执行完自动调用一次
@BeforeClass:所有测试方法执行前执行一次,在测试类还没有实例化就已经被加载,所以用static修饰
@AfterClass:所有测试方法执行完执行一次,在测试类还没有实例化就已经被加载,所以用static修饰
@Ignore:暂不执行该测试方法
3、@Test的两个属性:
excepted:用来测试异常的。
timeout:用来测试性能的,就是测试一个方法能不能在规定时间内完成。
4、所有测试方法返回类型必须为void且无参数。
Junit测试也可与Ant结合,如上面的所示,详细的方法参看下面博客:
使用Ant进行Junit测试