Vi,Java,Ant和Junit的自学报告

大山中学软件工程中级实训阶段1

Vi,Java,Ant和Junit的自学报告

1. Vi自学报告

什么是vi/vim?

引用菜鸟教程里面的定义:

所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。
但是目前我们使用比较多的是 vim 编辑器。
vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。

我个人感觉vim就相当于

windows系统下的记事本应用的程序员edition

比记事本添加了代码高亮补全编译及错误跳转的功能

vi/vim的模式切换

vi/vim有三种模式

分别是命令模式(Command mode)

输入模式(Insert mode)

和底线命令模式(Last line mode)

转换如下图:

Vim/VI工作模式

命令模式

一启动vi/vim就进入命令模式

此时在键盘上做出的任何输入操作都会被识别为命令

而非输入字符

常用命令:

  1. i 切换到输入模式
  2. x 删除当前光标所在处的字符
  3. : 切换到底线命令模式
输入模式

输入模式就是可以任意编辑内容

使用ESC键退出输入模式切换到命令模式

底线命令模式

底线命令模式可以在最底下输入单个或多个字符的命令

可用命令非常多

基本命令有:

  1. q 退出程序
  2. w 保存文件

按ESC键退出底线命令模式

如何使用Vi/Vim创建/打开文件

例如:创建文件test.txt,如果文件已经存在则打开文件,进入命令模式

vim test.txt

我个人认为Vi/Vim掌握模式的切换和如何创建打开文件就好啦

其他花里胡哨的功能感觉我根本用不上

不会的时候再上网查吧

而且我不喜欢用Vi/Vim

文本编辑器不香吗

2. Java自学报告

之前有选过Java的专选课

现在我只需要回顾一下基本的知识点就好了

第一阶段涉及到的知识点有

基本操作例如输出System.out.println();(如果不要换行就去掉ln)

图形GUI的使用,包括JFrame、JLabel、JButton等等等等的使用

界面布局,我使用了GridLayout布局,最规规矩矩方方正正的那个

事件处理addActionListener()

还有类的名字一定要跟文件名字一样,String首字母要大写等等各种小细节

首先是经典之HelloWorld

public class helloworld {
	static public String str;
	public static void main(String[] args)
	{
		helloworld h=new helloworld();
		System.out.println(str);
	}
	
	public helloworld()
	{
		str="Hello World!";
	}

	String get()
	{
		return str;
	}
}

至于为什么不直接使用

System.out.println("Hello World!");

因为等会要用Junit检查

其次是要做一个超级朴素的计算器

只可以用来计算12对2的加减乘除

一眼看上去虽然无从下手

但是一旦对GUI相关知识点有了解就很容易实现

我看了几篇博客站在了巨人的肩膀上

就恍然大悟

下面是我自己缝合的实现

package calculator;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.*;
import java.awt.GridLayout;
import java.awt.event.*;
import java.awt.Font;

public class calculator extends JFrame{
	private JFrame frame= new JFrame("Calculator");
	private JTextField one = new JTextField("12");
	private JLabel two = new JLabel("", JTextField.CENTER);
	private JTextField three = new JTextField("2");
	private JTextField four = new JTextField("=");
	private JLabel five = new JLabel("", JTextField.CENTER);
	private JButton six = new JButton("+");
	private JButton seven = new JButton("-");
	private JButton eight = new JButton("*");
	private JButton nine = new JButton("/");
	private JButton ten = new JButton("=");
	
	
	public void init()
	{
		frame.setLayout(new GridLayout(2, 5, 5, 5));
		
		one.setHorizontalAlignment(JTextField.CENTER);
        three.setHorizontalAlignment(JTextField.CENTER);
        four.setHorizontalAlignment(JTextField.CENTER);
        
        one.setFont(new Font("宋体",Font.BOLD,30));
        two.setFont(new Font("宋体",Font.BOLD,30));
        three.setFont(new Font("宋体",Font.BOLD,30));
        four.setFont(new Font("宋体",Font.BOLD,30));
        five.setFont(new Font("宋体",Font.BOLD,30));
        six.setFont(new Font("宋体",Font.BOLD,40));
        seven.setFont(new Font("宋体",Font.BOLD,40));
        eight.setFont(new Font("宋体",Font.BOLD,40));
        nine.setFont(new Font("宋体",Font.BOLD,40));
        ten.setFont(new Font("宋体",Font.BOLD,40));
        
		frame.add(one);
		frame.add(two);
		frame.add(three);
		frame.add(four);
		frame.add(five);
		frame.add(six);
		frame.add(seven);
		frame.add(eight);
		frame.add(nine);
		frame.add(ten);
		
		six.addActionListener(new Operation());
		seven.addActionListener(new Operation());
		eight.addActionListener(new Operation());
		nine.addActionListener(new Operation());
		ten.addActionListener(new Equal());
		
		frame.setSize(400, 200);
        frame.setLocationRelativeTo(null);          
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
	
	
	private class Operation implements ActionListener{
        public void actionPerformed(ActionEvent e)
        {
            JButton temp = (JButton)e.getSource();
            two.setText(temp.getText());
        }
    }

    private class Equal implements ActionListener{
        public void actionPerformed(ActionEvent e)
        {
            try{
   
                int number1 = Integer.parseInt("12");
                int number2 = Integer.parseInt("2");

                if(two.getText().equals("+"))
                {
                    five.setText(number1+number2+"");
                }
                else if(two.getText().equals("-"))
                {
                	five.setText(number1-number2+"");
                }
                else if(two.getText().equals("*"))
                {
                	five.setText(number1*number2+"");
                }
                else if(two.getText().equals("/"))
                {
                	five.setText(number1/number2+"");
                }
            }

            catch(Exception err){
            	five.setText("Wrong!");
            }
        }
    }
	
	public static void main(String[] args)
	{
		calculator temp=new calculator();
		temp.init();
	}
}

跑起来是这样一种效果,看起来不太聪明的样子
calculator
固定内容的“12”“2”“=”使用了JTextField

内容可变的两个区域使用的是JLabel

下面五个按钮使用的是JButton

在JFrame里面使用了GridLayout布局

前四个按钮的事件都只是直接把符号投射到上方第二个框框里

只有等号按钮的事件才是计算结果并输出到右上方的框框

时间不够,别的功能就不实现了

3. Ant学习报告

Ant给我感觉就像是初级实训的时候c艹的Makefile

真痛苦

短时间内要搞清楚大概原理并且编一个出来也太难了

从网上找来了教程

1.< project >标签
每个构建文件对应一个项目。标签时构建文件的根标签。它可以有多个内在属性,就如代码中所示,其各个属性的含义分别如下。
(1) default表示默认的运行目标,这个属性是必须的。
(2) basedir表示项目的基准目录。
(3) name表示项目名。
(4) description表示项目的描述。
每个构建文件都对应于一个项目,但是大型项目经常包含大量的子项目,每一个子项目都可以有自己的构建文件。

2.< target >标签
一个项目标签下可以有一个或多个target标签。一个target标签可以依赖其他的target标签。例如,有一个target用于编译程序,另一个target用于声称可执行文件。在生成可执行文件之前必须先编译该文件,因策可执行文件的target依赖于编译程序的target。Target的所有属性如下。
(1) name表示标明,这个属性是必须的。
(2) depends表示依赖的目标。
(3) if表示仅当属性设置时才执行。
(4) unless表示当属性没有设置时才执行。
(5) description表示项目的描述。
Ant的depends属性指定了target的执行顺序。Ant会依照depends属性中target出现顺序依次执行每个target。在执行之前,首先需要执行它所依赖的target。程序中的名为run的target的depends属性compile,而名为compile的target的depends属性是prepare,所以这几个target执行的顺序是prepare->compile->run。一个target只能被执行一次,即使有多个target依赖于它。如果没有if或unless属性,target总会被执行。

3.< mkdir >标签
该标签用于创建一个目录,它有一个属性dir用来指定所创建的目录名,其代码如下:通过以上代码就创建了一个目录,这个目录已经被前面的property标签所指定。

4.< jar >标签
该标签用来生成一个JAR文件,其属性如下。
(1) destfile表示JAR文件名。
(2) basedir表示被归档的文件名。
(3) includes表示别归档的文件模式。
(4) exchudes表示被排除的文件模式。

5.< javac >标签
该标签用于编译一个或一组java文件,其属性如下:
(1).srcdir表示源程序的目录。
(2).destdir表示class文件的输出目录。
(3).include表示被编译的文件的模式。
(4).excludes表示被排除的文件的模式。
(5).classpath表示所使用的类路径。
(6).debug表示包含的调试信息。
(7).optimize表示是否使用优化。
(8).verbose 表示提供详细的输出信息。
(9).fileonerror表示当碰到错误就自动停止。

6.< java >标签
该标签用来执行编译生成的.class文件,其属性如下。
(1).classname 表示将执行的类名。
(2).jar表示包含该类的JAR文件名。
(3).classpath所表示用到的类路径。
(4).fork表示在一个新的虚拟机中运行该类。
(5).failonerror表示当出现错误时自动停止。
(6).output 表示输出文件。
(7).append表示追加或者覆盖默认文件。

稍微学了一下,之后就赶鸭子上架,站在巨人的肩膀上缝合尝试编译HelloWorld

<?xml version="1.0" encoding="gbk" ?>

<!--工程的名字是HelloWorld-->
<project name="HelloWorld" default="run" basedir=".">

