Vi, Java, Ant, Junit的自学报告
一. vi/vim编辑器学习
vi编辑器是所有Unix及Linux系统下标准的编辑器,对Unix及Linux系统的任何版本,vi编辑器是完全相同的。vim是vi的升级版,增加了一些功能,对vi命令是完全兼容的。在一些基本命令上两者应该是一样的。
vi/vim编辑器的三种模式
模式 | 作用 |
---|---|
命令模式 | 控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式 |
插入模式 | 文字输入或回到命令行模式 |
底行模式 | 将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号等 |
- 命令行模式的常用操作
i:切换到输入模式
x:删除当前光标所在处的字符
:: 切换到底线命令模式
- 插入模式的常用操作
输入所需文本即可
注:按esc可进入底行模式
- 底行模式的常用操作
q :退出
q! :强制退出
wq :保存并退出
实例 helloworld
创建Helloworld.java
vi Helloworld.java
i切换到输入模式,输入如下代码
public class Helloworld {
public static void main(String[] args){
System.out.println("Helloworld!");
}
}
esc进入底行模式,输入:wq退出并保存
在命令行中输入以下命令,即可对Helloworld编译并运行。在命令行显示:Helloworld!
javac Helloworld.java
java Helloworld
二. Java语言学习
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
由于之前并未选修Java课程,所以在Java的学习上还是费了一些功夫的,但这次的任务都是一些简单基础的,所以代码的完成相对顺利。对我来说,最大的难点是GUI。关于GUI的学习,我主要是参考了这一篇博客:添加链接描述。
实例一:Helloworld
由于看到后面需要用junit对helloworld进行检测,因此进行了修改,具体代码如下
import java.util.*;
public class Helloworld{
String str;
public void hello(){
str = "Helloworld!";
}
public String getStr(){
return str;
}
}
实例二:Calculator
import javax.swing.*;
import java.awt.GridLayout;
import java.awt.event.*;
public class Calculator extends JFrame{
public Calculator() {
JPanel panel;
JLabel res, op, eq;
JTextField num1, num2;
JButton add, sub, mul, div, equal;
setBounds(100, 100, 450, 200);
setTitle("Calculator");
// set the initial value to 0
num1 = new JTextField("0");
num2 = new JTextField("0");
op = new JLabel("",JLabel.CENTER);
eq = new JLabel("=",JLabel.CENTER);
res = new JLabel("",JLabel.CENTER);
//set operator
add = new JButton("+");
sub = new JButton("-");
mul = new JButton("*");
div = new JButton("/");
equal = new JButton("ok");
//create the appearance
panel = new JPanel();
panel.setLayout(new GridLayout(2,5));
panel.add(num1);
panel.add(op);
panel.add(num2);
panel.add(eq);
panel.add(res);
panel.add(add);
panel.add(sub);
panel.add(mul);
panel.add(div);
panel.add(equal);
//implement operation
add(panel);
ActionListener res_ = new ActionListener() {
public void actionPerformed(ActionEvent e){
res.setText("");
double num_ = Double.parseDouble(num1.getText());
double num__ = Double.parseDouble(num2.getText());
if(op.getText().equals("+")){
res.setText("" + (num_ + num__));
}
if(op.getText().equals("-")){
res.setText("" + (num_ - num__));
}
if(op.getText().equals("*")){
res.setText("" + (num_ * num__));
}
if(op.getText().equals("/")){
res.setText("" + (num_ / num__));
}
}
};
ActionListener chop = new ActionListener() {
public void actionPerformed(ActionEvent e) {
op.setText(((JButton)e.getSource()).getText());
}
};
// calculate
add.addActionListener(chop);
sub.addActionListener(chop);
mul.addActionListener(chop);
div.addActionListener(chop);
equal.addActionListener(res_);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Calculator();
}
}
三. Ant学习
Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能。
基本元素
-
project元素
project元素是Ant构件文件的根元素,Ant构件文件至少应该包含一个project元素,否则会发生错误。在每个project元素下,可包含多个target元素。
name属性:用于指定project元素的名称。
default属性:用于指定project默认执行时所执行的target的名称。
basedir属性:用于指定基路径的位置。该属性没有指定时,使用Ant的构件文件的附目录作为基准目录。 -
project元素
project元素是Ant构件文件的根元素,Ant构件文件至少应该包含一个project元素,否则会发生错误。在每个project元素下,可包含多个target元素。接下来向读者展示一下project元素的各属性。
name属性:用于指定project元素的名称。
default属性:用于指定project默认执行时所执行的target的名称。
basedir属性:用于指定基路径的位置。该属性没有指定时,使用Ant的构件文件的附目录作为基准目录。 -
property元素
该元素可看作参量或者参数的定义,project的属性可以通过property元素来设定,也可在Ant之外设定。
basedir:project基目录的绝对路径
ant.file:buildfile的绝对路径
ant.version:Ant的版本
ant.project.name:当前指定的project的名字
ant.java.version:Ant检测到的JDK的版本
一般来说,Ant 的构建文件默认为 build.xml,因此在Helloworld根目录下创建build.xml,具体如下
<?xml version="1.0"?>
<project name="Helloworld" default="run" basedir=".">
<property name="test" value="test"/>
<property name="dest" value="class"/>
<property name="hello_jar" value="hello.jar"/>
<target name="init">
<mkdir dir="${dest}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="src" destdir="${dest}"/>
</target>
<target name="build" depends="compile">
<jar jarfile="${hello_jar}" basedir="${dest}"/>
</target>
<target name="run" depends="build">
<java classname="Helloworld" classpath="${hello_jar}"/>
</target>
</project>
完成后命令行进入Helloworld根目录,执行ant,出现BUILD SUCCESSFUL则操作成功,如下图:
四. Junit学习
JUint是Java编程语言的单元测试框架,用于编写和运行可重复的自动化测试。
常用注解
@Test:测试注解,标记一个方法可以作为一个测试用例 。
@Before:Before注解表示,该方法必须在类中的每个测试之前执行,以便执行某些必要的先决条件。
@BeforeClass:BeforeClass注解指出这是附着在静态方法必须执行一次并在类的所有测试之前
@After:After注释表示,该方法在每项测试后执行
@AfterClass:当需要执行所有测试在JUnit测试用例类后执行
实例:HelloworldTest
import org.junit.Test;
public class HelloworldTest{
public Helloworld hw = new Helloworld();
@Test
public void testHelloworld(){
hw.hello();
assertEquals("Helloworld!", hw.getStr());
}
}
当执行到这一步时,报错找不到junit.jar,在询问了同学后,新下载了一个junit4.9.jar,将其放于目录下,再进行操作。操作也有所不同,要加入run才可正常运行,具体命令行命令如下:
javac -cp .:./junit-4.9.jar HelloworldTest.java
java -cp .:./junit-4.9.jar org.junit.runner.JUnitCore HelloworldTest
当出现OK时,说明操作成功。
五. 总结与感想
阶段一的任务其实是让我们了解操作环境,基本的操作方法以及接下来的项目的初步认识。在这一部分,我遇到问题比较多的地方是环境配置和java的运用。
环境配置的问题,在改写bashrc后得到了解决。在此贴出来改的环境,提醒一下自己。
在过程中真的遇到挺多问题的,但在同学和Ta的帮助下,还是都一一解决了。总的来说,过程十分困难,但好在最后也都顺利完成。也了解了更多之前不知道的内容,以及一些特殊问题的解决办法。希望有了这一阶段的铺垫,以后的过程会更加顺利一些。加油鸭!