2006-8-21
知识总结
l
Ant
构件工具
1
、配置
path:
path
等于
apache-ant-
1.6.5
中
bin
文件所在目录下。如
C:/apache-ant-1.6.5/bin
2
、配置
JAVA_HOME
因为
ant.bat
批处理程序中已经有
JAVA_HOME
的配置,但是路径不一定对,所以配置
JAVA_HOME
的配置要看具体情况,可以不配置,未免出错要求配置。
JAVA_HOME
等于在
java/jdk/lib
目录下,主要是在
ant
运行时去调用
java
中(如
tools.jar
包中类)的类去实现。如可设置为:
C:/Program Files/Java/jdk1.5.0_01
或者
C:/Program Files/Java/jdk1.5.0_01/lib
(可能是因为系统将自动去寻找
jdk1.5.0_01
下的
lib
文件下的
java
类包)
3
.批处理中的部分命令:如
@echo off
他下面的命令不显示
, echo
命令打印并执行命令
.
4
.配置
build.xml
其中常用的格式为:
<?xml version="1.0" encoding="gb2312" ?>
<!--
资源文件
-->
<”default”
属性值指明该工程运行的项目,该属性可以不指定
>
<project name="Lesson1" default="run" >
<property file="build.properties"/>
<!--
建目录
-->
<target name="init">
<mkdir dir="class" />
</target>
<!--
编译文件,
srcdir
设置源文件目录,
destdir
设置生成
.class
目标文件目录
-->
<target name="compile" depends="init" >
<javac srcdir="${dir.src}" destdir="${dir.class}" />
</target>
<!--
运行文件
,depends
设置本操作依靠于
compile
操作,即运行到本操作时将根据
depends
属性跳转到先去执行
comlile
操作,等
complie
完成后才执行本操作,把
complie
作为本操作运行的前提,
classpath
属性设置运行文件所在目录
>
<target name="run" depends="compile" >
<java classname="Hello" classpath="${dir.class}" />
</target>
<!--
删除文件
-->
<target name="delete" depends="run">
<delete includeEmptyDirs="true">
<fileset dir="${dir.class}" includes="*/**"/>
</delete>
</target>
</project>
其中的每个目标操作其实都对应着一个
java
类,所以
ant
的可扩展性很强,可以自己编写一个类让
ant
去调用从而实现自己想让实现的功能。其中的类明那些变量应该用
build.properties
文件配置,这样可扩展性强。其他属性请参考
ant
帮助。
5
、补充:
Properties
的实现与作用:
a.
实现:可在当前目录下创建一个
build.properties
的文件
(
扩展名为
.properties)
,在此文件中添加值(如:
dir.class = class
)
.
然后在当前
build.xml
文件中创建一
<property></property>
标签对,在其中设置
file
属性,值设置为目录下的
build.properties
(如不同一目录下将在前添加相对路径)。
b.
作用:当在大量处理相同路径下的文件时,可通过改动
build.properties
中的值从而改变所有在
build.xml
中的所有相关的项。
例如:
built.porperties
中对应值为:
dir.src = src
dir.class = class (
其中,
src
代表源文件夹、
class
代表目标文件夹
)
built.xml
文件对应代码如下:
<project name = "testAnt" default = "run">
<property file = "build.properties" /> <!-- properties
在
built.xml
中的引用
-->
<target name = "make">
<mkdir dir = "class"></mkdir>
</target>
<target name = "complie">
<
固定格式:
${}
,在
{}
中添加
built.porperties
中的值
>
<javac srcdir = "${dir.src}" destdir = "${dir.class}" />
</target>
<target name = "run" depends = "complie">
<java classname = "Hello" classpath = "class" />
</target>
</project>
6
、
include
和
exclude
的运用:
例如:
<classpath>
<pathelement path="${classpath}"/>
<fileset dir="lib">
<include name="**/*.jar"/>
</fileset>
<pathelement location="classes"/>
<dirset dir="${build.dir}">
<include name="apps/**/classes"/>
<exclude name="apps/**/*Test*"/>
</dirset>
<filelist refid="third-party_jars"/>
</classpath>
说明:
a.
name="**/*.jar"
表示:
当前目录下以及所有“子子孙孙”目录下以“
.jar
”为扩展名的所有文件。其中“
**
”
当前目录下以及所有“子子孙孙”目录下的文件,“
*.jar
”表示所有以“
.jar
”为扩展名的文件,
b.
name="apps/**/*Test*”
表示:
apps
所有“子子孙孙”目录下的文件名中包含“
Test
”的的所有文件。其中“
**
”表示
apps
的所有“子子孙孙”目录下的文件。
l
专家模式:谁最了解,持有数据,就让谁处理该事件,这就叫专家模式。
例如:
a.
电视和关电视的人?
——由于是电视清楚关电视的操作,了解关电视的过程,因此电视去关而不是人去关,人只是发出了一个关电视的动作,具体怎么进行关电视的操作而是有电视去实施的。
b.
票据和售货员?
——由于票据持有所有有关数据,因此在统计总额时是又票据去进行数据处理,而不是人,人只是可能发出统计的命令。
c.
门与关门的人?
——由于门自己最清楚自己的构造,怎么样才能关上门,因此是又门去处理关门这一事件,而不是人,人只可能发出关门的命令,而具体怎么关是有门去实施。
l
类复制的应用(克隆):
用于保证程序的稳定性,例如如果在多线程中
2
个线程同时超做一个对象的时候为了保证结果的稳定,所以可以考虑复制对象,当然也可以用
syschronized
保证线程同步。
例如:
class Student
{
private String name;
private int age;
private Thread t;
protect Object clone() throws CloneNotSupportedException
{
Student another = new Student();
another.name = this.name;
another.age = age;
}
}
学习感言:
今天是忙碌的一天,思考没停止过,手没停止过,现在已经快凌晨一点了,一会也该洗澡睡觉了。
今天是充实的一天,学习了不少新知识,让我经历从不知道
Ant
构架工具到了解和会使用的过程,最后能自己发现问题,解决问题和总结问题。
这次学习班中很厉害的同学很多,他们都成为了我的好朋友,他们都很热情和主动的帮助我解决疑难,相信在张老师的教学中和这些好朋友的帮助下,我很有信心学习好。