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. es6中class类的全方面理解(一)

    传统的javascript中只有对象,没有类的概念.它是基于原型的面向对象语言.原型对象特点就是将自身的属性共享给新对象.这样的写法相对于其它传统面向对象语言来讲,很有一种独树一帜的感脚!非常容易让人 ...

  2. git error: failed to push some refs to 'git@github.com:xxx/xxx.git'

    本地仓库中和远程仓库不一致,缺少readme.md文件 解决方式参见:https://blog.csdn.net/qq_37281252/article/details/79044798

  3. TCP即时小通信

    package 第十二章; import java.io.*; import java.net.*; public class TcpServer { public static void main( ...

  4. 七、latex中的插图

  5. 详解InitializingBean、initMethod和@PostConstruct

    转载:https://blog.csdn.net/nrsc272420199/article/details/95033223 1. InitializingBean.initMethod和@Post ...

  6. OI比赛常数优化

    这是一篇玄学文章 一.编译优化 #pragma GCC optimize("O3") #pragma G++ optimize("O3") 预处理开O3优化 比 ...

  7. 机器学习中的偏差(bias)和方差(variance)

    转发:http://blog.csdn.net/mingtian715/article/details/53789487请移步原文 内容参见stanford课程<机器学习>   对于已建立 ...

  8. 3分钟教会你把封装的js公共方法挂载在vue实例原型上

    第一步:首先在src文件夹里面创建一个通用js文件夹,然后在创建的文件夹里面创建一个js文件 第二步:const 一个方法,然后通过export暴露出来(在同一个页面可以写多个方法,和暴露多个方法,在 ...

  9. 【JavaScript】对象 obj.name 语法与 obj[name]语法

    obj.name ==> obj["name"]  底层的自动转化,所以直接写 obj["name"] 效率会高一些 var obj = { name: ...

  10. 前端面试题常考&必考之--跨域的解决办法

    1.为啥出现跨域??? 在制定Html规则时,为了安全的考虑,一个源的脚本(网页,网站)不能与另一个源的资源进行交互, 所以就引发一个词叫做“同源策略”. 同源策略:同源策略是一种约定,它是浏览器最核 ...