   <!-- 定义资源,包括源文件目录,目标文件目录,和jar文件 -->
   <property name="src" value="src"/>
   <property name="dest" value="classes"/>
   <property name="hello_jar" value="hello.jar"/>

   <!-- 定义第一个目标:初始化,新建目标文件目录 -->
   <target name="init">
   	<mkdir dir="${dest}"/>
   </target>

   <!-- 定义第二个目标:编译源文件,把产品放入dest -->
   <target name="compile" depends="init">
   	<javac srcdir="${src}" destdir="${dest}"/>
   </target>

   <!-- 定义第三个目标:构件jar文件,目标文件为hello_jar指定的文件名 -->
   <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>

输入命令ant编译成功

4. Junit学习报告

JUnit是一个Java语言的单元测试框架.

引用百度百科的解释

JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestJCase类,就可以用Junit进行自动测试了。

这次只要测试Hello World比较简单

那我只要判断它的输出到底是不是“Hello World!”就好了

编写代码testhw.java

import org.junit.Assert;
import org.junit.Test;

public class testhw {
    public helloworld h=new helloworld();
    @Test public void Test() {
	
        Assert.assertEquals("Hello World!", h.get());
    }

}

跑的使用发现给的环境有问题

重新下载了一个Junit-4.10.jar

和代码放在同一个文件夹里

执行命令

javac -classpath .:junit-4.10.jar testhw.java
java -classpath .:junit-4.10.jar -ea org.junit.runner.JUnitCore testhw

跑起来了

编写JUnit有一点点原则需要遵循

测试方法上必须使用@Test进行修饰
测试方法必须使用public void 进行修饰,不能带任何的参数
建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开
测试类所在的包名应该和被测试类所在的包名保持一致
测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
测试类使用Test作为类名的后缀(不是必须)
测试方法使用test作为方法名的前缀(不是必须)

5. 总结

顶多半天的任务量

一天半的时间都在配环境

以及尝试解决莫名其妙的问题

黑人问号打满

在大家互帮互助和站在巨人肩膀的基础上也算是顺利完成了

可喜可贺

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值