Vi,Java,Ant和Junit的自学报告
vi/vim编辑器
vi和vim都是linux系统中的编辑器,不同的是,vim比较高级,可以看作vi的升级版。vi用于文本编辑,但vim更适用于coding
vim的打开文件命令
- vim 文件路径 (打开文件进入命令模式)
- vim 数字 文件路径 (光标移动到指定行)
- vim +/关键词 文件路径 (高亮显示关键词)
vi/vim模式
基本上分为三种模式:
- 命令模式(command mode)
输入命令默认进入的模式在该模式下,我们无法对文本直接进行编辑,可以输入快捷键进行一些操作(删除行,复制粘贴等)
操作举例:光标移动到行首(shift+6
),行尾(shift+4
),首行(gg
),尾行(G
)等等操作
- 输入模式(Insert mode)
在该模式可以对文本进行内容编辑,在命令模式输入i,a等进入输入模式,除esc外可以进行任何的编辑,按下esc回到命令模式
- 底线命令模式(Last line mode)
可以在文本的尾行对文件进行操作(搜索,替换,保存,退出等等)
命令模式按下":"进入底线命令模式,需要退出可以按下esc
保存文件 :
w
退出文件 :q
保存并退出 :wq
强制退出 :q!
更多详见vim学习资料
JAVA语言的学习
实训云桌面已经配置好了java环境,我在自己的电脑上面配置了一下,主要是在安装JDK之后配置环境变量的时候需要注意,添加JAVA_HOME,CLASSPATH
(在安装JDK的时候没有jdk-13.0.1文件夹,是自己手动新建的),然后重启计算机,编写简单的helloworld程序并且进行编译
implements和extends
之前没有学习过Java语言,此次学习主要是针对阶段一的任务实现Calculator,如java里面的implements(实现)和extends(继承)
- extends是继承父类(除了声明为final或者是抽象类),但是java不支持多重继承,这就用到了implements通过接口实现,implements可以实现多个接口
如:
static class A extends B implements C,D{}
多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口,接口中的方法都是抽象的
JAVA实现GUI布局
除此之外,还学习了java swing实现ActionListener监听器的方法,使用awt,swing库进行布局,在编写计算器小程序的时候最开始使用的是流式布局,出现了一些bug,后面更改为边框布局(BorderLayout)之后成功运行
这里我们只列举边框布局
BorderLayout是定义在AWT包中的布局管理器,将容器简单的划分为东、西、南、北、中5个区域,当使用该布局时,要指明组件添加在哪个区域。若为指明则默认加入到中间区域。每个区域只能加入一个组件,后加入的组件会覆盖前面一个。
- 代码实现:
public static void main(String[] args) {
JFrame frame = new JFrame("BorderLayout");
frame.setBounds(500, 200, 300, 300);
frame.setLayout(new BorderLayout(10, 10));
frame.add(new JButton("North"), BorderLayout.NORTH);
frame.add(new JButton("East"), BorderLayout.EAST);
frame.add(new JButton("South"), BorderLayout.SOUTH);
frame.add(new JButton("West"), BorderLayout.WEST);
frame.add(new JButton("center"));
下面是我实现Calculator的结果图
更多布局详解请见JAVA GUI设计几种布局讲解
ant 学习
ant可以实现项目的自动构建和部署
ant关键元素
- project:构成ant构件文件的根元素,每个ant文件至少包含一个project元素,每一个project元素可以包含多个target元素
project元素属性:
name
:指定名称
default
:用于制动project默认执行时所执行的target名称
basedir
:指定基路径的位置,没有指定的之后,ant构件文件的父目录作为基准目录
- target:ant的基本执行单元,包含一个或多个具体的任务,多个target相互依赖关系
name
:指定target名称
depends
:描述target之间的依赖关系,以逗号间隔,ant会按照属性出现的顺序依次执行target,被依赖的优先执行
if
:验证指定属性是否存在,不存在,target不会被执行
unless
:属性不存在,target被执行
description
:target功能的简短描述
- property:可以看作是参量或者是参数,project的属性可以通过property元素来设定,也可以在ant之外设定,外部引入文件:
property元素可用作task的属性值。在task中是通过将属性名放在${
和}
之间,并放在task属性值的位置来实现的。
ant内置属性
basedir
:project基目录的绝对路径;ant.file
:buildfile的绝对路径ant.version
:ant版本ant.project.name
:当前指定的project的名字,即前文说到的project的name属性的值;ant.java.version
:ant检测到的JDK的版本
ant常用任务
copy,delete,mkdir,move,echo等等任务,详见ant工具使用
学习了通过编写简单的build.xml文件来实helloworld.java
程序的编译和运行
<?xml version="1.0"?>
<project name="javac_java" default="run" 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" depends="compile">
<java classname="HelloWorld">
<classpath>
<pathelement path="build/classes"/>
</classpath>
</java>
</target>
</project>
学习资料里面还有介绍使用ant的jar任务生成jar
文件,war任务打包J2EE Web
项目等等
junit 学习
- Junit是一个Java语言的单元测试框架,可以大大降低测试代码的复杂度,简化单元测试,减小回归错误的纠错难度
- Junit下载地址
Junit的用法
a. 编写我们需要测试的类
b. 编写测试类
c. 进行测试
- 使用Junit测试我们编写的helloworld
编写测试类原则
- 测试方法必须使用public void 进行修饰,不能带任何的参数
- 新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开
- 测试类所在的包名应该和被测试类所在的包名保持一致
- 测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
- 测试类使用Test作为类名的后缀(不是必须)
- 测试方法使用test作为方法名的前缀(不是必须)
一些学习资料
如何eclipse里面进行Junit测试
如何让ant中的Junit测试
使用ant进行junit测试
我们在原有测试build.xml里面添加Junit的target,此时我们的build.xml的内容为:
<?xml version="1.0"?>
<project name="helloworld" default="junit" basedir=".">
<property name = "build.classes.dir" location = "build/classes"/>
<property name = "src.dir" location = "src"/>
<property name = "lib.dir" location = "lib"/>
<path id="compile.path">
<pathelement location="${lib.dir}/junit-4.9.jar" />
</path>
<target name="clean">
<delete dir="build"/>
<mkdir dir="${build.classes.dir}"/>
</target>
<target name="compile" depends="clean">
<javac srcdir="${src.dir}" destdir="${build.classes.dir}" classpathref="compile.path" includeantruntime="true"/>
</target>
<target name="run" depends="compile">
<java fork = "true" classname = "helloworld">
<classpath>
<pathelement path = "${build.classes.dir}"/>
</classpath>
</java>
</target>
<target name="junit" depends="compile">
<junit printsummary="true">
<classpath path="${build.classes.dir}">
<path refid="compile.path" />
</classpath>
<test name="helloworldTest" />
</junit>
</target>
</project>
测试结果: