1. 问:(x)怎样?Win95 的记事本 (Notepad) 来编?Java源程序?
{:(x)记得存档时扩展名要加?.java"Q文件类型改成:(x)“所有的文g(*.*)”?
2. 问:(x)到底 Java 是如何传递参数的Q是by value或by referenceQ?
{:(x)All parameters (values of primitive types, and values that are references to objects) are passed by value [JLS sect 8.4.1]。根据以?Java规格文g的说? 所有参数应该都是传值的(by value)。但实际? 实际l验却告诉我们所?Java 的对象都是传址?by reference)。因此我们可以这栯? 基本cd(如int, float, char{?是by valueQ而所谓“对象?Object)则是by value of reference to object?
3. 问:(x)Stringq个cd的classZ定义成finalQ?
{:(x) 主要是ؓ(f)了“效率??“安全性?的缘故。若 String允许被? ׃它的高度被用率, 可能?x)降低程序的性能Q所以String被定义成final?
4. 问:(x)finalizers和C++ ?destructors有何差异?
{:(x)Java内部h“内存用回收?的机Ӟ 虽然它也提供了类?(C++ ? destructors?finalize()Q每个对象都可以使用q个Ҏ(gu) methodQ但必须冒著破坏原先回收机制的危险。所以徏议尽量避免用finalize()Q不妨考虑多?null ?dispose() 来释源会(x)好一些?
5. 问:(x)l承了一个class叫做 FrotzQ编译器却给我“No constuctor Frotz() in the class”这L(fng)错误提示Qؓ(f)什么呢Q?
{:(x)C每当(zhn)定义了一?class的constructorQ除非?zhn)一开始就去call q个constructorQ否?Java ?x)自动引入superclass原先不含参数?constructorQ?如果superclass?constructor都是有参数的Q那么问题中的错误提CZ出现了?解决的方法很? 找一?API文gQ加上正的参数得了?
6. 问:(x)怎样让charcd的东西{换成intcdQ?
{:(x)
char c = 'A'Q?
int i = cQ?
//反过来只要作强制cd转换p?
c = (char) IQ?
7. 问:(x)我的applet原先好好? 一攑ֈweb server׃(x)有问题,Z么?
{:(x)一般来_(d)从以下方向试试:(x)
定class文g的格式没错——已l编译过Q也没有损坏的情形;
定所有用到的class文g攑ֈweb server上,一个都不行Q?
定所有的文g名和class名称一_(d)特别(g)查大写有无差错Q?
如果E序中用到packageQweb server上的目录p当心了。譬如?zhn)在class中宣告了一个叫COM.foo.util的packageQ那么web server的applet codebase目录底下非得有 COM/foo/utilq个子目录不可?注意目录名称也有大小写之?Q?
web server上的文g档案应该事先讑֮好?其是searchQread和execute权限)
8. 问:(x)怎样?Applet中用某个囑Ş涂满整个背景Q?
{:(x)在背景徏?Panel ?Canvas, 然後用图形填满它?
9. 问:(x)怎样?Applet 中徏立自q菜单(MenuBar/Menu)Q?
{:(x)首先在Applet的init() Ҏ(gu)中徏立Frame instanceQ?然后MenusQ?Menubar都加上去卛_?(setMenuBar() ?Frame下的Ҏ(gu))或者,扑ֈApplet上层的Frame后依法炮制?
Container parent = getParent();
while (! (parent instanceof Frame) )
parent = parent.getParent();
Frame theFrame = (Frame) parent;
注意Q第二个Ҏ(gu)在Mac或某些browsers上ƈ不可行?
如果(zhn)用的是JDK 1.1Q也可以考虑使用popup menuQ这样就不必理会(x)Frame的问题了?
10. 怎样比较两个cd为String的字W串Q?
{:(x)在两个对象之间?"=="Q会(x)“两个对象是否有同一reference”的l果传回。也是? q等同于“两个对象是否拥有同一地址 (address)”,或者“两个对象物件是否ؓ(f)同一对象”。如果?zhn)的意思是判断两个字符串的内容是否相同Q那么应该用以下的Ҏ(gu)才对Q?
if (s1.equals(s2) )
or if (s1.equalsIgnoreCase(s2) )
or if (s1.startsWith(s2) )
or if (s1.endsWith(s2) )
or if (s1.regionMatches(s1_offset, s2, s2_offset, length) )
or if (s1.compareTo(s2) <0)
11. 怎样QҎ(gu)(float)相加 ? Float 好像没有办法Q?
{:(x)我猜x的程式大概写成这P(x)
Float One;
Float Two;
Float Hard = One + Two;
h?float ?Float 是不同的Q前者是 Java 基本cd之一, 而后者却是class。?zhn)应该源代码改?f)Q?
float One;
float Two;
float Hard = One + Two;
?
Float One = new Float(1.0);
Float Two = new Float(2.0);
Float Hard = new Float(One.floatValue() + Two.floatValue());
12. 如何字串String转换成整数intQ?
{:(x)有两个方法:(x)
1)int i = Integer.parseInt([String]); ?
i = Integer.parseInt([String],[int radix]);
2)int i = Integer.valueOf(my_str).intValue();
? 字串转成Double, Float, Long的方法大同小异?
13. 如何整?int 转换成字?StringQ?
{:(x)有三U方法:(x)
1)String s = String.valueOf(i);
2)String s = Integer.toString(i);
3)String s = "" + i;
注:(x)Double, Float, Long 转成字串的方法大同小异?
14. 如何从一个文件档案的新增记录Q?
{:(x)有两U方法:(x)
1)RandomAccessFile fd = new RandomAccessFile(file,"rw");
fd.seek(fd.length());
然后使用 fd 的method写入
2)使用FileOutputStream(String nameQboolean append) throws IOExceptionq个 constructor
15. 如何讄Java 2(JDK1.2)的环境变量?
{:(x)Java 2安装后,需要设|PATH和JAVA_HOME环境变量。与JDK1.1不同的是Q设|好JAVA_HOME环境变量后,JVM自动搜索系l类库以?qing)用L(fng)当前路径。Java 2环境变量的设|如下例所C:(x)
Solarisq_Q?setenv JAVA_HOME Java2的安装\?
setenv PATH $JAVA_HOME/bin:${PATH}
Windowsq_Qset JAVA_HOME=Java2的安装\?
set PATH=$JAVA_HOME\bin;%PATH%
16. 哪些Java集成开发工h持Java 2Q?
{:(x)目前行的Java集成开发环?如Inprise的JbuilderQSymantec的Visual Cafe,QSybase的PowerJ都支持Java 2?
17. 如果在Netscape或IE览器中q行Java applet时出C错误,如何定错误范围Q?
{:(x)当java applet在浏览器中运行时Q用的是浏览器本n的缺省JVM。而不同浏览器对JDK的支持程度也不尽相同。因此,在Netscape或IE览器中q行Java applet出现了错误,使用JDK提供的工具appletviewer或Sun公司的Hotjava览器来试该appletQ以定错误的生是与浏览器相关。如果applet在appletviewer或Hotjava中运行一切正常,则错误的产生是由于浏览器不完全兼容JDK而引L(fng)。此Ӟ解决Ҏ(gu)可以是用Hotjava览器或者安?Sun公司的Java Plugin。如果applet在Hotjava览器或appletviewer中运行即发生错误Q则应当Ҏ(gu)错误提示(g)查appletE序?
18. 在Java语言?如何列出PC机文件系l中的所有驱动器名?
{?在Java 2版本中,java.io包中的FilecL增加了方法listRoots()可以实现q一功能?
19. Z么Runtime.exec("ls")没有M输出Q?
{:(x)调用Runtime.execҎ(gu)生一个本地的q程Qƈq回一个Process子类的实例,该实例可用于控制q程或取得进E的相关信息。由于调用Runtime.execҎ(gu)所创徏的子q程没有自己的终端或控制収ͼ因此该子q程的标准IO(如stdinQstdouQstderr)都通过 Process.getOutputStream()QProcess.getInputStream()Q?Process.getErrorStream()Ҏ(gu)重定向给它的父进E了。用户需要用q些stream来向子进E输入数据或获取子进E的输出。所以正执行Runtime.exec("ls")的例E如?
try
{
process = Runtime.getRuntime().exec (command);
InputStreamReader ir=newInputStreamReader(process.getInputStream());
LineNumberReader input = new LineNumberReader (ir);
String line;
while ((line = input.readLine ()) != null)
System.out.println(line);
}
catch (java.io.IOException e){
System.err.println ("IOException " + e.getMessage());
}
20. 若通过ObjectOutputStream向一个文件中多次以追加方式写入objectQؓ(f)什么用ObjectInputStreamdq些object时会(x)产生StreamCorruptedExceptionQ?
{?使用~省的serializetion的实现时Q一个ObjectOutputStream的构造和一个ObjectInputStream的构造必M一对应。ObjectOutputStream的构造函C(x)向输出流中写入一个标识头Q而ObjectInputStream?x)首先读入这个标识头。因此,多次以追加方式向一个文件中写入objectӞ该文件将?x)包含多个标识头。所以用ObjectInputStream?deserializeq个ObjectOutputStreamӞ生StreamCorruptedException?
一U解x法是可以构造一个ObjectOutputStream的子c,q覆盖writeStreamHeader()Ҏ(gu)。被覆盖后的 writeStreamHeader()Ҏ(gu)应判断是否ؓ(f)首次向文件中写入objectQ若是,则调用super.writeStreamHeader ()Q若否,即以q加方式写入objectӞ则应调用ObjectOutputStream.reset()Ҏ(gu)?
21. 对象的序列化(serialization)cL面向的,应如何将对象写入到随机存取文件中Q?
{? 目前,没有直接的方法可以将对象写入到随机存取文件中。但是可以用ByteArray输入/输出作Z介,来向随机存取文g中写入或从随机存取文件中d字节Qƈ且可以利用字节流来创建对象输?输出,以用于读写对象。需要注意的是在字节中要包含一个完整的对象Q否则读写对象时发生错误。例如, java.io.ByteArrayOutputStream可用于获取ObjectOutputStream的字节流Q从中可得到byte数组q可之写入到随机存取文件中。相反,我们可以从随机存取文件中d字节数组Q利用它可构造ByteArrayInputStream,q而构造出 ObjectInputStream,以读取对象?
22. 在JDK1.1中Threadcd义了suspend()和resume()Ҏ(gu)Q但是在JDK1.2中已l过?应用什么方法来替代之?
{? Thread.suspend本n易于产生死锁。如果一个目标线E对某一关键pȝ资源q行了加锁操?然后该线E被suspendQ那么除非该U程?resumeQ否则其它线E都无法访问该pȝ资源。如果另外一个线E将调用resumeQ该线El运行,而在此之前,它也需要访问这一pȝ资源Q则生死锁?
因此,在Java 2中,比较行的方式是定义U程的状态变量,q目标U程轮询该状态变量,当状态ؓ(f)(zhn)挂状态时Q可以用wait()Ҏ(gu)使之处于{待状态。一旦需要该U程l箋q行Q其它线E会(x)调用notify()Ҏ(gu)来通知它?
如果(zhn)有更好的答案,误贴。谢谢!
当然Q我们也不好因此责怪程序员Q毕竟Y件技术变动得太快。公怸可能l程序员_的训l之后才开始做计画。程序员一下子被指z用A技术,q没弄懂A技术是怎么回事Q又被指z用B技术,而且都是~缝补补的方式边学边用,每次都像是全新的开始,遑论技术能量的累积?/p>
我很庆幸的是Q我不太有这L(fng)困扰。因为我是资讯工E系n(而且我大学时上课一向很认真)Q所以理论基E_Q学?fn)新技术对我来说不是难事。我p大学Ӟ周遭许多同学都瞧不v数据l构、程序语a、操作系l这些所谓「学院派」的评Q以些课E一炚w不实用。他们认为到了外面公司,q些信息U系所学的一切都z不上用场,「只要会(x)Visual Basic和数据库够了」。这U偏差的心态,恐怕会(x)使得他们在知识经时代吃了苦头?/p>
另外q有一z学很瞧不L(fng)序设计工作,他们告诉我,像我q样?x)写E序的hQ未来进了社?x)「还不是被他们这些走理的ht在脚下」。所以,他们很轻忽理工课E的学习(fn)Q甚臌有h相当热衷「成功学」,认ؓ(f)q是q向成功的快h式,却因此把学校的课业弃之不。我不敢怿有h竟然如此地本末倒置?/p>
前一cȝ人太q于短视q利Q后一cȝ人太q于好高骛远。我一直很不能理解q些人的xZ么会(x)q样Q或许是因ؓ(f)C会(x)环境的风气然。我很庆q我到目前还没被C会(x)的大染l玷污了(最好这辈子都不?。我不认为我的学?fn)方式是一U典范,但是一路走来,倒也颇有q展。许多读者来信问我的学习(fn)历程Q虽然我个h的学?fn)方式不见得适用于每个hQ但或许q有一些参考h(hun)?特别是对于那些有志进入信息行业的q轻学子)Q我想透过本文短地叙述一下?/p>
我一向是采用先深后广(也称为Bottom-UpQDeep-First)的学?fn)方式。比方说Q当我在学A技术的时候,学到一半发现需要B技术的基础Q我?x)到书局扑և一两本B技术的书,然后把A先搁着Q开始看起B技术的书。甚臻I我在技术书c上看到不太熟?zhn)的英文句构时Q我?x)找Z本英文文法书详细读过。这U先深后q的学习(fn)方式Q适合学生时代全面地自我能力提升,但不适合业界人士。试惻I老板要你开发的ERPpȝ已经延迟了,你怎有I研I?J2EE原文书中的英文文法。先深后q的好处是,学习(fn)很扎?~点是有时候会(x)偏离主题太多。有一ơ我发现我原本是要学某Y件技术,几次「先深后qѝ下来,我居然看赯(g)子的道L(fng)了?/p>
在技术上Q我一直都是一个喜新厌旧的人,很少有Y件技术能让我持箋研究半年以上Q我几乎每隔几个月就要换一ơ领域。Java 能让我持l这么久Q也正是因ؓ(f)Java的领域广。透过JavaQ我的技术视野变开阔了。这些年来,我换q的 Java 相关领域包括?虚拟机器、数据库、企业运、多媒体?D/3D囑֭、网l??.{?/p>
我的学习(fn)完全是兴导向的Q所以压力ƈ不大。因为有兴趣Q所以我?x)很惛_分理解一切细节。又因ؓ(f)理解Q所以许多原本片片断断的知识都可以渐渐互相融?x)诏通,累积技术能量,理论和实务之间的藩篱被打破了Q学?fn)效率倍增?/p>
我多q来的学?fn)触觉很敏锐Q我常常?x)抢先一步学好有前瞻性的技术。比方说QJavaq在beta时、UMLq在0.8时、XMLq在draft Ӟ我都已经透过|络下蝲技术文件回来每天抱着猛读了。而在Java、UML、XML当红之后Q我已经差不多把q些技术都摸熟了?/p>
至于该学什么技术,我的判断方式是以技术的优劣来决定。优U而有独到之处的技术是我的最爱,虽然q类的技术不见得?x)在市场上胜出,但学习(fn)这些技术所得到的启发,对于技术能量的累积与能力的提升?x)有相当大的助益。至于技术差Q但市场需求甚D(g),我还是懒得碰?好吧!我承认我曑֛为市场需求的~故而学qMFC。越清楚MFC的技术细节,是讨厌它,q真是个不堪回首的经验?
我通常只看英文技术资料,毕竟大部分第一手的技术信息都是以英文来传播。所以我很早开始阅读英文技术资料。读英文技术资料的好处是,q没有学到书中的专业知识,臛_也篏U培M英文阅读能力Q我一直都是抱着q样的态度。一开始是正襟危坐的看英文技术书c,字典、翻译机随侍在侧;几年下来Q现在是w着看、趴着看、很随性地看英文技术书c,因ؓ(f)看英文技术书c变成一U习(fn)惯了。现在,我可以用很快的速度吸收英文技术书c的知识(有h叫我「吃书的机器」,我把q称号当作是一U恭l??/p>
q年来,我花在写E序的时间不多,因ؓ(f)旉Ҏ(gu)来说很宝贵,而写E序很浪Ҏ(gu)间。对初学者来_(d)大量地写E序是必要的Q但q了某个阶段之后Q写E序所带来的技术能力成长已l到了极限,q不如多׃Ҏ(gu)间看书,学新技术和新观c(din)?/p>
我从国小时期开始学?fn)写E序Q迄今已有近十八q的旉;采取上述的方式密集学?fn),q今也有q十q的光景。迩来数q_(d)我接触的领域来广Q而且学习(fn)速度正在加快Q我认ؓ(f)是以前那些努力植下的根苗开始成长了。看看现在的我,或许你会(x)觉得慕Q但回顾q段学习(fn)的岁月,何尝不是一条O长的道\?/p>
1. 问:(x)在JAVA与JSP中要调用一个LINUX上的脚本E序,或WINDOWS上的脚本E序,该怎么写? {:(x)System.getRuntime().exec("bash < aaa.sh"); 2. 问:(x)java中用什么表C双引号 {:(x)""" 3. 问:(x)如何在JSPE序里另起一个线E? {:(x) JSP本n是独立U程q行而不象CGI都是独立q程. 一? Thread t = new Thread("你的对象\"); t.start();可以了. 要求你这个对象要实现runnable接口或承thread. 4. 问:(x)jsp如何获得客户端的IP地址Q?br />{:(x) request.getRemoteAddr() 看看各个webserver的API文档说明Q一般都有自带的Qresin和tomcat都有 5. 问:(x)E序l止与输出终?br />{:(x) E序中止:return; 输出中止:out.close();q一句相当于ASP的response.end 6. 问:(x)jsp中如何得C늚URLQ?br />{:(x)request.getHeader("referer"); 7. 问:(x)提交|页的网过期功能是怎么做的Q?br />{:(x)response.setHader("Expires","0"); 8. 问:(x)在JSP|页中如何知道自已打开的页面的名称 {:(x) request.getRequestURI() ;//文g? request.getRequestURL() ;//全部QRQ?br /> 9. 问:(x)提交表单后验证没有通过Q返回提交页面,如何使原提交面中的数据保留Q?br />{:(x)javascript的go(-1)可以把上늚表单内容重新昄出来,但password域没?br /> 10. 问:(x)如何取得http的头信息Q?br />{:(x)request.getHader(headerName); 11. 问:(x)&&?amp;的区别? {:(x) &&是短路的与操作,也就是当C个条件是false的时候,W二个条件不用执?br />&相反Q两个条件L执行?br /> 12. 问:(x)?以正弦曲U的一个周期显C出?br />{:(x) public void paint(Graphics g) { for(int i=0;i<200;i++) g.drawString("*",i,(int)(Math.sin(i)*20)+50); } } 13. 问:(x)点数相乘后l果不精如100.0 * 0.6 l果{于 60.0004 {:(x) q不叫错?float和double是这样实现的.如果要精计,java提供了一? strictfp,它的计算遵@IEEE 754标准.而普通的float和double是由地^台QҎ(gu)式或 g? 供的额外_ֺ或表C围?br /> 14. 问:(x)如何获得当前用的cursors的位|? {:(x) int row = rs.getRow()是当前指针行数,q有 isFrist();isBeforeFist();isLast();isAfterLast();可以试是不是在Ҏ(gu)名所说的 位置 15. 问:(x)表单成功提交了,点后退昄|页q期 {:(x) 在里面加以下代码 或?br />在表单页中加?br /> 16. 问:(x)接口的简单理? {:(x)接口Z规范,比如我在接口中定义了一个方? getData() q是用来从不同的数据库中取数据的,是JDBC的实?br />对于用户,我不要知道每U数据库是如何做?但我知道如何它们要实现这个接口就一?br />有这个方法可以供我调 ?q样SUN把q个接口l各个数据库开发商,让他们自己实? 但ؓ(f)什么不用承而用接口?因ؓ(f)l承只能从一个你cȝ?而接口可以实现多??br />是说我实现的子类有多 个规定好的接口中的功? q只是简单的理解,{你深入理解抽象的时候就知道抽象到抽象类时ؓ(f)什么还要再抽象 到接? 17. 问:(x)怎样~写一个取消按钮(怎样q回上一个页面,象工h的后退按钮Q? {:(x) javascript把每ơ浏览过的location都压C一个栈?q个栈就?br />history,然后你如果要回到W几个页面它?yu)做几次POP操作,把最后POP出来的那个LOCA TIONl你. q就是JAVASCRIPT在实现history.go(-x)的原? 18. 问:(x)什么是回调Q?br />{:(x) 单说,回调用不是让你去监听谁做完了什么事,而是谁做完了什么事报告给? q就是回调用的思想.例子太多?AWT的事?SWING事g模型都是q样? q有多线E中,如果要控制线E数,不能L查询每个U程是否l束,要在每个U程l束 时让U程自己告诉ȝ E我l束?你可以开新的U程? 19. 问:(x)要介l一下compareToҎ(gu) {:(x) compareToҎ(gu)是Comparable 接口必需实现的方?只要实现Comparable 可以用Arr ays.srot()排序p?br />现Runnable接口的runpThread()一? 20. 问:(x)如何可以从别的Web服务器检索页, 然后把检索到的网늚HTML代码储存在一个变 量中q回q来 {:(x)q是一个简单的WEB ROBOT实现,用URLcdC|页中抓内容,然后自己写一个分?br />E序从中扑և新的URL,不断递归下去p? |
|
|
|
JSP~译器指引与指o(h)元g有五U型?在JSP 1.0之后Q大部分的JSP是包含在?lt;% 作ؓ(f)开?>作ؓ(f)l束的单一标签?新的 JSP 1.1规格已经发表了,它同时也与XML相容.
五种JSP的编译器指引如下所C:(x)
1 ~译器指?<%@ ~译器指?%>
2 预定?<%! 预定?%>
3 q算?<%= q算?%>
4 E序代码 <% E序代码 %>
5 注解 <%-- 注解 --%>
下面我们分析一个简单的 JSP 面。?zhn)可以?JSWDK ?examples 目录下创建另外一个目录存放此文gQ文件名字可以Q意,但扩展名必须?.jsp 。从下面的代码清单中可以看到Q?JSP 面除了比普?HTML 面多一?Java 代码外,两者具有基本相同的l构?Java 代码是通过 < % ?%> W号加入?HTML 代码中间的,它的主要功能是生成ƈ昄一个从 0 ?9 的字W串。在q个字符串的前面和后面都是一些通过 HTML 代码输出的文本?
< HTML>
< HEAD>< TITLE>JSP 面 < /TITLE>< /HEAD>
< BODY>
< %@ page language="java" %>
< %! String str="0"; %>
< % for (int i=1; i < 10; i++) {
str = str + i;
} %>
JSP 输出之前?
< P>
< %= str %>
< P>
JSP 输出之后?
< /BODY>
< /HTML>
q个 JSP 面可以分成几个部分来分析?
首先?JSP 指o(h)。它描述的是面的基本信息,如所使用的语a、是否维持会(x)话状态、是否用缓冲等?JSP 指o(h)?< %@ 开始, %> l束。在本例中,指o(h)?< %@ page language="java" %> ”只单地定义了本例用的?Java 语言Q当前,?JSP 规范?Java 是唯一被支持的语言Q?
接下来的?JSP 声明?JSP 声明可以看成是定义类q一层次的变量和Ҏ(gu)的地斏V?JSP 声明?< %! 开始, %> l束。如本例中的?< %! String str="0"; %> ”定义了一个字W串变量。在每一声明的后面都必L一个分Pp在普?Java cM声明成员变量一栗?
位于 < % ?%> 之间的代码块是描q?JSP 面处理逻辑?Java 代码Q如本例中的 for 循环所C?
最后,位于 < %= ?%> 之间的代码称?JSP 表达式,如本例中的?< %= str %> ”所C?JSP 表达式提供了一U将 JSP 生成的数值嵌?HTML 面的简单方法?
Q?保证你理?HTML / XHTML ?
你将需要了解html基础, 特别?HTML 布局中的table的用。XHTML 不久代?HTML Q学?XHTML 的基是一个好L。许多程序员通过 HTML IDE 学习(fn) HTML ( 集成开发环?) 。因为大多数 HTML IDE产生混ؕ的HTMl语法Q所以花旉学习(fn)手工写作html是很有必要的。因Z会(x)使用 JSP ?HTML 混合~程Q精通HTML语法是重要的。所以,你必能利地写 HTML ?
训练旉Q? ?4 个星期?
Q、开始学?Java ?
开始学?Java 1.3 理解 Java 基础是很重要的。不用担心学?fn)Swing?Java 的图形方面,因ؓ(f)在JSP 中你不会(x)使用q些特征。集中精力在 Java 工作的细节,学习(fn) Java 的逻辑Q也?Java Bean上花旉。学?fn)Applet是好? 但是pSwingQ?JSP 的大多数应用不使用程序?
训练旉Q? ?6 个星期?
Q、学?fn)ƈ且理解你的Web Server的更好的l节?
熟?zhn)Web Server的特征,q是很重要的?
训练旉Q? 天?
Q、徏立你?JSP Server
我推荐以Tomcat开始。它可以很好地运行JSPE序。当你不能在生使用TomcatӞ学习(fn)可能多的知识以便于更好的运行程序。另? 许多 JSP E序员用Tomcat。因此当你遇C个问题时Q你容易发现帮助?
安装旉Q一?2 天?
Q、开始学?JSP ?
基本?JSP 学习(fn)通过的步?1到步?可以完成, 然后使用 JSP 对象和脚本写 JSP E序来联pR学?JSP 的另外一个方面可以学?fn)怎么创徏一个分布式的应用程序?
训练旉Q? ?6 个星期?
Q、学?fn)更多?JSP server?
没有关于更多?JSP Server当然也可以运行jspE序。然? 许多 JSP server都由自己Ҏ(gu)的特征,可以让你更好的理解你的JSP 工程?
学习(fn)更多的Jsp server如何处理jspE序是有必要的。同样也可以优化你的 JSP 应用E序Qƈ且之运行得更快而不ZQ何问题?
训练旉Q? ?7 天?
Q?学习(fn) JDBC ?
JSP 大多数应用将使用数据库,JDBC 被用于数据库q接。经常忽略的一个事实就是,每个 JDBC Driver 所支持的东西是相当不同的。了解ƈ熟?zhn)在jsp工程上被使用?JDBC driver的细节是很重要的?
Q有时这部分的学?fn)被包含在前?Java 或JSP的学?fn)中?。)
训练旉Q??2 个星期?
到现在,你已l成Z熟练?JSP E序员。仍然有很多需要学?fn),你可以考虑扩展你的知识比如 DHTML Q?XML Qjava证书Q?JSP Tag Libraries ?Servlets , 看你惌造什么类型的|站而决定了?
q些训练是JSP 的核心。你不必都学?fn)上面所有的, 取决于你在工E中分配C么Q务和你已l有什么知识。但是这是我成功地训l程序员的时间表。关键的单元是时间。^均的? 5 个月旉实能够训练一个h ( 从开始到完成 ) 成ؓ(f)一个对jsp熟?zhn)E序员? 个月旉g很长Q但要成Z个资qWEBE序员所学的东西q远不止q一些?
也许你认样学?fn)一U语ap的时间太长了Q因为学 ASP ?x)更快、时间会(x)更短?但是学习(fn) ASP 不需要学?fn)java的?
Unixq_Q?/b>
如是bash/sh环境Q键入:(x)TOMCAT_HOME=foo/tomcat;export TOMCAT_HOME"
如是tcsh环境Q键入:(x)setenv TOMCAT_HOME foo/tomcat
讄环境变量JAVA_HOME指向你JDK的目录,然后dJAVA解释器到你的PATH环境变量?br /> 好了Q现在可以运行TOMCATq作Z个独立的Servlet容器(模式一)
启动与关闭Tomcat
使用"bin"目录中的脚本启动与关闭Tomcat?br />
启动Q?br />
uinx:bin/startup.sh win32:binstartup |
关闭Q?
unix:bin/shutdown.sh win32:binshutdown Tomcat目录l构 |
假设读者已Tomcat解压Q这时将得到下列目录l构Q?br />
目录?/b> | 描述 |
bin | 包含启动/关闭脚本?/td> |
conf | 包含不同的配|文Ӟ包括 server.xmlQTomcat的主要配|文Ӟ和ؓ(f)不同的Tomcat配置的web应用讄~省值的文gweb.xml?/td> |
doc | 包含各种Tomcat文档?/td> |
lib | 包含Tomcat使用的jar文g。unixq_此目录下的Q何文仉被加到Tomcat的classpath中?/td> |
logs | Tomcat摆放日志文g的地斏V?/td> |
src | ServletAPI源文件。先别高_(d)q里只有些必dServlet容器内实现的I接口和抽象cR?/td> |
webapps | 包含web目CZ?/td> |
work | Tomcat自动生成Q放|Tomcatq行时的临时文gQ如~译后的JSP文gQ,如果在Tomcatq行时删除此目录.JSP面不能运行?/td> |
classes | 你可以创建此目录来添加一些附加的cdc\径中QQ何你加到此目录中的类都可在Tomcat的类路径中找到自w?/td> |
Tomcat的脚?/b>
Tomcat是一个JavaE序Q因此在讄好几个环境变量后卛_用命令行的方式运行。然而设|Tomcat使用的每个环境变量和如下的命令行参数乏味且容易出错。因此,Tomcat开发组提供了一些脚本启动和关闭Tomcat变得非常L?br /> 注意Q这些脚本仅仅是个便利的Ҏ(gu)d动和关闭Tomcat。你可修改他们来定制CLASSPATHQ环境变量如PATH、LD_LIBRARY_PATH{等Q只要是生成一个正的命o(h)行即可?br /> q些脚本是什么呢Q下面列出对一般用h重要的脚本?br /> TomcatQ主脚本。设|合适的环境变量Q包括CLASSPATH、TOMCAT_HOME以及(qing)JAVA_HOME和用适合的命令行参数启动Tomcat ?br /> startup Q在后台启动Tomcat。它?tomcat start"命o(h)的替换方式?br /> shutdown Q关闭Tomcat。它?tomcat stop"命o(h)的替换方式?br />
对用h重要的脚本是tomcat(tomcat.bat/tomcat.sh)。其他Tomcat相关的脚本作Z个简单的面向单Q务的指向Tomcat脚本(讄不同的命令行参数{?的入口?br />
仔细考察tomcat.bat/tomcat.shQ它按以下步骤运行:(x)
在Unix下的步骤Q?br />
如未指定Q推?TOMCAT_HOME
如未指定Q推?JAVA_HOME
讄CLASS_PATH包含Q?br />
1Q?{TOMCAT_HOME}/classes目录(如果存在)
2Q?{TOMCAT_HOME}/lib的一切内?br /> 3Q?{JAVA_HOME}/lib/tools.jarQ此jar文g包含工具JavacQ我们需要Javac处理jsp文gQ?br />
q行带有讑֮Java环境变量的命令行参数的Java命o(h)Q调入tomcat.home?org.apache.tomcat.startup.Tomcat 作ؓ(f)启始cR同时也传递命令行参数到org.apache.tomcat.startup.Tomcat Q例如:(x)执行start/stop/run {的操作。另外,此Tomcatq程使用指向server.xml的\径,例如server.xml攄于etc/server_1.xmlq且用户意图在后台启动apacheQ键入如下命令行Q?br />
bin/tomcat.sh start -f /etc/server_1.xml
win32版的tomcat.bat与Unix版的几乎一致。尤其在它不推测TOMCAT_HOME和JAVA_HOME的|q且不将所有的jar文g攑օc\径中?br />
Tomcat的配|文?/b>
q一部分讲q如何用配|文件server.xml和web.xml。我们不?x)包含web.xml的内部机Ӟq些内部机制深入CServlet API的细节,因此Q我们将讨论늛q两个配|文件在Tomcat关系环境中的用法?br />Tomcat的配|基于两个配|文Ӟ(x)
1Qserver.xml - Tomcat的全局配置文gQ完成两个目标:(x)
Q?Q提供Tomcatlg的初始配|?br /> Q?Q说明Tomcat的结构、含义,使得Tomcat通过实例化组件完成启动及(qing)构徏自n?br />l构、含义的说明是通过元素来实现的Q下面将描述q些元素?br />
ServerQserver.xml文g中最重要的元素。Server定义了一个Tomcat服务器。一般读者不用对它担心太多。Server元素能包含Logger和ContextManager元素cd?br />
LoggerQ此元素定义一个Logger对象Q每个Logger都有一个名字去标识Q也有一个纪录Logger的输出和冗余U别(描述此日志?和包含日志文件的路径Q通常有servlet的Logger(ServletContext.log()?QJSP和Tomcatq行时的Logger?br />
ContextManagerQ它说明了一套ContextInterceptor、RequestInterceptor、Context和它们的Connectors的配|及(qing)l构。ContextManager有几个随同提供的Ҏ(gu):(x)
aQ用来纪录调试信息的调试U别
bQwebapps/、conf/、logs/和所有已定义的环境的基本位置。用来Tomcat可以在TOMCAT_HOME外的其他目录启动?
cQ工作目录的名字
ContextInterceptor&RequestInterceptorQ这些侦听器(interceptors)侦听具体发生?ContextManager中的事gQ例如,ContextInterceptor侦听Tomcat的启动及(qing)l止事gQ?RequestInterceptor监视在它服务q程中用戯求需要通过的不同阶Dc(din)Tomcat的管理员不必知道太多关于侦听器的知识Q另外,开发者应该知道这是如何在Tomcat中实C?全局"型的操作(例如安全性及(qing)每个h日志) ?br />
ConnectorQ表CZ个到用户的联接,不管是通过web服务器或直接到用h览器Q在一个独立配|中Q。Connector负责理Tomcat的工作线E和?写连接到不同用户的端口的h/响应。Connector的配|包含如下信息:(x)
aQ句柄类
bQ句柄监听的TCP/IP端口
cQ句柄服务器端口的TCP/IP的backlog
ContextQ每个Context提供一个指向你攄你Web目的Tomcat的下属目录。每个Context包含如下配置Q?br />
aQContext攄的\径,可以是与ContextManagerȝ录相关的路径
bQ纪录调试信息的调试U别
cQ可重蝲的标志。开发Servlet?重蝲更改后的Servlet,q是一个非怾利的Ҏ(gu)?br />
2Qweb.xml--在Tomcat中配|不同的关系环境
有一个和Tomcat有关的小"Ҏ(gu)?与web.xml有关。Tomcat可以让用户通过缺省的web.xml攑օconf目录中来定义所有关pȝ境的web.xml的缺省倹{徏立一个新的关pȝ境时QTomcat使用~省的web.xml文g作ؓ(f)基本讄和应用项目特定的web.xmlQ放在应用项目的WEB-INF/web.xml文gQ来覆盖q些~省倹{?/p>
如何Tomcat装入IIS
IISQ即Internet Information ServerQ是微Y公司提供的一U功能强大的Web服务器,它对ASP有着很好的支持,q一点相信很多读者都已经知道。现在,JSP已经行hQ如何才能让IIS支持该技术呢Q读者将?x)从本节得到{案?br />
一、安装环境Windows 2000、IIS 5.0
Tomcat 3.1下蝲地址
http://jakarta.apache.org/builds/tomcat/release/v3.1/bin/
isapi_redirect.dll下蝲地址
http://jakarta.apache.org/builds/tomcat/release/v3.1/bin/win32/i386/
攑ֈ{TOMCATHOME}\bin\iis\i386\isapi_redirect.dll
二、先要保证Tomcat可以正确执行
三、将下面的begin和end之间的Jakarta.reg文g装入机器Q我的Tomcat装在c:\\jakarta-tomcatQ你可根据自q环境修改Jakarta.reg文g
Jakarta.regQ?br /> ---begin--- Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector\1.0] "extension_uri"="/jakarta/isapi_redirect.dll" "log_file"="c:\\jakarta-tomcat\\logs\\isapi.log" "log_level"="debug" "worker_file"="c:\\jakarta-tomcat\\conf\\workers.properties" "worker_mount_file"="c:\\jakarta-tomcat\\conf\\uriworkermap.properties" ---end--- |
jdk1_2_2.exe apache_1_3_9_win32.exe ApacheModuleJServ.dll tomcat.zip(3.1) |
QConnector className="org.apache.tomcat.service.SimpleTcpConnector"Q? QParameter name="handler" value="org.apache.tomcat.service.http. HttpConnectionHandler"/Q? QParameter name="port" value="80"/Q? Q?ConnectorQ? |
QContext path="/myweb" docBase="webapps/myweb" debug="0" reloadable="true" Q? Q?ContextQ?/td> |
QhtmlQ? QbodyQ? Q? for(int i=1;iQ?;i++){ out.println("Qh" + i + "QHello WorldQ?h" + i + "Q?); } %Q? Q?bodyQ? Q?htmlQ? |
import Java.io.*; import Java.text.*; import Java.util.*; import Javax.servlet.*; import Javax.servlet.http.*; public class HelloWorld extends HttpServlet { |
存ؓ(f)c:\tomcat\webapps\myweb\classes\HelloWorld.JavaQ用Javac~译后,在地址栏键?http://localhost:apache_port/testdir/servlet/HelloWorld 看看l果吧?br />
如何讑֮Tomcat作ؓ(f)Windows的服务而启动?
上面我们已经谈到Q要使用Tomcat作ؓ(f)Web服务Ӟ必须先手工启动TomcatQ这昄不是一个适合Tomcat作ؓ(f)Web服务的方法,?Linux下可以通过修改启动脚本自动启动TomcatQ在Windows下则可以讑֮Tomcat作ؓ(f)Windows的服务而启动?br />
我们可以借助工具QTomcat作ؓ(f)Windows NT/2000的一个服务:(x)
一、下载工Pq里作ؓ(f)例子的是gservany--NT下的一般应用程序作为服务运行的工具。下载网址为http: //www.advok.com/gservany.html。将zip文g解压~,gservany.exe攑օwinnt\system32?br />
二、在NT/2000的command下输入:(x)gservany -i tomcat "C:\Jakarta-tomcat\bin" "startup.bat" "C:\Jakarta-tomcat\bin" "shutdown.bat"。其中C:\Jakarta-tomcat为Tomcat的安装目录?br />
三、启动service理器,?x)看到tomcat service被装上?/p>
在这文章将不涉?qing)Eclipse, log4j, Struts, Tomcat, XDocletQ和JBoss。本文的目的是演CZ下Hibernate的安装过E以?qing)最基本的功能,从而给初学者一个低得不能再低的入门门槛?/p>
下蝲文g
你需要Java SDK?Hibernate包、Ant包、和JDBC Driver?/p>
1、Hibernate包下载地址:
http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc
2、Ant包下载地址:
http://archive.apache.org/dist/ant/
3、JDBC Driver要根据你用的database来定Q一般database官方|站上都?x)有。Hibernate支持常用的databaseQ比?MySQL, Oracle, PostgreSQL, 和MS-SQL Server。这些数据库都有JDBC Driver:
Oracle JDBC Driver下蝲地址(下蝲前必d意Oracle协议?
http://otn.oracle.com/software/htdocs/distlic.html?/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html
MySQL JDBC Driver下蝲地址
http://dev.mysql.com/downloads/connector/j/3.0.html
PostgreSQL JDBC Driver下蝲地址
http://jdbc.postgresql.org/download.html
MS-SQL Server JDBC Driver下蝲地址
http://www.microsoft.com/downloads/details.aspx?FamilyID=9f1874b6-f8e1-4bd6-947c-0fc5bf05bf71&displaylang=en
4、将Hibernate包和Ant包分别解压至c:\dev\?此目录不重要Q你可以换其它Q何目??/p>
配置环境
1、你需要添加一个新的环境变? ANT_HOMEQ让它指向c:\dev\<的ANT包所在目?gt;q在PATH环境变量里添?ANT_HOME%\bin?/p>
2、你需要添加一个新的环境变? JAVA_HOMEQ让它指向你的j2sdk根目录。ƈ在PATH环境变量里添?JAVA_HOME%\bin?/p>
3、创Z个项目?目录Q比如c:\workspace\My1stHibernate?/p>
在项目目录下Q另外创Z个目? src, classes, lib?/p>
在lib目录下,创徏两个目录: hibernate和db?/p>
q样你有了如下的文gl构:
c:\workspace\My1stHibernate\
c:\workspace\My1stHibernate\src
c:\workspace\My1stHibernate\classes
c:\workspace\My1stHibernate\lib
c:\workspace\My1stHibernate\lib\hibernate
c:\workspace\My1stHibernate\lib\db
4、将c:\dev\<的Hibernate包所在目?gt;hibernate2.jar文gcopy到c:\workspace\My1stHibernate\lib\hibernate下?/p>
c:\dev\<的Hibernate包所在目?gt;lib\下的所有文件同样copy到c:\workspace\My1stHibernate\lib\hibernate下?/p>
你的JDBC Driver文g(一般是一个jar文g)copy到c:\workspace\My1stHibernate\lib\db下?/p>
创徏数据?/strong>
1、用你最喜爱的database软gQ创Z个hibernate_test的数据库?/p>
2、在此数据库下,新徏一个table名ؓ(f)CUSTOMER
CREATE TABLE CUSTOMER
(
CID INTEGER NOT NULL PRIMARY KEY, USERNAME VARCHAR(12) NOT NULL, PASSWORD VARCHAR(12)
);
~写Java文g
public class Customer {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public String getPassword() {
return password;
}
public String getUsername() {
return username;
}
public void setId(int id) {
this.id = id;
}
public void setPassword(String password) {
this.password = password;
}
public void setUsername(String username) {
this.username = username;
}
}
此cd为c:\workspace\My1stHibernate\src\Customer.java文g?/p>
~写Testc?/strong>
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;
public class Test {
public static void main(String[] args) {
try {
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
for (int i = 0; i <200; i++) {
Customer customer = new Customer();
custoā?mer.setUsername("customer" + i);
customer.setPassword("customer");
session.save(customer);
}
tx.commit();
session.close();
} catch (HibernateException e) {
e.printStackTrace();
}
}
}
此cd为c:\workspace\My1stHibernate\src\Test.java文g?/p>
创徏Hibernate映射文g
因ؓ(f)q里只有一个Class --- Customer 和一个Table --- CUSTOMERQ你只需要徏立一个映文?-- Customer.hbm.xmlQ来对应CustomercdCUSTOMER表之间的关系?/p>
<xml version="1.0"?>
<DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<ibernate-mapping>
<lass name="Customer" table="CUSTOMER">
<d name="id" column="CID">
<enerator class="increment" />
<id>
<roperty name="username" column="USERNAME" />
<roperty name="password" column="PASSWORD" />
<class>
<hibernate-mapping>
把此文g存ؓ(f)c:\workspace\My1stHibernate\src\Customer.hbm.xmlQ和Customer.java攑֜同一目录下?/p>
~写Ant build.xml文g
你不一定要知道q个build.xml的细节,其实Ant也不是Hibernate所必须的。这里用Ant是ؓ(f)了简化一些Q务,比如: ~译、copy、运行,{?/p>
<xml version="1.0" ?>
<roject name="My1stHibernate" default="build" basedir=".">
<roperty name="base.dir" value="." />
<roperty name="src.dir" value="src" />
<roperty name="lib.dir" value="lib" />
<roperty name="build.dir" value="classes" />
<ath id="myclasspath">
<ileset dir="${lib.dir}">
<nclude name="**/*.jar" />
<fileset>
<athelement location="${build.dir}" />
<path>
<arget name="init">
<kdir dir="${build.dir}" />
<target>
<arget name="build" depends="init" description="compile the source files">
<avac classpathref="myclasspath" srcdir="${src.dir}" destdir="${build.dir}" />
<opy todir="${build.dir}" >
<ileset dir="${src.dir}" >
ā?<xclude name="**/*.java"/>
<fileset>
<copy>
<target>
<arget name="run" depends="build">
<ava classpathref="myclasspath" classname="Test" fork="true" />
<target>
<arget name="clean">
<elete includeEmptyDirs="true">
<ileset dir="${build.dir}" />
<delete>
<target>
<project>
配置Hibernate描述文g
Hibernate描述文g可以是一个properties或xml 文gQ其中最重要的是定义数据库的q接。我q里列出的是一个XML格式的hibernate.cfg.xml描述文g?/p>
<xml version="1.0" encoding="utf-8" ?>
<DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<ibernate-configuration>
<ession-factory name="java:/hibernate/HibernateFactory">
<roperty name="show_sql">rue<property>
<roperty name="connection.driver_class">
oracle.jdbc.driver.OracleDriver <-- q里是Oracle 9i的JDBC driver class?-->
<property>
<roperty name="connection.url">
jdbc:oracle:oci8:@hibernate_test <-- q里是Oracle的hibernate_test数据库URL -->
<property>
<roperty name="connection.username">
你的数据库用户名
<property>
<roperty name="connection.password">
你的数据库密?br /><property>
<roperty name="dialect">
net.sf.hibernate.dialect.Oracle9Dialect <-- q里是Oracle 9i的Dialect -->
<property>
<apping resource="Customer.hbm.xml" /><-- 指定Customer的映文?-->
<session-factory>
<hibernate-configuration>
如果你用的不是Oracle 9iQ可到C:\dev\<的Hibernate包所在目?gt;src\hibernate.properties文g里找C的数据库Q然后替换以上相对应的倹{?/p>
开始运?/strong>
到c:\workspace\My1stHibernate下,q行ant run。如果你严格依照以上步骤Q应该看?/p>
run:
[java] log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).
[java] log4j:WARN Please initialize the log4j system properly.
[java] Hibernate: insert into CUSTOMER (USERNAME, PASSWORD, CID) values (?, ?, ?)
BUILD SUCCESSFUL
C的hibernate_test数据库看一下,在CUSTMOR表里新添?00条记录,但你没有写Q何JDBC code?/p>
以后如果你要更换数据库,只需要改变hibernate.cfg.xml描述文g里相应的值即可?/p>
试环境?jdk1.2.2 jswdk-1.0 winnt4.0中文版?
1。java是大写敏感的,用过其他~程语言的h最Ҏ(gu)犯这个错误,其是刚上手的时候。我刚开始调试jsp的时50%以上的编译错误是都是因ؓ(f)q个?
2。java的调用过E都是要加括L(fng)Q一开始比较容易忽视,如title=request.getParameter("title").trim();
3。jsp中对应asp中的request.form()和request.querystring()的解x法?
jsp 中取得参数没有form和queryString之分Q都是通过request.getParameter("XXXX")来取得。虽然jsp也有 request.getQueryString()Ҏ(gu)Q但试l果?test.jsp?id=1&page=20 得到 id=1&page=20?
如果url和form有相同的参数名称呢?下面是一D|试代码:(x)
<form method="POST" action="query.jsp?id=2">
<input type="text" name="id" value="1" size="60">
</form>
name都是idQ结果是url的参C先得刎ͼjsp的这U处理方式和asp相比我觉的各有所ѝ?
4。头疼的汉字处理问题?
在其他的文章里曾说到在中文NT环境下如下语句输Z(x)得到qQ?
<%="你好"%> ?out.print("你好");{。解x法是只要对字W串变量q行~码可以得到正结?如下代码可以得到正确的输出:(x)
<% String title="你好";
byte[] tmpbyte=title.getBytes("ISO8859_1");
title=new String(tmpbyte);
out.print(title); %>
或?lt;%=title%>
关于sql语句汉字问题Q例句ؓ(f) select * from test where title='谁是?c)?
在jdbc-odbc驱动下连db2Q不是原句q是对sql语句q行~码后都L通不q?
换了ibm的jdbc直接驱动后,对sql语句~码后程序可以通过?
q个问题的生大概是中文NT的原因,在其他环境下可能没汉字处理问题了,据说ibm的web sphere对中文支持的很好Q这也给jsp的开发带来一定的通用性问题。据说对字符串编码是一U通用的解x法,不过没有q么多环境来试?
5。在asp中经怋用到字符串判断语句如 if state="真是?c)? then.....
在java中String变量不是一个简单的变量而是一个类实例Q不同的Ҏ(gu)?x)得C同的l果
a.
String str1="我是?c)?;
String str2="我是?c)?; (or String str2="我是"+"?c)?; )
if (str1==str2)
out.print("yes");
else
out.print("no");
l果?yes"?
大概是编译优化,str1,str2指向同一个类实例Q?
b.
String str1,str2,str3;
str1="我是?c)?;
str2="我是";
str3=str2+"?c)?;
if (str1==str3)
out.print("yes");
else
out.print("no");
l果?no"?
String str1=new String("我是?c)?);
String str2=new String("我是?c)?);
if (str1==str2)
out.print("yes");
else
out.print("no");
l果?no"?
String str1=new String("我是?c)?);
String str2=new String("我是?c)?);
if (str1.compareTo(str2)==0)
out.print("yes");
else
out.print("no");
l果?yes"?
所以在jsp中判断字W串要用compareToҎ(gu)Q用惯传l语aq真一下子适应不过来,熟?zhn)java的朋友应该没q个问题?
6。如何判断数据库为空Q?
result = stmt.executeQuery(sql);
if (result.next())
......
result执行后游标出于一个未明的状态,不能q行状态判断,也不能取|一定要next()一下才可以用?
7。在jsp中实现分c(din)?
page是关键字Q不能当变量?
conn.jsp
<%
String sDBDriver = "COM.ibm.db2.jdbc.app.DB2Driver";
String sConnStr = "jdbc:db2:faq";
Connection conn = null;
Statement stmt = null;
ResultSet rs=null;
try {
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e) {
out.print("faq(): " + e.getMessage());
}
try{
conn = DriverManager.getConnection(sConnStr,"wsdemo","wsdemo1");
stmt = conn.createStatement();
}catch(SQLException e){
out.print(e.toString());
}
%>
query.jsp
<%@ page language="java" import="java.sql.*" %>
<%@ page contentType="text/html; charset=gb2312" %>
<%@ include file="conn.jsp" %>
<%
.......
int pages=0;
int pagesize=10;
ResultSet result = null;
ResultSet rcount = null;
pages = new Integer(request.getParameter("pages")).intValue();
if (pages>0)
{
String sql=" state='我不?";
int count=0;
try {
rcount = stmt.executeQuery("SELECT count(id) as id from user where "+sql);
catch(SQLException ex) {
out.print("aq.executeQuery: " + ex.getMessage());
}
if(rcount.next())
count = rcount.getInt("id");
rcount.close();
if (count>0)
{
sql="select * from user where "+sql;
try {
result = stmt.executeQuery(sql);
}
catch(SQLException ex) {
out.print("aq.executeQuery: " + ex.getMessage());
}
int i;
String name;
// result.first();
// result.absolute((pages-1)*pagesize);
// 此方法jdbc2.0支持。编译通过Q但执行不过Q不知是不是跟驱动有养I只好用下面的W办法?
for(i=1;i<=(pages-1)*pagesize;i++)
result.next();
for(i=1;i<=pagesize;i++) {
if (result.next()) {
name=result.getString("name");
out.print(name);
}
result.close();
int n= (int)(count/pagesize);
if (n*pagesize<count) n++;
if (n>1)
{
for(i=1;i<=n;i++)
out.print("<a href=query.jsp?pages="+i+">"+i+" </a>");
}
}
}
%>
0Q引a
在ChinaITLAB导师制辅gQ笔者发现问得最多的问题莫过?如何学习(fn)~程QJava该如何学?fn)?。类似的问题回答多了Q难免会(x)感觉厌烦(ch)Q就萌生了写下本文的x。到时候再有h问vcM的问题,我可以告诉他Q她Q,请你ȝ看《Java学习(fn)之\》。拜读过台湾蔡学镛先生的《Java夜未眠》,有些文章如《Java学习(fn)之道》等让我们确实有共鸣Q本文题目也由此而来?
软g开发之路是充满荆棘与挑战之?也是充满希望之\?Java学习(fn)也是如此Q没有捷径可走。梦惛_《天龙八部》中虚竹一栯无崖子醍醐灌而轻松获得一甲子功力Q是很不现实的。每天Ԓ天大?天神啊,误l我一本葵花宝典吧"Q殊不知即你获得了葵花宝典Q除了受自宫其n之苦外,你也不一定成得了"东方不|"Q倒是?西方p|"的几率高一炏V?
"不走弯\Q就是捷?Q佛(jng)l说的不无道理?
1Q如何学?fn)程序设计?
Java是一U^収ͼ也是一U程序设计语aQ如何学好程序设计不仅仅适用于JavaQ对C++{其他程序设计语a也一L(fng)用。有~程高手认ؓ(f)QJava也好C也好没什么分别,拿来q。ؓ(f)什么他们能辑ֈ如此境界Q我x因ؓ(f)~程语言之间有共通之处,领会(x)了编E的_NQ自然能够做C通百通。如何学?fn)程序设计理所当然也有许多共通的地方?
1.1 培养兴趣
兴趣是能够让你坚持下ȝ动力。如果只是把写程序作生的手段的话Q你?x)活的很累,也太对不赯׃。多兛_一些行业趣事,多想想盖茨。不是提倡天天做白日梦,但h要是没有了梦惻I你觉得有味道吗?可能像许多深x地农民一P打打dQ喝喝功夫茶Q拜拜胦(ch)爷Q每个月有几万十几万甚x多的q帐Q凭I多Z"食利阶层"。你认ؓ(f)Q这h味道吗?有空多到一些程序员论坛转{Q你?x)发玎ͼ他们其实很乐观幽默,时不时?x)冒出智慧的火花?
1.2 慎选程序设计语a
h入错行Q女怕嫁错郎。初学者选择E序设计语言需要}慎对待。Y件开发不仅仅是掌握一门编E语a了事Q它q需要其他很多方面的背景知识。Y件开发也不仅仅局限于某几个领域,而是已经渗透到了各行各业几乎每一个角落?
如果你对g比较感兴,你可以学?fn)C语言/汇编语言Q进入硬件开发领域。如果你对电(sh)信的行业知识?qing)网l比较熟(zhn),你可以在C/C++{之上多花时_(d)以期q入?sh)信软g开发领域。如果你Ҏ(gu)作系l比较熟(zhn),你可以学?fn)C/Linux{等,为Linux内核开?驱动E序开?嵌入式开发打基础?
如果你想介入到应用范围最q泛的应用Y件开发(包括?sh)子商务电(sh)子政务pȝQ的话,你可以选择J2EE?NETQ甚至LAMPl合。每个领域要求的背景知识不一栗做应用软g需要对数据库等很熟(zhn)。MQ你需要根据自q特点来选择合适你的编E语a?
1.3 要脚t实?快餐式的学习(fn)不可?
先分享一个故事?
有一个小朋友Q他很喜Ƣ研I生物学Q很想知道那些蝴蝶如何从蛹壳里出来,变成蝴蝶便会(x)飞。有一ơ,他走到草原上面看见一个蛹Q便取了回家Q然后看着Q过了几天以后,q个蛹出了一条裂痕,看见里面的蝴蝶开始挣扎,x破蛹壳飞出来。这个过E达数小时之久,蝴蝶在蛹里面很辛苦地拼命挣扎Q怎么也没法子走出来。这个小孩看着看着不忍心,想不如让我帮帮它吧Q便随手拿v剪刀在蛹上剪开Q蝴蝶破蛹而出。但蝴蝶出来以后Q因为翅膀不够力,变得很臃肿,飞不h?
q个故事l我们的启示是:(x)Ʋ速则不达?
躁是现代h最普遍的心态,能怪谁Q也许是贫穷落后了这么多q的~故Q就像当q的大跃q一P都想大步跨入׃MC会(x)。现在的软g公司、客戗政府、学校、培训机构等{到处I漫着躁之气。就拿笔者比较熟(zhn)的深圳IT培训行业来说吧,居然有的打广告宣U?参加培训Q?00%׃"Q居然报名的学生不少Q简直是藐视天下E序员。社?x)环境如是,我们不能改变Q只能改变自?闹市中的安宁QI珍c(din)许多初学者C++/Java没开始学Q立马?VC/JBuilder,?x)用VC/JBuilder开发一个Hello WorldE序Q就忙不q的向世界宣告,"我会(x)软g开发了"Q简历上也大a不惭地写?_NVC/Java"。结果到软g公司面试时要么被三两下打发走了,要么被驳的体无完肤,无地自容。到处碰壁之后才知道捧v《C++~程思想》《Java~程思想》仔l钻研,早知如此何必当初呀?
"你现在讲I简单方便,你以后的路就长了"Q好象也是佛(jng)l中的劝戒?
1.4 多实?快实?
彭端淑的《ؓ(f)学一首示子侄》中有穷和尚与富和尚的故事?
从前Q四川边境有两个和尚Q一个IP一个有钱。一天,I和对富和说Q?我打去南v朝圣Q你看怎么P"富和说Q?q里dh几千里远Q你靠什么去呢?"I和说Q?我只要一个水钵,一个饭就够了?富和ؓ(f)隑֜_(d)(x)"几年前我打买条船dP可至今没LQ你q是别去吧! " 一q以后,富和还在ؓ(f)U赁船只{wQ穷和尚却已l从南v朝圣回来了?
q个故事可解Mؓ(f)QQ何事情,一旦考虑好了Q就要马上上路,不要{到准备周全之后Q再d事情。假如事情准备考虑周全了再上\的话Q别人恐怕捷_M。Y件开发是一门工E学U,注重的就是实践,"君子动口不动?对Y件开发h员来讲根本就是错误的Q他们提?动手至上"Q但别害怕,他们大多温文?dng)雅Q没有暴力們Q虽然有时候蓬头垢面的一?比尔盖茨"栗有前辈高h认ؓ(f)Q学?fn)编E的U诀是:(x)~程、编E、再~程Q笔者深表赞同。不仅要多实践,而且要快实践。我们在看书的时候,不要{到你完全理解了才动手敲代码Q而是应该在看书的同时敲代码,E序q行的各U情况可以让你更快更牢固的掌握知识点?
1.5 多参考程序代?
E序代码是Y件开发最重要的成果之一Q其中渗透了E序员的思想与灵。许多h被《仙剑奇侠传》中凄美的爱情故事感?(zhn)剧的结局更有一U缺憄。ؓ(f)什么要以?zhn)剧结?据说是因为写《仙剑奇侠传》的E序员失恋而安排了q样的结局Q他把自q感觉融入到游戏中Q却让众多的仙剑qh腕叹息?
多多参考代码例子,对Java而言有参考文献[4.3],有APIcȝ源代?JDK安装目录下的src.zip文g)Q也可以研究一些开源的软g或框架?
1.6 加强英文阅读能力
对学?fn)编E来_(d)不要求英? 但不能一点不?。最L(fng)像Java API文档(参考文献[4.4])q些东西q是要能看懂?q猜带懵都可以;旁边再开启一?金山词霸"。看多了׃(x)来熟l。在学Java的同时学?fn)英文,一双雕多好。另外好多Y仉要到英文|站下蝲Q你要能够找到它们,q些是最基本的要求。英语好对你学习(fn)有很大的帮助。口语好的话更有Z(x)q入理层,q而可以成为剥削程序员?周扒??
1.7 万不得已才请教别?
W者在ChinaITLab|校的在U辅导系l中解决学生问题时发玎ͼ大部分的问题学生E做思考就可以解决。请教别Z前,你应该先回答如下几个问题?
你是否在google中搜索了问题的解军_法?
你是否查看了Java API文档Q?
你是否查找过相关书籍Q?
你是否写代码试q?
如果回答都是"?的话Q而且q没有找到解军_法,再问别h不迟。要知道独立思考的能力对你很重要。要知道E序员的旉是很宝贵的?
1.8 多读好书
书中自有颜如玉。比?盖茨是一个饱ȝ书的人。虽然没有读完大学,但九(ji)岁的时候比?盖茨已l读完了所有的癄全书Q所以他_N天文、历双Ӏ地理等{各cdU,可以说比?盖茨不仅是当今世界上金钱的首富,而且也可以称得上是知识的巨富?
W者在l学生上评时候经怼(x)l他们推荐书c,到后来学生实在忍无可忍开始抱怨,"天呐Q这么多书到什么时候才能看完了"Q?学Y件开发,感觉上了D "。这时候,我的回答一般是Q?别着急,什么时候带你们ȝ看我的书房,到现在每月花在技术书c上的钱400元,q在软g开发h员之中还只能够算是中{的 "Q学生当场晕倒。(注:(x)q一部分学生是刚学Y件开发的Q?
对于在Java开发领域的好书在笔者另外一文章中?x)专门点评。该文章可作为本文的姊妹?
1.9 使用合适的工具
工欲善其事必先利其器。Y件开发包含各U各L(fng)zdQ需求收集分析、徏立用例模型、徏立分析设计模型、编E实现、调试程序、自动化试、持l集成等{,没有工具帮忙可以说是寸步难行。工具可以提高开发效率,使Y件的质量更高BUG更少。组合称手的武器。到飞花摘叶皆可伤h的境界就很高了,无招胜有招,手中无剑心中有剑q样的境界几乎不可企?qing)。在W者另外一文章中?x)专门阐q如何选择合适的工具Q该文章也可作ؓ(f)本文的姊妹篇Q?
2QY件开发学?fn)\U?
两千多年的儒家思想孔孟之道Q中庸的思想透入骨髓Q既不冒q也不保守ƈ非中怹道,而是扑֯学习(fn)软g开发的正确路线与规律?
从Y件开发h员的生(dng)规划来讲Q我们可以大致分Z个阶D,软g工程师→软g设计师→架构设计师或目理师。不惛_元帅的士兵不是好士兵Q不惛_架构设计师或目理师的E序员也不是好的E序员。我们应该努力往上走。让我们先整理一下开发应用Y仉要学?fn)的主要技术?
AQ基理论知识Q如操作pȝ、编译原理、数据结构与法、计机原理{,它们q不重要。如不想成ؓ(f)计算机科学家的话Q可以采?用到的时候再来学"的原则?
BQ一门编E语aQ现在基本上都是面向对象的语aQJava/C++/C#{等。如果做WEB开发的话还要学?fn)HTML/JavaScript{等?
CQ一U方法学或者说思想Q现在基本都是面向对象思想QOOA/OOD/设计模式Q。由此而衍生的Zlg开发CBD/面向斚w~程AOP{等?
DQ一U关pd数据库,ORACLE/SqlServer/DB2/MySQL{等
EQ一U提高生产率的IDE集成开发环境JBuilder/Eclipse/VS.NET{?
FQ一UUML建模工具Q用ROSE/VISIO/钢笔q行建模?
GQ一UY件过E,RUP/XP/CMM{等Q通过软gq程来组lY件开发的众多zdQ开发流E专业化规范化。当然还有其他的一些Y件工E知识?
HQ项目管理、体pȝ构、框架知识?
正确的\U应该是QB→C→E→F→G→H?
q需要补充几点:(x)
1Q.对于A与C要补充的是,我们应该在实践中逐步领?zhn)~程理论与编E思想。新技术虽然不断涌玎ͼ更新速度令hD燎ؕN看花Q但万变不离其宗Q编E理Z~程思想的变化却很慢。掌握了~程理论与编E思想你就?x)有拨云见日之感。面向对象的思想在目前来讲是相当关键的,是强势技术之一Q在上面需要多投入旉Q给你的回报也会(x)让你惊喜?
2Q.对于数据库来说是独立学习(fn)的,q个时机q你来军_吧?
3Q.~程语言作ؓ(f)学习(fn)软g开发的ȝQ而其余的作ؓ(f)辅线?
4Q.软g工程师着重于B、C、E、DQY件设计师着重于B、C、E、D、FQ架构设计师着重于C、F、H?
3Q如何学?fn)Java?
3.1 Java学习(fn)路线
3.1.1 基础语法?qing)Java原理
基础语法和Java原理是地基,地基不牢靠,犹如沙地上徏摩天大厦Q是相当危险的。学?fn)Java也是如此Q必要有扎实的基础Q你才能?J2EE?J2ME领域游刃有余。参加SCJPQSUN公司认证的JavaE序员)考试不失Z个好Ҏ(gu)Q原因之一是ؓ(f)了对得v你交?200大洋考试费,你会(x)更努力学?fn),原因之二是SCJP考试能够让你把基打得很牢靠,它要求你跟JDK一L(fng)(zhn)Java基础知识Q但是你千万不要认ؓ(f)考过了SCJP有多了不vQ就能够获得软g公司的青睐,p够获取高薪,q样的想法也是很危险的。获?真正"的SCJP只能证明你的基础q过得去Q但d际开发还有很长的一D\要走?
3.1.2 OO思想的领(zhn)?
掌握了基语法和JavaE序q行原理后,我们可以用Java语言实现面向对象的思想了。面向对象,是一U方法学;是独立于语言之外的编E思想;是CBDZlg开发的基础;属于强势技术之一。当以后因工作需要{到别的面向对象语a的时候,你会(x)感到特别的熟(zhn)亲切,学v来像喝凉水这么简单?
使用面向对象的思想q行开发的基本q程是:(x)
●调查收集需求?
●徏立用例模型?
●从用例模型中识别分析类?qing)类与类之间的静态动态关p,从而徏立分析模型?
●细化分析模型到设计模型?
●用具体的技术去实现?
●测试、部|Ӏȝ?
3.1.3 基本API的学?
q行软g开发的时候,q不是什么功能都需要我们去实现Q也是l典名言所说的"不需要重新发明轮?。我们可以利用现成的cR组件、框架来搭徏我们的应用,如SUN公司~写好了众多cdC些底层功能,以及(qing)我们下蝲q来的JAR文g中包含的c?我们可以调用cM的方法来完成某些功能或承它。那么这些类中究竟提供了哪些Ҏ(gu)l我们用?Ҏ(gu)的参C数及(qing)cd是?cȝ构造器需不需要参敎ͼM可能SUN公司的工E师打国际长途甚至飘?gu)z过h告诉你他~写的类该如何用吧。他们只能提供文档给我们查看QJava DOC文档Q参考文?.4Q就是这L(fng)文档Q它可以说是E序员与E序员交的文档?
基本API指的是实C一些底层功能的c,通用性较强的APIQ如字符串处?输入输出{等。我们又把它成ؓ(f)cd。熟(zhn)API的方法一是多查Java DOC文档Q参考文?.4Q,二是使用JBuilder/Eclipse{IDE的代码提C功能?
3.1.4 特定API的学?
Java介入的领域很q泛Q不同的领域有不同的APIQ没有h熟?zhn)所有的APIQ对一般h而言只是熟?zhn)工作中要用到的API。如果你做界面开发,那么你需要学?fn)Swing/AWT/SWT{APIQ如果你q行|络游戏开发,你需要深入了解网lAPI/多媒体API/2D3D{;如果你做 WEB开发,需要熟(zhn)Servlet{API啦。MQ需要根据工作的需要或你的兴趣发展方向去选择学习(fn)特定的API?
3.1.5 开发工L(fng)用法
在学?fn)基语法与基本的面向对象概念Ӟ从锻Da熟练E度的角度考虑Q我们推荐用的工具?Editplus/JCreator+JDK,q时候不要急于上手JBuilder/Eclipse{集成开发环境,以免q于xIDE的强大功能而分散对Java技术本w的注意力。过了这一阶段你就可以开始熟(zhn)IDE了?
E序员日常工作包括很多活动,~辑、编译及(qing)构徏、调试、单元测试、版本控制、维持模型与代码同步、文档的更新{等Q几乎每一Ҏ(gu)动都有专门的工具Q如果独立用这些工L(fng)话,你将?x)很痛苦Q你需要在堆满工具的Q务栏上不断的切换Q效率很低下Q也很容易出错。在JBuilder?Eclipse{IDE中已l自动集成编辑器、编译器、调试器、单元测试工?JUnit、自动构建工具ANT、版本控制工具CVS、DOC文档生成与更新等{,甚至可以把UML建模工具也集成进去,又提供了丰富的向导帮助生成框架代码,让我们的开发变得更L。应该说IDE发展的趋势就是集成Y件开发中要用到的几乎所有工兗?
从开发效率的角度考虑Q用IDE是必l之路,也是从一个学生到一个职业程序员转变的里E碑?
Java开发用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans{几U;而Eclipse?JBuilder占有的市Z额是最大的。JBuilder在近几年来一直是Java集成开发环境中的霸主,它是由备受程序员敬的Borland公司开发,在硝烟I漫的Java IDE大战?以其快速的版本更新击|IBM的Visual Age for Java{而成׃番伟业。IBM在Visual Age for Java上已l无利可图之下,q脆之贡献l开源社区,成ؓ(f)Eclipse的前w,真所?x花明又一?。ʎ火重生的Eclipse以其开攑ּ的插件扩展机制、免费开源获得广大程序员Q包括几乎所有的骨灰U程序员Q的青睐Q极具发展潜力?
3.1.6 学习(fn)软g工程
对小型项目而言Q你可能认ؓ(f)软g工程没太大的必要。随着目的复杂性越来越高,软g工程的必要性才?x)体现出来。参?软g开发学?fn)\U?节?
3.2学习(fn)要点
立的学?fn)\U之后,我们q需要ȝ一下Java的学?fn)要点,q些要点在前文多多少提到过Q只是笔者觉得这些地方特别要注意才对它们q行汇总,不要嫌我婆婆妈妈啊?
3.2.1勤查API文档
当程序员~写好某些类Q觉得很有成感,x它A(ch)献给各位苦难的同行。这时候你要?Javadoc"工具Q包含在JDK中)生成标准?Java DOC文档,供同行用。J2SE/J2EE/J2ME的DOC文档是程序员与程序员交流的工P几乎人手一份,除了菜鸟之外。J2SE DOC文档官方下蝲地址Qhttp://Java.sun.com/j2se/1.5.0/download.jspQ你可以到google搜烦(ch)CHM版本下蝲。也可以在线查看Qhttp://Java.sun.com/j2se/1.5.0/docs/api/index.html?
对待DOC文档要像毛主席语录,早上起床念一遍,吃饭睡觉前念一遍?
当需要某功能的时候,你应该先查相应的DOC文档看看有没有现成的实现Q有的话׃必劳费心了直接用就可以了,找不到的时候才考虑自己实现。用步骤一般如下:(x)
●找特定的包Q包一般根据功能组l?
●找需要用类Q类命名规范的话我们q的名字可猜出一二?
●选择构造器Q大多数使用cȝ方式是创建对象?
●选择你需要的Ҏ(gu)?
3.2.2 查书/google->写代码测?>查看源代?>h别h
当我们遇到问题的时候该如何解决Q?
q时候不要急着问别人,太简单的问题Q没l过思考的问题Q别Z(x)因此而瞧不v你。可以先找找书,到google中搜一下看看,l大部分问题基本p决了。而像"某些c?Ҏ(gu)如何使用的问?QDOC文档是{案。对某些知识Ҏ(gu)疑惑是,写代码测试一下,?x)给你留下深ȝ印象。而有的问题,你可能需要直接看API的源代码验证你的x。万不得已才去请教别人?
3.2.3学习(fn)开源Y件的设计思想
Java领域有许多源代码开攄工具、组件、框ӞJUnit、ANT、Tomcat?Struts、Spring、Jive论坛、PetStore宠物店等{多如牛毛。这些可是前辈给我们留下的瑰宝呀。入宝山而空手归Q你心甘吗?对这些工兗框架进行分析,领会(x)其中的设计思想Q有朝一日说不定你也能写一个XXX框架什么的Q风光一把。分析开源Y件其实是你提高技术、提高实战能力的便捷Ҏ(gu)?
3.2.4 规范的重要?
没有规矩Q不成方圆。这里的规范有两层含义。第一层含义是技术规范,多到 http://www.jcp.org下蝲JSRXXX规范Q多读规范,q是最权威准确最新的教材。第二层含义是编E规范,如果你用了大量的独特算法,富有个性的变量?qing)方法的命名方式Q同Ӟ没给E序作注释,以显CZ的编E功底是多么的深厚。这L(fng)代码别h看v来像天书Q要理解谈何Ҏ(gu)Q更不用说维护了Q必然会(x)被无情地扫入垃圾堆。Java~码规范到此查看或下载http://Java.sun.com/docs/codeconv/Q中文的也有Q啊Q还要问我在哪,请参?.2.2节?
3.2.5 不局限于Java
很不q,很幸q,要学?fn)的东西q有很多。不q的是因学的东西太多且多变,没时间陪老婆家h或女朋友Q导致n心疲惫,严重者甚臛_致抑郁症。幸q的是别抢你饭碗l非易事Q他们或她们需要付出很多才能达成心ѝ?
Java不要孤立地去学习(fn)Q需要综合学?fn)数据结构、OOP、Y件工E、UML、网l编E、数据库技术等知识Q用横向U向的比较联想的方式d?fn)?x)更有效。如学习(fn)Java集合的时候找数据l构的书看看Q学JDBC的时候复?fn)数据库技术;采取的依然是"需要的时候再?的原则?
4Q结束语
需要强调的是,学习(fn)软g开发确实有一定的隑ֺQ也很辛苦,需要付出很多努力,但千万不要半途而废。本文如果能对一直徘徊在Java殿之外的朋友有所帮助的话Q笔者也ƣ慰了。哈哈,怎么听v来老气横秋呀Q没办法Q在?sh)脑的长期辐之下,都快变成老头了。最后奉劝各位程序员其是MME序员,完成工作后赶快远ȝ(sh)脑,据《胡播ؕ报》报道,?sh)脑辐射会(x)在白皙的皮肤上面点~一些小黑点Q看h鲜艳无比…?
教我的老师Q是一个编E专?W一看到他真的不能把他同专家联系在一P呵呵Q^常多跟他交流只后才发现老师q_的后面藏着许多我摸不透的东西Q!以下的文章虽然不是我自己ȝ出来的!但是我想q也每一个想成ؓ(f)~程好手的h所要具备的Q!
1、扎实的基础
数据l构、离散数学、编译原理,q些是所有计机学科的基Q如果不掌握它们Q很隑ֆ出高水^的程序。程序h人都?x)写Q但当你发现写到一定程度很隑ֆ提高的时候,应该想x不是要回q头来学学这些最基本的理论。不要一开始就dOOPQ即使你再精通OOPQ遇C些基本算法的时候可能也?x)束手无{。因此多M些计机基础理论斚w的书c是非常有必要的?
2、丰富的惛_?
不要拘惔于固定的思维方式Q遇到问题的时候要多想几种解决问题的方案,试试别h从没惌的方法。丰富的惛_力是建立在丰富的知识的基上,除计机以外Q多涉猎其他的学U,比如天文、物理、数学等{。开阔的思维对程序员来说很重要?
3、最单的是最好的
q也许是所有科学都遵@的一条准则,复杂的质能{换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式QE=mc2。简单的Ҏ(gu)更容易被人理解,更容易实玎ͼ也更Ҏ(gu)l护。遇到问题时要优先考虑最单的Ҏ(gu)Q只有简单方案不能满求时再考虑复杂的方案?
4、不ȝ角尖
当你遇到障碍的时候,不妨暂时q离?sh)脑Q看看窗外的风景Q听听轻音乐Q和朋友聊聊天。当我遇到难题的时候会(x)ȝ游戏Q当负责游戏的那部分大脑l胞(yu)极度亢奋的时候,负责~程的那部分大脑l胞(yu)得C充分的休息。当重新开始工作的时候,我会(x)发现那些N现在竟然可以q刃而解?
5、对{案的(f)?
人类自然U学的发展史是一个(f)求得到答案的q程Q即使只能知道答案的一部分也值得我们M出。只要你坚定信念Q一定要扑ֈ问题的答案,你才?x)付出精力去探?ch)Q即使最后没有得到答案,在过E中你也?x)学到很多东ѝ?
6、多与别Z?
三h行必有我师,也许在一ơ和别h不经意的谈话中,可以迸出灵感的火花。多上上|,看看别h对同一问题的看法,?x)给你很大的启发?
7、良好的~程风格
注意L良好的习(fn)惯,代码的羃q编排,变量的命名规则要始终保持一致。大安知道如何排除代码中错误,却往往忽视了对注释的排错。注释是E序的一个重要组成部分,它可以你的代码更容易理解,而如果代码已l清楚地表达了你的思想Q就不必再加注释了,如果注释和代码不一_(d)那就更加p糕?
8、韧性和毅力
q也许是“高手”和一般程序员最大的区别。高手们q不是天才,他们是在无数个日日夜夜中炼出来的。成功能l我们带来无比的喜?zhn)Q但q程却是无比的枯燥乏呟뀂你不妨做个试Q找?0000以内的素数表Q把它们全都抄下来,然后再检查三遍,如果能够不间断地完成q一工作Q你可以满一条?/p>
set Path=%PATH%;c:\jdk\bin set CLASSPATH=.;c:\jdk\lib\dt.jar;c:\jdk\lib\tools.jar保存后,重新启动机器Q就完成了jdk1.4的安装?/td> |
int[] number=new int[5] String[] message=new String[5] |
class ProgramName { public static void main(String【?args) { file&://E序的主?br /> } public static int othermethod() { file&://其它Ҏ(gu) } } |
class Block{ static int number=50 } |
public final static |
non-static variable mainframe cannot be referenced from a static context |