中级实训 TASK1

阶段一 Vi,Java,Ant和Junit的自学报告

vi/vim 学习

vi/vim是Linux系统下的文本编辑器,可以比较方便地进行文本编辑(相较于直接打开文件编辑),除此以外,它还可以作为一个程序开发工具来使用。
下面展示一下我的vi/vim自学报告。

我所参考的内容链接如下——Linux下使用vi/vim

Linux下使用vi/vim主要有以下三种模式

  • 命令模式(command mode)

    在用户刚刚启动 vi/vim时,便进入了命令模式。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。

    以下是常用的几个命令:

    • i 切换到输入模式,以输入字符;
    • x 删除当前光标所在处的字符;
    • : 切换到底线命令模式,以在最底一行输入命令。
  • 输入模式(Insert mode)

    在命令模式下按下i就进入了输入模式。在输入模式中,可以使用以下按键:

    • 字符按键以及Shift组合,输入字符;
    • ENTER,回车键,换行;
    • BACK SPACE,退格键,删除光标前一个字符;
    • DEL,删除键,删除光标后一个字符;
    • 方向键,在文本中移动光标(鼠标不能移动光标;
    • HOME/END,移动光标到行首/行尾;
    • Page Up/Page Down,上/下翻页;
    • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线;
    • ESC,退出输入模式,切换到命令模式。
  • 底线命令模式(Last line mode)

    在命令模式下按下“:”(英文冒号)就进入了底线命令模式。

    其中比较常用的命令有:

    • w 保存文件;
    • q 退出程序;
    • ESC 退出底线命令模式。

有如下一个简略图展示这三种模式

mode picture

实例展示

首先输入命令 vim filePath 打开示例文件:
在这里插入图片描述
可以看到打开的文件内容为
在这里插入图片描述
此时,直接输入 x 会把当前光标所在的字符删除,并且进入到输入模式,可以对文件进行编辑。
在这里插入图片描述
按ESC退出之后,再输入 i ,可以看到又进入了输入模式,现在我再文档末尾输入"I have changed this file"
在这里插入图片描述
最后,ESC退出,输入":",再输入 wq ,保存并退出。
在这里插入图片描述

这时,文件已经编辑完成了,再次打开文件验证是否修改成功。
在这里插入图片描述显然,这时已经修改成功了。

JAVA 学习

这一部分不是简单的几句话就可以说明白的,特别是对于我这种刚接触JAVA语言的人来说,只能总结一些我所认识到的重点,并列举出来。
这里是我所参考的几个网站地址:菜鸟教程JAVA快速教程

JAVA语言的特性

  • Java语言是简单的:
    Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。

  • Java语言是面向对象的:
    Java语言提供类、接口和继承等面向对象的特性,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。

  • Java语言是可移植的:
    这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。

  • Java语言是多线程的:
    在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。

JAVA的包

为了更好地组织类,Java 提供了包机制,用于区别类的命名空间。

它的作用主要是:

  • 1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
  • 2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
  • 3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

包语句的语法格式为:

package pkg1[.pkg2[.pkg3…]];

JAVA的GUI

考虑到在这一阶段需要完成一个简单计算器,这一部分的实现显然是离不开GUI的实现的,所以在这里就先把GUI部分的内容总结一下。

首先是几个主要的包

  • java.awt 包 – 主要提供字体/布局管理器

  • javax.swing 包[商业开发常用] – 主要提供各种组件(窗口/按钮/文本框)

  • java.awt.event 包 – 事件处理,后台功能的实现。

介绍关于按钮、文本框等的实现

GUI部分的内容是非常多的,但是在这一次的项目中我们只涉及到一部分,我就挑一些内容记录下来,其他的会在接下来的实现计算器中更详细地分析。

  • 按钮的实现
    JButton button1 = new JButton(“text”);
  • 创建标签
    JLabel label1 = new JLabel(“text”);
  • 创建窗口
    JFrame frame = new JFrame(“text”);
    frame.setDefaultLookAndFeelDecorated(true); //外观
    frame.pack(); //显示窗口
    frame.setVisible(true); //设置可见
    frame.add(panel); //添加panel面板到容器

除此以外还有很多内容,更多具体的操作可以参考这个博客,这里就不再多说了。

实现我的第一个JAVA程序——hello world

首先编写如下的helloworld.java程序:

//package helloworld

public class helloworld {
	public static void main( ) {
		System.out.print("hello world\n");
	}
}

然后编译运行如下
在这里插入图片描述

Ant 学习

关于ant
Ant是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。在实际软件开发中,有很多地方可以用到ant。

它的优点有:

  • 跨平台性:Ant是纯Java语言编写的,所以具有很好的跨平台性。
  • 操作简单:Ant是由一个内置任务和可选任务组成的,用ant任务就像是在dos中写命令行一样。Ant运行时需要一个XML文件(构建文件)。 Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象。
  • 维护简单、可读性好、集成简单:由于Ant构建文件 时XML格式的文件,所以很容易维护和书写,而且结构很清晰。Ant可以集成到开发环境中。由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开发环境中去。

Ant的使用方法

使用ant时,直接输入ant命令就可以进行文件编译了。Ant以build.xml为默认文件,当不存在build.xml时,Ant会报错。
如下所示:

当然,也可以通过指令ant -buildfile filename.xml来指定某一文件来编译。

Ant脚本:使用节点、元素和属性、命令指令

  • project 节点元素
    project 元素是 Ant 构件文件的根元素, Ant 构件文件至少应该包含一个 project 元素,否则会发生错误。在每个 project 元素下,可包含多个 target 元素。

    • name 属性:用于指定 project 元素的名称;
    • default 属性:用于指定 project 默认执行时所执行的 target 的名称;
    • basedir 属性:用于指定基路径的位置。该属性没有指定时,使用 Ant 的构件文件的附目录作为基准目录。
  • target节点元素
    target为ant的基本执行单元或是任务,它可以包含一个或多个具体的单元/任务。多个target 可以存在相互依赖关系。它有如下属性:

    • name 属性:指定 target 元素的名称,这个属性在一个 project 元素中是唯一的。我们可以通过指定 target 元素的名称来指定某个 target;
    • depends 属性:用于描述 target 之间的依赖关系,若与多个 target 存在依赖关系时,需要以“,”间隔。 Ant 会依照 depends 属性中 target 出现的顺序依次执行每个 target ,被依赖的target 会先执行;
    • if 属性:用于验证指定的属性是存在,若不存在,所在 target 将不会被执行;
    • unless 属性:该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在 target 将会被执行;
    • description 属性:该属性是关于 target 功能的简短描述和说明。
  • property属性节点元素
    property元素可看作参量或者参数的定义,project 的属性可以通过 property 元素来设定,也可在 Ant 之外设定。

    • property 元素可用作 task 的属性值。在 task 中是通过将属性名放在${属性名}之间,并放在 task 属性值的位置来实现的。
    • Ant 提供了一些内置的属性,它能得到的系统属性的列表与 Java 文档中 System.getProperties() 方法得到的属性一致
    • 同时, Ant 还提供了一些它自己的内置属性,如下:
      basedir: project 基目录的绝对路径;
      ant.file: buildfile的绝对路径
      ant.version: ant版本
      ant.project.name: 当前指定的project的名字,即前文说到的project的name属性值;
      ant.java.version: Ant 检测到的JDK版本 。
  • copy命令
    copy主要用来对文件和目录的复制功能。举例如下:

● 复制单个文件:
<copy file="old.txt" tofile="new.txt"/>

● 对文件目录进行复制:
<copy todir="../dest_dir">
    <fileset dir="src_dir"/>
</copy>

● 将文件复制到另外的目录:
<copy file="src.txt" todir="c:/base"/>
  • echo 命令
    该任务的作用是根据日志或监控器的级别输出信息。它包括 message 、 file 、 append 和 level 四个属性,举例如下
<echo message="ant message" file="/logs/ant.log" append="true">
  • jar 标签节点元素
    该标签用来生成一个JAR文件,其属性如下:

    • destfile表示JAR文件名;
    • basedir表示被归档的文件名;
    • includes表示别归档的文件模式;
    • exchudes表示被排除的文件模式;
    • compress表示是否压缩。
  • javac 标签节点元素
    该标签用于编译一个或一组java文件,其属性如下

    • srcdir表示源程序的目录,destdir表示class文件的输出目录;
    • include表示被编译的文件的模式;
    • excludes表示被排除的文件的模式;
    • classpath表示所使用的类路径;
    • debug表示包含的调试信息;
    • optimize表示是否使用优化;
    • verbose 表示提供详细的输出信息;
    • fileonerror表示当碰到错误就自动停止。
  • java 标签节点元素
    该标签用来执行编译生成的.class文件,其属性如下:

    • classname 表示将执行的类名
    • jar表示包含该类的JAR文件名
    • classpath所表示用到的类路径
    • fork表示在一个新的虚拟机中运行该类
    • failonerror表示当出现错误时自动停止
    • output 表示输出文件
    • append表示追加或者覆盖默认文件

实际上,关于Ant的使用还有很多值得我们去注意的方面,而我只是简单的了解了一些初步的东西,更多的内容可以参考这篇博客

Ant实现hello world的自动编译

<?xml version="1.0" ?>
<project name="helloworld" default="run" basedir=".">
    <property name="dest" value="classes" />
    <property name="hello_jar" value="hello.jar" />

	<target name="clean">
        <delete dir="${dest}" />
    </target>
    
    <target name="init" depends="clean">
        <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>

JUnit学习

什么是JUnit
JUnit是一个Java语言的单元测试框架,使用 Junit 能让我们快速的完成单元测试。

JUnit常用注解

  • @Test:测试注解,标记一个方法可以作为一个测试用例;
  • @Before:Before注解表示,该方法必须在类中的每个测试之前执行,以便执行某些必要的先决条件;
  • @BeforeClass:BeforeClass注解指出这是附着在静态方法必须执行一次并在类的所有测试之前;
  • @After:After注释表示,该方法在每项测试后执行;
  • @AfterClass:当需要执行所有测试在JUnit测试用例类后执行。

JUnit常用断言

  • assertEquals([String message],expected value,actual value)
    用于判断是否相等
  • assertTrue([String message],boolean condition)
    用于判断一个条件是否为真
  • assertNotNull([String message],java.lang.Object object)
    判断一个条件不为空
  • assertArrayEquals([String message],expectedArray,resultArray)
    判断两个数组相等

使用JUnit来测试helloworld
注: 这一部分在Eclipes中完成
为了测试hello world,我们必须先对程序做一点修改(因为原来的程序没有对应的方法,访问不到输出的string)
修改如下:

import java.util.*;

public class helloworld {
	String str;
	public void createHello(){
		str = "hello world";
	}

	public String getStr() {
		return str;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.print("hello world");
	}
}

接下来,编写helloworldTest文件:

package helloworld;

import org.junit.Test;
import static org.junit.Assert.*;

public class helloworldTest {
	public helloworld hello = new helloworld();
	
	@Test
	public void testHello() {
		hello.createHello();
		assertEquals("hello world", hello.getStr());
	}
}

接下里,需要在这个项目中导入JUnit4单元测试包:
在项目属性中打开Java Build Path,选择Add Library,选择版本然后应用就可以了。
在这里插入图片描述
接下里就通过鼠标右键Run As JUnit Test来进行单元测试
在这里插入图片描述
测试结果为:此时测试通过。
在这里插入图片描述

至此,完成了本次项目的TASK1。

项目心得

这两天完成项目第一阶段的内容,其实编程的部分并没有很多,但是需要学习的东西非常多,主要有JAVA,它的语法不是很难,但是涉及到一些函数的使用,特定数据结构的实现,都不是一时半会可以搞定的,所以在这上面花费了不少时间。
除此以外,Ant、JUnit的使用,这两个东西的确是非常方便的工具,可以很清晰地看到它对编程效率的提高。总的来说,第一阶段的实训给我带来了不小的收获,接下来也要继续努力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值