Vim简介

Vim是一款上古编辑器,被广大程序员成为编辑器之神,这与之强大的编辑功能和编辑效率是分不开的。和Emace一样都在代码行业享有盛誉。vim最为重要的一点就是一切操作几乎可以舍弃鼠标,熟悉了vim命令的话,光靠键盘指令可以使开发效率迅速提高。

Vim的安装

Linux下

在Ubuntu平台下控制台敲入下列指令即可自动安装。

sudo apt-get install vim

Windows下

官网 直接下载使用。

Vim常用指令和教程

首先值得注意的一点就是其实vim是自带教程的Vimtutor,s使用方法是linux下输入命令vimtutor,即可开启教程,这属于官方教程, 最为详细,没有之一。

在这里介绍一些常用的vim命令,有利于快速上手vim。

1. 创建或打开文件 vim filename

vim helloworld.java

2.添加内容

一开始进入处于正常模式在编辑窗口直接输入i,a,o等字符可以进入输入模式,可以在屏幕下方看到insert单词。按左上角Esc键可以回到正常模式,使用各种方便的指令。以下指令均在正常模式下进行。

3.删除内容

dd可以删除光标所在的一整行。

ndd可以删除光标以下的n行

4. 复制内容

yy可以复制光标所在行的字符
nyy可以复制光标以下的n行字符

5.粘贴内容

p/P作用时粘贴字符,小写p将已复制的字符粘贴到光标以下,大写P将字符粘贴到光标以上。

6. 撤销内容

