?? 新建 文本文檔.txt
字號:
如何迅速成為Java高手[Tomjava原創]
很多網友問我學習Java有沒有什么捷徑,我說“無他,唯手熟爾”。但是我卻很愿意將自己學習的一些經驗寫出來,以便后來者少走彎路,幫助別人是最大的快樂嘛!
要想學好Java,首先要知道Java的大致分類。我們知道,自從Sun推出Java以來,就力圖使之無所不包,所以Java發展到現在,按應用來分主要分為三大塊:J2SE,J2ME和J2EE,這也就是Sun ONE(Open Net Environment)體系。J2SE就是Java2的標準版,主要用于桌面應用軟件的編程;J2ME主要應用于嵌入是系統開發,如手機和PDA的編程;J2EE是Java2的企業版,主要用于分布式的網絡程序的開發,如電子商務網站和ERP系統。J2SE開發桌面應用軟件比起VC,VB,DEPHI這些傳統開發語言來說,優勢好象并不明顯。J2ME對于初學者來說,好象又有點深奧,而且一般開發者很難有開發環境。所以現在應用最廣泛又最好學的就是J2EE了。J2EE又包括許多組件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要學習起來可不是一兩天的事。
那么又該如何學習J2EE呢?當然Java語法得先看一看的,I/O包,Util包,Lang包你都熟悉了嗎?然后再從JSP學起。如果你學過HTML,那么事情要好辦的多,如果沒有,那你快去補一補HTML基礎吧。其實JSP中的Java語法也不多,它更象一個腳本語言,有點象ASP。然后你就該學一學Servlet了。Servlet就是服務器端小程序,他負責生成發送給客戶端的HTML文件。JSP在執行時,也是先轉換成Servlet再運行的。雖說JSP理論上可以完全取代Servlet,這也是SUN推出JSP的本意,可是Servlet用來控制流程跳轉還是挺方便的,也令程序更清晰。接下來你應該學習一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代碼的混亂方式了,這種方式跟ASP又有什么區別呢?還好,SUN提供了Javabean可以把你的JSP中的Java代碼封裝起來,便于調用也便于重用。接著就是EJB了,EJB就是Enterprise JavaBean,看名字好象它是Javabean,可是它和Javabean還是有區別的。它是一個體系結構,你可以搭建更安全、更穩定的企業應用。它的大量代碼已由中間件(也就是我們常聽到的Weblogic,Websphere這些J2EE服務器)完成了,所以我們要做的程序代碼量很少,大部分工作都在設計和配置中間件上。至于JDBC,就不用我多說了,你如果用java編過存取數據庫的程序,就應該很熟悉。還有,如果你要用Java編發送電子郵件的程序,你就得看看Javamail了。
好了,對Java和J2EE有了一些基本概念之后,你就應該編一些程序了,千萬不要紙上談兵哦。最好找一些有實例且帶光盤的書來看,這樣看到好的程序就可以直接Ctrl+C再Ctrl+V,也不用勞您老大架再親自把它 再輸一遍吧,再說直接復制還不用怕出錯,何樂而不為呢!還有就是要經常上一些好的Java編程文章,有好的文章要Cut下來,有問題盡管問,只要問題不是太傻,一般高手都會回答你的。下面介紹幾個好的Java方面的編程網站:
CSDN論壇 http://www.csdn.net/ 中國最有名的技術論壇,《程序員》雜志就是他們出版的,你可以在上面提出問題,馬上就有人回答你,如果你覺得好,你可以給那人加分;
Java研究組織http://www.javaresearch.org/ 上面有很多原創文章,高手還是挺多的;
Java開發者 http://www.chinajavaworld.com/ 那里Java資料比較全;
java.com.cn http://www.java.com.cn/ 看這域名就知道有多牛,注冊用戶快接近一萬了,同時在線人數也在一千左右,人氣很旺的;
IBM的開發者網絡http://www-900.ibm.com/developerWorks/cn/java/index.shtml IBM永遠的藍色巨人;
那么我書也看了,程序也做了,別人問我的問題我都能解決了,是不是就成為高手了呢?當然沒那么簡單,這只是萬里長征走完了第一步。不信?那你出去接一個項目,你知道怎么下手嗎,你知道怎么設計嗎,你知道怎么組織人員進行開發嗎?你現在腦子里除了一些散亂的代碼之外,可能再沒有別的東西了吧!你現在最缺的是實際的工作經驗,而不是書本上那些憑空想出來的程序。所以你快去找一份Java的編程工作來做吧(如果是在校學生可以去做兼職啊),在實踐中提高自己,那才是最快的。不過你得祈禱在公司里碰到一個高手,而且他還愿意不厭其煩地教你,這樣好象有點難哦!
還有一個辦法就是讀開放源碼的程序了。我們知道開放源碼大都出自高手,他們設計合理,考慮周到,再加上有廣大的程序員參與,代碼的價值自然是字字珠嘰,鏗鏘有力(對不起,偶最近《金裝四大才子》看多了)。學Java必讀的兩個開源程序就是Jive和Pet Store.。Jive是國外一個非常著名的BBS程序,完全開放源碼。論壇的設計采用了很多先進的技術,如Cache、用戶認證、Filter、XML等,而且論壇完全屏蔽了對數據庫的訪問,可以很輕易的在不同數據庫中移植。論壇還有方便的安裝和管理程序,這是我們平時編程時容易忽略的一部份(中國程序員一般只注重編程的技術含量,卻完全不考慮用戶的感受,這就是我們與國外軟件的差距所在)。Jive的資料在很多網站上都有,大家可以找來研究一下。相信你讀完代碼后,會有脫胎換骨的感覺。遺憾的是Jive從2.5以后就不再無條件的開放源代碼,同時有licence限制。不過幸好還有中國一流的Java程序員關注它,外國人不開源了,中國人就不能開源嗎?這里向大家推薦一個漢化的Jive版本—J道。Jive(J道版)是由中國Java界大名鼎鼎的banq在Jive 2.1版本基礎上改編而成, 全中文,增加了一些實用功能,如貼圖,用戶頭像和用戶資料查詢等,而且有一個開發團隊在不斷升級。你可以訪問banq的網站http://www.jdon.com/ 去下載,或到同濟技術論壇的服務器上ftp://nro.shtdu.edu.cn去下,安裝上有什么問題,可以到論壇上去提問。Pet Store.(寵物店)是SUN公司為了演示其J2EE編程規范而推出的開放源碼的程序,應該很具有權威性,想學J2EE和EJB的朋友不要錯過了。
你一定會高興地說,哈哈,原來成為Java高手就這么簡單啊!記得Tomjava也曾碰到過一個項目經理,號稱Java很簡單,只要三個月就可以學會。其實說這種話的人就如當年小日本號稱“三個月拿下中國”一樣大言不慚。不是Tomjava潑你冷水,你現在只是學到了Java的骨架,卻還沒有學到Java的精髓。接下來你得研究設計模式了。設計模式是高級程序員真正掌握面向對象核心思想的必修課。設計模式并不是一種具體"技術",它講述的是思想,它不僅僅展示了接口或抽象類在實際案例中的靈活應用和智慧,讓你能夠真正掌握接口或抽象類的應用,從而在原來的Java語言基礎上躍進一步,更重要的是,設計模式反復向你強調一個宗旨:要讓你的程序盡可能的可重用。關于設計模式的資料,還是向大家推薦banq的網站http://www.jdon.com/ ,他把GOF的23種模式以通俗易懂的方式詮釋出來,純Java描述,真是經典中的經典。有時間再研究一下MVC結構(把Model-View-Control分離開的設計思想)吧,現在很流行的Structs就是它的一種實現方式,不過Structs用起來實在是很繁,我們只要學習其精髓即可,我們完全可以設計自己的MVC結構。然后你再研究一下軟件Refactoring(重整)和極限XP編程,相信你又會上一個臺階。
做完這些,你不如整理一下你的Java代碼,把那些經典的程序和常見的應用整理出來,再精心打造一番,提高其重用性和可擴展性。你再找幾個志同道合的朋友成立一個工作室吧,你可以去承接一些項目做了,一開始可能有些困難,可是你有技術積累,又考慮周全,接下項目來可以迅速作完,相信大家以后都會來找你的,所以Money就嘩啦啦的來了。。。。。。
當然你也可以參加一些開源項目,一方面可以提高自己,另一方面也是為中國軟件事業做貢獻嘛!開發者在互聯網上用CVS合作開發,用QQ,MSN,E-mail討論聯系,天南海北的程序員分散在各地卻同時開發同一個軟件,是不是很有意思呢?
下面介紹兩個好的開源項目網站:
湖北省軟件公共開發平臺http://gro.clinux.org/
共創聯盟http://cosoft.org.cn/
哇,好高興哦,我終于成為高手了!非也,非也。古人云:“識時務者為俊杰”。你知道計算機界現在的發展形勢嗎?你知道微軟的.NET藍圖和SUN ONE計劃之間的明爭暗斗嗎?你知道計算機技術將向何處發展嗎?其實從各大計算機廠商最近的動作,都可以看出來“Web服務將是下一代互聯網應用的制高點”,而微軟的.NET藍圖和SUN ONE計劃的斗爭焦點,也就是Web服務。Web服務就是一個嶄新的分布式計算模型,它是一系列標準的綜合(XML,SOAP,UDDI,WSDL和WSFL等)。它使得不同語言編寫的軟件能夠輕易的集成起來,使網絡資源和Web站點變成一種服務而不是混亂的垃圾場。不遠的將來,我們就可以在家里點擊一下鼠標,就可以完成出門旅游的全部準備工作,包括定飛機票,定旅游線路,定好房間等。請注意,這所有的一切都是Web站點間自動完成的,再也不用象現在一樣,表面上是電子商務,實際上很多環節都是人工操作。也許你會覺得這是天方夜談,不過就近的說,你也很有可能承接一個項目,要集成兩個企業的ERP系統。很有可能上游企業的系統是用Dephi編的,而下游企業的系統是用Java編的。你說你是Java高手,大家都看者你怎么做呢。所以啊,你還得學習新技術,如Web服務,而且你Dephi也要懂一點吧(Dephi6現在已經提供Web服務的控件了)。 你編的Java系統,可能要和.NET集成,所以你.NET要懂一點吧?到最后,你可能發現你已經成為Java高手了,但很多時間卻在搞別的技術。太極張三豐里說,最厲害的招式就是沒有招式,可能就是這個道理吧!
因為剛剛興起,所以網上Web服務的資料不是很多,我還是給大家推薦幾個網站吧:
中國UDDI技術聯盟http://www.uddi-china.org/
CSDN的柴曉路專欄http://www.csdn.net/develop/author/ColumnAuthor/fennivel/ (注:柴曉路也是互聯網上一個有名的人物,他發表過很多關于Web服務的文章,還出了一書,應該稱的上是中國Web服務技術的先行者)
IBM的開發者網絡的XML&Web Service專欄:
http://www-900.ibm.com/developerWorks/cn/xml/index.shtml?csdn IBM可是Web服務的力推者
嗚…你費勁千心萬苦,總算成為Java高手了,怎叫人不由喜極而泣呢!是啊,真不容易,真不簡單,真叫人感動啊!那么打個電話告訴我吧,什么?我的電話號碼是多少?昏到,你打電話問不就知道了嗎,真是的……
l234s 回復于:2003-09-28 12:59:09
不錯,這對學習java很有幫助
貓小 回復于:2003-09-28 14:02:40
雖然我看過,但還是收藏,呵呵
simbasun 回復于:2003-09-28 15:09:09
[quote:ce7166ea3b="tfpcnhn"]柴曉路也是互聯網上一個有名的人物,他發表過很多關于Web服務的文章,還出了一書,應該稱的上是中國Web服務技術的先行者[/quote:ce7166ea3b]
呵呵,現在出了兩本了。。
BTW,CU里有做Web Services的多和俺交流。。
什么?俺是干啥的?呵呵。。問問柴曉路就知道了。。
myxd2000 回復于:2003-09-29 22:03:12
看來我還沒做太多的彎路
努力呀
sdj21 回復于:2003-09-29 14:02:19
感覺csdn不好
貓小 回復于:2003-09-29 16:42:55
[quote:53fd453bb0="sdj21"]感覺csdn不好[/quote:53fd453bb0]
不管哪里,能學到知識就是好地方
daisy_chi 回復于:2003-09-29 18:24:32
以前在CSDN混過
現在覺得對編程沒興趣了
可能到了最高境界了吧
因為什么技術我都懂一點
但是都不怎么樣
gunguymadman007 回復于:2003-09-30 10:54:29
我什么時候成為高手啊 期待中......
lhcjava 回復于:2003-10-03 09:54:02
很好啊!
求知的農民 回復于:2003-10-08 15:20:52
好
liubaohui 回復于:2003-10-18 09:52:45
非常感謝!
CNBIE BLOG
--------------------------------------------------------------------------------
一個javabean輕松實現對數據庫的各種操作
原文:一個javabean輕松實現對數據庫的各種操作
1.調用實例
<%@ page contentType="text/html" import="operate_db.*,java.sql.*"%>
<jsp:useBean id="querybean" scope="request" class="operate_db.QueryBean" />
<%
String prm1,prm2,prm3;
ResultSet rst=null;
prm1 = ...;
prm2 = ...;
prm3 = ...;
querybean.setConnection("sun.jdbc.odbc.JdbcOdbcDriver","jdbc:odbc:數據源名","sa","");
try{
String[] param = {prm1,prm2,prm3};
/*設置select語句*/
querybean.setQuerystatement("Select * from table where field1 = ? and field2=? and field3=?");
querybean.setParam(param);
rst=querybean.getResult();
}catch(Exception e){System.out.println(e); }
while (rst.next()){
%><%=rst.getString(1)%>
<%}%>
2.javabean QueryBean
QueryBean.java:
pacakage operate_db;
/**
* Title: select insert update and delete
* Description: select insert update and delete
* Copyright: Copyright (c) 2001
* @author Lci21
* @version 1.0
*/
import java.sql.*;
public class QueryBean
{
public String query_statement; /*定義sql語句*/
public String param[]; /*查詢條件,或者是新的記錄*/
public ResultSet result=null;
public Connection conn;
public void setParam(String[] param)
{
this.param=param;
}
public void setQuerystatement(String query_statement)
{
this.query_statement=query_statement;
}
public void setConnection(String driverName,String jdbcURL,String username,String passwd) throws Exception
{
Connection conn1;
Class.forName(driverName);
conn1=DriverManager.getConnection(jdbcURL,username,passwd);
conn1.setAutoCommit(false);
this.conn = conn1;
}
/*獲取查詢結果*/
public ResultSet getResult()
{
try
{
PreparedStatement select_stm=conn.prepareStatement(query_statement,java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
if (param!=null)
for(int i=0;i<param.length;i++)
select_stm.setString(i+1,param[i]);
result=select_stm.executeQuery();
}catch(Exception e){System.out.println(e);}
return result;
}
/*對數據庫進行增加記錄操作*/
public void insertRecord() throws SQLException,java.io.UnsupportedEncodingException
{
try
{
PreparedStatement insert_stm=conn.prepareStatement(query_statement);
if (param!=null)
for(int i=0;i<param.length;i++)
insert_stm.setString(i+1,param[i]);
insert_stm.executeUpdate();
insert_stm.close();
conn.commit();
}
catch(Exception e)
{
System.out.println(e);
conn.rollback();
}
}
/*對數據記錄進行更改操作*/
public void updateRecord() throws SQLException,java.io.UnsupportedEncodingException
{
try
{
PreparedStatement update_stm=conn.prepareStatement(query_statement);
if (param!=null)
for (int i=0;i<param.length;i++)
update_stm.setString(i+1,param[i]);
update_stm.executeUpdate();
update_stm.close();
conn.commit();
}
catch(Exception e)
{
System.out.println(e);
conn.rollback();
}
}
/*刪除數據記錄*/
public void deleteRecord() throws SQLException,java.io.UnsupportedEncodingException
{
try
{
PreparedStatement delete_stm=conn.prepareStatement(query_statement);
if (param!=null)
for (int i=0;i<param.length;i++)
delete_stm.setString(i+1,param[i]);
delete_stm.executeUpdate();
delete_stm.close();
conn.commit();
}
catch(Exception e)
{
System.out.println(e);
conn.rollback();
}
}
}
希望大家尊重作者的勞動,使用時保留作者信息以及版本信息等等,謝謝!
如果以后不是很忙的話,我會逐步寫一些文章,把自己的一些開發經驗與大家分享。
初步的文章標題:
**輕松建立并管理數據庫連接池!
**利用javabean輕松實現頁面導航及數據分頁顯示!
**利用最終類的靜態方法輕松實現對中文亂碼的處理!
**利用javabean輕松實現服務器端對數據類型的檢測!
**利用javabean輕松實現對服務器端日期格式的檢測與處理!
......
......
......
希望大家尊重作者的勞動,使用時保留作者信息以及版本信息等等,謝謝!
CNBIE BLOG
--------------------------------------------------------------------------------
一個javascript腳本寫的俄羅斯方塊
原文:一個javascript腳本寫的俄羅斯方塊
Russia.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> 俄羅斯方塊 </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="dolphin">
<META NAME="Description" CONTENT="俄羅斯方塊游戲">
<STYLE>
.btnup{
border-left:solid #ffffff 1px;
border-top:solid #ffffff 1px;
border-right:solid #828486 1px;
border-bottom:solid #828486 1px;
font-size: 9pt;
cursor:default
}
tr{
font-family:"宋體";
font-size: 9pt;
cursor: default
}
</STYLE>
<SCRIPT LANGUAGE="JavaScript" alt="一個javascript腳本寫的俄羅斯方塊" src=http://www.3pcode.com/article/article_36/Russia.js></SCRIPT>
</HEAD>
<BODY BGCOLOR="#FFFFFF" onload="Init()" onkeydown="keyDown()">
<TABLE border="0" cellspacing="2" cellpadding="6" align="center" width="60%">
<TR valign="top">
<TD width="120">
得分: <SPAN ID="gScore"></SPAN> <p>
級別: <SPAN ID="gLevel"></SPAN> <p>
行數: <SPAN ID="gLine"></SPAN> <p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -