??xml version="1.0" encoding="utf-8" standalone="yes"?> 1.人生是不公^的,习惯接受吧。但如果你打习惯一辈子Q那人生是公q的? 2.q个世界q不在乎你的自尊Q只在乎你做出来的成l。有了成l再d调你的感受? 3.你不会一d学校有百万q薪、你不会马上是拥有公司配属车位的副总裁Q二者都必须靠努力赚来? 4.如果你觉得你的老板很凶Q等你做了老板q道,老板是没有工作Q期保障的? 5.在速食店打工ƈ不可耻,你的父母对煎汉堡有不同的看法,那没关系。重要的是你Ҏ来的看法? 6.如果你一事无成,不是你父母的错。不要对自己犯的错发牢骚Q要在错误中学习正确之道? 7.在你出生之前Q你的父母ƈ不像现在q般无趣Q他们变成现在这h因ؓ忙着付你的开销Q清z你的服、听你吹嘘你有多了不赗所以在你拯救被父母q代人破坏的热带雨林之前Q先整理一下自q态度? 8.学校里可能有蠃家有输Ӟ人生路上却还a之过早。学校会不断l你ZQ真实h生中却完全不是这麽回事? 9.人生没有寒暑假。h生不是学期制Q没有哪个雇L兴趣帮你L自我Q请用自q旉来做qg事? 10.电视上演的ƈ非真实h生。现实生zM每h都要d咖啡馆去创业?
]]>
]]>
]]>
一、注册Google AdSense
?https://www.google.com/adsense 注册。如果以前注册过Google AdWordsQGoogleq告词——对关键字进行右侧付Ҏq)那么p使用您的Google AdWords密码dQ开通Google AdSense了?/FONT>
Google提示不支持中文,注册时填写拼?/FONT>
需要填?/FONT>
您输入的帐户信息如下Q(XX代表隐藏站长的信息)
收款人:Wang Xiaobo或Xiaobo WangQ这个信息一定不能错Q一旦提交永q不得更攏V姓、名序可以按中文习惯,也可以按p习惯颠倒过来)
地址QRoom 102, Building 3
地址Qgl)QHua Xi Cun 2#
城市QNanjing
州、省或地区:Jiangsu
邮政~码Q?10000
国家/地区Q中?BR>电话Q?86-25-85412654Q注意:国家代码和区号前不要?Q?BR>产品QAdSense for contentQ针对内容的AdSenseQ和AdSense for searchQ针Ҏ索的AdSenseQ?BR>|站Q?/FONT>www.yoursite.com
|站语言Q中文(体)
请在l箋前确认所有信息都是正的?BR>在此之后不能更改付款人姓名或国家/地区名称?/FONT>
二、等待Google来信
{了两天QGoogle来信如下Q?/FONT>
标题Q欢q光临_Google_AdSense
贺您!
您的 Google AdSense 甌已得到批准。现在,您可以启用帐P几分钟后׃开始向您的|站投放 Google q告和提?AdSense for search Q针Ҏ索的
AdSenseQ?/FONT>
W?1 步:启用帐户?BR>误?https://www.google.com/adsense?hl=zh_CNQ然后用申请中所提交的电子邮件地址和密码登录到自己的帐Pq择同意 AdSense 条款?/FONT>
W?2 步:?AdSense 代码_脓到您的网c?BR>只需按照“广告布局代码”页和“搜索代码”页中的说明q行*作,卛_?Google 代码复制q粘贴到您的|站中。几分钟后就会开始向您的|站投放 Google q告和提
?AdSense for search?/FONT>
W?3 步:查看l果?BR>q告开始投攑Q您可以通过自己帐户中的在线报告随时查看收入情况。请注意Q如果您的网站中包含以下M内容Q都有可能无法从 AdSense 中获得最大收
入:
* robots.txt
* 框架
* 表单与动态内?BR>* q多的图?BR>* 要求d和输入密?/FONT>
有关针对此计划优化网站的更多技术指南与Q请讉KQ?BR>https://www.google.com/adsense/faq-tech?hl=zh_CN
重要注意事项Q?BR>* 如果 Google 未抓取您的|站Q则可能需要数时才能看到有针Ҏ的q告?BR>您在此期间可能会看到公益q告Q这些广告无法ؓ您带来Q何收入)?/FONT>
* 如果您的|页q未列入 Google 搜烦的烦引中QGoogle 不能返回SiteSearch l果。请注意?SiteSearch d至Q何网,都不会此网进入我们O游器的等待抓取队列。如果您希望采用手动方式贵|站的主要网址d到我们的抓取索引Q则可以通过http://www.google.com/intl/zh-CN/addurl.html
q行q一*作。采用这一方式提交늽站不能确保网站一定会被加入到 Google 索引中?/FONT>
* |站发布商或由发布商征召的第三方不得采用Zؓ方式或通过漫游器生欺诈?BR>点击Q恶意点击)。点击自q站上的广告有q此政策Q所以请不要因Q何原因点
击这些广告。我们会监控所有的 AdSense zdQƈ且会停用q反此政{的M?BR>布商的帐戗详l信息,请参?Google AdSense 条款Q地址是:
https://www.google.com/adsense/localized-terms?hl=zh_CN
有什么问题?
请随时与我们联系Q我们的电子邮g地址?adsense-zhs at google dot com?/FONT>
Ƣ迎光 Google AdSense。我们热切期D够帮助您全面发挥늽站的创收潜力?/FONT>
Google 组敬上
三、登录设|,获取代码
Z让大家登录方便,首页放了个Google AdSensed的地址Q可以直接点凅R?/FONT>
׃Google的中文意思表达不明确Qƈ且Google对于很多l节都避而不谈,所以danq了两天。通过几天的试验和询问朋友Q终于明白很多东ѝ?/FONT>
Google AdSense分ؓAdSenseq告和AdSense搜烦。AdSenseq告是放google的广告条QAdSense搜烦是提供个性化颜色的Google搜烦Q上面有时会出现q告条。也是_只有点击q告条才能赚钱,否则昄得再多也是徒劻I
q入“广告设|”栏目。可以设|“广告颜艜y等l节Q最后生成一D代码,比如
<script type="text/javascript"><!--
google_ad_client = "ID";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_channel ="";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.& ... ow_ads.js";>
</script>
然后你就_脓C的网上可以了?/FONT>
在“搜索设|”栏目中Q设|后又能得到一D代?/FONT>
<!-- Search Google -->
<center>
<form method="get" action="http://www.google.com/custom" ... ;"_top">
<table bgcolor="#ffffff">
<tr><td nowrap="nowrap" valign="top" align="left" height="32">
<a href="http://www.google.com/";>
<img src="http://www.google.com/logos/Logo_25wht.gif"; border="0&qu ... quot;middle"></img></a>
<input type="text" name="q" size="31" maxlength="255" value=""></input>
<input type="submit" name="sa" value="搜烦"></input>
<input type="hidden" name="client" value="ID"></input>
<input type="hidden" name="forid" value="1"></input>
<input type="hidden" name="ie" value="GB2312"></input>
<input type="hidden" name="oe" value="GB2312"></input>
<input type="hidden" name="cof" value="GALT:#FFFFFF;GL:1;DIV:#990000;VLC:FFFFFF;AH:center;BGC:000000;LBGC:000000;ALC:66CCFF;LC:66CCFF;T:FFFF00;GFNT:808000;GIMP:808000;LH:31;LW:88;L:http://www.loveseo.com/link/imag ...& ... :1;"></input>
<input type="hidden" name="hl" value="zh-CN"></input>
</td></tr></table>
</form>
</center>
<!-- Search Google -->
同样Q粘贴即可?/FONT>
四、上传网?/FONT>
上传后,q不能马上显C广告,有的可能要过D|间才行。有的则昄没有M收入的公益广告!ҎGoogle的流E来看是q样的:
|页执行JavaScriptE序QGoogle服务器来抓当前的|页Q然后Google服务器分析网内容,在你的网上昄相关的广告。看来Google AdSense的确很聪明?/FONT>
五、查询收?/FONT>
Google AdSense是每4个小时更Cơ点击记录。加上美国时间比中国旉?2时Q所以再查询时不要疑惑。前天有3个点击,前两个赚?.44元Q第3个外国广告的点击居然?元Q不q,昨天看了一下统计,居然变成了每个点?.04元。不知道Google的Q动算法是什么,Google对于AdSense的很多东襉K是保密的?/FONT>
六、Google AdSense支付
当你的广告费?00元ӞGoogle会寄支票l你。带上支和w䆾证。另外带炚wQ?00元就够了Q,M国银行办理光托收手l(q种支票q不是U凭w䆾证就能去银行取钱的U,所以叫“光”)?/FONT>
首先Q支背面的指定位置需要你的签名,{要和正面收款人的一_别担心,银行工作人员都会告诉你的啦~~Q;
其次Q您需要向银行交纳一定的手箋费和支票的邮寄费Q支要寄到国外银行Q?所收费用根据各地情况而不同。邮寄费一般ؓ10—?2元h民币不等Q手l费一般ؓ支票金额?.1%Q不?0元按10元交UIQ?/FONT>
再次Q留下您的联pȝ话,收据收好,大约1个月之后Q银行会电话通知您款已到帐?/FONT>
最后,拿着您的收据和n份证再到外币柜台Q这时您可以见到您的美元了Q(注:如果直接把美圆存到银行,要比把美圆取出,然后再存的利率要高一些~~Q?/FONT>
注意Q有的公司的支票是有有效期的Q所以要快办理托收手箋Q比如,面上标注“VOID AFTER 90 DAYS”表C支在90天内有效?/FONT>
七、疑?/FONT>
Q: Google同意代码放到多个网站上吗?
A: 虽然甌时填了一个网址Q但是Googlel了你一D代码,里面有你?IDP所以可以放在多个网站上?/FONT>
Q: 如何避免Goolge的公益广告?
A: 公益q告是不可避免的QGoogle允许你在应该昄公益q告时换成你自己的广?/FONT>
摘自《有风的日子?/FONT>
W?1?/FONT> W?2?/FONT> W?3?/FONT> W?4?/FONT> W?5?/FONT> W?6?/FONT> W?7?/FONT> W?8?/FONT> W?9?/FONT> W?0?/FONT>
W?1?/FONT> W?2?/FONT> W?3?/FONT> W?4?/FONT> W?5?/FONT> W?6?/FONT> W?7?/FONT> W?8?/FONT> W?9?/FONT> W?0?/FONT>
W?1?/FONT> W?2?/FONT> W?3?/FONT> W?4?/FONT> W?5?/FONT> W?6?/FONT> W?7?/FONT> W?8?/FONT> W?9?/FONT> W?0?/FONT>
W?1?/FONT> W?2?/FONT> W?3?/FONT> W?4?/FONT> W?5?/FONT> W?6?/FONT>
在Java的世界里面摸爬滚打也有一q多?相比Java诞生十年?一q真的算不了什?Java的前五年像一个初生的婴儿,g在Y件开发领域找不到它应有的位置,除了在netscape览器中嵌入一些小的applet之外,桌面应用基本上没有它的位|?虽然它是Z桌面应用的跨q_而设计的,但是没有设计得很完美,无法与C/C++,dephi相比,性能上来说它也不是一U很好的语言,因ؓ与操作系l中夹了一层虚拟层,它的~慢让很多h望而却?但是,它的语言机制对程序语a设计来说是一U革?而不仅仅是一U新的语a,除了语言的健壮性和安全性之?使得我们E序员也从那些烦人的语言l节上面得以解放.直到99qJ2EE的出?才彻底改变了q种语言,jAVA也找C它在应用开发中应有的位|?后面五年Java的发?对Y件开发领域来说是一陈风?席卷了整个Y件业的开?也成了高端企业开发的代表?..
很庆q?我选择了Java,从短旉上面?它解决了我的׃问题,常常自己?如果我没有接触到Java,也许我还在苦苦的学MFC,我对此ƈ不感兴趣,那种ZC/S的开?Ҏ没有多大的吸引力.有时觉得真的很神?一U那么简单的无状态的http协议竞争能构么大一个复杂的企业U的B/S pȝ,有时我真的是被深q折服.也许q就是带领我来到q个Java世界的一个很重要的原?因ؓ实现q样一个复杂的pȝ一直是我梦寐以求的事情,能做L一个庞大的pȝ的时候也是我最有成q时?.
Java现在很火,学Java的h很多,软g公司需要会Java的h也很?但是q不是说会Javap扑ֈ好工?.l过大学几年的学?l合自己的亲w体?和自己做E序员的日子,L觉自己L被一些东西牵着d在走,q些东西q不只是高的新的技?q有很多很多......大学里学的计机只是一些基的基,我ƈ没有把这些基学得有多?现在也一直很后悔..其实大学里面计算Z业有两种?一U是d阵地,把大学里面的那计机评学得L?考试成W很好,证书也拿了几?但是没有开发过目,使用的开发技术也很古?开发效率极?q种人出来找工作没有多大的优势可a,当然除了再回到学校里面去教书之外.q有一Uh,Ҏ技术盲目的崇拜,L很Qw?认ؓ大学里面学的东西都没有用,q时?今天惛_Java,明天又想?net,当听?一U新的技?又在怀疑以前学的东西是不是以后有用,是不是会淘汰,l果,什么都没有,q种?永远 只有在IT业中被拖着?开技术根本不?做技术咨询到不错,反正他们都是一知半?..
不知道ؓ什?大学里面女生的计机成W都很?但是在IT公司很少很少看到女生,我们公司׃?呵呵,看她的样?写代码很扎实,但是q不擅长做设?...
谈了q么一?感觉危机感又来了,strutsq未完全_N?hibernate才用q几?感受C它的强大,spring{AOP又出来了,我又要去学了... 其实我认q不像一些h说的q样很篏很辛?正是因ؓ我们q轻,我们才有q样的激情在q种世界前沿U技领域d献我们的青春....我觉得很?..?Java十周q生日快?.
本文引用通告地址Q?http://blog.csdn.net/kerry365/services/trackbacks/435488.aspx
二:安装及配|?
tomcat最新版本ؓ4.0.1Q这个版本用了一个新的servlet容器CatalinaQ完整的实现了servlet2.3和jsp1.2规范。注意安装之前你的系l必d装了jdk1.2以上版本?
(一)Q安?
1Qwindowsq_
从tomcat|站下蝲jakarta-tomcat-4.0.1.exeQ按照一般的windowsE序安装步骤卛_安装好tomcat,安装时它会自动寻找你的jdk和jre的位|?
2Qlinuxq_
下蝲jakarta-tomcat-4.0.1.tar.gzQ将其解压到一个目录?
(?Q配|?
q行tomcat需要设|JAVA_HOME变量
set JAVA_HOME=c:/jdk (win98Q在msdos方式下用,或者放入autoexec.bat?
export JAVA_HOME=/usr/local/jdk (linux下用,攑ֈ/etc/bashrc或?etc/profile?
(?Q运?
讄完毕后就可以q行tomcat服务器了Q进入tomcat的bin目录Qwin98下用startup启动tomcatQlinux下用startup.shQ相应的关闭tomcat的命令ؓshutdown和shutdown.sh?
启动后可以在览器中输入http://localhost:8080/试Q由于tomcat本nhweb服务器的功能Q因此我们不必安装apacheQ当然其也可以与apache集成CP下面会介l?
下面你可以测试其自带的jsp和servletCZ?
三:应用
(一):目录l构
tomcat的目录结构如下:
目录? ?
bin : 存放启动和关闭tomcat脚本
conf : 包含不同的配|文?server.xml(Tomcat的主要配|文?和web.xml
work : 存放jsp~译后生的class文g
webapp: 存放应用E序CZQ以后你要部|的应用E序也要攑ֈ此目?
logs : 存放日志文g
lib/japser/common : q三个目录主要存放tomcat所需的jar文g
(?Qserver.xml配置?
下面我们讲q这个文件中的基本配|信息,更具体的配置信息见tomcat的文?
server:
port 指定一个端口,q个端口负责监听关闭tomcat的请?
shutdown 指定向端口发送的命o字符?
service:
name 指定service的名?
Connector (表示客户端和service之间的连?:
port 指定服务器端要创建的端口Pq在q个断口监听来自客户端的h
minProcessors 服务器启动时创徏的处理请求的U程?
maxProcessors 最大可以创建的处理h的线E数
enableLookups 如果为trueQ则可以通过调用request.getRemoteHost()q行DNS查询来得到远E客L的实际主机名Q若为false则不q行DNS查询Q而是q回其ip地址
redirectPort 指定服务器正在处理httph时收C一个SSL传输h后重定向的端口号
acceptCount 指定当所有可以用的处理h的线E数都被使用Ӟ可以攑ֈ处理队列中的h敎ͼ过q个数的h不予处?
connectionTimeout 指定时的时间数(以毫Uؓ单位)
Engine (表示指定service中的h处理机,接收和处理来自Connector的请?:
defaultHost 指定~省的处理请求的L名,它至与其中的一个host元素的name属性值是一L
Context (表示一个web应用E序Q通常为WAR文gQ关于WAR的具体信息见servlet规范):
docBase 应用E序的\径或者是WAR文g存放的\?
path 表示此web应用E序的url的前~Q这栯求的url为http://localhost:8080/path/****
reloadable q个属性非帔R要,如果为trueQ则tomcat会自动检应用程序的/WEB-INF/lib ?WEB-INF/classes目录的变化,自动装蝲新的应用E序Q我们可以在不重起tomcat的情况下改变应用E序
host (表示一个虚拟主?:
name 指定L?
appBase 应用E序基本目录Q即存放应用E序的目?
unpackWARs 如果为trueQ则tomcat会自动将WAR文g解压Q否则不解压Q直接从WAR文g中运行应用程?
Logger (表示日志Q调试和错误信息):
className 指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口
prefix 指定log文g的前~
suffix 指定log文g的后~
timestamp 如果为trueQ则log文g名中要加入时_如下?localhost_log.2001-10-04.txt
Realm (表示存放用户名,密码及role的数据库):
className 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口
Valve (功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一?:
className 指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValvecd以记录应用程序的讉K信息
directory 指定log文g存放的位|?
pattern 有两个|common方式记录q程L名或ip地址Q用户名Q日期,W一行请求的字符ԌHTTP响应代码Q发送的字节数。combined方式比common方式记录的值更?
注意Q?
1Q经q我试Q我讄Context 的path="",reloadable=trueQ然后放一个WAR文g到webapps目录Q结果tomcat不能出此文?重vtomcat可以)Q而把此文件解压,则tomcat会自动检出q个新的应用E序。如果不能自动检WAR文gQ我们可以利用下面管理中讲的Ҏ来部|应用程序?
2Q默认的server.xml中,Realm元素只设|了一个className属性,但此文g中也包含几个通过JDBCq接到数据库q行验证的示?被注释掉?Q通过Realm元素我们可以实现容器安全理(Container Managed Security)?
3Q还有一些元素我们没有介l,如ParameterQloaderQ你可以通过tomcat的文获取这些元素的信息?
(?Q管?
1Q配|?
在进行具体的理之前Q我们先ltomcatd一个用P使这个用h权限来进行管理?
打开conf目录下的tomcat-users.xml文gQ在相应的位|添加下面一行:
<user name="zf" password="zf" roles="standard,manager"/>
注意Q这一行的最后部分一定是/>,tomcat的文掉?W号Q如果没?W号的话Qtomcat重v时将无法讉K应用E序。通过logs/catalina.out文g你可以看到这个错误的详细信息?
然后重vtomcatQ在览器中输入http://localhost:8080/manager/Q会弹出对话框,输入上面的用户名和密码即可?
2Q应用程序列?
在浏览器中输入http://localhost:8080/manager/listQ浏览器会昄如下的信息:
OK - Listed applications for virtual host localhost
/ex:running:1
/examples:running:1
/webdav:running:0
/tomcat-docs:running:0
/manager:running:0
/:running:0
上面的信息分别ؓ应用E序的\径,当前状?running 或者stopped)Q与q个E序相连的session数?
3Q重新装载应用程?
在浏览器中输?http://localhost:8080/manager/reload?path=/examplesQ浏览器昄如下Q?
OK - Reloaded application at context path /examples
表示example应用E序装蝲成功Q如果我们将server.xml的Context元素的reloadable属性设为true(见上面表?Q则没必要利用这U方式重新装载应用程序,因ؓtomcat会自动装载?
4Q显Csession信息
在浏览器中输入http://localhost:8080/manager/sessions?path=/examplesQ浏览器昄如下Q?
OK - Session information for application at context path /examples Default maximum session inactive interval 30 minutes
5Q启动和关闭应用E序
在浏览器中输入http://localhost:8080/manager/start?path=/examples和http://localhost:8080/manager/stop?path=/examples分别启动和关闭examples应用E序?
6Q部|及撤销部v
WAR有两U组l方式,一U是按一定的目录l构l织文gQ一U是一个后~为WAR的压~包Q因此它的部|方式也有两U:
(1)Q在览器中输入Qhttp://localhost:8080/manager/install?path=/examples&war=file:/c:examples
׃按目录l构l织的WAR部v
(2)Q如果输?http://localhost:8080/manager/install?path=/examples&war=jar:file:/c:examples.war!/
׃按压羃包组l的WAR部vQ注意此url后半部分一定要?/受?
部v后就可以?http://localhost:8080/examples讉K了?
在浏览器中输入:http://localhost:8080/manager/remove?path=/examples ׃撤销刚才部v的应用程序?
(?Q与apache集成
虽然tomcat也可以作web服务?但其处理静态html的速度比不上apache,且其作ؓweb服务器的功能q不如apache,因此我们xapache和tomcat集成h?
我们以linuxpȝZ介绍.
从apache|站下蝲apache1.3.22源代码版本,然后使用如下命o配置安装apacheQ?
mkdir /usr/local/apache
tar zxvf apache.1.32.tar.gz
cd apache.1.32
./configure --prefix=/usr/local/apache --enable-module=so
make
make install
注意configure命o指定目标安装目录Qƈ且加入DSO(Dynamic Shared Object)支持Q注意一定不要忘了这一个选项?
然后下蝲webapp模块Q将解压后mod_webapp.so文g攑օapache的libexec目录Q编辑apache的conf目录下的httpd.confQ在q个文g的最后加入下面三行:
LoadModule webapp_module libexec/mod_webapp.so
WebAppConnection warpConnection warp localhost:8008
WebAppDeploy examples warpConnection /examples/
W一行是加入webapp模块Q如果编译apache时不增加DSO支持Q则无法使用LoadModule指oQ第二行指定tomcat与apache的连接,W三行指定部|那个应用,q两个指令用格式如下:
WebAppConnection [connection name] [provider] [host:port]
WebAppDeploy [application name] [connection name] [url path]
其中connection name指定q接名,provider只能是warpQport端口与你的tomcat的配|文件server.xml最后几行指定的要保持一致。文件如下:
<Service name="Tomcat-Apache">
<Connector className="org.apache.catalina.connector.warp.WarpConnector"
port="8008" minProcessors="5" maxProcessors="75"
enableLookups="true"
acceptCount="10" debug="0"/>
******
</Service>
application name与你在tomcat中部|的应用名一_url path指定讉Kq个应用的url。例如上面的例子可以通过http://localhost/examples/来访问tomcat中的examples应用?
(?Q中文问?
一般jsp的ؕ码问题可以通过在jsp中加?lt;%@ page contentType="text/html;charset=GB2312" %>来解冻I至于servlet的ؕ码在可以使用servlet2.3中提供的HttpServeletRequest.setCharacterEncoding函数。更详细的中文问题请见JSP/Servlet 中的汉字~码问题?
四:lD
tomcat作ؓ一个servlet(jsp也被~译为servlet执行)容器Q其应用前景是非常好的,如果与jbossl合hQ则可以实现sun的j2ee规范(用jboss作ejb服务?。jboss的官方网站也提供集成了tomcat3.2*的jboss以供下蝲。另外一个开源的应用服务?enhydra) 也是Ztomcat的,其提供了更友好的理界面Q部|应用程序也更简单,功能也更强大
Q1.2 什么是JRE/J2REQ?BR>{:J2RE是Java2 Runtime EnvironmentQ即Javaq行环境Q有时简UJRE?BR>如果你只需要运行JavaE序或AppletQ下载ƈ安装它即可?BR>如果你要自行开发Java软gQ请下蝲JDK。在JDK中附带有JRE?BR>注意׃Microsoft对Java的支持不完全Q请不要使用IE自带的虚拟机来运行AppletQ务?BR>安装一个JRE或JDK?/FONT>
Q1.3 学习Java用什么工h较好Q?BR>{:作者徏议首先用JDK+文本~辑器,q有助你理解下列几个基础概念QpathQclassp
athQpackage
q熟悉基本命令:javac和java。ƈ且下载和你的JDK版本一致的API帮助?BR>如果你不定cL函数的用法,请先查阅API而不是发贴求助?BR>当你熟悉Java之后Q你可以考虑开始用一个IDE?BR>作者推荐eclipseQ下载网址http://www.eclipse.org。因为eclispe是免费的Q插件化?BR>?BR>eclispe的主要缺Ҏ~Z一个可视化的桌面程序开发工P
q运的是IBM?003q?1月已l将部分代码捐给eclipsel织Q可以预计这个缺点很快就?BR>得到弥补?BR>无论如何Q请不要使用Microsoft的VJ++Q众所周知Microsoft从来没有认真支持过Java
?BR>最后但q最不重要,要有一本好的参考书Qƈ且英文要q关?/FONT>
Q1.4 学习Java有哪些好的参考书Q?BR>{:作者首先推荐Thinking in JavaQ中文名《Java~程思想》,有中文版?BR>目前的最新版本是W三版?BR>?/FONT>http://64.78.49.204可以免费下蝲英文版?BR>该书W一章介l了很多面向对象的编E思想Q作为新手应当认真阅诅R?BR>除此以外QO'relly出版C֒Wrox出版C书也不错。作者本Z喜欢大陆作者的书?BR>也许你觉得英文太难,但是|上大多数资料都是英文的。另外,你需要经常查阅APIQ而那
也是英文的?/FONT>
Q1.5 Java和C++哪个更好Q?BR>{:q个问题是一个很不恰当的问题。你应该问:Java和C++哪个更适用于我的项目?
Java的优点和~点一h显?BR>跨^台是Java的主要优点,但代hq行速度的下降?BR>VC和Windowsq_有良好的集成和够快的速度Q但是也只能局限在Windowsq_上?BR>和C++相比QJava学v来更快,开发h员不会碰到很多容易出错的Ҏ?BR>但是VBE序员甚臛_需要拼装模块就可以了?/FONT>
Q1.6 什么是J2SE/J2EE/J2MEQ?BR>{:J2SE是一般的Java?BR>J2ME是针对嵌入式讑֤的,比如支持Java的手机,它有自己的JRE和SDK?BR>J2EE是一l用于企业E序开发的规范和类库,它用J2SE的JRE?BR>Q2.1 我写了第一个JavaE序Q应该如何编?q行Q?BR>{:首先请将E序保存为xxx.java文gQ注意你可能需要修Ҏ件后~名?BR>然后在dosH口下用javac xxx.java命oQ你会发现该目录下多了一个xxx.class文gQ?/FONT>
再用java xxx命oQ你的javaE序开始运行了?/FONT>
Q2.2 我照你说的做了,但是出现什么?javac' 不是内部或外部命令,也不是可q行?BR>E序或批处理文g。”?BR>{:你遇Cpath问题。操作系l在一定的范围(path)内搜索javac.exeQ但是没能找到?/FONT>
L辑你的操作系l环境变量,新增一个JAVA_HOME变量Q设ZJDK的安装目录,
再编辑Path变量Q加上一?%JAVA_HOME%\bin?BR>然后保存q新开一个dosH口Q你可以用javac和java命o了?/FONT>
Q2.3 环境变量怎么讄Q?BR>{:请向w边会设的h咨询?/FONT>
Q2.4 我在javac xxx.java的时候显CZ么“unreported exception java.io.IOExcepti
on;”?BR>{:参见Q4.8以了解java中的异常机制?/FONT>
Q2.5 javac xxx.java利通过了,但是java xxx的时候显CZ么“NoClassDefFoundErr
or”?BR>{:1. 你遇Cclasspath问题。java命o在一定的范围(classpath)内搜索你直接或间?BR>使用的class文gQ但是未能找到?BR>首先L认你没有错敲成java xxx.classQ?BR>其次Q检查你的CLASSPATH环境变量Q其实你q不需要设|该变量Q?BR>但如果你讄了该变量又没有包?Q代表当前目录)的项Q?BR>你就会遇到这个问题。请在你的CLASSPATH环境变量中加入一? 或干脆删掉这个变量?/FONT>
2. 如果你用了qJDK自带的标准包Q比如javax.servlet.*包,也会遇到q个问题Q请
相应的jar文g加入classpath?BR>3. 如果你在java源文件中定义了packageQ请参见Q2.11?/FONT>
Q2.6 我在java xxx的时候显C“Exception in thread "main" java.lang.NoSuchMetho
dError: main”?BR>{:首先Q在你的E序中每个java文g有且只能有一个publicc,
q个cȝcd必须和文件名的大写完全一栗?BR>其次Q在你要q行的类中有且只能有一个public static void main(String[] args)Ҏ
Q?BR>q个Ҏ是你的ȝ序?/FONT>
Q2.7 在java xxx的时候显C“Exception in thread "main" java.lang.NullPointerEx
ception”?BR>{:在程序中你试囑֜gؓnull的对象变量上调用ҎQ请查你的程序确保你的对象被恰当的初始化?BR>参见Q4.8以了解java中的异常机制?/FONT>
Q2.8 package是什么意思?怎么用?
{:Z唯一标识每个cdƈ分组Qjava使用了package的概c?BR>每个c都有一个全名,例如String的全名是java.lang.StringQ其中java.lang是包名,S
tring是短名。按照java命名惯例Q包名是全部写的,而类名的W一个字母是大写的?BR>q样Q如果你自行定义了同样名字的cStringQ你可以把它攑֜mypackage中,
通过使用全名mypackage.String和java.lang.String来区分这两个cR?BR>同时Q将逻辑上相关的cL在同一个包中,可以使程序结构更为清楚?BR>Z定义包,你要做的是在java文g开头加一行“package mypackage;”?BR>注意包没有嵌套或包含关系Qmypackage包和mypackage.mysubpackage包对JRE来说是ƈ列的两个包(虽然开发者可
能暗C包含关p)?/FONT>
Q2.9 我没有声明Q何package会怎么P
{:你的c被认ؓ攑֜默认包中。这时全名和短名是一致的?/FONT>
Q2.10 在一个类中怎么使用其他c?
{:如果你用java.lang包或者默认包中的c,不用做Q何事?BR>如果你的cM于mypackage包中Qƈ且要调用同一包中的其他类Q也不用做Q何事?BR>如果你用其他包中的c,在package声明之后Q类声明之前使用import otherpackage1.Class
1; ?import otherpackage2.*;
q里.*表示引入q个包中的所有类。然后在E序中你可以使用其他cȝ短名?BR>如果短名间有重名冲突Q必M用全名来区分?BR>注意在用其他包中的cLQ你只能使用public的类和接口,参见Q5.4?/FONT>
Q2.11 我用了package的时候显C?NoClassDefFoundError"Q但是我把所有packageL?BR>时候能正常q行?BR>{:你的java文g按包名组l存放?BR>比如你的工作目录?workQ你的类是package1.Class1Q那么将它存放ؓ/work/package1
/Class1.java?BR>如果没有声明包,那么直接攑֜/work下?BR>?work下执行javac package1/class1.javaQ再执行java package1.class1Q你会发C
切正常?BR>另外Q如果你的类的个数已l多C你需要用包来组l的话,你可以考虑开始用IDE?/FONT>
Q2.12 我想把java~译成exe文gQ该怎么做?
{:JDK只能java源文件编译ؓclass文g?BR>class文g是一U跨q_的字节码Q必M赖^台相关的JRE来运行。Java以此来实现跨q?BR>台性?BR>有些开发工具可以将java文g~译为exe文g。作者反对这U做法,因ؓq样取消了跨^
台性?BR>如果你确信你的Y件只在Windowsq_上运行,你可以考虑使用C++/C#来编E?/FONT>
Q2.13 我在~译的时候遇C?deprecated API"Q是什么意思?
{:所谓deprecated是指已经q时Q但是ؓ了向前兼容v见仍然保留的Ҏ?BR>q些Ҏ可能会在以后取消支持。你应当改用较新的方法?BR>在API里面会说明你应当用什么方法来代替之?BR>
Q3.1 我怎么ljavaE序加启动参敎ͼ像dir /p/w那样Q?BR>{:q记得public static void main(String[] args)吗?q里的args是你的启动参数
?BR>在运行时你输入java package1.class1 arg1 arg2Qargs中就会有两个StringQ第一个是
arg1Q第二个是arg2?/FONT>
Q3.2 我怎么从键盘输入一个int/double/字符Ԍ
{:java的I/O操作比C++要复杂一炏V如果要从键盘输入,样例代码如下Q?BR>BufferedReader cin = new BufferedReader( new InputStreamReader( System.in ) );
String s = cin.readLine();
q样你就获得了一个字W串Q如果你需要数字的话再使用Q?BR>int n = Integer.parseInt( s ); 或?double d = Double.parseDouble( s );
来将字符?534"转换成int或double?/FONT>
Q3.3 我怎么输出一个int/double/字符Ԍ
{:使用System.out.println(n)或者System.out.println("Hello"){等?/FONT>
Q3.4 我发现有些书上直接用System.in输入Q比你要单得多?BR>{:java使用unicodeQ是双字节。而System.in是单字节的stream?BR>如果你要输入双字节文字比如中文,请用作者的做法?/FONT>
Q3.5 我怎么从文件输?输出一个int/double/字符Ԍ
{:cM于从键盘输入Q只不过换成
BufferedReader fin = new BufferedReader( new FileReader(" myFileName " ) );
PrintWriter fout = new PrintWriter( new FileWriter(" myFileName " ) );
另外如果你还没下载APIQ请开始下载ƈ阅读java.io包中的内宏V?/FONT>
Q3.6 我想d文g的指定位|,该怎么办?
{:java.io.RandomAccessFile可以满你的需要?/FONT>
Q3.7 怎么判断要读的文件已l到了尽_
{:在Reader的readҎ中明说明返?1表示的l尾?/FONT>
四?关键字篇
Q4.1 java里面怎么定义宏?
{:java不支持宏Q因为宏代换不能保证cd安全?BR>如果你需要定义常量,可以它定义为某个类的static final成员。参见Q4.2和Q4.6?/FONT>
Q4.2 java里面没法用const?BR>{:你可以用final关键字。例?final int m = 9。被声明为final的变量不能被再次?BR>倹{唯一的例外是所谓blank finalQ如下例所C:
public class MyClass1 {
private final int a = 3;
private final int b; // blank final
public MyClass1() {
a = 5; // 不合法,final变量不能被再ơ赋倹{?BR> b = 4; // 合法Q这是bW一ơ被赋倹{?BR> b = 6; // 不合法,b不能被再ơ赋倹{?BR> }
}
final也可以用于声明方法或c,被声明ؓfinal的方法或cM能被l承?BR>注意const是java的保留字以备扩充?/FONT>
Q4.3 java里面也不能用goto?BR>{:甚至在面向过E的语言中你也可以完全不用goto。请查你的程序流E是否合理?/FONT>
如果你需要从多层循环中迅速蟩出,java增强了(和C++相比Qbreak和continue的功能,
支持label?BR>例如Q?BR>outer :
while( ... )
{
inner :
for( ... )
{
... break inner; ...
... continue outer; ...
}
}
和const一Pgoto也是java的保留字以备扩充?/FONT>
Q4.4 java里面能不能重载操作符Q?BR>{:不能。String?h唯一一个内|的重蝲操作W。你可以通过定义接口和方法来实现
cM功能?/FONT>
Q4.5 我new了一个对象,但是没法delete掉它?BR>{:java有自动内存回收机Ӟx谓Garbarge Collection。你不需要删除对象。你再也
不用担心指针错误Q内存溢Z?/FONT>
Q4.6 我想知道Z么mainҎ必须被声明ؓpublic staticQؓ什么在mainҎ中不能调
用非static成员Q?BR>{:声明为public是ؓ了这个方法可以被外部调用Q详情见Q5.4?BR>static是ؓ了将某个成员变量/Ҏ兌到类QclassQ而非实例QinstanceQ?BR>你不需要创Z个对象就可以直接使用q个cȝstatic成员Q因而在static成员中不能调
用非static成员Q因为后者是兌到对象实例(instanceQ的?BR>在AcM调用Bcȝstatic成员可以使用B.staticMember的写法?BR>注意一个类的static成员变量是唯一的,被所有该cd象所׃n的,在多U程E序设计中尤其要谨慎心?BR>cȝstatic成员是在cȝ一ơ被JRE装蝲的时候初始化的?BR>你可以用如下方法来使用非static成员Q?BR>public class A
{
private void someMethod() //非static成员
{}
public static void main(String args)
{
A a = new A(); //创徏一个对象实?BR> a.someMethod(); //现在你可以用非staticҎ?BR> }
}
Q4.7 throw和throws有什么不同?
{:throws用于Ҏ声明中,声明一个方法会抛出哪些异常。而throw是在Ҏ体中实际执行抛出异常?BR>动作?BR>如果你在Ҏ中throw一个异常,却没有在Ҏ声明中声明之Q编译器会报错?BR>注意Error和RuntimeException的子cL例外Q无需特别声明?/FONT>
Q4.8 什么是异常Q?BR>{:异常最早在Ada语言中引入,用于在程序中动态处理错误ƈ恢复?BR>你可以在Ҏ中拦截底层异常ƈ处理之,也可以抛l更高层的模块去处理?BR>你也可以抛出自己的异常指C发生了某些不正常情c常见的拦截处理代码如下Q?BR>try
{
......//以下是可能发生异常的代码
...... //异常被你或低层API抛出Q执行流E中断ƈ转向拦截代码?BR> ......
}
catch(Exception1 e) //如果Exception1是Exception2的子cdƈ要做特别处理Q应排在?BR>?BR>{
//发生Exception1时被该段拦截
}
catch(Exception2 e)
{
//发生Exception2时被该段拦截
}
finally //q是可选的
{
//无论异常是否发生Q均执行此段代码
//即在catchD中又向外抛Z新的exceptionQfinallyD也会得到执行?BR>}
5.1 extends和implements有什么煌?BR>{:对于class而言Qextends用于Q单Q承一个类QclassQ,而implements用于实现一个接口(interf
aceQ?BR>interface的引入是Z部分地提供多l承的功能?BR>在interface中只需声明Ҏ_而将Ҏ体留l实现的class来做?BR>q些实现的class的实例完全可以当作interface的实例来对待?BR>在interface之间也可以声明ؓextendsQ多l承Q的关系?BR>注意一个interface可以extends多个其他interface?/FONT>
Q5.2 java怎么实现多承?
{:java不支持显式的多ѝ?BR>因ؓ在显式多l承的语a例如c++中,会出现子c被q声明祖先虚基类构造函数的问题Q?/FONT>
而这是违反面向对象的装性原则的?BR>java提供了interface和implements关键字来部分地实现多l承。参见Q5.1?/FONT>
Q5.3 abstract是什么?
{:被声明ؓabstract的方法无需l出Ҏ体,留给子类来实现?BR>而如果一个类中有abstractҎQ那么这个类也必d明ؓabstract?BR>被声明ؓabstract的类无法实例化,管它可以定义构造方法供子类使用?/FONT>
Q5.4 public,protected,private有什么不同?
{:q些关键字用于声明类和成员的可见性?BR>public成员可以被Q何类讉KQ?BR>protected成员限于自己和子c访问,
private成员限于自己讉K?BR>Javaq提供了W四U的默认可见性,一般称为package privateQ当没有Mpublic,protected,private修饰W时Q成?BR>是同一包内可见?BR>cd以用public或默认来修饰?/FONT>
Q5.5 Override和Overload有什么不同?
{:Override是指父类和子cM间方法的l承关系Q这些方法有着相同的名U和参数cd
?BR>Overload是指同一个类中不同方法(可以在子cM可以在父cM定义Q间的关p,
q些Ҏ有着相同的名U和不同的参数类型?/FONT>
Q5.6 我承了一个方法,但现在我惌用在父类中定义的Ҏ?BR>{:用super.xxx()可以在子cM调用父类Ҏ?/FONT>
Q5.7 我想在子cȝ构造方法中调用父类的构造方法,该怎么办?
{:在子cL造方法的W一行调用super(...)卛_?/FONT>
Q5.8 我在同一个类中定义了好几个构造方法ƈ且想在一个构造方法中调用另一个?BR>{:在构造方法第一行调用this(...)?/FONT>
Q5.9 我没有定义构造方法会怎么P
{:自动获得一个无参数的构造方法?/FONT>
Q5.10 我调用无参数的构造方法失败了?BR>{:如果你至定义了一个构造方法,׃再有自动提供的无参数的构造方法了?BR>你需要另外显式定义一个无参数的构造方法?BR>另外一U可能是你的构造方法或者类不是public的,参见Q5.4了解java中的可见性?/FONT>
Q5.11 我该怎么定义cM于C++中的析构ҎQdestructorQ?
{:提供一个void finalize()Ҏ。在Garbarge Collector回收该对象时会调用该Ҏ?/FONT>
注意实际上你很难判断一个对象会在什么时候被回收。作者从未感到需要用到该Ҏ?/FONT>
Q5.12 我想一个父cd象{换成一个子cd象该怎么做?
{:强制cd转换。如
public void meth(A a)
{
B b = (B)a;
}
如果a实际上ƈ不是B的实例,会抛出ClassCastException。所以请保a实是B的实例?/FONT>
Q5.13 其实我不定a是不是B的实例,能不能分情况处理Q?BR>{:可以使用instanceof操作W。例?BR>if( a instanceof B )
{
B b = (B)a;
}
else
{
...
}
Q5.14 我在Ҏ里修改了一个对象的|但是退出方法后我发现这个对象的值没变!
{:很可能你把传入参数重赋了一个新对象Q例如下列代码就会造成q种错误Q?BR>public void fun1(A a) //a是局部参敎ͼ指向了一个外在对象?BR>{
a = new A(); //a指向了一个新对象Q和外在对象脱钩了。如果你要让a作ؓ传出变量Q?BR>不要写这一句?BR> a.setAttr(attr);//修改了新对象的|外在对象没有被修攏V?BR>}
基本cd也会出现q种情况。例如:
public void fun2(int a)
{
a = 10;//只作用于本方法,外面的变量不会变化?BR>}
Q6.1 java能动态分配数l吗Q?BR>{:可以。例如int n = 3; Language[] myLanguages = new Language[n];
Q6.2 我怎么知道数组的长度?
{:用length属性。如上例中的 myLanguages.length ׃ؓ 3?/FONT>
Q6.3 我还惌数组的长度能自动改变Q能够增?删除元素?BR>{:用顺序表--java.util.List接口?BR>你可以选择用ArrayList或是LinkedListQ前者是数组实现Q后者是链表实现?BR>例如Q?nbsp; List list = new ArrayList(); 或是 List list = new LinkedList(); ?/FONT>
Q6.4 什么是链表Qؓ什么要有ArrayList和LinkedList两种ListQ?BR>{:误习数据结构?/FONT>
Q6.5 我想用队?栈?BR>{:用java.util.LinkedList?/FONT>
Q6.6 我希望不要有重复的元素?BR>{:用集?-java.util.Set接口。例如:Set set = new HashSet()?/FONT>
Q6.7 我想遍历集合/Map?BR>{:用java.util.Iterator。参见API?/FONT>
Q6.8 我还要能够排序?BR>{:用java.util.TreeSet。例如:Set set = new TreeSet()。放q去的元素会自动排序
?BR>你需要ؓ元素实现Comparable接口Q还可能需要提供equals()ҎQcompareTo()ҎQh
ashCode()Ҏ?/FONT>
Q6.9 但是我想l数l排序?BR>{:java.util.Arrayscd含了sort{实用方法?/FONT>
Q6.10 我想按不同方式排序?BR>{:为每U方式定义一个实C接口Comparator的排序类q和Arrays或TreeSetl合q用?/FONT>
Q6.11 Map有什么用Q?BR>{:存储key-value的关键字-值对Q你可以通过关键字来快速存取相应的倹{?/FONT>
Q6.12 setҎ没问题,但是getҎq回的是Object?BR>{:强制cd转换成你需要的cd。参见Q5.12?/FONT>
Q6.13 ArrayList和Vector有什么不同?HashMap和Hashtable有什么不同?
{:ArrayList和HashMap是多U程不安全的Q在多个U程中访问同一个ArrayList对象可能
会引起冲HƈD错误?BR>而Vector和Hashtable是多U程安全的,即在多个线E中同时讉K同一个Vector对象也不
会引起差错?BR>看v来我们更应该使用Vector和HashtableQ但是实际上Vector和Hashtable的性能太差Q?BR>所以如果你不在多线E中使用的话Q还是应该用ArrayList和HashMap?/FONT>
Q6.14 我要获得一个随机数?BR>{:使用java.util.RandomcR?/FONT>
Q6.15 我比较两个StringLfalseQ但是它们明明都?abc" Q?BR>{:比较String一定要使用equals或equalsIgnoreCaseҎQ不要?== Q?BR>==比较的是两个引用Q变量)是否指向了同一个对象,而不是比较其内容?/FONT>
Q6.16 我想修改一个String但是在StringcM没找到编辑方法?BR>{:使用StringBuffercR?BR>String str = "......."; //待处理的字符?BR>StringBuffer buffer = new StringBuffer(str); //使用该字W串初始化一个StringBuf
fer
buffer.append("..."); //调用StringBuffer的相关API来编辑字W串
String str2 = buffer.toString(); //获得~辑后的字符丌Ӏ?BR>另外Q如果你需要将多个字符串连接v来,请尽量避免?L接连接,而是使用Strin
gBuffer.append()Ҏ?/FONT>
Q6.17 我想处理日期/旉?BR>{:使用java.util.DatecR你可以使用java.text.SimpleDateFormatcL在String和Da
te间互相{换?BR>SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //?BR>定日期格?BR>Date date = formatter.parse("2003-07-26 18:30:35"); //符合格式的String转换?BR>Date
String s = formatter.format(date); //Date转换为符合格式的String
关于定义日期格式的详l信息请参见API?/FONT>