撤销指令使用u,类似于windows上的ctrl z`

7. 保存文件

先进入正常模式Esc,然后输入:。然后输入:

  • q 离开vim
  • w 保存内容
  • wq 保存内容并离开vim,回到命令行

其他还有许多可以提高效率的指令在这里就不多赘述啦。


Java知识入门

###初探java

从hello world入门, 初步体会java这一门面向对象编程语言。在HelloWorld.java文件中键入以下代码。(注意文件名称必须和类名一致)

1
2
3
4
5
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}

其中用到的编译指令是

javac HelloWorld.java

命令行没有弹出其他消息,即为编译成功。

执行指令是

java HelloWorld

这里用到两个重要指令javac java ,分别是编译和执行指令。

###基础知识

由于已经学习过C++,java语言在一定程度上和C++是类似的,所以在Java入门学习上可以直接跳过基础语法,对象和类,基本数据类型,运算符,循环结构,分支结构。

Java面向对象

java继承

java继承的概念和C++类似,同样是定义一个父类,然后定义一个子类,来继承父类的属性,和C++不同的是,java用关键字extends 来表示继承关系。继承格式是

1
2
3
4
5
6
7
class 父类  {

}

class 子类 extends 父类 {

}

####继承的特性

  • 子类拥有父类非private的属性,方法。

  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。

  • 子类可以用自己的方式实现父类的方法。

  • Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性。

  • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)。

####继承的关键字

关键字 作用
extends 单一继承
implements 继承多个父类
super 实现对父类父类成员的访问,引用父类
this 指向自己的引用
final 将自身定义为不可继承的类

java重写和重载

重写

#####重写含义

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。。

重写方法的原则
  • 参数列表必须完全与被重写方法的相同;
  • 返回类型必须完全与被重写方法的返回类型相同;
  • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
  • 父类的成员方法只能被它的子类重写。
  • 声明为final的方法不能被重写。
  • 声明为static的方法不能被重写,但是能够被再次声明。
  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
代码实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Animal{
public void move(){
System.out.println("动物可以移动");
}
}

class Dog extends Animal{
public void move(){
super.move(); // 应用super类的方法
System.out.println("狗可以跑和走");
}
}

public class TestDog{
public static void main(String args[]){
Animal b = new Dog(); // Dog 对象
b.move(); //执行 Dog类的方法

}
}

运行的结果是

狗可以跑和走

可以看到在Dog类中重写了move()方法,传入的参数和返回类型和原来父类的方法一致,但内部代码可以修改。

####重载

#####重载含义

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

重载的规则
  • 被重载的方法必须改变参数列表(参数个数或类型或顺序不一样);
  • 被重载的方法可以改变返回类型;
  • 被重载的方法可以改变访问修饰符;
  • 被重载的方法可以声明新的或更广的检查异常;
  • 方法能够在同一个类中或者在一个子类中被重载。
  • 无法以返回值类型作为重载函数的区分标准。
代码实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Overloading {
public int test(){
System.out.println("test1");
return 1;
}

public void test(int a){
System.out.println("test2");
}

//以下两个参数类型顺序不同
public String test(int a,String s){
System.out.println("test3");
return "returntest3";
}

public String test(String s,int a){
System.out.println("test4");
return "returntest4";
}

public static void main(String[] args){
Overloading o = new Overloading();
System.out.println(o.test());
o.test(1);
System.out.println(o.test(1,"test3"));
System.out.println(o.test("test4",1));
}
}

运行结果是

test1

test2

test3

test4

从运行结果看,调用的传参不同的函数顺序执行。

多态

多态就是对象多种表现形式的体现。

#####多态存在的三个必要条件

  • 继承
  • 重写
  • 父类引用指向子类对象

这里提供一份代码以便理解。大意就是一个抽象父类声明但不定义一个方法,在其他子类中可以重写这个方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
abstract class Animal {  
abstract void eat();
}

class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
public void work() {
System.out.println("抓老鼠");
}
}

class Dog extends Animal {
public void eat() {
System.out.println("吃骨头");
}
public void work() {
System.out.println("看家");
}
}

###java组件部分设计

Swing

在本次实训实验中利用了Swing这个java的GUI工具包,以实现一个简单的计算器。其中的主要用途是引用这些包的相关控件,控件的相关接口,同时给这些控件注册事件,建立事件处理逻辑。

介绍控件,首先应提到JComponet

JComponent

Swing 的整个可视组件库的基础构造块是 JComponent。它是所有组件的父类。它是一个抽象类,所以不能创建 JComponent,但是作为类层次结构的结果,从字面意义来说它包含了数百个函数,Swing 中的每个组件都可以使用这些函数。

注意: 每一个控件都是一个类,具有许多接口函数,在eclipes这个IDE上可以轻松获取。使用方法:鼠标移动到某一个控件类名,按ctrl键点击类名,即可弹出这个控件类里头详细的函数定义。

常用的控件集合

控件 用途
JLabel 用作文本描述
JButton 按钮
JFrame 窗口
JPanel 控件容器
JTextField 文本输入框
JCheckBox 确认框
GridLayout 生成网格状的布局

Tips: 任何一个控件都有Add()的方法,意味着每一个控件都可以添加到另外一个控件里。

注册事件的方法

以下以button为例,进行两种常用方式的注册。

方法1 匿名内部类实现
1
2
3
4
5
6
button.addActionListener(  
new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.out.println("你按了按钮一");
}
}); //调用监听函数并定义监听事件
方法2 利用一般内部类实现
1
2
3
4
5
6
7
button.addActionListener(new Button2ActionListener()); 

private class Button1ActionListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
System.out.println("你按了按钮一");
}
} //将事件处理为一个类事件

用了以上的基础知识就可以解决一个简单计算器的实现啦。

Junit 学习和使用

###Junit是什么

JUnit是用于编写和运行可重复的自动化测试的开源测试框架, 这样可以保证我们的代码按预期工作。JUnit可广泛用于工业和作为支架(从命令行)或IDE(如Eclipse)内单独的Java程序。

JUnit提供:

  • 断言测试预期结果。
  • 测试功能共享通用的测试数据。
  • 测试套件轻松地组织和运行测试。
  • 图形和文本测试运行。

JUnit用于测试:

  • 整个对象

  • 对象的一部分 - 交互的方法或一些方法

  • 几个对象之间的互动(交互)

###JUnit的特点

  • JUnit是用于编写和运行测试的开源框架。
  • 提供了注释,以确定测试方法。
  • 提供断言测试预期结果。
  • 提供了测试运行的运行测试。
  • JUnit测试让您可以更快地编写代码,提高质量
  • JUnit是优雅简洁。它是不那么复杂以及不需要花费太多的时间。
  • JUnit测试可以自动运行,检查自己的结果,并提供即时反馈。没有必要通过测试结果报告来手动梳理。
  • JUnit测试可以组织成测试套件包含测试案例,甚至其他测试套件。
  • Junit显示测试进度的,如果测试是没有问题条形是绿色的,测试失败则会变成红色。
注解 描述
@Testpublic void method() 测试注释指示该公共无效方法它所附着可以作为一个测试用例。
@Beforepublic void method() Before注释表示,该方法必须在类中的每个测试之前执行,以便执行测试某些必要的先决条件。
@BeforeClasspublic static void method() BeforeClass注释指出这是附着在静态方法必须执行一次并在类的所有测试之前。发生这种情况时一般是测试计算共享配置方法(如连接到数据库)。
@Afterpublic void method() After 注释指示,该方法在执行每项测试后执行(如执行每一个测试后重置某些变量,删除临时变量等)
@AfterClasspublic static void method() 当需要执行所有的测试在JUnit测试用例类后执行,AfterClass注解可以使用以清理建立方法,(从数据库如断开连接)。注意:附有此批注(类似于BeforeClass)的方法必须定义为静态。
@Ignorepublic static void method() 当想暂时禁用特定的测试执行可以使用忽略注释。每个被注解为@Ignore的方法将不被执行。