vi, Java, Ant, Junit自学报告

2017软件工程实训 15331023 陈康怡

vi

Vi是linux系统的标准文本编辑器,采用指令的方式进行操作,此处仅记录部分常用的指令。

vi模式

vi编辑器分为三种模式:

(1)命令行模式 command mode

命令行模式可控制光标移动,删除字符、字、行,复制剪切等操作。在命令行模式下按i进入插入模式,按:进入底行模式。

(2)插入模式 insert mode

在插入模式下,可以进行文字输入。在插入模式下,按Esc回到命令行模式。

(3)底行模式 last lint mode

主要进行保存退出的操作,也可以设置编辑环境。

vi基本操作

(1)打开文件

在Terminal中使用$ vi filename 即可用vi打开文件,若文件不存在,vi会自己创建新文件。

(2)退出vi

在底行模式中,输入:

:w filename ——将文本以文件名filename保存

:wq ——保存并退出vi

:q! ——不保存强制退出vi

命令行模式常用操作

(1)移动光标:

使用键盘上的h,j,k,l来分别控制光标向左,下,上,右移动。

(2)删除(可在操作前加数字表示删除多个):

x ——删除光标后的一个字符

X ——删除光标前的一个字符

dd ——删除光标所在行

(3)撤销:

u ——撤销上一次操作

底行模式常用操作

(1)列出行号 —— :set nu

(2)跳到某一行 —— :#

(3)保存 —— :w

Java

本周主要学习了Java下简单GUI程序的编写。Java下GUI程序编写主要使用了java.awt以及jawax.swing的库。

java的GUI程序的基本思路是以JFrame对象为基础,加入不同的控件如JButton,JTextField等控件实现不同的交互功能及布局,再用java代码实现功能逻辑。

小任务:实现简单计算器

这是我在这周实训中写的简单计算器中的一些代码片段。这里结合代码记录学习所得。完整代码见学习记录末尾。

private JFrame myframe = new JFrame("Calculator");
private JButton plusButton = new JButton("+");
private JTextField equalText = new JTextField("=");

这一段是声明计算器中的框架以及控件。首先JFrame myframe = new JFrame("Calculator");声明了一个JFrame对象。JFrame对象是Java GUI编程中的基础。它生成了一个程序窗体,窗体名称叫Calculator,之后你可以往JFrame中添加控件。接下来声明了JButton对象和JTextField对象,用于生成计算器上不同操作的按钮,以及输入操作数、输出结果的文本框对象。

//省略了部分功能相似代码
protected void generateFrame() {
//设置窗体大小
myframe.setSize(500,200); //设置窗体布局
myframe.setLayout(new GridLayout(0,5)); //设置控件属性
equalText.setEditable(false);
equalText.setHorizontalAlignment(SwingConstants.CENTER); //将控件插入窗体
myframe.add(operand1); //将窗体设置为可见,且关闭窗体时退出进程
myframe.setVisible(true);
myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

声明完以后,我们就可以在generateFrame函数中对窗体进行进一步的操作。代码的功能具体见注释。

这里有意思的地方主要有设置窗体布局和设置控件属性。Java Swing提供了多种布局方法:

(1)FlowLayout:将控件逐个添加到窗口中,从左往右一字排开,直至没有空间剩余才换到下一行。

(2)BorderLayout:将界面分成5个区域,分别用BorderLayout的常量指定:

1.-PAGE_START

2.-PAGE_END

3.-LINE_START

4.-LINE_END

5.-CENTER

(3)BoxLayout:可以控制控件水平或竖直地插入窗体。

(4)CardLayout:每次仅显示一个控件,可切换显示。

(5)GridLayout:控件会自动排列成指定行列数,且每个控件大小相同。

(6)GridBagLayout:最复杂、功能最强大的布局,可以实现不规则的网格状布局。

详见:swing布局管理

Swing还提供了一些常用的布局用的静态常量,例如居中可以用SwingContants.CENTER,除此之外还有BOTTOM, EAST, WEST等可供使用,相当方便。详见:SwingContants

public void addListener() {
plusButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
operator.setText("+");
}
});
equalButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String op1 = operand1.getText();
String op2 = operand2.getText();
String opt = operator.getText();
String formula = op1+opt+op2;
try {
result.setText(""+ jse.eval(formula));
} catch (ScriptException e1) {
// TODO Auto-generated catch block
logger.warning(e1.toString());;
}
}
});
}

这段代码的作用是给各个按钮加上监听器,当按钮被点击时,触发对应的函数。此处等于号的运算,我引用了Javascript引擎中的eval函数,可以对字符串直接运算得出结果,相当方便。缺点是有安全隐患。

ant

ant是一种类似与C++下的makefile类似的编译机制,通过ant可以清晰方便地定义依赖关系,方便编译且提高效率。跟makefile相同,已经编译且没有改变的文件,ant不会重复编译。

ant的语法

ant采用XML语法,类似于web中的HTML语言的标签,利用Eclipse,我们可以轻易地得到模板,并在模板上进行修改。这里主要记录几个常用的标签。

(1) <property name="xxx" value="yyy"/>

此处声明了属性,即可在后文中使用${xxx}来代替yyy,尤用于文件路径,避免了文件路径变动导致build.xml中多处改动的情况。

(2)<target name="secondstep" depends="firststep"></target>

target标签表示ant执行的步骤,target执行顺序由depends属性决定,当该target的depends属性指向的target都已经执行完毕后,才会执行。

(3)<javac srcdir="${src.path}" destdir = "${build.path}"></javac>

javac标签用于编译java文件。

(4)<java classname="test" classpath="${build.path}"></java>

java标签用于执行class程序。

(5)<junit printsummary="true"><test name="testTest"></test></junit>

junit标签用于在ant中执行junit单元检测,test标签为测试的名称。

更多ant标签及其属性详见:ant如何编译项目

junit

junit是java单元测试工具,其优势在于简化了单元测试的工作。这里记录一些在学习junit过程中学习的知识。

元数据:记录数据的数据。junit中常用的元数据有:

@Test:测试

@Before:使用了该元数据的方法在每个测试方法执行之前都要执行一次。

@After:使用了该元数据的方法在每个测试方法执行之后要执行一次。

@Test(timeout=xxx):该元数据传入了一个时间(毫秒)给测试方法,如果测试方法在制定的时间之内没有运行完,则测试也失败。

@ignore:该元数据标记的测试方法在测试中会被忽略。

重要函数:assertEquals(aaa, bbb) ——junit会对assertEquals中的aaa和bbb进行判断,若不相等则会返回failure。这是重要的测试函数。


以上就是第一周的学习记录。

下附Java GUI部分Calculator的完整代码。


import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Logger; public final class Calculator {
private Calculator(){} public static void main (String args[]) {
CalFrame myFrame = new CalFrame();
myFrame.generateFrame();
myFrame.addListener();
}
} class CalFrame {
CalFrame() {} private JFrame myframe = new JFrame("Calculator");
private static ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
private static String strClassName = CalFrame.class.getName();
private static Logger logger = Logger.getLogger(strClassName);
private JButton plusButton = new JButton("+");
private JButton minusButton = new JButton("-");
private JButton multiplyButton = new JButton("*");
private JButton divideButton = new JButton("/");
private JButton equalButton = new JButton("=");
private JTextField equalText = new JTextField("=");
private JTextField operand1 = new JTextField("");
private JTextField operand2 = new JTextField("");
private JTextField operator = new JTextField("");
private JTextField result = new JTextField("");
protected void generateFrame() {
myframe.setSize(500,200);
//layout setting
myframe.setLayout(new GridLayout(0,5));
//other settings
equalText.setEditable(false);
operator.setEditable(false);
result.setEditable(false);
equalText.setHorizontalAlignment(SwingConstants.CENTER);
operand1.setHorizontalAlignment(SwingConstants.CENTER);
operand2.setHorizontalAlignment(SwingConstants.CENTER);
operator.setHorizontalAlignment(SwingConstants.CENTER);
result.setHorizontalAlignment(SwingConstants.CENTER);
//add listeners //add component
myframe.add(operand1);
myframe.add(operator);
myframe.add(operand2);
myframe.add(equalText);
myframe.add(result);
myframe.add(plusButton);
myframe.add(minusButton);
myframe.add(multiplyButton);
myframe.add(divideButton);
myframe.add(equalButton);
//visible setting
myframe.setVisible(true);
myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public void addListener() {
plusButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
operator.setText("+");
}
});
minusButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
operator.setText("-");
}
});
multiplyButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
operator.setText("*");
}
});
divideButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
operator.setText("/");
}
});
equalButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String op1 = operand1.getText();
String op2 = operand2.getText();
String opt = operator.getText();
String formula = op1+opt+op2;
try {
result.setText(""+ jse.eval(formula));
} catch (ScriptException e1) {
// TODO Auto-generated catch block
logger.warning(e1.toString());;
}
}
});
}
}

vi, Java, Ant, Junit自学报告 - 实训week1的更多相关文章

  1. Java第一、二次实训作业

    1.有1.2.3.4共4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去掉不满足条件的排列. 代码 pack ...

  2. java第一次,第二次实训

    本次作业通过自己的练习和理解还是可以写出来的,最后两个题目我暂时没有写 编写程序: 声明一个整型变量a,并赋初值5,在程序中判断a是奇数还是偶数,然后输出判断的结果. 编写程序:从键盘输入圆的半径,计 ...

  3. Java企业实训 - 01 - Java前奏

    前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...

  4. 《JAVA课程设计》实训第四天——《猜猜看》游戏

    第四天,本来想进一步去改进<猜猜看>游戏的.可是非常多问题都不理解.也不熟悉怎么去弄到连接数据库.统计猜对次数,所以并没有进行再多的改动. 基本上就是这种执行结果了 import java ...

  5. Java实训:实训一 ——长春职业技术学院 16级网络工程

    Java实训:实训一 本文会解释一些设计思路. 想看具体过程,请转:https://www.cnblogs.com/lxwlxw/p/10114187.html 笑维的码云项目命名不太对,所以我来:h ...

  6. 《JAVA程序设计》实训第一天——《猜猜看》游戏

    课程实训是做一个猜猜看的小游戏.对于对代码不熟悉不了解的我来说的确挺难的.可是我还是会努力的. import java.awt.EventQueue; import javax.swing.JFram ...

  7. 《JAVA程序设计》实训第二天——《猜猜看》游戏

    课程实训第二天,我在第一天的基础上去导入目录,第一天那时候一直改动都是改动不到,上网找了相关的知识.问了同学该怎么去导入显示图片. public class weiwei extends JFrame ...

  8. 2018 java实训总结(时间戳&&主键)

    java实训题目:源管理系统. 答辩的时候被老师怼了以下几个的地方: 1.主键改变了 2.没时间戳却说自己的程序里有先后(这就是老师迂腐了,主键自增可以间接反馈出他加入的早晚,即使主键做出了改变但只是 ...

  9. 学校实训作业:Java爬虫(WebMagic框架)的简单操作

    项目名称:java爬虫 项目技术选型:Java.Maven.Mysql.WebMagic.Jsp.Servlet 项目实施方式:以认知java爬虫框架WebMagic开发为主,用所学java知识完成指 ...

随机推荐

  1. JavaScript是如何工作的:引擎,运行时间以及调用栈的概述

    JavaScript是如何工作的:引擎,运行时以及调用栈的概述 原文:How JavaScript works: an overview of the engine, the runtime, and ...

  2. mysql远程连接只显示部分数据库问题

    项目变更了环境,数据库换了环境,所以用navicat连接数据库,结果只能看到部分数据库. 看下高级设置,就只有两个库. 表示很奇怪,难道我的ip被禁止了吗,进入服务器查看连接用户权限 1. 首先查看服 ...

  3. jenkins上job误删除怎么恢复

    1.点击jobConfigHistory 2.点击Show deleted jobs only 3.找到被删除的 记录,点击Restore

  4. php内置函数分析之current()、next()、prev()、reset()、end()

    current()初始指向插入到数组中的第一个单元 next() 将数组的内部指针向前移动一位 prev() 将数组的内部指针倒回一位 reset() 将数组的内部指针指向第一个单元 end() 将数 ...

  5. Java 学习输入1234 求和

    输入任何整数都能求和 import java.util.Scanner; /** * @author 作者anil E-mail:888@yirose.com * @date 创建时间:2017年3月 ...

  6. Django【第23篇】:利用Form组件和ajax实现的注册

    利用Form组件和ajax实现的注册 一.注册相关的知识点 1.Form组件 我们一般写Form的时候都是把它写在views视图里面,那么他和我们的视图函数也不影响,我们可以吧它单另拿出来,在应用下面 ...

  7. java定义时间

    import java.text.SimpleDateFormat; import java.util.Date; SimpleDateFormat format=new SimpleDateForm ...

  8. vueroute的router.addRoutes

    router.addRoutes(routes: Array<RouteConfig>)动态添加更多路由到路由器.参数必须是使用与routes构造函数选项相同的路径配置格式的Array .

  9. 链接收藏:bullet物理引擎不完全指南

    这个也是博客园的文章,编辑得也很好,就不copy了,结尾还有PDF: https://www.cnblogs.com/skyofbitbit/p/4128347.html 完结

  10. iOS 指定位置切圆角不生效问题

    如果是在VC中操作,需要在viewDidLayoutSubviews方法里 - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; ...