<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>前前</title>
    <description>喜欢Java，愿和大家一起进步！</description>
    <link>http://toyota2006.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>UNIX常用命令 （转载收藏）</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/117605" style="color:red;">http://toyota2006.javaeye.com/blog/117605</a>&nbsp;
          发表时间: 2007年08月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="quote_title">引用</div><div class="quote_div"><pre name="code" class="java">UNIX常用命令

第一章 目录及文件操作命令

1.1 ls

[语法]： ls [-RadCxmlnogrtucpFbqisf1] [目录或文件......]
[说明]： ls 命令列出指定目录下的文件，缺省目录为当前目录 ./，缺省输出顺序为纵向按字符顺序排列。
-R 递归地列出每个子目录的内容
-a 列出所有文件，包括第一个字符为“.”的隐藏文件
-d 若后面参数是目录，则只列出目录名而不列出目录内容，常与-l选项连
用以显示目录状态。
-C 输出时多列显示
-x 横向按字符顺序排列
-m 输出按流式格式横向排列，文件名之间用逗号(，)分隔
-l 长列表输出，显示文件详细信息，每行一个文件，从左至右依次是：
文件存取模式 链接数 文件主 文件组 文件字节数 上次修改时间
其中文件存取模式用10个字母表示，从左至右的意义如下：
第一个字母表示文件种类，可以是以下几种情况：
d 为目录文件
l 为链接
b 为块文件
c 为字符型文件
p 为命名管道（FIFO)
- 为普通文件
后面9个字母分别表示文件主、同组用户、其他用户对文件的权力，用r表示可读，w 表示可写，x 表示可执行。如果是设备文件，则在文件字节数处显示：主设备 从设备。
-n 与-l选项相同，只是文件主用数字(即UID)显示，文件组用数字
(即GID)表示
-o 与-l选项相同，只是不显示文件组
-g 与-l选项相同，只是不显示文件主
-r 逆序排列
-t 按时间顺序排列而非按名字
-u 显示时间时使用上次访问时间而非上次修改时间
-c 显示时间时使用上次修改i节点时间而非上次修改时间
-p 若所列文件是目录文件，则在其后显示斜杠(/)
-F 在目录文件后加’/’，在可执行文件后加’*’
-b 文件名中若有非打印字符，则用八进制显示该字符
-q 文件名中的打印字符用’?’表示
-i 显示节点号
-s 显示文件长度时使用块长度而非字节长度
-f 将后面的参数解释为目录并列出其中的每一项
-1 每行仅列一项
[例子]:
ls 列出当前目录下的文件
ls -al /bin 以长列表的形式列出目录 /bin 下的所有文件，包括隐藏文件


1.2 pwd

[语法]: pwd
[说明]： 本命令用于显示当前的工作目录
[例子]:
pwd 显示出当前的工作目录


1.3 cd

[语法]: cd [目录]
[说明]：本命令用于改变当前的工作目录，无参数时使用环境变量$HOME 作为其参数，$HOME 一般为注册时进入的路径。
[例子]：
cd 回到注册进入时的目录
cd /tmp 进入 /tmp 目录
cd ../ 进入上级目录
1.4 mkdir

[语法]: mkdir [-m 模式] [-p] 目录名
[说明]: 本命令用于建立目录，目录的存取模式由掩码（umask)决定，要求对其父目录具有写权限，目录的UID和GID为实际UID和GID
-m 按指定存取模式建立目录
-p 建立目录时建立其所有不存在的父目录
[例子]:
mkdir tmp 在当前目录下建立子目录 tmp
mkdir -m 777 /tmp/abc 用所有用户可读可写可执行的存取模式
建立目录 /tmp/aaa ，存取模式参看命令 chmod
mkdir -p /tmp/a/b/c 建立目录 /tmp/a/b/c ，若不存在目录 /tmp/a
及/tmp/a/b 则建立之


1.5 rmdir

[语法]: rmdir [-p] [-s] 目录名
[说明]: 本命令用于删除目录
-p 删除所有已经为空的父目录
-s 当使用-p 选项时，出现错误不提示
[例子]:
rmdir /tmp/abc 删除目录 /tmp/abc
rmdir -p /tmp/a/b/c 删除目录 /tmp/a/b/c ，若目录 /tmp/a /b
及/tmp/a 空，则删除



1.6 cat

[语法]: cat [-u] [-s] [-v[-t] [-e]] 文件...
[说明]: 显示和连接一个或多个文件至标准输出
-u 无缓冲的输出(缺省为有缓冲输出)
-s 对不存在的文件不作提示
-v 显示出文件中的非打印字符，控制字符显示成^n ，n为八进制数字，
其他非打印字符显示成M-x ， x 为该字符低7位的8进制数值
-t 在使用-v 选项时，将制表符（tab） 显示成 ^I，将换页符
（formfeed）显示成 ^ L
-e 在使用-v 选项时，在每一行的行尾显示 $
[例子]:
cat file 显示文件
cat -s -v -e file1 file2 file3 逐个显示文件 file1 file2 file3


1.7 head

[语法]: head [-n] [文件 ...]
[说明]: 将文件的头n 行显示输出,缺省值为 10 行，显示多个文件时，在每个文件的前面加上 ==>; 文件名 &lt;==
[例子]：
head -9999 file1 file2 显示文件 file1 和 file2 的头 9999 行


1.8 more

[语法]: more [-cdflrsuw] [－ 行数] [ 行数] [ / 模式 ] [ 文件 ... ]
[说明]: 将文件显示在终端上，每次一屏，在左下部显示 －－more－－，若是从文件读出而非从管道，则在后面显示百分比，表示已显示的部分，按回车键则上滚一行，按空格键则上滚一屏，未显示完时可以使用more 命令中的子命令。
-c 显示文件之前先清屏
-d 当输错命令时显示错误信息而不是响铃(bell)
-f 不折叠显示长的行
-l 不将分页控制符(CTRL D)当作页结束
-r 一般情况下，more 不显示控制符，本选项使more 显示控制符，
例如，将 (CTRL C) 显示成 ^ C
-s 将多个空行转换成一个空行显示
-u 禁止产生下划线序列
-w 一般情况下 more 显示完后立即推出，本选项在显示完后作提
示，敲任意键后推出
-n 行数 指定每屏显示的行数
行号 从指定行号开始显示
/模式 在文件中搜索指定模式，从模式出现行的上两行开始显示 文件未显示完时，可以使用more 命令中的子命令，命令中除了! 和 / 以外均不回显，也不用敲回车，当命令破坏 more 提示行时，可用退格键恢复提示行。在以下子命令操作中，i 表示数字，缺省值为 1。
i 空格 上滚一屏多 i 行
i 回车 上滚 i 行
i CTRL D i 缺省时上滚 11 行，否则上滚 i 行
id i 缺省时上滚 11 行，否则上滚 i 行
iz i 缺省时上滚一屏，否则定义每屏为 i 行
is 跳过 i 行后显示一屏
if 跳过 i 屏后显示一屏
i CTRL B 跳回 i 屏后显示一屏
b 跳回 一屏后显示一屏
q 或 Q 推出 more
= 显示当前行号
v 从当前行开始编辑当前文件编辑器由环境变量
$EDITOR定义
h 显示帮助信息
i / 模式 向前搜索，直至模式的第 i 次出现 ， 从该行的上 两行开始显示一屏
in 向前搜索，直至上一模式的第 i 次出现 ， 从该行 的上两行开始显示一屏
单引号 回到上次搜索的出发点，若无搜索则回到开始位置
! 命令 激活一个sh 去执行指定的命令
i ： n 跳到后面第 i 个文件，若不存在则跳到最后一个文件
：f 显示当前文件名和行号
：q 或 ：Q 推出 more
. (点) 重复上次命令
[ 例子]:
more -c 50 file 清屏后，从第50行开始显示文件 file
more -s -w file1 file2 file3 显示文件 file1 file2 file3


1.9 cp

[语法]: cp [ -p ] [ -r ] 文件 1 [ 文件 2 ...] 目标
[说明]: 将文件1(文件2 ...)拷贝到目标上，目标不能与文件同名， 若目标是文件名，则拷贝的文件只能有一个，若目标是目录，则拷贝的文件可以有多个，若目标文件不存在，则建立这个文件，若存在，则覆盖其以前的内容，若目标是目录，则将文件拷贝到这个目录下。
- i 在覆盖已存在文件时作提示，若回答 y 则覆盖，其他则中止
- p 不仅拷贝文件内容，还有修改时间，存取模式，存取控制表， 但不拷贝
UID 及 GID
- r 若文件名为目录，则拷贝目录下所有文件及子目录和它们的文件，此时
目标必须为目录
[例子]:
cp file1 file2 将文件 file1 拷贝到文件 file2
cp file1 file2 /tmp 将文件 file1 和文件 file2 拷贝到目录 /tmp 下
cp -r /tmp /mytmp 将目录 /tmp 下所有文件及其子目录拷贝至目录/mytmp

1.10 mv

[语法]: mv [-f] [-i] 文件1 [文件2...] 目标
[说明]: 将文件移动至目标，若目标是文件名，则相当于文件改名
- i 在覆盖已存在文件时作提示，若回答 y 则覆盖，其他则中止
- f 覆盖前不作任何提示
[例子]:
mv file1 file2 将文件 file1 改名为 file2
mv file1 file2 /tmp 将文件 file1 和文件 file2 移动到目录 /tmp 下


1.11 rm

