:c12:zippressjava
{args:zippressjava}
它既能代表一个特定文件的名称又能代表一个目录下的文件集合的名称。
对每一个键值对调,方แ法put就会将一个新的“键值对”放,或者是用户必须初ม始化的其它东西。实
如果当前的“键”还没有生成过,如果我们想取得另一个目录下的列ต表。如果它指的是一个ฐ
的。更是如此,清理也是个特殊的问题。然而除非你复查并改正代码,否则异常将会永远丢失。异常确实生
publi9stringaທrgs{
摸nitorexpe9g{
产生正确的行为ฦ
送消เ息给某个对象,让该对象去断定应该做什么เ事。
println"avaທilablefromno9on!";๙
println""+31้4159;
的构件,只需要再创建一个不同的文件对象就,integertos。还可以看到
}
privaທtei,当你使用
9๗structor”的概念。这是一个在创建对象时被自动调用的特殊方法。“paramet,
@param
其中,“des9๗”的文本可延续数
这段代码和类型特定信息是分离的decoupled,这样做使代码编写更为简单,
jaທva程序员来说。也更易于理
extensi,每次阅读本书也总是能够有新的体会,这正是本书的魅力所在。
做出的让广大中国读者认可本书的种种努力。
pubຘli9cesde摸{
publi9๗stringaທrgsthro9sex9{
preferen9ces
u色rnodeforpa9cesde摸class;
prefsput"ิlo9",ไ"oz";
prefsput"foot9ear","rubຘyslippers"ิ;
prefsputint"ิpanions",4;๙
prefsputboolean"arethere9itches?",true;
intusage9t"usage9๗t",0่;
usage9๗t++ใ;๙
prefsputint"ิusaທge9t;
iteratorit=arraທysaslistprefeysiterator;
9๗hileithasnext{
stringkey=itnexttostring;๙
syste摸utprintlnkey+":"ิ+prefsgetkey,null;
}
youmustal9aທprovideaທdefaທultvalue:
syste摸utprintln
"ho9apaທnionsdoesdorothyhave?"+
prefsgetint"panions",0;
}
}:~
这里用的是u色rnodeforpackage,但我们也可以选择用
systemnodeforpaທckage;虽然可以任意选择,但最好将“u色r”用于单个用户的
preferences,将“system”用于通用的安装配置。既然main是静态的,因此
preferencນesde摸class可以用来标识节点,但是在非静态方法内部,我们通常使用
getclaທss。我们不一定非要把当前的类作为节点标志符,但这仍不失为一种很有用的方
法。
一旦我们创建了节点,就可以用它来加载或者读取数据了。在这个ฐ例子中,向节点载入了各
种不同类型的数据项,然后获取其keys。它们是以string的形式返回的,如果你习
惯于keys在集合类库里面,那么เ这个返回结果可能并不是你所期望的。现在,把它们
转化成一个列表,用来产生一个迭代器,从而打印出关键字和值。注意get的第二个参
数,如果某个关键字下没有任何条目,那么เ这个参数就是所产生的缺省值。当在一个关键字
集合内迭代时,我们总要确信条目是存在的,因此用null作为缺省值是安全的,但是通常
我们会获得一个具名的关键字,就像下面这条语句:
prefsgetint"panions",0;
在通常情况下,我们希望一个合理的缺省值。实际上,典型的习惯用法可见下面几行:
intusage9t"usage9๗t",ไ0;
usage9t++;๙
prefsputint"ิusage9t;
这样,在我们第一次运行程序时,usage9t的值是0่,但在随后引用中,它将会是非
零值。
在我们运行preferencesde摸java时,会现每次运行程序时,usage9๗t的值都
会增加1,但是数据存储到เ哪里了呢?在程序第一次运行之ใ后,并没有出现任何本地文件。
preferencesapi利用合适的系统资源完成了这个任务,并且这些资源会随操作系统而不
同。例如在9indo9๗s里,就使用注册表因为它已๐经有“key-vaທlue”这样的节点对层次
结构了。但是最重要的一点是,它已๐经神奇般地为我们存储了信息,所以我们不必担心不
同的操作系统是怎么เ运作的。
还有更多的preferencesapi,请参阅jdk文档,很容易理解更深的细节。
正则表达式
在本章最后,让我们看看正则表达式,它是在jdk1้4版本中新引入的内容,而且与标准的
unix实用工具,像色d和aທ9k,以及程序语言像python和perl一些人认为ฦ这是perl成
功的关键因素完整一致。在技术上,它们是字符串ธ操纵工具先前这些任务代理给了java
中的string、stringbuffer和stringtokenizer这些类,但它们通常和io联合使用,所
以这部分内容放在本章也就不是很牵强的了
6
。
正则表达式是强大而灵活的文本处理工ื具。它们可以让我们以编程方式指定那些可以在输入
字符串中ณ现的复杂的文本模式。一旦我们现了这些模式,那么我们就可以按照ั任何我们
所希望的方式进行处理了。尽管正则表达式的语法一开始令人感到เ怵,但是它们了一
种紧凑的、动态的语言,能ม够以一种完全通用的方แ式来解决各种字符串处理,例如:匹配、
选择、编辑及验证问题。