vi,java,ant 和Junit 的學習報告
1.vi編輯器
vi編輯器是Linux下的一款編輯器,類似於記事本,但是使用方式跟記事本完全是兩個方式
- 概念
vi分爲三種狀態,各模式的功能以及特點如下:
(1)命令行模式
這一模式也就是我們剛進入vi時候的模式,可以對行做複製,刪除等一系列操作
(2)插入模式
我們需要想vim中寫入的時候使用的就是插入模式,從命令行模式轉到插入模式通過i鍵實現,而退出該模式使用Esc鍵
(3)底行模式
將文件保存或退出vi,當然他還有其他功能:設置編輯環境,列出行號等,但是我們使用最多的還是保存文件並退出使用的命令是:wq!
- 基本操作
(1) 進入vi
在系統提示符號輸入vi及文件名稱後,就進入vi全屏幕編輯畫面是處於,此時處於命令行模式
(2)切換至插入模式
在命令行模式下按一下字母i就可以進入插入模式
(3) 退出vi及保存文件
在命令行模式下,按一下:鍵進入低行模式,並輸入命令,最常見的是下面兩個命令
- : wq 存盤並退出vi
- q! 不存盤退出vi
- 功能以及命令
h、j、k、l,控制光標左、下、上、右移一格(當然鍵盤也可以)
ctrl+b:向“後”移動一頁
ctrl+f:向“前”移動一頁
ctrl+u:向“後”移動半頁
ctrl+d:向“前”移動半頁
0:移到文章的開頭
G:移動到文章的最後
$:移動到光標所在行的末尾
^:移動到光標所在行的頭部
w:光標跳到下個字的開頭
e:光標跳到下個字的字尾
b:光標回到上個字的開頭
l:光標移到該行的第#個位置
x:每按一次,刪除光標所在位置的“後面”一個字符。
X:大寫的X,每按一次,刪除光標所在位置的“前面”一個字符。
dd:刪除光標所在行。
yw:將光標所在之處到字尾的字符複製到緩衝區中。
yy:複製光標所在行到緩衝區。
r:替換光標所在處的字符。
R:替換光標所到之處的字符,直到按下ESC鍵爲止。
w:在冒號輸入字母w就可以將文件保存起來。
q:按q就是退出,如果無法離開vi,可以在q後跟一個!強制離開vi。
wq:一般建議離開時,搭配w一起使用,這樣在退出的時候還可以保存文件。
以上大概就是vi所涉及到的常用操作命令了,當然我們用它大多數時候也就是改改環境變量,所以也用不上什麼太繁瑣的功能,不過vi作爲linux下的基本編輯器,相關知識還是要了解的
2.JAVA
JAVA是一門面向對象的編程語言,在語法上跟C++很類似,不過比C++多了UI方面的編程,略去了C++中複雜又容易使人出錯的指針
由於在大二的時候上過JAVA的專選,所以很多知識還是有印象的(雖然忘了很多)
安裝:現在不知道爲什麼JAVA官網下載安裝包需要Oracle賬號,於是乎在網上查到可以使用PPA來安裝,在安裝的時候沒有截圖不過安裝完之後如下
下面簡單編寫一個helloworld程序
這樣我們就可以編寫JAVA程序了,接下來重點說一下GUI方面的編程,因爲這方面接觸/使用都比較少
在這裏先介紹一下組件和容器相關的知識,在我們進行GUI編程時離不開這兩個概念
組件(component)是圖形界面的基本元素,用戶可以直接操作,例如按鈕。容器(Container)是圖形界面的的複合元素,容器可以包含組件,例如面板。
Java語言爲每種組件都預定義類,程序通過它們或它們的子類各種組件對象,如,Swing中預定義的按鈕類JButton是一種類,程序創建的JButton對象,或JButton子類的對象就是按鈕。Java語言也爲每種容器預定義類,程序通過它們或它們的子類創建各種容器對象。例如,Swing中預定義的窗口類JFrame是一種容器類,程序創建的JFrame或JFrame子類的對象就是窗口。
爲了統一管理組件和容器,爲所有組件類定義超類,把組件的共有操作都定義在Component類中。同樣,爲所有容器類定義超類Container類,把容器的共有操作都定義在Container類中。例如,Container類中定義了add()方法,大多數容器都可以用add()方法向容器添加組件。
Component、Container和Graphics類是AWT庫中的關鍵類。爲能層次地構造複雜的圖形界面,容器被當作特殊的組件,可以把容器放入另一個容器中。例如,把若干按鈕和文本框分放在兩個面板中,再把這兩個面板和另一些按鈕放入窗口中。這種層次地構造界面的方法,能以增量的方式構造複雜的用戶界面
而在這裏另外一個重要的概念就是監聽,當發生了一個事件的時候,比如點擊按鈕,需要有監聽器來檢測到這一事件,並根據這個事件作出應有的動作
java語言編寫事件處理程序主要有兩種方案:一個是程序重設handleEvent(Eventevt),採用這個方案的程序工作量稍大一些;另一個方案是程序實現一些系統設定的接口。java按事件類型提供多種接口,作爲監視器對象的類需要實現相應的接口,即實現響應事件的方法。當事件發生時,系統內設的handleEvent(Event evt)方法就自動調用監視器的類實現的響應事件的方法。
一個事件驅動程序要做的工作除創建源對象和監視器對象之外,還必須安排監視器瞭解源對象,或向源對象註冊監視器。每個源對象有一個已註冊的監視器列表,提供一個方法能向該列表添加監視器對象。只有在源對象註冊了監視器之後,系統纔會將源對象上發生的事件通知監視器對象。
在java語言中,爲了便於系統管理事件,也爲了便於程序作監視器註冊,系統將事件分類,稱爲事件類型。系統爲每個事件類型提供一個接口。要作爲監視器對象的類必須實現相應的接口,提供接口規定的響應事件的方法。
再以程序響應按鈕事件爲例,JButton類對象button可以是一個事件的激發者。當用戶點擊界面中與button對應的按鈕時,button對象就會產生一個ActionEvent類型的事件。如果監視器對象是obj,對象obj的類是Obj,則類Obj必須實現AWT中的ActionListener接口,實現監視按鈕事件的actionPerformed方法。button對象必須用addActionListener方法註冊它的監視器obj。
程序運行時,當用戶點擊button對象對應的按鈕時,系統就將一個ActionEvent對象從事件激發對象傳遞到監視器。ActionEvent對象包含的信息包括事件發生在哪一個按鈕,以及有關該事件的其他信息。
在這裏引用一張我在網上看到的圖片,對組件和事件類型都有一個很好的概括
有了這些知識,以及我們前面學習過的數據結構與算法等知識,我們就能夠寫出一個簡單的計算器了
3.Ant
Ant是一種小巧的,能把java文件編譯成爲class文件的工具,要配合xml文件使用,一般把這個文件起名字叫build.xml,它描述的是編譯時候的規則,跟C++中的makefile類似
先簡單介紹一下ant的基本元素
(1)project元素
project 元素是 Ant 構件文件的根元素, Ant 構件文件至少應該包含一個 project 元素,在每個 project 元素下,可包含多個 target 元素
- name 屬性
用於指定 project 元素的名稱。 - default 屬性
用於指定 project 默認執行時所執行的 target 的名稱。 - basedir 屬性
用於指定基路徑的位置。該屬性沒有指定時,使用 Ant 的構件文件的附目錄作爲基準目錄。
(2)target 元素
target爲Ant的基本執行單元,它可以包含一個或多個具體的任務。多個target 可以存在相互依賴關係。它有如下屬性:
- name 屬性
指定 target 元素的名稱,這個屬性在一個 project 元素中是唯一的。 - depends 屬性
用於描述 target 之間的依賴關係,若與多個 target 存在依賴關係時,需要以“,”間隔。 Ant 會依照 depends 屬性中 target 出現的順序依次執行每個 target 。被依賴的 target 會先執行。 - if 屬性
用於驗證指定的屬性是否存在,若不存在,所在 target 將不會被執行。 - unless 屬性
用於驗證指定的屬性是否存在,若不存在,所在 target 將會被執行。 - description 屬性
該屬性是關於 target 功能的簡短描述和說明。
接下來嘗試一下ant的使用,還是使用原來的helloworld程序,將其放置到src文件夾中
build.xml文件如下
<?xml version="1.0"?>
<project name="ant" basedir=".">
<target name="clean">
<delete dir="build"/>
</target>
<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes"/>
</target>
<target name="run">
<java classname="Helloworld">
<classpath>
<pathelement path="build/classes"/>
</classpath>
</java>
</target>
</project>
運行結果如下
4.Junit
Junit是我們用來編寫測試類的,通過這個工具以及測試代碼,我們可以實現測試
網上這方面的教程比較少,所以在學習這裏的時候遇到了一些困難
首先下載兩個東西
就是下圖中左上角和右下角那兩個
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳
下載地址
在這裏使用的還是HelloWorld,只不過在細節上有所不同
HelloWorld.java
import java.util.*;
public class HelloWorld {
String str;
public void hello() {
str = "HelloWorld";
}
public String getStr() {
return str;
}
}
HelloWorldTest.java
import static org.junit.Assert.*;
import org.junit.Test;
public class HelloWorldTest {
public HelloWorld helloworld = new HelloWorld();
@Test
public void testHello() {
helloworld.hello();
assertEquals("HelloWorld", helloworld.getStr());
}
}
這裏一方面是使用getStr函數來返回HelloWorld中字符串的值,另一方面通過assertEquals來進行對比
測試結果如下
至此,vi,JAVA,ant以及Junit的學習就告一段落了