vi, Java, Ant, Junit自学报告 - 实训week1
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的更多相关文章
- Java第一、二次实训作业
1.有1.2.3.4共4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去掉不满足条件的排列. 代码 pack ...
- java第一次,第二次实训
本次作业通过自己的练习和理解还是可以写出来的,最后两个题目我暂时没有写 编写程序: 声明一个整型变量a,并赋初值5,在程序中判断a是奇数还是偶数,然后输出判断的结果. 编写程序:从键盘输入圆的半径,计 ...
- Java企业实训 - 01 - Java前奏
前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...
- 《JAVA课程设计》实训第四天——《猜猜看》游戏
第四天,本来想进一步去改进<猜猜看>游戏的.可是非常多问题都不理解.也不熟悉怎么去弄到连接数据库.统计猜对次数,所以并没有进行再多的改动. 基本上就是这种执行结果了 import java ...
- Java实训:实训一 ——长春职业技术学院 16级网络工程
Java实训:实训一 本文会解释一些设计思路. 想看具体过程,请转:https://www.cnblogs.com/lxwlxw/p/10114187.html 笑维的码云项目命名不太对,所以我来:h ...
- 《JAVA程序设计》实训第一天——《猜猜看》游戏
课程实训是做一个猜猜看的小游戏.对于对代码不熟悉不了解的我来说的确挺难的.可是我还是会努力的. import java.awt.EventQueue; import javax.swing.JFram ...
- 《JAVA程序设计》实训第二天——《猜猜看》游戏
课程实训第二天,我在第一天的基础上去导入目录,第一天那时候一直改动都是改动不到,上网找了相关的知识.问了同学该怎么去导入显示图片. public class weiwei extends JFrame ...
- 2018 java实训总结(时间戳&&主键)
java实训题目:源管理系统. 答辩的时候被老师怼了以下几个的地方: 1.主键改变了 2.没时间戳却说自己的程序里有先后(这就是老师迂腐了,主键自增可以间接反馈出他加入的早晚,即使主键做出了改变但只是 ...
- 学校实训作业:Java爬虫(WebMagic框架)的简单操作
项目名称:java爬虫 项目技术选型:Java.Maven.Mysql.WebMagic.Jsp.Servlet 项目实施方式:以认知java爬虫框架WebMagic开发为主,用所学java知识完成指 ...
随机推荐
- 45. Jump Game II (JAVA)
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
- delete释放空间时出错的原因
int *a=new int[10]; ...... delete []a; 后面“delete []a;”出现错误的情况大致有: 1 数组的首地址a被你有意无意更改了,如:a++之类的: 2 变量的 ...
- 牛客练习赛33 B tokitsukaze and RPG (类埃筛)
链接:https://ac.nowcoder.com/acm/contest/308/B 来源:牛客网 tokitsukaze and RPG 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/ ...
- 美国Science公布:全球125个最前沿的科学难题(图)
文章来源:https://www.toutiao.com/i6637224168045675021 美国Science在庆祝创刊125周年之际,公布了125个最具挑战性的科学问题.这些前沿科学和研究方 ...
- Python核心技术与实战——十一|程序的模块化
我们现在已经总结了Python的基本招式和套路,现在可以写一些不那么简单的系统性工程或代码量较大的应用程序.这时候,一个简单的.py文件就会显得过于臃肿,无法承担一个重量级软件开发的重任.这就需要这一 ...
- JavaWeb中的文件上传和下载功能的实现
导入相关支持jar包:commons-fileupload.jar,commons-io.jar 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上 ...
- noip考前抱佛脚 数论小总结
exCRT 求解韩信点兵问题,常见的就是合并不同\(mod\). 先mo一发高神的板子 for(R i=2;i<=n;++i){ ll Y1,Yi,lcm=Lcm(p[i],p[1]); exg ...
- 双层for循环用java中的stream流来实现
//双重for循环for (int i = 0; i < fusRecomConfigDOList.size(); i++) { for (int j = 0; j < fusRecomC ...
- lambda匿名函数sorted排序函数filter过滤函数map映射函数
lambda函数:表示匿名函数,不需要def来声明,一句话就能搞定. 语法:函数名=lamda 参数:返回值 求10的10次方 f=lambda n:n**n print(f(10)) 注意: 函数名 ...
- springboot创建拦截器
一.创建一个MyIntercepor实现HandlerInterceptor接口的类 二.创建一个WebMvcConfig实现WebMvcConfigurer的类 ...