GridWorld 阶段一学习报告
vi/vim 编辑器
简介
vi 编辑器是所有 Unix 及 Linux 系统下标准的编辑器, vim 编辑器是 vi 的升级版,增加了一些功能,同时完全兼容 vi 命令。
在命令行下通过 vi 文件名 或 vim 文件名 指令打开 vi/vim 编辑器。
vi/vim 编辑器的三种模式
(1) 一般模式
打开 vi/vim 编辑器后的默认模式。
在一般模式中可以进行删除、复制、粘贴,但是无法编辑文件内容。
(2) 编辑模式
在一般模式下输入i | I | o | O | a | A | r | R 切换到编辑模式。
在编辑模式中可以编辑文件内容。
按 Esc 键返回一般模式。
(3) 命令行模式
在一般模式下输入: | / | ? 切换到命令行模式。
在命令行模式下可以进行查找数据、读取、保存、大量替换字符、离开编辑器、显示行号等操作。
按 Esc 键返回一般模式。
vi/vim 编辑器的常用命令
(1) 移动光标
[Ctrl]+[f] :屏幕向下移动一页。
[Ctrl]+[b] :屏幕向上移动一页。
0 :移动到本行第一个字符处。
$ :移动到本行最后一个字符处。
G :移动到此文件最后一行。
gg | 1G :移动到此文件第一行。
N+[Enter] :N 为数字,光标向下移动 N 行。
(2) 查找与替换
/word :向下寻找一个名称为 word 的字符串。
?word :向上寻找一个名称为 word 的字符串。
:n1,n2s/word1/word2/g :在第 n1 行和 n2 行之间寻找 word1 这个字符串,并且将其替换为 word2。
:1,$s/word1/word2/g :从第一行到最后一行寻找 word1 这个字符串,并且将其替换为 word2。
:1,$s/word1/word2/gc :从第一行到最后一行寻找 word1 这个字符串,并且将其替换为 word2。且在替换前显示提示字符给用户确认是否需要替换。
(3) 删除、复制和粘贴:
x,X :在一行字中,x 为向后删除一个字符(相当于 [Del] 键),X 为向前删除一个字符(相当于 [Backspace] 键)。
dd :删除光标所在的一整行。
ndd :删除光标所在的向下n行。
yy :复制光标所在的一行。
nyy :复制光标所在的向下n行。
p,P :p 为将已复制的内容在光标的下一行粘贴,P 则为粘贴在光标的上一行。
u :复原前一个操作。
[Ctrl]+r :重做上一个操作。
. :小数点,重复前一个操作。
(4) 编辑模式
i,I :进入插入模式,i 为从目前光标所在处插入。I 为在目前所在行的第一个非空格字符处开始插入。
a,A :进入插入模式。a 为从目前光标所在处的下一个字符处开始插入。A 为从所在行的最后一个字符处开始插入。
o,O :进入插入模式。o 为在下一行插入。O 为在上一行插入。
r,R :进入替换模式。r 只替换光标所在那个字符一次。R 会一直替换光标所在字符,直到按下 Esc 键。
(5) 保存和退出
:w :将编辑的数据写入到硬盘中。
:q :离开vi。后面加 ! 为强制离开。
:wq :保存后离开。:wq! 为强制保存后离开。
JAVA 语言
简介
java是一门面向对象编程语言,吸收了C/C++的优点,摒弃了C/C++复杂的指针等内容,也不需要用户手动释放内存空间。java本身还具备了很强的可移植性,通过将源代码编译成二进制字节码,然后通过不同平台的java虚拟机来解释执行字节码,从而实行了“一次编译,到处执行”的跨平台特性。
Java的应用领域非常广泛。可以做应用系统、互联网网站、以及移动端的安卓等。
JAVA 语法重难点
(1) 显式初始化
声明数据成员同时,提供数据成员的初始值。
(2) 方法重载
Java 会同时根据方法名和参数列表来决定所要调用的方法,即可以存在方法名相同、参数列表不同的两个或多个方法。
(3) 接口
在interface中,我们
- 不需要定义方法的主体
- 方法默认为public
形如:
implements interface1, interface2, ...
(4) 继承
代码复用的一种方式,区别于 C++ ,Java 的每个衍生类只能有一个基类。形如:
class derived_class extends base_class
用super关键字来指代基类对象,使用super.member的方式来表示基层的(public)成员。
由于在创建衍生对象的时候,基类对象先被创建和初始化,所以,基类的构造方法应该先被调用。我们可以使用super(argument list)的语句,来调用基类的构造方法。
(5) 方法覆盖
如果方法名和参数列表都相同 ,Java会呈现衍生层的方法,而不是基层的方法。
(6) 类数据/类方法
利用static关键字,来声明类数据成员,表示类的所有对象共享的成员
如果一个方法声明为static,那么它只能调用static的数据和方法,而不能调用非static的数据和方法。 事实上,在static方法中,将没有隐式传递的this和super参数。我们无从引用属于对象的数据和方法 .
调用类方法时,我们可以通过class.method()的方式调用,也可以通过object.method()的方式调用。
对象方法可以访问类数据。
(7) final 关键字
final关键字的基本含义是: 这个数据/方法/类不能被改变了。
final基本类型的数据: 定值 (constant value),只能赋值一次,不能再被修改。final方法: 该方法不能被覆盖。private的方法默认为final的方法。final类: 该类不能被继承。
(8) 多重继承
在Java类的继承中,一个衍生类只能有一个基类,然而,interface可以同时继承多于一个interface。
(9) 抽象类
Java中提供了抽象类(abstract class)的语法,用于说明类及其方法的抽象性。 一个abstract类不能用于创建对象。形如:
abstrct class classname
(10) 引用
当我们将一个引用赋值给另一个引用时,我们实际上复制的是对象的地址。两个引用将指向同一对象。
(11) 参数传递
Java的参数传递为值传递。也就是说,当我们传递一个参数时,方法将获得该参数的一个拷贝。引用的值传递,意味着对象的地址被复制,并传递给Java方法。Java方法根据该引用的访问将会影响对象。
(12) 类型转换
从一个高精度类型转换到低精度类型,比如从float转换到int,那么我们有可能会损失信息。这样的转换叫做收缩变换(narrowing conversion)。这种情况下,我们需要显示的声明类型转换 。
如果我们从低精度类型转换成高精度类型,则不存在信息损失的顾虑。这样的变换叫做宽松变换(widening conversion)。我们不需要显示的要求类型转换,Java可以自动进行 。
我们可以将一个衍生类引用转换为其基类引用,这叫做向上转换(upcast)或者宽松转换。 即使我们经过upcast,将引用的类型宽松为其基类,Java依然能正确的识别对象本身的类型,并调用正确的方法。Java可以根据当前状况,识别对象的真实类型,这叫做多态(polymorphism)。
(13) Object 类
Java中,所有的类实际上都有一个共同的继承祖先,即Object类。Object类提供了一些方法,比如toString()。我们可以在自己的类定义中覆盖这些方法。
(14) GUI
图形树 JFrame -> Content Pane -> JButton。
Content Pane的setLayout()方法决定了元素的布局(layout)方式。布局决定了元素的位置。
除了按钮之外,我们还可以在GUI中增加更多的元素,这些元素大都是JComponent的衍生类。
Ant 环境
简介
Ant 是 JAVA 的生成工具,是 Apache 的核心项目。
Ant 类似于与 Unix 中的 Make 工具,都是用来编译、生成。
配置 Ant 环境
(1) 配置好 JAVA 环境;
(2) 新建环境变量 ANT_HOME ,值为 Ant 的主目录;
(3) 在 path 中配置 %ANT_HOME%/bin ;
(4) 配置完成后,在命令行输入 ant。若出现 “ Buildfile: build.xml does not exist! Build failed ”时说明配置完成。
Ant 生成文件
Ant 的默认生成文件为 build.xml,可以通过 ant -f a.xml 指定生成文件为 a.xml 。
Ant 的生成文件是 xml 文件,整体结构为:
<?xml version="1.0" encoding="GBK"?>
<project default="targetname">
<target name="name">
</target>
</project>
(1) <project> 元素
Ant 生成文件的根元素,形如:
<project default="targetname" [basedir="."][name="projectname"]>
</project>
default 是默认执行的 target 名;
basedir 是指定基准目录;
name 是工程名。
(2) <target> 元素
<project> 元素的子元素,在<project> 元素下可以有多个 <target>,形如:
<target name="projectname" [depends=""] [if="prop1"] [unless="prop2"]>
</target>
name 表示 target 名称;
depends 为依赖 target 名称(可以有多个依赖,以逗号分割)。只有在依赖 target 完成后,才能做该 target;
if 值为一个属性名,只有设置了该属性,才能执行该 target;
unless 值为一个属性名,只有没有设置该属性,才能执行该 target。
(3) <property> 元素
<project> 元素的子元素,用于定义属性,形如:
<property name="pname" value="pvalue"/>
通过 ${pname} 使用此 <property> 元素。
通过属性文件 a.properties 导入属性,如下:
<property file="a.properties"/>
(4) Task
<target> 元素的子元素,以下介绍一些常用的核心 Task。
a. <echo>
用于输出,形如:
<echo>string</echo>
b.<javac>
用于编译 java 文件,形如:
<javac srcdir="src" destdir="class" [classpath=" "]/>
srcdir 表示编译此文件夹下全部 java 文件;
destdir 表示编译后的 class 文件存储路径;
classpath 指定第三方类库。
c. <java>
运行 java 类,形如:
<java classname="" fork="yes">
[<arg line="param1 param2 param3"/>]
</java>
classname 用于指定运行的类的名称;
fork="yes" 表示另起一个 JVM 来执行 java 命令,而不是中断 Ant 命令。
d. <jar>
打包成 jar 包,形如:
<jar destfile="main.jar" basedir="">
<manifest>
<!--指定主类-->
<attribute name="Main-Class" value="classname"/>
</manifest>
</jar>
destfile 指定 jar 包的名称,一般为 ${dest}/main.jar;
basedir 指定需要打包的目录,一般为 ${class};
manifest 表示设置 META-INF。
e. <mkdir>
创建目录,形如:
<mkdir dir="a\b\c" />
f. <delete>
删除目录,形如:
<delete dir="a\b"/>
删除文件,形如:
<delete file="1.txt"/>
g. <tstamp>
时间戳,形如:
<tstamp/>
接下来可以使用 ${DSTAMP} 调用当前时间。
h. <copy>
复制文件,形如:
<copy file="file1" tofile="file2"/>
file 是源文件;
tofile 是目标文件。
i. <move>
移动文件,形如:
<move file="file1" tofile="file2"/>
file 是源文件;
tofile 是目标文件。
j. <replace>
用于替换字符串,形如:
<replace file="filename" token="old" value="new"/>
file 表示要执行替换的文件;
token 表示被替换的字符串;
value 表示替换的字符串。
一般项目中的 Ant 结构
<project default="init">
<property name="src" value="src"/>
<property name="classes" value="classes"/>
<property name="dest" value="dest"/>
<path id="classpath">
<pathelement path="${classes}"/>
</path>
<target name="help">
<echo>help -打印帮助信息</echo>
<echo>compile -编译java源文件</echo>
<echo>run -运行程序</echo>
<echo>build -打成jar包</echo>
<echo>clean -清除全部编译生成文件</echo>
</target>
<target name="compile">
<delete dir="${classes}"/>
<mkdir dir="${classes}"/>
<javac srcdir="${src}" destdir="${classes}"/>
</target>
<target name="run" depends="compile">
<java classname="org.xiazdong.Test" fork="yes">
<classpath path="${classes}"/>
</java>
</target>
<target name="build" depends="run">
<delete dir="${dest}"/>
<mkdir dir="${dest}"/>
<jar destfile="${dest}/Test.jar" basedir="${classes}">
<manifest>
<attribute name="Main-Class" value="org.xiazdong.Test"/>
</manifest>
</jar>
</target>
<target name="clean">
<delete dir="${classes}"/>
<delete dir="${dest}"/>
</target>
</project>
运行 Ant
在当前目录下的 build.xml 运行 Ant ,执行缺省的 target。
ant
在当前目录下的 build-test.xml 运行 Ant,执行缺省的 target。
ant -buildfile build-test.xml
在当前目录下的 build-test.xml 运行 Ant,执行名称为 clean 的 target。
ant -buildfile build-test.xml clean
在当前目录下的 build-test.xml 运行 Ant,执行名称为 clean 的 target,设定属性 build 的值为 build/classes。
ant -buildfile build-test.xml -Dbuild=build/classes clean
在 Eclipse 中使用 Ant
(1) 点击 window->preferences->General->editors->file associations;
(2) 在 File types 中创建一个 build.xml ,并将 associated editor 的默认项设置为 ant editor 即可;当在项目中创建一个 build.xml 时,这个文件就是 ant 的生成文件。
Junit
简介
Junit 是一个单元测试的工具,可以用来检验程序中的方法是否符合预期。
在 Eclipse 导入 Junit
下载 eclipse 的 Junit 插件,放置在 eclipse 安装文件夹下的 plugins 文件夹中。
右键待测试的项目 -> Properties -> build path -> Junit,将 Junit 导入工程。
编写测试类
import org.junit.Test;
public class Test {
@Test
public void test1() {
assertEquals(expected_result, new test_class().test_method(args));
}
}
运行测试类
右键测试类 -> Run As -> JUnit Test
测试结果分析
(1) Runs:表示总共有几个测试方法,已经运行了几个;
(2) Errors:表示抛出异常的测试方法的个数;
(3) Failures:表示失败的测试方法的个数;
(4) 打钩:表示通过测试方法。
Eclipse 自动生成测试类
右键被测试的类 -> New -> Other ->JUnit Test Case -> 选择要测试的方法 -> 自动生成测试类。
参考资料
[2] Ant是什么?
[3] Junit使用的超简单介绍
[4] java基础入门(一)
本文深入讲解了Vi/Vim编辑器的基础操作,包括三种模式的切换与常用命令,以及Java语言的关键概念,如面向对象编程、类与接口、继承与多态等。此外,还介绍了Ant构建工具的配置与使用,以及JUnit单元测试的基本操作。

4307

被折叠的 条评论
为什么被折叠?



