vi, Java, Ant, Junit自學報告 - 實訓week1

vi, Java, Ant, Junit自學報告

2017軟件工程實訓 15331023 陳康怡html

vi

Vi是linux系統的標準文本編輯器,採用指令的方式進行操做,此處僅記錄部分經常使用的指令。java

vi模式

vi編輯器分爲三種模式:linux

(1)命令行模式 command modeweb

命令行模式可控制光標移動,刪除字符、字、行,複製剪切等操做。在命令行模式下按i進入插入模式,按:進入底行模式。編程

(2)插入模式 insert modeapi

在插入模式下,能夠進行文字輸入。在插入模式下,按Esc回到命令行模式。安全

(3)底行模式 last lint modeoracle

主要進行保存退出的操做,也能夠設置編輯環境。框架

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());;
                }
            }           
        });
    }
}
相關文章
相關標籤/搜索