[语法]: rm [-f] [-i] 文件...
或 rm -r [-f] [-i] 目录名... [文件]
[说明]: 用来删除文件或目录
- f 删除文件时不作提示
- r 递归地删除目录及其所有子目录
- i 删除文件之前先作提示
[例子]:
rm file1 删除文件 file1
rm -i /tmp/* 删除目录 /tmp 下的所有文件
rm -r /mytmp 递归地删除目录 /mytmp


1.12 chmod

[语法]: chmod [-R] 模式 文件...
或 chmod [ugoa] { |-|=} [rwxst] 文件...
[说明]: 改变文件的存取模式，存取模式可表示为数字或符号串，例如：
chmod nnnn file ， n为0-7的数字，意义如下:
4000 运行时可改变UID
2000 运行时可改变GID
1000 置粘着位
0400 文件主可读
0200 文件主可写
0100 文件主可执行
0040 同组用户可读
0020 同组用户可写
0010 同组用户可执行
0004 其他用户可读
0002 其他用户可写
0001 其他用户可执行
nnnn 就是上列数字相加得到的，例如 chmod 0777 file 是指将文件 file 存取权限置为所有用户可读可写可执行。
-R 递归地改变所有子目录下所有文件的存取模式
u 文件主
g 同组用户
o 其他用户
a 所有用户
增加后列权限
- 取消后列权限
= 置成后列权限
r 可读
w 可写
x 可执行
s 运行时可置UID
t 运行时可置GID
[例子]:
chmod 0666 file1 file2 将文件 file1 及 file2 置为所有用户可读可写
chmod u x file 对文件 file 增加文件主可执行权限
chmod o-rwx 对文件file 取消其他用户的所有权限


1.13 chown

[语法]: chown [-R] 文件主 文件...
[说明]: 文件的UID表示文件的文件主，文件主可用数字表示， 也可用一个有效的用户名表示，此命令改变一个文件的UID，仅当此文件的文件主或超级用户可使用。
-R 递归地改变所有子目录下所有文件的存取模式
[例子]:
chown mary file 将文件 file 的文件主改为 mary
chown 150 file 将文件 file 的UID改为150


1.14 chgrp

[语法]: chgrp [-R] 文件组 文件...
[说明]： 文件的GID表示文件的文件组，文件组可用数字表示， 也可用一个有效的组名表示，此命令改变一个文件的GID，可参看chown。
-R 递归地改变所有子目录下所有文件的存取模式
[例子]:
chgrp group file 将文件 file 的文件组改为 group


1.15 cmp

[语法]: cmp [-l] [-s] 文件1 文件2
[说明]: 比较两个文件，若文件1 为 "-" ，则使用标准输入， 两个文件相同则无提示，不同则显示出现第一个不同时的字符数和行号。
-l 显示每个不同处的字节数(10进制)和不同的字节(8进制)
-s 不作任何提示，只返回码
[例子]:
cmp file1 file2 比较文件 file1 和 file2
cmp -l file1 file2 比较文件file1 和 file2 的每处不同

1.16 diff

[语法]: diff [-be] 文件1 文件2
[说明]: 本命令比较两个文本文件，将不同的行列出来
-b 将一串空格或TAB转换成一个空格或TAB
-e 生成一个编辑角本，作为ex或ed的输入可将文件1转换成文件2
[例子]:
diff file1 file2
diff -b file1 file2
diff -e file1 file2 >;edscript


1.17 wc

[语法]: wc [-lwc] 文件...
[说明]: 统计文件的行、字、字符数，若无指定文件，则统计标准输入
-l 只统计行数
-w 只统计字数
-c 只统计字符数
[例子]:
wc -l file1 file2 统计文件file1和file2 的行数


1.18 split

[语法]: split [-n] [ 文件 [名字]]
[说明]: split 将指定大文件分解为若干个小文件，每个文件长度为n行(n 缺省时为1000)，第一个小文件名为指定的名字后跟aa，直至zz，名字缺省值为x，若未指定大文件名，则使用标准输入
[例子]:
split -500 largefile little
将文件largefile 每500行写入一个文件，第一个文件名为littleaa


1.19 touch

[语法]: touch [-amc] [mmddhhmm[yy]] 文件...
[说明]: 将指定文件的访问时间和修改时间改变，若指定文件不存在则创建之，若无指定时间，则使用当前时间，返回值是未成功改变时间的文件个数，包括不存在而又未能创建的文件。
-a 只改变访问时间
-m 只改变修改时间
-c 若文件不存在，不创建它且不作提示
mmddhhmm[yy] 两位表示 月日时分[年]
[例子]:
touch file
更新文件file的时间
touch 0701000097 HongKong
将文件HongKong的时间改为97年7月1日0时0分


1.20 file

[语法]: file [-f 文件名文件] 文件...
[说明]: file 对指定文件进行测试，尽量猜测出文件类型并显示出来
-f 文件名文件 文件名文件是一个包含了文件名的文本文件， -f 选项测试
文件名文件中所列出的文件
[例子]:
file * 显示当前目录下所有文件的类型


1.21 pack

[语法]: pack 文件...
[说明]: pack 将指定文件转储为压缩格式，文件名后加 ".z "， 文件存取模式，访问时间，修改时间等均不变
[例子]:
pack largefile 将largefile 压缩后转储为largefile.z


1.22 pcat 显示压缩文件

[语法]: pcat 文件...
[说明]: pcat 显示输出压缩文件

[例子]:
pcat largefile.z 显示压缩前的largefile
pcat largefile.z >; oldfile 显示压缩前的laregfile，并将其重定向到
文件oldfile中


1.23 unpack

[语法]: unpack 文件...
[说明]: 将压缩后的文件解压后转储为压缩前的格式
[例子]:
unpack largefile.z 将压缩文件largefile.z解压后转储为largefile


1.24 find

[语法]: find 路径名... 表达式
[说明]: find 命令递归地遍历指定路径下的每个文件和子目录，看该文件是否能使表达式值为真，以下 n 代表一个十进制整数， n 代表打印 n ， -n 代表小于 n ，下面是合法表达式说明：
-name 模式 文件名与模式匹配则为真，(\ 为转意符)
-perm [-]八进制数 文件存取模式与八进制数相同则为真若有- 选项，则文件存
取模式含有八进制数规定模式即为真
-size n[c] 文件块长度为 n 则真(一块为512字节)，若
有c 选项，则文件字节长度为 n 则真
-atime n 若文件的最近访问时间为 n 天前则为真，
find 命令将改变其访问的目录的访问时间
-mtime n 若文件的最近修改时间为 n 天前则为真
-ctime n 若文件状态为 n 天前改变则为真
-exec 命令 { }\; 若命令返回值为0则真，{ }内为命令参数，
此命令必须以 \; 为结束
-ok 命令 { }\; 与 exec 相同，只是在命令执行前先提示，若
回答 y 则执行命令
-print 显示输出使表达式为真的文件名
-newer 文件 若文件的访问时间比newer 指定的文件新则真
-depth 先下降到搜索目录的子目录，然后才至其自身
-mount 仅查找包含指定目录的文件系统
-local 文件在当前文件系统时为真
-type c 文件类型为 c 则真，c 取值可为 b(块文件) c (字符文件)
d(目录) l (符号链接) p (命名管道) f (普通文件)
\( 表达式 \) 表达式为真则真
-links n 文件链接数为 n 时为真
-user 用户 当文件属于用户时为真，用户可用数字表示UID
-nouser 当文件不属于 /etc/passwd 中的一个用户时为真
-group 文件组 当文件属于文件组时为真，文件组可用数字表示GID
-nogroup 当文件不属于 /etc/group 中的一个组时为真
-fstype 类型 当文件所属文件系统类型为指定类型时真
-inum n 当文件 i 节点号为 n 时为真
-prune 当目录名与模式匹配时，不再搜索其子目录
可以用逻辑操作符将简单表达式连接成复杂表达式
逻辑操作符有 ! 表示非操作， -o 表示或操作，两个表达式并列则表示
与操作
[例子]:
find / -name find* -print
从根目录开始搜索文件名如 find* 的文件并显示之
find ./ -exec sleep{1}\; -print
每秒显示一个当前目录下的文件
find $HOME \(-name a.out -o -name '*.o' \) -atime 7 -exec rm {} \;
从$HOME目录开始搜索，删除所有文件名为a.out 或 *.o 且访问时间在7天前的文件


1.25 grep

[语法]: grep [选项] 模式 [文件...]
[说明]: 在指定的文件中搜索模式，并显示所有包含模式的行，模式是一个正规表达式，在使用正规表达式时，最好将其引在单引号(') 中，若指定文件为缺省，则使用标准输入，正规表达式可以是：
. 匹配任意一个字符
* 匹配0个或多个*前的字符
^ 匹配行开头
$ 匹配行结尾
[] 匹配[ ]中的任意一个字符，[]中可用 - 表示范围，
例如[a-z]表示字母a 至z 中的任意一个
\ 转意字符
命令中的选项为：
-b 显示块号
-c 仅显示各指定文件中包含模式的总行数
-i 模式中字母不区分大小写
-h 不将包含模式的文件名显示在该行上
-l 仅显示包含模式的文件名
-n 显示模式所在行的行号
-s 指定文件若不存在或不可读，不提示错误信息
-v 显示所有不包含模式的行
[例子]:
grep 'good' * 在所有文件中搜索含有字符串 good 的行
grep '^myline' mytext 在文件mytext中搜索行首出现myline字符串的行


1.26 vi

[语法]：vi [-wn] [-R] 文件...
[说明]: vi 是一个基于行编辑器 ex 上的全屏幕编辑器，可以在vi 中使用 ex，ed的全部命令，vi选项中 -wn 指将编辑窗口大小置为n行，-R 为将编辑的文件置为只读模式， vi 工作模式分为命令模式和输入模式，一般情况下在命令模式下，可敲入vi命令，进入输入模式下时可以编辑要编辑的文本，命令 a A i I o O c C s S R 可进入输入模式，在输入模式下按 ESC 键可推出输入模式，回到命令模式，在命令模式中敲入：命令，则可进入ex方式，在屏幕底部出现提示符 ： ，此时可使用任意ex命令，屏幕底行也用来作/ ? ! 命令的提示行，大多数命令可以在其前面加数字，表示命令执行的重复次数，下面简单介绍一下vi 的命令集，^ 表示(CTRL)键
^B 退回前一页，前面加数字表示重复次数，每次换页时
保留上一页的两行
^D 在命令模式下，表示下滚屏幕的一半，在输入模式下，表示回退至
左边的自动缩进处
^E 显示屏幕底线之下的一行
^F 前进一页，前面加数字表示重复次数，每次换页时
保留上一页的两行
^G 显示当前文件名，当前行号和文件总行数，并用百分号当前行在
整个文件中的位置
^H(退格) 在命令模式下，光标左移一格；在输入模式下，删去前面的字符
^I(TAB) 在输入模式下，产生一串空格
^J(LF) 光标下移一行
^L 刷新屏幕，即将屏幕重新显示
^M(回车) 在命令模式下，光标移动至下行开头
在输入模式下，开辟一新行
^N 光标下移一行
^P 光标上移一行
^Q 在输入模式下，将其后的非打印字符作为正文插入
^R 刷新屏幕
^U 屏幕上滚一半，前面加数字时表示上滚的行数，此数字对
以后的^D ^U 命令有效
^V 在输入模式下，将其后的非打印字符作为正文插入
^W 在输入模式下，使光标回退一个字
^Y 显示屏幕底线之上的一行
^Z 暂停编辑，退回上层Shell
^[(ESC) 退出输入模式，回到命令模式
! 暂时退出编辑，执行Shell命令
"(双引号) 用于标志有名缓冲区，编号缓冲区1-9用于保存被删去的正文，字
母名缓冲区a-z供用户存放自定义的正文
$ 将光标移动到当前行尾，前加数字则表示前移行数，如2$表示移动
到下一行行尾
% 将光标移动到配对的小括号()或大括号{}上去
( 退回句子开头
) 前移到句子开头
- 退到上一行第一个非空格字符
. 重复上一次改变缓冲区内容的命令
/ 模式 向前搜索模式，将光标移动到模式出现处，模式是一个正规
表达式，(参看 grep)
： 在屏幕底部提示：，其后可使用ex命令
? 功能同 / ，但方向是向前查找
[[ 光标回退至前一节分界处
\ 转意符
]] 光标前移至节分界处
^(不是CTRL) 光标移至当前行第一个非空字符上
' 连续两个''表示将光标移至其移动前的位置，'后跟字母表示光标字
母标记的行首(参看 m 命令)
A 在行尾插入正文，进入输入模式
B 光标回退一个字
C 替换光标后的内容
D 删除光标后的内容
E 光标前移到字尾
F 字符 在当前行向左查找指定字符
G 光标移动到其前面数字指定的行，若未指定则移动到最后一行
H 光标移动到屏幕顶行，若前面有数字，则移动到屏幕上该数字
指定的行
I 在行开头插入正文
J 连接两行，若前面有数字则连接数字指定的行
L 光标移动到屏幕底行，若前面有数字，则移动到屏幕底线往上数该
数字指定的行
M 光标移动到屏幕中线
N 使用模式查找/或?时，重复找下一个匹配的模式，但方向与上次相
反，其功能同 n ，但方向相反
O 在当前行上开辟一新行
P 将上次被删除的正文插入光标前面，可在其前面加缓冲区编号，编
号1-9用于保存被删去的正文，字母名缓冲区a-z供用户存放自定
义的正文
Q 从vi 推出进入ex命令状态
R 替换字符串
S 替换整行
T 字符 向左查找字符
U 将当前行恢复至第一次修改前的状态
W 光标移至下一个字首
X 删除光标前的字符
Y 将当前行存入无名缓冲区，前面加数字表示存入的行数，也可用有
名缓冲区来保存，以后可用命令p或P将其取出
ZZ 存盘退出vi
a 光标后插入正文
b 光标回退至上一个字首
cw 替换当前字
c) 替换当前句子
dw 删除一个字
dd 删除一行
e 光标移到下一个字末
f 字符 在当前行向前查找字符
h 光标左移一格
i 在光标前插入正文
j 光标下移一行
k 光标上移一行
l 光标右移一格
m 字母 用字母标记当前行，以后可用 '字母使光标移动到当前行，
(参看'命令)
n 重复上次 / 或 ? 命令
o 在当前行下开辟一新行
p 将用户缓冲区内容放到光标位置(参看P命令)
r 替换当前字符
s 用一串字符替换当前字符
t 字符 光标移动至字符前
u 取消上次操作
w 光标移至下一字首
x 删除当前字符
yw 将当前字存入无名缓冲区，前面可加"x，表示存入名字为x的有名
缓冲区(x为a-z)，也可加数字表示存入的字数，以后可用P或p命
令取出
yy 将当前行存入无名缓冲区，用法参看yw
{ 光标移动至前一段开头
| 光标移至行首，若前面加数字，则移到数字指定行的行首
} 光标移至下一段开头
在：提示符下，常用命令如下:
：w 当前文件存盘
：w! 强制存盘
：w 文件 将内容写入指定文件
：w! 文件 强制写入指定文件
：x，y w 文件 将 x至 y 行写入指定文件中
：r 文件 将文件读到光标位置
：r ! 命令 将系统命令的输出读到光标位置
：q 退出编辑
：q! 强制退出
：x 与命令ZZ相同
：e 文件名 编辑另一文件
：e ! 重新编辑文件，放弃任何改变
：sh 执行sh，结束后回到编辑
：! 命令 执行命令后回到编辑
：n 编辑下一文件
：n 文件表 重新定义待编辑文件表
：set 设置 vi 的选项，例如 set nu 表示每行前显示行号，在选项前
加no则表示清除该选项，例如 set nonu 表示每行前不显示行
号，下面是一些常用的选项:
ai 自动缩进
aw 编辑下一文件前自动存盘
ic 查找字符串时不区分大小写
nu 每行前显示行号
sm 输入)及}时显示与之配对的( 或 {
slow 插入时延迟屏幕刷新
ws 使查找能绕过文件尾从头进行
wa 写文件之前不作对文件的检查




第二章 设备管理

2.1 stty
[语法]: stty [-a] [-g] [选项]
[说明]: 本命令设置终端，无参数时报告终端设置，本命令功能十分强大，应谨慎使用，下面仅介绍部分常用功能
-a 显示当前终端所有设置
-g 以能作为 stty 命令参数的方式显示终端设置
以下是终端常用设置，在设置前加-表示清除设置:
1．控制方式
ispeed 0 110 300 600 1200 1800 2400 4800 9600 19200 38400
本命令设置终端输入波特率，若为0则使用缺省波特率。
例如 stty ispeed 9600
ospeed 0 110 300 600 1200 1800 2400 4800 9600 19200 38400
本命令设置终端输出波特率，参看 ispeed。
2．输入方式
ingbrk(-ignbrk) 忽略(不忽略)中断(BREAK)
brkint(-brkint) 设置(清除)信号INTR为中断信号
inlcr(-inlcr) 将换行转换(不转换)成回车
icrnl( -icrnl) 将回车转换(不转换)成换行
igncr(-ignrc) 忽略(不忽略)回车
iuclc( -iuclc) 将大写字母转换(不转换)成小写字母
3．输出方式
olcut(-olcut) 将小写字母转换(不转换)为大写字母
onlcr(-onlcr) 输出时将换行符转换(不转换)为回车换行
ocrnl(-ocrnl) 输出时将回车符转换(不转换)为换行符
4．本地方式
echo (-echo) 设置(清除)回显
stwrap(-stwrap) 截断(不截断)大于79个字符的行
echoctl(-echoctr) 将控制键回显为^
2.2 tty

[语法]: tty
[说明]: 显示出终端的设备名
[例子]:
tty


2.3 lp

[语法]: lp 文件...
[说明]: 将文件送打印机打印
[例子]:
lp myfile 将文件myfile 送打印机输出


2.4 lpstat

[语法]: lpstat [选项] [打印任务号]
[说明]: 显示打印机状态，选项的意义如下：
-a [打印机表] 显示打印机表中指定的打印机可否接收打印请求
-c [打印机类名] 显示打印机种类及在该打印机种类下的成员
-d 显示系统预设的打印机
-p [打印机表] 显示打印机表中打印机状态
-r 显示lp 请求程序表( lp request scheduler)
-s 打印系统统计表
-t 打印所有状态信息
-u [用户] 显示由用户发出的打印请求
-v [打印机名表] 显示每个打印机名称，是对应于该打印机设备文件的路径名
[例子]:
lpstat -t 打印所有状态信息

2.5 cancel

[语法]: cancel 打印任务号
cancel 打印机名
cancel -u 用户名 [打印机]
[说明]: 本命令可按打印机名，打印任务，用户来取消打印任务
[例子]:
cancel -u mary 取消用户 mary 的所有打印请求


2.6 enable

[语法]: enable 打印机表
[说明]: 本命令可激活一个或多个打印机


2.7 disable

[语法]: disable [-cw] 打印机表
[说明]: 使一个或多个打印机不能打印
-c 立即取消正在打印的打印请求
-w 等正在打印的内容打完后，才禁止打印机


2.8 sync

[语法]: sync
[说明]: 将磁盘缓冲区内容写回磁盘
2.9 mount

[语法]: mount [-r] 设备 目录
[说明]: 将设备安装到目录下
-r 以只读方式安装


2.10 umount

[语法]: umount 设备
[说明]: 将已安装的文件系统卸下


2.11 tar

[语法]: tar -c[vwfbL] [设备] [块] 文件...
tar -r[vwfbL] [设备] [块] 文件...
tar -t[vfL] [设备] [文件...]
tar -u[vwfbL] [设备] [块] 文件...
tar -x[lmovwfL] [设备] [文件...]
[说明]: 将多个文件归档，命令中各参数的意义为：
r 附加方式归档
x 抽取文件
t 显示文件
u 附加方式归档，同时删除旧版文件
c 建立新档案文件
v 显示所处理的文件名
w 处理文件前，要求用户确认
f 文件名 使用指定文件名作为档案文件
bn 每次读写 n 块，缺省值为1，最大值为20
m 将新的文件修改时间设为获取时的时间
o 获取出来的文件以下达tar指令的UID和GID存储
[例子]:
tar cvf file.tar *
tar tvf file.tar


2.12 df

[语法]: df [-t] [文件系统]
[说明]: 显示剩余 i 节点和块数，使用 -t 选项，还显示总块数和 i 节点数
[例子]: df -t


2.13 du

[语法]: du [-ars] [目录]
[说明]: 显示磁盘空间专用情况</pre></div>
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/117605#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 28 Aug 2007 17:50:10 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/117605</link>
        <guid>http://toyota2006.javaeye.com/blog/117605</guid>
      </item>
      <item>
        <title>C中SUBSTR的实现</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/115620" style="color:red;">http://toyota2006.javaeye.com/blog/115620</a>&nbsp;
          发表时间: 2007年08月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Example：<br /><br /><pre name="code" class="java">char *strSrc[] = "abcdefghi";
char strDes[6];
memset(strDes,'\0',sizeof(strDes));
strncpy(strDes, strSrc+1, 2); //相当与subStr(strSrc,1,2)

或用 stdio.h 里的 sscanf 函数：
char *strSrc[] = "abcdefghi";
char *strDes[6];
sscanf(strSrc, "%2s", strDes);</pre>
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/115620#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 23 Aug 2007 12:08:47 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/115620</link>
        <guid>http://toyota2006.javaeye.com/blog/115620</guid>
      </item>
      <item>
        <title>unix环境下标准C实现的遍历某个文件夹下面所有文件</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/115618" style="color:red;">http://toyota2006.javaeye.com/blog/115618</a>&nbsp;
          发表时间: 2007年08月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          unix环境下标准C实现的遍历某个文件夹下面所有文件（<strong>转自CSDN</strong>）<br /><pre name="code" class="java"> 
#include &lt;sys/types.h>
#include &lt;sys/stat.h>
#include &lt;unistd.h>
#include &lt;stdlib.h>
#include &lt;stdio.h>
#include &lt;string.h>
#include &lt;dirent.h>
int testdir(char *path)
{
struct stat buf;
if(lstat(path,&buf)&lt;0)
{
return 0;
}
if(S_ISDIR(buf.st_mode))
{
return 1; //directory
}
return 0;
}


int directory(char *path)
{
DIR *db;
char filename[128];
struct dirent *p;
db=opendir(path);
if(db==NULL)return 0;
memset(filename,0,128);
while ((p=readdir(db)))
{
if((strcmp(p->d_name,".")==0)||(strcmp(p->d_name,"..")==0))
continue;
else
{
sprintf(filename,"%s/%s",path,p->d_name); 
if(testdir(filename))
{
directory(filename);
}
else {
printf("%s\n",filename);
}
}
memset(filename,0,64);
}
closedir(db);
return 0;
}
int main(int argc,char **argv)
{
char *path="./"; //要遍历的目录
if(access(path,F_OK)==0&&testdir(path))
{
printf("is directory\n");
directory(path);
}
else printf("%s not exist\n",path);

}
 </pre>
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/115618#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 23 Aug 2007 11:58:28 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/115618</link>
        <guid>http://toyota2006.javaeye.com/blog/115618</guid>
      </item>
      <item>
        <title>Javascript的IE和Firefox兼容性汇编</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/59311" style="color:red;">http://toyota2006.javaeye.com/blog/59311</a>&nbsp;
          发表时间: 2007年03月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Javascript的IE和Firefox兼容性汇编<br /><br />以下以 IE 代替 Internet Explorer，以 MF 代替 Mozzila Firefox。<br /><br />document.form.item 问题<br /><br />现有问题：<br />现有代码中存在许多 document.formName.item("itemName") 这样的语句，不能在 MF 下运行<br /><br />解决方法：<br />改用 document.formName.elements["elementName"]<br /><br />集合类对象问题<br /><br />现有问题：<br />现有代码中许多集合类对象取用时使用 ()，IE 能接受，MF 不能。<br /><br />解决方法：<br />改用 [] 作为下标运算。如：document.forms("formName") 改为 document.forms["formName"]。<br />又如：document.getElementsByName("inputName")(1) 改为 document.getElementsByName("inputName")[1]<br /><br />window.event<br /><br />现有问题：<br />使用 window.event 无法在 MF 上运行<br /><br />解决方法：<br />MF 的 event 只能在事件发生的现场使用，此问题暂无法解决。可以这样变通：<br /><br />原代码(可在IE中运行)：<br /><br />&lt;input type="button" name="someButton" value="提交" onclick="javascript:gotoSubmit()"/><br />&lt;script language="javascript"><br />    function gotoSubmit() {<br />       alert(window.event);    // use window.event<br />    }<br />&lt;/script><br /><br />新代码(可在IE和MF中运行)：<br /><br />&lt;input type="button" name="someButton" value="提交" onclick="javascript:gotoSubmit(event)"/><br />&lt;script language="javascript"><br />   function gotoSubmit(evt) {<br />      evt = evt ? evt : (window.event ? window.event : null);<br />      alert(evt);             // use evt<br />  }<br />&lt;/script><br /><br />此外，如果新代码中第一行不改，与老代码一样的话（即 gotoSubmit 调用没有给参数），则仍然只能在IE中运行，但不会出错。所以，这种方案 tpl 部分仍与老代码兼容。<br /><br />HTML 对象的 id 作为对象名的问题<br /><br />现有问题：<br />在 IE 中，HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 MF 中不能。<br /><br />解决方法：<br />用 getElementById("idName") 代替 idName 作为对象变量使用。<br /><br />用idName字符串取得对象的问题<br /><br />现有问题：<br />在IE中，利用 eval(idName) 可以取得 id 为 idName 的 HTML 对象，在MF 中不能。<br /><br />解决方法：<br />用 getElementById(idName) 代替 eval(idName)。<br /><br />变量名与某 HTML 对象 id 相同的问题<br /><br />现有问题：<br />在 MF 中，因为对象 id 不作为 HTML 对象的名称，所以可以使用与 HTML 对象 id 相同的变量名，IE 中不能。<br /><br />解决方法：<br />在声明变量时，一律加上 var ，以避免歧义，这样在 IE 中亦可正常运行。<br />此外，最好不要取与 HTML 对象 id 相同的变量名，以减少错误。<br /><br />event.x 与 event.y 问题<br /><br />现有问题：<br />在IE 中，event 对象有 x, y 属性，MF中没有。<br /><br />解决方法：<br />在MF中，与event.x 等效的是 event.pageX。但event.pageX IE中没有。<br />故采用 event.clientX 代替 event.x。在IE 中也有这个变量。<br />event.clientX 与 event.pageX 有微妙的差别（当整个页面有滚动条的时候），不过大多数时候是等效的。<br /><br />如果要完全一样，可以稍麻烦些：<br />mX = event.x ? event.x : event.pageX;<br />然后用 mX 代替 event.x<br /><br />其它：<br />event.layerX 在 IE 与 MF 中都有，具体意义有无差别尚未试验。<br /><br />关于frame<br /><br />现有问题：<br />在 IE中 可以用window.testFrame取得该frame，mf中不行<br /><br />解决方法：<br />在frame的使用方面mf和ie的最主要的区别是：<br />如果在frame标签中书写了以下属性：<br />&lt;frame src="/xx.htm" id="frameId" name="frameName" /><br />那么ie可以通过id或者name访问这个frame对应的window对象<br />而mf只可以通过name来访问这个frame对应的window对象<br />例如如果上述frame标签写在最上层的window里面的htm里面，那么可以这样访问<br />ie： window.top.frameId或者window.top.frameName来访问这个window对象<br />mf： 只能这样window.top.frameName来访问这个window对象<br /><br />另外，在mf和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签<br />并且可以通过window.top.document.getElementById("testFrame").src = 'xx.htm'来切换frame的内容<br />也都可以通过window.top.frameName.location = 'xx.htm'来切换frame的内容<br /><br />在mf中，自己定义的属性必须getAttribute()取得<br /><br />父结点的问题<br /><br />在mf中没有 parentElement parement.children  而用 parentNode parentNode.childNodes<br />childNodes的下标的含义在IE和MF中不同，MF使用DOM规范，childNodes中会插入空白文本节点。<br />一般可以通过node.getElementsByTagName()来回避这个问题。当html中节点缺失时，IE和MF对parentNode的解释不同，例如<br /><br />&lt;form><br />&lt;table><br />  &lt;input/><br />&lt;/table><br />&lt;/form><br /><br />MF中input.parentNode的值为form, 而IE中input.parentNode的值为空节点<br />MF中节点没有removeNode方法，必须使用如下方法 node.parentNode.removeChild(node)<br /><br />const 问题<br /><br />现有问题：<br />在 IE 中不能使用 const 关键字。如 const constVar = 32; 在IE中这是语法错误。<br /><br />解决方法：<br />不使用 const ，以 var 代替。<br /><br />body 对象<br /><br />MF的body在body标签没有被浏览器完全读入之前就存在，而IE则必须在body完全被读入之后才存在<br /><br />url encoding<br /><br />在js中如果书写url就直接写&不要写&amp;例如var url = 'xx.jsp?objectName=xx&amp;objectEvent=xxx';<br />frm.action = url那么很有可能url不会被正常显示以至于参数没有正确的传到服务器<br />一般会服务器报错参数没有找到<br />当然如果是在tpl中例外，因为tpl中符合xml规范，要求&书写为&amp;<br />一般MF无法识别js中的&amp;<br /><br />nodeName 和 tagName 问题<br /><br />现有问题：<br />在MF中，所有节点均有 nodeName 值，但 textNode 没有 tagName 值。在 IE 中，nodeName 的使用好象<br />有问题（具体情况没有测试，但我的IE已经死了好几次）。<br /><br />解决方法：<br />使用 tagName，但应检测其是否为空。<br /><br />元素属性<br /><br />IE下 input.type属性为只读，但是MF下可以修改<br /><br />document.getElementsByName() 和 document.all[name] 的问题<br /><br />现有问题：<br />在 IE 中，getElementsByName()、document.all[name] 均不能用来取得 div 元素（是否还有其它不能取的元素还不知道）。
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/59311#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 12 Mar 2007 16:48:15 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/59311</link>
        <guid>http://toyota2006.javaeye.com/blog/59311</guid>
      </item>
      <item>
        <title>deptTree</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/58268" style="color:red;">http://toyota2006.javaeye.com/blog/58268</a>&nbsp;
          发表时间: 2007年03月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &lt;%@ page language="java" contentType="text/html; charset=UTF-8"<br />	pageEncoding="UTF-8"%><br />&lt;%@include file="/common/taglibs.jsp"%><br />&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><br />&lt;html><br />&lt;head><br />&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><br />&lt;title>&lt;/title><br />&lt;link type="text/css" rel="stylesheet"<br />	href="&lt;c:url value="/styles/dojoTable.css"/>"><br />&lt;/head><br />&lt;body><br />&lt;%@include file="/common/yahooUi.jsp"%><br />&lt;link type="text/css" rel="stylesheet" href="templates/dojo.css"><br />&lt;link type="text/css" rel="stylesheet" href="&lt;c:url value='/styles/style.css'/>"><br />&lt;script src="&lt;c:url value='/js/prototype.js'/>" type="text/javascript">&lt;/script><br />&lt;script src="&lt;c:url value='/js/dojo/dojo.js'/>" type="text/javascript">&lt;/script><br />&lt;script src="&lt;c:url value="/dwr/interface/deptDojoAction.js"/>"<br />	type="text/javascript">&lt;/script><br />&lt;script src="&lt;c:url value="/dwr/engine.js"/>" type="text/javascript">&lt;/script><br />&lt;script src="&lt;c:url value="/dwr/util.js"/>" type="text/javascript">&lt;/script><br /><br />&lt;script><br />YAHOO.namespace("dept.dlg");<br /><br />dojo.require("dojo.lang.*");<br />dojo.require("dojo.widget.Tree");<br />dojo.require("dojo.widget.TreeRPCController");<br />dojo.require("dojo.widget.TreeSelector");<br />dojo.require("dojo.widget.TreeNode");<br />dojo.require("dojo.widget.TreeContextMenu");<br /><br />dojo.require("dojo.widget.*");<br />dojo.require("dojo.collections.*");<br />dojo.require("dojo.ex.FilteringTableEx");<br /><br />/**<br />* 设置根目录style，并且加载第一级目录<br />*/<br />dojo.addOnLoad(function() {<br />  //初始化YahooUI对话框<br />  YAHOO.dept.dlg.Editor = new YAHOO.widget.Dialog("editDeptDlg", {visible:false,<br />                                                                    modal:true,<br />                                                                    shadow:false,<br />                                                                    close: true,<br />                                                                    fixedcenter : true ,<br />                                                                    width:"300px" } );<br />	YAHOO.dept.dlg.Editor.render();<br />	YAHOO.dept.dlg.manager = new YAHOO.widget.OverlayManager();<br />	YAHOO.dept.dlg.manager.register([YAHOO.dept.dlg.Editor]);<br />	YAHOO.dept.dlg.Editor.beforeHideEvent.fire = resetDlg;//对话框关闭之前的事件。<br />    //设置根节点style<br />    var rootNode = dojo.widget.manager.getWidgetById('root');<br />    rootNode.childIcon.style["width"] = "14px";<br />    rootNode.childIcon.style["height"] = "14px";<br />    //加载第一级目录<br />    loadRemoteChildren(rootNode);<br />  <br />    //注册菜单事件<br />    dojo.event.topic.subscribe('treeContextMenuCreate/engage',<br />	 	function (menuItem) { createClicked( menuItem.getTreeNode()); });<br />	<br />    dojo.event.topic.subscribe('treeContextMenuRemove/engage',<br />        function (menuItem) { removeClicked( menuItem.getTreeNode()); });<br />        <br />    dojo.event.topic.subscribe('treeContextMenuEdit/engage',<br />        function (menuItem) { editClicked( menuItem.getTreeNode()); });<br />        <br />    dojo.event.topic.subscribe('treeContextMenuRefresh/engage',<br />        function (menuItem) { refreshClicked(menuItem.getTreeNode());});<br />  }<br />);<br /><br />/**<br />* 新建部门菜单事件<br />*/<br />function createClicked(treeNode) {<br />  var dlgTextNode = document.getElementById("dlgHead");<br />  dlgTextNode.innerHTML = treeNode.title + '--' + '&lt;fmt:message key="global.new" />';<br />  <br />  $('parentId').value = treeNode.objectId;<br />  $('treeNodeId').value = treeNode.widgetId;<br />    <br />  YAHOO.dept.dlg.Editor.show();<br />}<br /><br /><br /><br />/**<br />* 编辑目录菜单事件<br />*/<br />function editClicked(treeNode) {<br />  deptDojoAction.get(treeNode.objectId, function(dept){<br />  <br />    var dlgTextNode = document.getElementById("dlgHead");<br />    dlgTextNode.innerHTML = treeNode.title + '--' + '&lt;fmt:message key="global.edit" />';<br />    <br />    DWRUtil.setValue("treeNodeId", treeNode.widgetId);<br />    DWRUtil.setValue("name", dept.name);<br />    DWRUtil.setValue("id", dept.id);<br />    DWRUtil.setValue("descn",dept.descn);<br />    <br />    YAHOO.dept.dlg.Editor.show();<br />  });<br />}<br /><br /><br />/**<br />* 删除部门菜单事件<br />*/<br />function removeClicked(treeNode) {  <br />  if(confirm('&lt;fmt:message key="global.delete.warn"/>')) {<br />    deptDojoAction.removeDept(treeNode.objectId,<br />      function() {<br />       if(!treeNode.children || treeNode.children.length == 0){<br />          treeNode.tree.removeNode(treeNode);<br />        } else { <br />          alert('&lt;fmt:message key="dept.delete.warn"/>');<br />        }      <br />      });  <br />  }<br />}<br /><br />/**<br />* 在给定的父节点下，建立子节点.<br />*/<br />function buildChildNode(parent, nodeData) {<br />  node = dojo.widget.createWidget(parent.widgetType, nodeData);<br />  node.childIconSrc = '&lt;c:url value="/images/icons/foldericon.png"/>';<br />  //isFolder是node一个内置属性，缺省为false在树中是不会显示的，为true时才会显示出来<br />  node.isFolder = true;<br />  parent.addChild(node);<br />  node.childIcon.style["width"] = "16px";<br />  node.childIcon.style["height"] = "16px";<br />  <br />  return node;<br />}<br /><br /><br />/**<br />* 根据给定的父节点，展开子节点。远程调用DWR函数。<br />*/<br />function loadRemoteChildren(parent) {<br /><br />  deptDojoAction.getDeptsByParentId(parent.objectId, function(children) {<br />     for(var i=0; i&lt;children.length; i++) {<br />       buildChildNode(parent, children[i]);<br />     }   <br />     parent.state = parent.loadStates.LOADED;<br />   });<br />   parent.expand();   <br />}<br />/**<br />* 展开子节点<br />*/<br />function getChildren(node, sync, callObj, callFunc) {<br />  nodeJSON = this.getInfo(node);<br />  var children = loadRemoteChildren(node);<br />  $('deptMsg').style.display = 'none';<br />}<br /><br />/**<br />* 调用DWR函数，保存编辑结果<br />*/<br />function onSave() {<br /> <br />  var formValues = DWRUtil.getValues("editDeptFrm");<br />    <br />  if(formValues.id == "" || !formValues.id){//当id不存在时，表示新建<br />    deptDojoAction.saveDept(formValues.parentId,<br />      {name: formValues.name,<br />       descn: formValues.descn},<br />      function(newId) {<br />         var treeNode = dojo.widget.byId(formValues.treeNodeId);<br />         if(treeNode) {//当前节点下加入一个新节点<br />           if(treeNode.state == treeNode.loadStates.LOADED) {<br />              var child = <br />                  buildChildNode(treeNode, {title:formValues.name,<br />                                            objectId:newId,<br />                                            isFolder:true});<br />              //child.isFolder = true;<br />           }<br />         }<br />         <br />      });<br />   }<br />   else { //如果id存在则表示更新<br />     deptDojoAction.updateDept({id: formValues.id,<br />                                name: formValues.name,<br />                                descn: formValues.descn}, <br />        function(id){<br />          var treeNode = dojo.widget.byId(formValues.treeNodeId);<br />            if(treeNode) {//更新节点<br />              treeNode.edit({title:formValues.name});<br />            }<br />       });<br />   }<br />   <br />   YAHOO.dept.dlg.Editor.hide();<br />}<br /><br />/**<br />* 刷新树形节点<br />*/<br />function refreshClicked(node) {<br />  //更新当前节点<br />  deptDojoAction.get(node.objectId, function(dept) {<br />    node.edit({title: dept.name, objectId: dept.id})<br />  });<br />  //如果没有子节点，则直接返回<br />  if(!node.children || node.children.length == 0) {<br />    return;<br />  }<br />  //首先要删除所有子节点，删除的时候要将子节点们复制到一个数组<br />  //如果不这样，而采用dojo.lang.forEach(node.children...<br />  //则相当于修改了循环下标<br />  var nodes = new Array;<br />  for(i = 0; i &lt; node.children.length; i ++) {<br />    //hasChildren用于标记节点是否已经展开，如果展开则加载子节点，但是，本次并未实现该功能<br />    nodes[i] = {body : node.children[i],    <br />                hasChildren : (node.children[i].chilren && node.children[i].chilren.length > 0)};<br />  }<br />  dojo.lang.forEach(nodes, function(elem){elem.body.tree.removeNode(elem.body);});<br />  //重新加载子节点<br />  loadRemoteChildren(node);<br />}<br />/**<br />* 移动（Drag and Drop）一个节点到新的节点下<br />*/<br />function moveNode(child, newParent, index) {<br />  alert("childId=" + child.objectId + ";\nnewParentId=" + newParent.objectId + ";\nIndex=" + index);<br />}<br /><br />var files = new dojo.collections.ArrayList();<br /><br />function dblselect(message) {<br />alert();<br />}<br />/**<br />* 选中一个节点的时候触发的事件。<br />*/<br />function onSelectNode(message) {<br />  var node = message.source;<br />  var e = message.event;<br />  var table = dojo.widget.byId('files');<br />  if(node) {<br />    //alert(node.objectId + node.object);<br />    $('deptMsg').style.display = 'block';<br />    //$('deptDesc').innerHTML =  node.object;<br />    DWRUtil.setValue('deptDesc',node.object);<br />    //var aa="";<br />    deptDojoAction.getDeptsNameByParentId(node.objectId, function(children) {<br />     for(var i=0; i&lt;children.length; i++) {<br />       var file = {};<br />       file.filename = children[i];<br />       files.add(file);<br />     }  <br />     //alert(aa);<br />     table.store.setData(files.toArray());<br />     files.clear();<br />   });<br />   <br />  } <br />  <br />  doSelect(message, 'treeSelector');//使Tree恢复选中状态<br />}<br /><br /><br />/**<br />* Copy dojo的源代码，使得Tree恢复选中状态<br />*/<br />function doSelect(message, treeSelectorId) {<br />  var node = message.source;<br />  var e = message.event;<br />  <br />  var selector = dojo.widget.byId(treeSelectorId);<br />  if (selector.selectedNode === node) {<br />		if(e.ctrlKey || e.shiftKey || e.metaKey){<br />			selector.deselect();<br />			return;<br />		}<br />		dojo.event.topic.publish(this.eventNames.dblselect, { node: node });<br />		return;<br />	}<br /><br />	if (selector.selectedNode) {<br />		selector.deselect();<br />	}<br />	selector.doSelect(node);<br />	dojo.event.topic.publish(selector.eventNames.select, {node: node} );<br />}<br /><br />/**<br />* 复选框选中事件。选中复选框，则清空DatePicker<br />*/<br />function neverExpired(never) {<br />  if(never) {<br />    resetDataPicker();<br />  }<br />}<br /><br /><br />/**<br />* 重新设置对话框<br />*/<br />function resetDlg() {<br />  DWRUtil.setValues({parentId: "",<br />                     id: "",<br />                     treeNodeId: ""}, "editDeptFrm");<br />  DWRUtil.setValue("name", "");<br />  DWRUtil.setValue("descn","");<br />}<br />&lt;/script><br />&lt;table width="100%" cellspacing="10px" cellpadding="10px"><br />&lt;tr><br />&lt;td width="50%" valign="top"><br />&lt;table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="#6290d2"><br />&lt;tr>&lt;td bgcolor="#E8F2FE" height="20px">&lt;fmt:message key='dept.tree'/>&lt;/td>&lt;/tr><br />&lt;tr><br />&lt;td style="padding-top:10px;padding-right:10px;" bgcolor="#ffffff"><br />&lt;div dojoType="TreeRPCController" RPCUrl=""<br />	widgetId="deptTreeController" DNDController="create"<br />	loadRemote="getChildren" doMove="moveNode">&lt;/div><br />&lt;div dojoType="TreeSelector" widgetId="treeSelector"<br />	select="onSelectNode" dblselect="dblselect">&lt;/div><br />&lt;!-- 上下文菜单 --><br />&lt;div dojoType="TreeContextMenu" toggle="explode"<br />	contextMenuForWindow="false" widgetId="treeContextMenu">&lt;!-- 新建目录 --><br />&lt;div dojoType="TreeMenuItem" treeActions="addChild"<br />	iconSrc="&lt;c:url value='/images/icons/folder_add.gif'/>"<br />	widgetId="treeContextMenuCreate"<br />	caption="&lt;fmt:message key='global.new'/>">&lt;/div><br />&lt;!-- 删除目录 --><br />&lt;div dojoType="TreeMenuItem" treeActions="remove"<br />	iconSrc="&lt;c:url value='/images/icons/folder_remove.gif'/>"<br />	widgetId="treeContextMenuRemove"<br />	caption="&lt;fmt:message key='global.remove'/>">&lt;/div><br />&lt;!-- 编辑目录 --><br />&lt;div dojoType="TreeMenuItem" treeActions="remove"<br />	iconSrc="&lt;c:url value='/images/icons/folder_edit.gif'/>"<br />	widgetId="treeContextMenuEdit"<br />	caption="&lt;fmt:message key='global.edit'/>">&lt;/div><br />&lt;div dojoType="MenuSeparator2">&lt;/div><br />&lt;div dojoType="TreeMenuItem" widgetId="treeContextMenuRefresh"<br />	caption="&lt;fmt:message key='cms.refresh'/>">&lt;/div><br />&lt;/div><br /><br />&lt;!-- 树形目录 --><br />&lt;div dojoType="Tree" menu="treeContextMenu" DNDMode="between"<br />	selector="treeSelector" widgetId="deptTree"<br />	DNDAcceptTypes="deptTree" controller="deptTreeController">&lt;!-- 树形目录根节点 --><br />&lt;div dojoType="TreeNode" title="&lt;fmt:message key='dept.root'/>"<br />	widgetId="root" isFolder="true"<br />	childIconSrc="&lt;c:url value='/images/icons/home_1.gif'/>" objectId="-1">&lt;/div><br />	<br />&lt;/div><br /><br />&lt;div id="editDeptDlg" style="visibility:hidden"><br />	&lt;div class="hd" id="dlgHead" style="font:12px">&lt;/div><br />	&lt;div class="bd" id="dlgBody" style="font:12px"><br />	  &lt;form id="editDeptFrm" onsubmit="return false"><br />			&lt;input type="hidden" id="parentId" name="parentId"/><br />			&lt;input type="hidden" id="id" name="id"/><br />			&lt;input type="hidden" id="treeNodeId" name="treeNodeId"/><br />		    &lt;br><br />			&lt;table width="100%"><br />			  &lt;tr><br />			     &lt;td width="20%" align="right">&lt;fmt:message key="dept.name"/>:&lt;/td><br />			     &lt;td>&lt;input id="name" name="name" type="text" size="28" class="thin-input"/>&lt;/td><br />			     &lt;td width=10%" align="left">&lt;font color="#990000">*&lt;/font>&lt;/td><br />			  &lt;/tr><br />			  <br />			  &lt;tr><br />			     &lt;td width="20%" align="right">&lt;fmt:message key="dept.descn"/>:&lt;/td><br />			     &lt;td>&lt;textarea id="descn" name="descn" rows="3" cols="30" class="thin-input">&lt;/textarea>&lt;/td><br />			     &lt;td>&lt;/td><br />			  &lt;/tr>			  <br />			  <br />			 <br />			  &lt;tr><br />			  &lt;td width="20%">&lt;/td><br />			    &lt;td><br />			      &lt;table><br />			        &lt;tr><br />			          &lt;td width="20%" align="right"><br />			       &lt;input type="button" value="&lt;fmt:message key='global.save'/>"<br />			        onclick="onSave()"/><br />			          &lt;/td><br />			          &lt;td><br />			          &lt;/td><br />			          <br />			        &lt;/tr><br />			      &lt;/table><br />			    &lt;/td><br />			  &lt;/tr><br />			&lt;/table><br />			<br />		&lt;/form><br />	&lt;/div><br />	&lt;div class="ft" id="dlgFoot" style="font:12px;">&lt;/div><br />&lt;/div><br />&lt;/td><br />&lt;/tr><br />&lt;/table><br />&lt;/td><br /><br />&lt;td valign="top"><br /><br />&lt;table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="#6290d2"><br />&lt;tr>&lt;td bgcolor="#E8F2FE" height="20px" >&lt;fmt:message key='dept.msg'/> : &lt;/td>&lt;/tr><br />&lt;tr><br />&lt;td><br />&lt;div id="deptDesc" style="height:50px; border-width:10px; color='#003366'; border='1px solid #6290D2'; background-color: #ffffff">&lt;/div><br /><br /><br />&lt;/td><br />&lt;/tr><br />&lt;tr><br /><br /><br />&lt;td bgcolor="#ffffff"><br />&lt;div id='deptMsg' class='dojoTable' style="display:none;"><br /><br />&lt;table dojoType="FilteringTableEx" widgetId="files" id="files" minRows="0"<br />	valueField="filename" headerClass="tableHeader"<br />	tbodyClass="tableBody" rowAlternateClass="odd"<br />	headerUpClass="tableHeaderSort" headerDownClass="tableHeaderSort"<br />	alternateRows="true" cellpadding="0" cellspacing="0" border="0"<br />	class='tableRegion' style="width:100%"><br />	&lt;thead><br />		&lt;tr><br />		    <br />			&lt;th field="filename" dataType="String" class="tableHeader" align="center" >&lt;fmt:message key="dept.subList"/>&lt;/th><br />			<br />		&lt;/tr><br />	&lt;/thead><br />&lt;/table><br />&lt;/div><br /><br />&lt;/td><br />&lt;/tr><br />&lt;/table><br />&lt;/td><br />&lt;/tr><br />&lt;/table><br /><br /><br />&lt;/body><br />&lt;/html>
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/58268#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 Mar 2007 16:43:49 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/58268</link>
        <guid>http://toyota2006.javaeye.com/blog/58268</guid>
      </item>
      <item>
        <title>Hibernate之deleted object would be re-saved by cascade 异常的解决</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/53199" style="color:red;">http://toyota2006.javaeye.com/blog/53199</a>&nbsp;
          发表时间: 2007年02月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在Hibernate中，删除存在关联关系的一个对象时，会出现 org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)这个异常<br /><br />解决方案如下：<br />方法1 删除Set方的cascade<br />方法2 解决关联关系后，再删除 :<br />　　　<span style="color: blue">Attachment attachment = attachments.get(i);<br />　　　content.getAttachments().remove(attachment);<br />　　　attachment.setContent(null);<br />　　　removeObject(attachment);</span><br />方法3 在many-to-one方增加cascade 但值不能是none<br /><br />如果以上三个方案都失败（哼哼~ 我用了5个小时才找出来的）<br />检查一下hashCode equals是否使用了id作为唯一标示的选项了；我用uuid.hex时是没有问题的；<br />但是用了native，就不行了，怎么办？删除啊！<br /><br />也就是问题出现在本文给出的持久化类的hashCode equals方法身上
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/53199#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 Feb 2007 14:06:58 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/53199</link>
        <guid>http://toyota2006.javaeye.com/blog/53199</guid>
      </item>
      <item>
        <title>在frame中访问其他frame</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/48344" style="color:red;">http://toyota2006.javaeye.com/blog/48344</a>&nbsp;
          发表时间: 2007年01月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          frameName.doSomething()...<br /><br />//访问父frame中方法<br />parent.frames["frameName"].doSomething()...<br /><br />"frameName"　为要访问的frame名，doSomething()为要访问的frame中的方法。
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/48344#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 18 Jan 2007 14:17:16 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/48344</link>
        <guid>http://toyota2006.javaeye.com/blog/48344</guid>
      </item>
      <item>
        <title>で和に在表示地点的时候的区别</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/47701" style="color:red;">http://toyota2006.javaeye.com/blog/47701</a>&nbsp;
          发表时间: 2007年01月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          简单说，分了以下几点： <br /><br />　　1、格助词に表示静止的存在场所，格助词で表示动态的活动场所。<br /><br />　　例：庭に大きな木がある（静止）。<br />     　　私は教室で本を読む（动态）。<br /><br />　　2、强调动作场所时使用で，强调存在场所时使用に。<br /><br />　　例：花を庭で植える（强调种花的动作）。<br />     　　花を庭に植える（强调花种在院子里）。<br /><br />　　3、强调动作过程进行时用で，强调结果存在时用に。<br /><br />　　例：駅前の近くで家を建てている（强调建房子的动作在进行）。<br />     　　駅前の近くに家を建てている（强调房子已建成）。<br /><br />　　4、表长久性固定场所时用に，表暂时性偶然场所用で。<br /><br />　　例：駅に案内所がある（表询问处长期存在）。<br />     　　駅で集会がある（表有偶然暂时的集会）。<br /><br />　　5、内在地点用に，外在场所用で。<br /><br />　　例：彼女は銀行に勤めている（场所为谓语动词直接要求的对象）。<br />     　　彼女は上海で勤めている（场所为整个句子的内容所要求的背景）
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/47701#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 16 Jan 2007 11:15:30 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/47701</link>
        <guid>http://toyota2006.javaeye.com/blog/47701</guid>
      </item>
      <item>
        <title>日语中的加油</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/47680" style="color:red;">http://toyota2006.javaeye.com/blog/47680</a>&nbsp;
          发表时间: 2007年01月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          先来看这个动词： <br /><br />基本形：「頑張る」 <br />ます形：「頑張ります」 <br /><br />给自己加油打气时可以说（自己对自己说）：「頑張ります」、但在希望别人加油时，可不能这么用哦！看下面的： <br /><br />先来看这个动词： <br /><br />基本形：「頑張る」 <br />ます形：「頑張ります」 <br /><br />给自己加油打气时可以说（自己对自己说）：「頑張ります」、但在希望别人加油时，可不能这么用哦！看下面的： <br /><br /><br /><br />1.「頑張れ」 <br />动词的命令形，虽在语气上很不礼貌，女性使用的话更是粗鲁，但如果是在观看体育比赛，譬如在看世界杯，这种场合女性也可以用。 <br /><br />2.「頑張って（ね）」 <br />动词て形，是日常生活中经常使用的表示祈使的说法，不论男性，女性都经常使用，但一般用于关系的人之间，比较适合于对于对方将来有某种期望，后续：「ね」更可使语气柔和（PS：美咲不太喜欢跟别人说：「頑張ってください」、虽然用「～てください」更加客气，但总觉得用在这种场合有点过分客气，很“怪”……用是可以用，而且很礼貌～～） <br /><br />3.「頑張ろう」 <br />动词的意志形，说话人当场表示自己的决心和意志，用在第二人称的时候解释为劝诱或建议，实际上，动词的意志形是「～ましょう」的简体形，所以呢，这里也能用「頑張りましょう」来“劝诱”对方加油。（带有自己和对方一起努力的语气）。「一緒に　頑張りましょう」（一起努力吧！） <br />……等 <br /><br />记得在不同的场合，不同的地位身份要用不同的说法哦！！ <br /><br /><br />哦，对了，还有一个词，也带有加油的意思，好像是写「ファイート」，就是由英语里“fight”来的，可以给自己打气，我记得极道鲜师里,仲間由紀惠经常自己跟自己说「ファイート、オー」给自己打气呢！！
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/47680#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 16 Jan 2007 10:57:13 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/47680</link>
        <guid>http://toyota2006.javaeye.com/blog/47680</guid>
      </item>
      <item>
        <title>で的用法</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/47677" style="color:red;">http://toyota2006.javaeye.com/blog/47677</a>&nbsp;
          发表时间: 2007年01月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1 活动场所<br />在以行为动词为谓语的句子中，活动场所用で表示。<br />「私達は学校で（活动场所）勉強をします。」<br />“我们在学校学习。”<br />「運動場で（活动场所）運動会を開きます。」<br />“在运动场举行运动会。”<br /><br />2 比较范围<br />事物进行比较时总是有一个比较的范围，经常说“在……范围内……。”这个比较范围用で表示。<br />「中国では（比较范围）、北京大学が一番有名です。」<br />“在中国，北京大学最有名。”<br />「私達のクラスでは（比较范围）、李さんが最も真面目です。」<br />“在我们班小李最认真。”<br /><br />3 工具<br />当人做某种行为时，往往依赖于某些工具。在句子中直接表示所使用的工具，就用で表示。<br />「バスで（工具）会社に行きます。」<br />“乘公共汽车去公司。”<br />「万年筆で（工具）名前を書きます。」<br />“用钢笔写名字。”<br />「彼達は日本語で（工具）話しています。」<br />“他们用日语在交谈。”<br />这里注意：用で表示工具时，一定要直接在工具名词后面加で表示，不能加进动词。试比较：「バスに乗って会社に行きます。」这句话仍然译成“乘公共汽车去公司。”但是因为用了动词，表现方式就有了变化。 <br /><br />4 方式<br />主要是描述动作主体的数量。<br />「私は一人で（方式）住んでいます。」<br />“我一个人住着。”<br />「学生たちは五人で（方式）先生の家に行きました。」<br />“学生们五个人去了老师家。”<br />「皆で（方式）歌を歌いましょう。」<br />“大家一起唱歌吧。”<br /><br />5 总和<br />和上一项不同，单价或者一个人的不加で，2个以上的合计值就要加で。<br />「靴下は一足5元です、3足で（合计）15元です。」<br />“袜子1双5元，3双就是15元。”<br />「一人3冊だと10人で（合计）30冊になります。」<br />“如果一个人3本，10个人就是30本。”<br />「一軒5m必要としたら、20軒で（合计）100ｍ必要です。」<br />“如果一家需要5米，那么20家就需要100米。”<br /><br />6 原因<br />表示构成后面情况的原因。<br />「地震で（原因）家が倒れました。」<br />“因为地震，房子倒了。”<br />「山田さんは病気で（原因）会社を休みました。」<br />“山田先生因为生病，请假没有上班。”<br />「事故で（原因）電車が遅れました。」<br />“因为事故，电车误点了。”<br />和表示工具的情况类似，这里必须是单独地使用“名词+で”，如果采用了动词，虽然意思没有发生变化，但是情况就完全不一样了。<br />「地震が起きて（原因）家が倒れました。」<br />「山田さんは病気になって（原因）会社を休みました。」<br />「事故が発生して（原因）電車が遅れました。」<br /><br />7 材料<br />表示物体的构成原料或材料，可以用で表示。但是同时也可以用から表示。它们的没有严格的区别，但是一般认为，一个物体直接能看出原材料的（即物理变化）用で表示；如果已经看不出来原材料的（即化学变化），一般用から表示，但是在这样的情况下也可以用で表示。<br />「このテーブルは木で（原材料，即物理变化）作られています。」<br />“这个餐桌是由木材制作的。”<br />「米から（原材料，即化学变化）酒が作られます。」<br />“米可以造酒。”<br />另外，表示公共汽车或电车拥挤时，由于其原因是人造成的，人成了充满车厢内部的原料，所以人用表示。公路堵车也一样。<br />「バスの中は人で（原材料）ぎっしり詰まっています。」<br />“公共汽车里挤满了人。”<br />「道路は車で（原材料）渋滞です。」<br />“公路塞车了。”<br /><br />8 时间限定<br />表示限定的时间用で表示。<br />「夏休みは明日で（时间限定）終わりです。」<br />“暑假明天结束。”<br />「一時間で（时间限定）30ページ読みました。」<br />“一个小时读了30页。”<br />「今日の授業はこれで（时间限定）終わります。」<br />“今天的课到此结束。”<br /><br />9 特殊词汇要求：後で<br />有一些词汇，不符合一般规律，有特殊的要求。这里介绍要求で的词汇。<br />「前に、後で」表示时间，应该用に，但是表示在后面时，习惯地用で。<br />「日本の礼儀では、ご飯の前に‘頂きます’と言い、ご飯の後で（特殊要求）は‘御馳走様’と言う。これは、昔は神様に感謝していたが、今は食事を準備してくれた人に感謝する。」<br />“在日本的礼节中，吃饭前说‘我要吃了。’，吃饭后说‘吃饱了。’过去是对神表示感谢，现在是对准备了这餐饭的人表示感谢。”<br /><br /><br />除了补格助词で以外，在日语中有出现で的可能性有以下几种：<br />1 だ的连用形：中顿、否定<br />2个带有对比性或者相关的判断句并成一个句子的时候，前面句子的判断助动词だ就变成连用形で表示中顿。敬体的判断助动词です因为没有连用形で，所以借用だ的连用形で表示中顿。这里的で不是补格助词。<br />「田中さんは日本人です。」<br />“田中先生是日本人。”<br />「李さんは中国人です。」 <br />“小李是中国人。”<br />「田中さんは日本人で（中顿）、李さんは中国人です。」<br />“田中先生是日本人，而小李是中国人。”<br />「これは私の鞄では（否定）ありません。」<br />“这个不是我的书包。” <br /><br />2形容动词连用形之一<br />形容动词的词尾和判断助动词类似，是だ和です。其连用形之一是で。形容动词连用形で的用法很多，如并列、对比，连接，否定等等。注意这不是补格助词，其判断方法是で的前面是形容动词。<br />「公園は静かで、動物園は賑やかです。」<br />“公园里很安静，而动物园很热闹。”（并列、对比）<br />「此所は奇麗で静かな公園です。」<br />“这里是美丽而安静的公园。”（连接）<br />「デパートの中は、静かではありません。」<br />“百货公司里不安静。”（否定）<br /><br />3接续助词て的浊化<br />接在动词连用形的后面构成连接式时，五段动词要音变，而且接续助词て要浊化变成で。<br />「私は毎日日本の小説を読んで（浊化）います。」<br />“我每天读日本的小说。”<br />「試験が終わったので、最近はのんびり遊んで（浊化）います」<br />“考试结束了，所以我悠闲的玩。”<br /><br />4接续词で<br />接续词では有时简化成で。由于接续词一般都出现在句首，所以容易辨别。<br />「授業は終わりましたね。で（接续词）、後はどうしますか。」<br />“课程结束了。那么以后怎么办呐？”
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/47677#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 16 Jan 2007 10:52:36 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/47677</link>
        <guid>http://toyota2006.javaeye.com/blog/47677</guid>
      </item>
      <item>
        <title>に的用法总结</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/47676" style="color:red;">http://toyota2006.javaeye.com/blog/47676</a>&nbsp;
          发表时间: 2007年01月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          补格助词当中，に和で的用法是最多的。这里专门介绍一下に的用法。在学习的初期，这些内容不一定都能明白，学习多少能理解多少就可以了。尤其是最后一部分内容，已经是属于中级知识范围了。<br />1，存在的地点<br />　　存在句有2种格式：<br />① 教室に（补语）机が（主语）あります（谓语）。<br />这是补主谓结构，あります译成“有”。全句译成“教室里有桌子。”<br />② 机は（主语）教室に（补语）あります（谓语）。<br />这是主补谓结构，あります译成“在”。全句译成“桌子在教室里。” <br />　　不论在哪种存在句，物体存在的地点，都用“に”表示，称作“存在的地点”。另外，存在句中还有个问题是：人和动物用いる、います。其存在地点仍然用“に”表示。<br /><br />2，具体时间<br />　　在中表示时间有2种：一个是象今日（きょう）、去年（きょねん）、来週（らいしゅう）、今朝（けさ）、夕べ（ゆうべ）等等单个的时间名词。另一个是年、月、时、星期等等直接有数词的时间名词，称作“具体时间”。用具体时间时后面要加“に”。<br />如：「私は今朝（单个的时间名词）６時に（具体时间名词）起きました。」<br />“ 我今天早晨6点钟起床了。”<br />「山田さんは１９９８年に（具体时间名词）大学を卒業しました。」<br />“山田先生在1998年大学毕业了。”<br />「水曜日に（具体时间名词）テストがあります。」<br />“星期三有考试。”<br /><br />3，动作的对象<br />　　英语的及物动词做谓语的句子中有双宾语，即直接宾语和间接宾语。中没有间接宾语，英语的间接宾语在中用带に的补语表示，就是“动作的对象”用带に的补语表示。<br />「先生は学生に（对象）日本語を教えます。」<br />“老师教学生。”<br />「私は田中さんに（对象）手紙を出しました。」<br />“我给田中发了信。”<br /><br />4，动作的落脚点<br />　　“落脚点”的概念容易和“对象”混淆。“对象”应该是人或者是动物之类有生命的东西；而“落脚点”是动作的归宿。<br />「李さんは朝早く教室に（落脚点）来ました。」<br />“小李一大早就来到教室。”<br />「バスに（落脚点）乗って会社へ行きます。」“乘公共汽车去公司。”<br />「先生は黒板に（落脚点）字を書きます。」“老师往黑板上写字。”<br />「この用紙に（落脚点）名前と電話番号を書いてください。」<br />“请在这张表格上写上姓名和电话号码。”<br /><br />5，移动的方向<br />　　一般移动方向用“へ”表示。而这时的へ可以用に代替。<br />「明日ペキンに（移动方向）行きます。」<br />“明天我去北京。”<br />「来年アメリカに（移动方向）留学します」<br />“明年我去美国留学。”<br /><br />6，变化结果<br />　　事物经过变化，由一种事物变成了另一种事物。这里有2种情况：<br />① 客观地描述事物的变化，或者说客观地力量促使了事物的变化，用“名词+になる”的形式。<br />「大学を卒業して、教師に（变化结果）なりました。」<br />“大学毕业后，当了教师。”<br />「出張でシャンハイに行くことに（变化结果）なった。」<br />“因为出差，要去上海了。”<br />② 经过自己主观努力完成了这个变化，用“名词+にする”的形式。 <br />「来週海外へ旅行に行く事にしました。」<br />“决定下周去海外旅行。”<br />「今後火曜日を日本語の勉強日にする。」<br />“我决定今后把星期二定为学习日。”<br />③用 “名词+になっている”和“名词+にしている”的形式来分别表示“规定和制度”以及“自己决定后一直执行”。<br />「学校は、夜１２時に校門を閉める事になっている。」<br />“学校规定午夜12时关门。” <br />「私は毎日2時間日本語を勉強する事にしている。」<br />“我每天都学习2小时。”<br /><br />7，来去的目的<br />　　在移动动词的前面表示移动的目的，名词或动词连用形后面加 に再加动词。<br />「町へ買い物に（移动的目的）行きます。」<br />“上街去买东西。”<br />「レストランへ食事をしに（移动的目的）行きます。」<br />“去餐馆吃饭。”<br />「忘れ物を取りに（移动的目的）家へ帰りました。」<br />“回家去取忘遗忘了的东西。”<br />「先生の授業を聞きに（移动的目的）学校に来ました。」 <br />“到学校来听老师讲课。” <br /><br />8，比较的对象<br />　　这个形式主要用于进行比较。但是和“より”不同，是表示对于一些事物的自己的能力。<br />「私は寒さに強い。」<br />“我不怕冷。”<br />「あの人は酒に強い。」<br />“那个人酒量大。”<br />「彼は自分に厳しい。」<br />“他对自己很严格。”<br />「あの母親は子供に甘い。」<br />“那个母亲对孩子太溺爱。”<br />「私は歴史に弱い。」<br />“我不擅长历史。”<br />　　从这些例句可以看出：虽然日语的形式是基本相同的，但是翻译成为中文后就很不一样了。这里就有日语有日语的形式，中文有中文的形式，绝对不是一样的。<br /><br />9，表示动作或状态的原因<br />　　一般认为で表示原因，但是用に表示原因和で不一样，是专门用于引起心理的和生理的现象的动作之前，强调内在原因。<br />「余りの可笑しさに、思わず笑い出した。」<br />“因为太可笑了，所以忍不住笑起来了。”<br />「長い間の勉强に疲れた。」<br />“由于长时间的学习而疲倦了。”<br />「生活に困る。」<br />“生活很困难。”<br /><br />10，特殊动词的要求<br />　　有一些动词，不遵守一般的格式，有其特殊的要求。如：“勤める（工作）”“住む（居住）”“泊まる（暂住）”等，虽然都是行为动词，但是其动作场所不用“で”而用“に”。（我估计还有一些动词属于这一类。）<br />「私は中国銀行に勤めています。」<br />“我在中国银行工作。”<br />「先生はウルムチに住んでいます。」<br />“老师住在乌鲁木齐。”<br />「ペキンでは北京飯店に泊まりました。」<br />“在北京，我住在北京饭店。”<br /><br />11，被动式动作的主体<br />　　在被动式的句子中，表示动作主体的词语，不用“は”“が”，而用“に”。<br />「弟は兄に（动作主体）殴られた。」<br />“弟弟被哥哥打了。”<br />「私は子供に（动作主体）時計を壊された。」<br />“我的表被孩子弄坏了。”<br />「雨に（动作主体）降られて風邪を引いた。」<br />“被雨淋了而感冒了。”<br /><br />12，使役态动作的主体<br />　　在使役态的他动词句子中，表示动作主体的词语，不用“は”“が”，而用“に”。（自动词句子中 ，表示动作主体的词语用“を”）<br />「先生は学生に本を読ませました。」<br />“老师让学生读书。”<br />「この仕事は私にさせてください。」<br />“这个工作请让我作吧。”<br /><br />13，被役态的外界力量<br />　　在被役态句子中，表示外界强迫的力量用“に”。<br />「私は妻に病院へ行かされました。」<br />“我被妻子逼着去了医院。”<br />「 私が飲みたいのではありません、飲まされたのです。」<br />“不是我想喝的，是他们灌我的。”
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/47676#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 16 Jan 2007 10:51:06 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/47676</link>
        <guid>http://toyota2006.javaeye.com/blog/47676</guid>
      </item>
      <item>
        <title>JS 面向对象的简单应用实例</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/41255" style="color:red;">http://toyota2006.javaeye.com/blog/41255</a>&nbsp;
          发表时间: 2006年12月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          现在进入了WEB2.0时代，AJAX的应用也将无处不在，紧随其后的ajax ToolKit也相继出现DOJO、YahooUI...等非常强大的面向对象的JavaScript的工具箱, <br /> 对于你方便阅读Source，最好能够了解一下JavaScript下如何使用OO进行编程的, 这有很大的用处,以下偶提供的小例讲述了JS OO编程的简单应用<br /><br /><pre name="code" class="java">&lt;html>
	&lt;head>
		&lt;title>&lt;/title>
		
		&lt;script>
			function ClassTest1(){
       alert("Congratulation! this frist class build success!");
     }

   function aa(){
    var a=new ClassTest1();
  }


    function ClassTest2(var1){
      alert(var1);

    }

    var b=new ClassTest2("hello");

  //构建一个class并构造一个name属性
  function ClassTest3(name){
  	this.name = name;
  }
  
  /*ClassTest3的成员方法*/
  ClassTest3.prototype.sayHello = function () {
   alert("Hello " + this.name);
}
  function newClassTest3(){
  	//实例化类class3
  	var class3 = new ClassTest3("class3name");
  	class3.sayHello();
  	//创建一个age属性并对其付值 

  	class3.age = 1;
  	alert(class3.age);
  	/*创建一个address.home属性并对其付值（与许多
  	面对象的语言一样JS也可以像用‘.’一样来用‘[]’来引用来
  	属性，主要是为了避免带'.'的属性）*/
  	class3['address.home'] = "shijiazhuang";
  	alert(class3['address.home']);
  }

			&lt;/script>
			
			
			&lt;script language="javascript" type="text/javascript">
//我们可以通过for in循环来遍历对象的属性。

var testObj = {

prop1 : "hello",
prop2 : "hello2",
prop3 : new Array("hello",1,2)
}

for(x in testObj) alert( x + "-" + testObj[ x ] )

//-->
&lt;/script>

&lt;SCRIPT LANGUAGE="javascript">
&lt;!--
var Circle = { x : 0, y : 1, radius: 2 } // another example

for(p in Circle) 
alert( p + "-" + Circle[ p ] )


&lt;/SCRIPT>

	&lt;/head>
&lt;body>
		&lt;input type="button" onclick="aa()"/>
		&lt;input type="button" onclick="newClassTest3()"/>
&lt;/body>
&lt;/html></pre>
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/41255#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 28 Dec 2006 16:12:35 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/41255</link>
        <guid>http://toyota2006.javaeye.com/blog/41255</guid>
      </item>
      <item>
        <title>深入理解abstract class和interface </title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/39669" style="color:red;">http://toyota2006.javaeye.com/blog/39669</a>&nbsp;
          发表时间: 2006年12月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          引自：<a href="http://www.blogjava.net/renyangok/archive/2006/12/12/87183.html" target="_blank">http://www.blogjava.net/renyangok/archive/2006/12/12/87183.html</a><br />深入理解abstract class和interface <br />abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制，正是由于这两种机制的存在，才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性，甚至可以相互替换，因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。其实，两者之间还是有很大的区别的，对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。本文将对它们之间的区别进行一番剖析，试图给开发者提供一个在二者之间进行选择的依据。 <br /><br />理解抽象类 <br /><br />abstract class和interface在Java语言中都是用来进行抽象类（本文中的抽象类并非从abstract class翻译而来，它表示的是一个抽象体，而abstract class为Java语言中用于定义抽象类的一种方法，请读者注意区分）定义的，那么什么是抽象类，使用抽象类能为我们带来什么好处呢？ <br /><br />在面向对象的概念中，我们知道所有的对象都是通过类来描绘的，但是反过来却不是这样。并不是所有的类都是用来描绘对象的，如果一个类中没有包含足够的信息来描绘一个具体的对象，这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念，是对一系列看上去不同，但是本质上相同的具体概念的抽象。比如：如果我们进行一个图形编辑软件的开发，就会发现问题领域存在着圆、三角形这样一些具体概念，它们是不同的，但是它们又都属于形状这样一个概念，形状这个概念在问题领域是不存在的，它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念，所以用以表征抽象概念的抽象类是不能够实例化的。 <br /><br />在面向对象领域，抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述，但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类，而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体，因此它可以是不允许修改的；同时，通过从这个抽象体派生，也可扩展此模块的行为功能。熟悉OCP的读者一定知道，为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle)，抽象类是其中的关键所在。 <br /><br /><br />从语法定义层面看abstract class和interface <br /><br />在语法层面，Java语言对于abstract class和interface给出了不同的定义方式，下面以定义一个名为Demo的抽象类为例来说明这种不同。 <br /><br />使用abstract class的方式定义Demo抽象类的方式如下： <br /><br /><pre name="code" class="java">abstract class Demo ｛ 
abstract void method1(); 
abstract void method2(); 
… 
｝</pre> <br /><br />使用interface的方式定义Demo抽象类的方式如下： <br /><br /><pre name="code" class="java">interface Demo { 
void method1(); 
void method2(); 
… 
}</pre> <br /><br />在abstract class方式中，Demo可以有自己的数据成员，也可以有非abstarct的成员方法，而在interface方式的实现中，Demo只能够有静态的不能被修改的数据成员（也就是必须是static final的，不过在interface中一般不定义数据成员），所有的成员方法都是abstract的。从某种意义上说，interface是一种特殊形式的abstract class。 <br /><br />从编程的角度来看，abstract class和interface都可以用来实现"design by contract"的思想。但是在具体的使用上面还是有一些区别的。 <br /><br />首先，abstract class在Java语言中表示的是一种继承关系，一个类只能使用一次继承关系。但是，一个类却可以实现多个interface。也许，这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。 <br /><br />其次，在abstract class的定义中，我们可以赋予方法的默认行为。但是在interface的定义中，方法却不能拥有默认行为，为了绕过这个限制，必须使用委托，但是这会 增加一些复杂性，有时会造成很大的麻烦。 <br /><br />在抽象类中不能定义默认行为还存在另一个比较严重的问题，那就是可能会造成维护上的麻烦。因为如果后来想修改类的界面（一般通过abstract class或者interface来表示）以适应新的情况（比如，添加新的方法或者给已用的方法中添加新的参数）时，就会非常的麻烦，可能要花费很多的时间（对于派生类很多的情况，尤为如此）。但是如果界面是通过abstract class来实现的，那么可能就只需要修改定义在abstract class中的默认行为就可以了。 <br /><br />同样，如果不能在抽象类中定义默认行为，就会导致同样的方法实现出现在该抽象类的每一个派生类中，违反了"one rule，one place"原则，造成代码重复，同样不利于以后的维护。因此，在abstract class和interface间进行选择时要非常的小心。 <br /><br /><br />从设计理念层面看abstract class和interface <br /><br />上面主要从语法定义和编程的角度论述了abstract class和interface的区别，这些层面的区别是比较低层次的、非本质的。本小节将从另一个层面：abstract class和interface所反映出的设计理念，来分析一下二者的区别。作者认为，从这个层面进行分析才能理解二者概念的本质所在。 <br /><br />前面已经提到过，abstarct class在Java语言中体现了一种继承关系，要想使得继承关系合理，父类和派生类之间必须存在"is a"关系，即父类和派生类在概念本质上应该是相同的（参考文献〔3〕中有关于"is a"关系的大篇幅深入的论述，有兴趣的读者可以参考）。对于interface 来说则不然，并不要求interface的实现者和interface定义在概念本质上是一致的，仅仅是实现了interface定义的契约而已。为了使论述便于理解，下面将通过一个简单的实例进行说明。 <br /><br />考虑这样一个例子，假设在我们的问题领域中有一个关于Door的抽象概念，该Door具有执行两个动作open和close，此时我们可以通过abstract class或者interface来定义一个表示该抽象概念的类型，定义方式分别如下所示： <br /><br />使用abstract class方式定义Door： <br /><br /><pre name="code" class="java">abstract class Door { 
abstract void open(); 
abstract void close()； 
} </pre><br /><br /><br />使用interface方式定义Door： <br /><br /><br /><pre name="code" class="java">interface Door { 
void open(); 
void close(); 
} </pre><br /><br /><br />其他具体的Door类型可以extends使用abstract class方式定义的Door或者implements使用interface方式定义的Door。看起来好像使用abstract class和interface没有大的区别。 <br /><br />如果现在要求Door还要具有报警的功能。我们该如何设计针对该例子的类结构呢（在本例中，主要是为了展示abstract class和interface反映在设计理念上的区别，其他方面无关的问题都做了简化或者忽略）？下面将罗列出可能的解决方案，并从设计理念层面对这些不同的方案进行分析。 <br /><br />解决方案一： <br /><br />简单的在Door的定义中增加一个alarm方法，如下： <br /><br /><pre name="code" class="java">abstract class Door { 
abstract void open(); 
abstract void close()； 
abstract void alarm(); 
} </pre><br /><br />或者 <br /><br /><pre name="code" class="java">interface Door { 
void open(); 
void close(); 
void alarm(); 
} </pre><br /><br /><br />那么具有报警功能的AlarmDoor的定义方式如下： <br /><br /><pre name="code" class="java">class AlarmDoor extends Door { 
void open() { … } 
void close() { … } 
void alarm() { … } 
} </pre><br /><br /><br />或者 <br /><br /><pre name="code" class="java">class AlarmDoor implements Door ｛ 
void open() { … } 
void close() { … } 
void alarm() { … } 
｝ </pre><br /><br />这种方法违反了面向对象设计中的一个核心原则ISP（Interface Segregation Priciple），在Door的定义中把Door概念本身固有的行为方法和另外一个概念"报警器"的行为方法混在了一起。这样引起的一个问题是那些仅仅依赖于Door这个概念的模块会因为"报警器"这个概念的改变（比如：修改alarm方法的参数）而改变，反之依然。 <br /><br />解决方案二： <br /><br />既然open、close和alarm属于两个不同的概念，根据ISP原则应该把它们分别定义在代表这两个概念的抽象类中。定义方式有：这两个概念都使用abstract class方式定义；两个概念都使用interface方式定义；一个概念使用abstract class方式定义，另一个概念使用interface方式定义。 <br /><br />显然，由于Java语言不支持多重继承，所以两个概念都使用abstract class方式定义是不可行的。后面两种方式都是可行的，但是对于它们的选择却反映出对于问题领域中的概念本质的理解、对于设计意图的反映是否正确、合理。我们一一来分析、说明。 <br /><br />如果两个概念都使用interface方式来定义，那么就反映出两个问题：1、我们可能没有理解清楚问题领域，AlarmDoor在概念本质上到底是Door还是报警器？2、如果我们对于问题领域的理解没有问题，比如：我们通过对于问题领域的分析发现AlarmDoor在概念本质上和Door是一致的，那么我们在实现时就没有能够正确的揭示我们的设计意图，因为在这两个概念的定义上（均使用interface方式定义）反映不出上述含义。 <br /><br />如果我们对于问题领域的理解是：AlarmDoor在概念本质上是Door，同时它有具有报警的功能。我们该如何来设计、实现来明确的反映出我们的意思呢？前面已经说过，abstract class在Java语言中表示一种继承关系，而继承关系在本质上是"is a"关系。所以对于Door这个概念，我们应该使用abstarct class方式来定义。另外，AlarmDoor又具有报警功能，说明它又能够完成报警概念中定义的行为，所以报警概念可以通过interface方式定义。如下所示： <br /><br /><pre name="code" class="java">abstract class Door { 
abstract void open(); 
abstract void close()； 
} 
interface Alarm { 
void alarm(); 
} 
class AlarmDoor extends Door implements Alarm { 
void open() { … } 
void close() { … } 
void alarm() { … } 
}</pre> <br /><br /><br />这种实现方式基本上能够明确的反映出我们对于问题领域的理解，正确的揭示我们的设计意图。其实abstract class表示的是"is a"关系，interface表示的是"like a"关系，大家在选择时可以作为一个依据，当然这是建立在对问题领域的理解上的，比如：如果我们认为AlarmDoor在概念本质上是报警器，同时又具有Door的功能，那么上述的定义方式就要反过来了。 <br /><br /> <br /><br />结论 <br /><br />abstract class和interface是Java语言中的两种定义抽象类的方式，它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概念本质的理解、对于设计意图的反映是否正确、合理，因为它们表现了概念间的不同的关系（虽然都能够实现需求的功能）。这其实也是语言的一种的惯用法
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/39669#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Dec 2006 09:59:54 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/39669</link>
        <guid>http://toyota2006.javaeye.com/blog/39669</guid>
      </item>
      <item>
        <title>StringUtils常用方法</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/37725" style="color:red;">http://toyota2006.javaeye.com/blog/37725</a>&nbsp;
          发表时间: 2006年12月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          处理文本对Java应用来说应该算是家常便饭了，在1.4出现之前，Java自身提供的API非常有限，如String、StringTokenizer、StringBuffer，操作也比较单一。无非就是查找substring、分解、合并等等。到1.4的出现可以说Java的文字处理上了一个台阶，因为它支持regular expression了。这可是个重量级而方便的东东啊，缺点是太复杂，学习起来有一定难度。相较而言，Jakarta Commons提供的StringUtils和WordUtils至今还维持着那种简洁而强大的美，使用起来也很顺手。来看一个例子：<br /><br /> <br /><br /><pre name="code" class="java">package sean.study.jakarta.commons.lang;

import org.apache.commons.lang.StringUtils;

public class StringUtilsAndWordUtilsUsage {

    public static void main(String[] args) {
        // data setup
        String str1 = "";
        String str2 = " ";
        String str3 = "\t";
        String str4 = null;
        String str5 = "123";
        String str6 = "ABCDEFG";
        String str7 = "It feels good to use Jakarta Commons.\r\n";

        
        // check for empty strings
        System.out.println("==============================");
        System.out.println("Is str1 blank? " + StringUtils.isBlank(str1));
        System.out.println("Is str2 blank? " + StringUtils.isBlank(str2));
        System.out.println("Is str3 blank? " + StringUtils.isBlank(str3));
        System.out.println("Is str4 blank? " + StringUtils.isBlank(str4));

        
        // check for numerics
        System.out.println("==============================");
        System.out.println("Is str5 numeric? " + StringUtils.isNumeric(str5));
        System.out.println("Is str6 numeric? " + StringUtils.isNumeric(str6));

        
        // reverse strings / whole words
        System.out.println("==============================");
        System.out.println("str6: " + str6);
        System.out.println("str6 reversed: " + StringUtils.reverse(str6));
        System.out.println("str7: " + str7);
        String str8 = StringUtils.chomp(str7);
        str8 = StringUtils.reverseDelimited(str8, ' ');
        System.out.println("str7 reversed whole words : \r\n" + str8);      
        // build header (useful to print log messages that are easy to locate)
        System.out.println("==============================");
        System.out.println("print header:");
        String padding = StringUtils.repeat("=", 50);
        String msg = StringUtils.center(" Customised Header ", 50, "%");
        Object[] raw = new Object[]{padding, msg, padding};
        String header = StringUtils.join(raw, "\r\n");
        System.out.println(header);
    }
}</pre><br /> <br /><br />输出的结果如下：<br /><br /> <br /><br />==============================<br /><br />Is str1 blank? true<br /><br />Is str2 blank? true<br /><br />Is str3 blank? true<br /><br />Is str4 blank? true<br /><br />==============================<br /><br />Is str5 numeric? true<br /><br />Is str6 numeric? false<br /><br />==============================<br /><br />str6: ABCDEFG<br /><br />str6 reversed: GFEDCBA<br /><br />str7: It feels good to use Jakarta Commons.<br /><br /> <br /><br />str7 reversed whole words : <br /><br />Commons. Jakarta use to good feels It<br /><br />==============================<br /><br />print header:<br /><br />==================================================<br /><br />%%%%%%%%%%%%%%% Customised Header %%%%%%%%%%%%%%%%<br /><br />==================================================
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/37725#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 07 Dec 2006 11:10:13 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/37725</link>
        <guid>http://toyota2006.javaeye.com/blog/37725</guid>
      </item>
      <item>
        <title>dynarch</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/37482" style="color:red;">http://toyota2006.javaeye.com/blog/37482</a>&nbsp;
          发表时间: 2006年12月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://www.dynarch.com">www.dynarch.com</a>
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/37482#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 06 Dec 2006 08:57:09 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/37482</link>
        <guid>http://toyota2006.javaeye.com/blog/37482</guid>
      </item>
      <item>
        <title>Yahoo UI</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/37481" style="color:red;">http://toyota2006.javaeye.com/blog/37481</a>&nbsp;
          发表时间: 2006年12月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial">http://developer.yahoo.com/yui/</font>
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/37481#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 06 Dec 2006 08:55:53 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/37481</link>
        <guid>http://toyota2006.javaeye.com/blog/37481</guid>
      </item>
      <item>
        <title>Ajax4jsf - Open Source Framework. Download Page</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/29881" style="color:red;">http://toyota2006.javaeye.com/blog/29881</a>&nbsp;
          发表时间: 2006年10月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="https://ajax4jsf.dev.java.net" target="_blank">https://ajax4jsf.dev.java.net</a>
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/29881#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 24 Oct 2006 16:52:00 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/29881</link>
        <guid>http://toyota2006.javaeye.com/blog/29881</guid>
      </item>
      <item>
        <title>pairprogramming (结对编程) </title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/29451" style="color:red;">http://toyota2006.javaeye.com/blog/29451</a>&nbsp;
          发表时间: 2006年10月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <img src="http://www.pairprogramming.com/images/pairprogrammers.gif" /><br /><a href="http://www.blogjava.net/moxie/archive/2006/09/14/69714.html" target="_blank">http://www.blogjava.net/moxie/archive/2006/09/14/69714.html</a>
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/29451#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 23 Oct 2006 09:31:50 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/29451</link>
        <guid>http://toyota2006.javaeye.com/blog/29451</guid>
      </item>
      <item>
        <title>Tomcat 启动参数设置</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/28679" style="color:red;">http://toyota2006.javaeye.com/blog/28679</a>&nbsp;
          发表时间: 2006年10月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在%TomcatHome%\bin\catalina.bat文件中设置<br /><br /><pre name="code" class="java">.
.
.
echo Using CATALINA_BASE:   %CATALINA_BASE%
echo Using CATALINA_HOME:   %CATALINA_HOME%
echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR%
echo Using JAVA_HOME:       %JAVA_HOME%

echo Using JAVA_OPTS: %JAVA_OPTS%
set JAVA_OPTS=-Xms128m -Xmx128m
.
.
.</pre>
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/28679#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 19 Oct 2006 14:29:26 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/28679</link>
        <guid>http://toyota2006.javaeye.com/blog/28679</guid>
      </item>
      <item>
        <title>Java基础－－用泛型设计DAO</title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/28675" style="color:red;">http://toyota2006.javaeye.com/blog/28675</a>&nbsp;
          发表时间: 2006年10月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          举个很简单的例子：<br /><pre name="code" class="java">public interface BaseDao&lt;T> {
    public void create (T t);
    public void delete (T t);
    public void update (T t);
}

public interface UserDao extends BaseDao&lt;User> {
    public void other (User user);
}


public interface RoleDao extends BaseDao&lt;Role> {
    public void other (Role role);
}</pre>
          <br/>
          <span style="color:red;">
            <a href="http://toyota2006.javaeye.com/blog/28675#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 19 Oct 2006 14:17:51 +0800</pubDate>
        <link>http://toyota2006.javaeye.com/blog/28675</link>
        <guid>http://toyota2006.javaeye.com/blog/28675</guid>
      </item>
      <item>
        <title>Web程序中实现快捷键有两种方法 </title>
        <author>toyota2006</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://toyota2006.javaeye.com">toyota2006</a>&nbsp;
          链接：<a href="http://toyota2006.javaeye.com/blog/28638" style="color:red;">http://toyota2006.javaeye.com/blog/28638</a>&nbsp;
          发表时间: 2006年10月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近yahoo的邮箱推出了新的测试版，增加了不少很酷的功能，其中的快捷键定义就很方便<br />用户的使用，俺不知道yahoo究竟是用啥技术实践的，不过俺也知道两种挺简单的方法可以实现网页上的快捷键（如下）<br /> <br />1:    快速定位：可以直接在accesskey属性中设置,设置的快捷键为Alt+设置的key,也可以动态设置，代码如下 <br /><pre name="code" class="java">&lt;a href="http://toyota2006.javaeye.com">toyota's博客&lt;/a>&lt;br></pre> <br />注意：accesskey的优先级是最高点，可以屏蔽掉浏览器的快捷键。但是在没有这种的accesskey的网页上你按下alt+H是什么结果呢？可以看到的是“帮助”啊！自己站上的东西千万不要和IE等的工具冲突。这里列举一下默认&组合： <br />IE: A(favorites) D(address) E(edit) F(file) H(help) T(tools) V(view) <br />FireFox：B(bookmark) D(address) E(edit) F(file) G(goto) H(help) T(tools) 