vi学习
进入命令模式:
- i 进入输入模式
- x 删除当前光标所在处字符
- :切换到底线命令模式
进入输入模式:
- 字符按键和SHIFT组合,输入字符
- ENTER回车换行
- 退格键删除光标前一个字符
- delete删除键,删除光标后一个字符
- 方向键移动光标
- HOME/END移动到行首/行尾
- Page Up/Down向上/向下翻页
- Insert变为输入/替换模式,光标变成竖线/下划线
- ESC退出输入模式,进入命令模式
底线命令模式:
- :q 离开,加!则为强制离开
- :w 保存,若加!,则若文件为只读,则强制写入
- :wq,保存并离开,若加!则为强制保存并离开
- :w [filename]将编辑的数据储存成另一个档案
- :r [filename]将另一个档案的数据添加到正在编辑的数据中
总的来说,vi/vim的使用入门还是很简单的,熟悉一些简单的操作就能完成编程操作,但若是想进一步提高效率,还需要了解熟记更多的快捷键,还有安装合适的插件
Ant学习
初始默认保存为build.xml
<?xml version="1.0"?>
<project name="Hello World Project" default="info">
<target name="info">
<echo>Hello World - Welcome to Apache Ant!</echo>
</target>
</project>
声明前没有任何空格和换行,否则会出错
所有的构建文件需要包含项目元素 (project 标签)和至少一个目标元素 (target 标签)。
属性 | 描述 |
---|---|
项目名(name) | 表示项目名称(可选) |
默认(default) | 表示构建脚本默认运行的目标,即制定默认的 target。一个项目 (project) 可以包含多个目标 (target)。(必须) |
基准目录(basedir) | 表示当该属性没有指定时,使用 Ant 的构件文件的附目录作为基准目录。(可选) |
从例子中和实际操作中可以发现,target可以看作是任务目标,每个target都表是一个任务目标,而一个project可以有多个任务目标。project的default属性则表示了默认要运行的任务目标。
自动编译
首先新建一个名为antstudy的Java的工程,然后建立src为源码根目录,并创建一个Java的类文件,名为HelloWorld.java
然后再在antstudy根目录下建立build.xml文件,在该文件中编译src目录下的java文件,并将编译后的class文件放入build/classes目录中,在编译前,需清除classes目录,该文件的内容如下:
<?xml version="1.0"?>
<project name="javacTest" default="compile" basedir=".">
<target name="clean">
<delete dir="build"/>
</target>
<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes"/>
</target>
</project>
自动运行
如下改动之后,运行该build.xml文件,可在控制台看到HelloWorld的main方法的输出
<?xml version="1.0"?>
<project name="javaTest" 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>
在这份文件中,出现了多个targer,而且出现了depends属性,这是用于依赖target的,被依赖的targer将会线、先执行。如上,执行顺序便是clean,compile,run了
JUnit
junit
是一个Java语言编写的单元测试框架,但仅适合纯粹的单元测试,但对于集成测试仍需要用到TestNG
首先
使用命令行进行测试
使用org.junit.runner.JUnitCore类。这个类提供了runClasses()方法,它允许运行一个或多个测试类。runClasses()方法返回类型是org.junit.runner.Result对象类型.这个对象可以被用来收集关于测试信息。此外,如果有一个失败的测试,可以用org.junit.runner.notification.Failure对象保存失败测试的描述。
创建一个新的Java类
创建一个用于输出信息的类MessageUtil.java
public class MessageUtil {
private String message;
public MessageUtil(String message){
this.message = message;
}
public String printMessage(){
System.out.println(message);
return message;
}
}
然后创建一个用于测试的类TestJunit.java
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Hello World";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
assertEquals(message,messageUtil.printMessage());
}
}
然后是用于运行测试的类TestRunner.java
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class JunitRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure fail : result.getFailures()) {
System.out.println(fail.toString());
}
if (result.wasSuccessful()) {
System.out.println("All tests finished successfully...");
}
}
}
AssertionsTest.class是测试类
然后进行编译,而后运行JunitRunner,命令行输出结果
通过Ant运行Junit
首先创建项目文件夹TestJunitWithAnt
在其中添加文件夹src
,test
,lib
在src
中添加MessageUtil
类,用于在控制台显示信息
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public String printMessage(){
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage(){
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
然后再在src
中创建一个TestMessageUtil
类
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestMessageUtil {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
assertEquals(message,messageUtil.printMessage());
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
然后将Junit-4.x.jar复制到lib
文件夹中
然后创建在根目录下创建build.xml
<project name="JunitTest" default="test" basedir=".">
<property name="testdir" location="test" />
<property name="srcdir" location="src" />
<property name="full-compile" value="true" />
<path id="classpath.base"/>
<path id="classpath.test">
<pathelement location="/lib/junit-4.10.jar" />
<pathelement location="${testdir}" />
<pathelement location="${srcdir}" />
<path refid="classpath.base" />
</path>
<target name="clean" >
<delete verbose="${full-compile}">
<fileset dir="${testdir}" includes="**/*.class" />
</delete>
</target>
<target name="compile" depends="clean">
<javac srcdir="${srcdir}" destdir="${testdir}"
verbose="${full-compile}">
<classpath refid="classpath.test"/>
</javac>
</target>
<target name="test" depends="compile">
<junit>
<classpath refid="classpath.test" />
<formatter type="brief" usefile="false" />
<test name="TestMessageUtil" />
</junit>
</target>
</project>
在命令行中进入TestJunitWithAnt
文件夹
使用命令:
ant
可以得出测试结果,以上是一个可用的模版
简单地使用junit是通过对比程序输出结果和标准输出结果,然后分析程序,从而发现程序是否存在错误。而通过ant来使用junit,使这一过程变得更加简单和轻松
Java
首先解读一个简单的java文件
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
然后得知一下几点:
- Java保存的文件名必须与类名一致;
- 如果文件中只有一个类,文件名必须与类名一致;
- 一个Java文件中只能有一个public类;
- 如果文件中不止一个类,文件名必须与public类名一致;
- 如果文件中不止一个类,而且没有public类,文件名可与任一类名一致。
Java中有String, StringBuffer, StringBuilder(不是线程安全的)等类,因为String类是不可更改的,一旦创建对象,其值就无法更改了,需要使用StringBuffer和StringBuilder。
其次是输入,和C++略有不同。首先要通过import来引入其他的包中的类,而输入所要用的Scanner类
通过以下方式引入
import java.util.Scanner;
JUI
这次写Java小程序用到了jui,其中引用到的包是
import javax.swing.*;
而程序中用的控件主要是JTextField,JButton和JPanel,还有Container,显示和输入的格都用JTextField来实现,加减乘除和‘OK’则通过JButton来实现。
布局则有控件的方法,以及GridLayout()
然后就是通过数据绑定来实现对按钮的操作了,还有实现对应格子内内容的变化。
用到了ActionListener和actionPerformed(ActionEvent e)方法
除此之外还可以加上异常判断的代码块,实现对输入的限制以及例如‘除以0’这种非法输入的判断