① 如何用R讀取xml 格式的數據
第一步:安裝xml包,library調用。
第二步:找到你要讀取的xml文件的位置,網站的就寫清楚網址,本地的寫到文件名。
url<-"E:\\input.xml"
第三步:先把xml格式的文件暫時讀進來,給計算機分析文件的機會。(Parse:描述,分析,解析)
xmldoc<-xmlParse(url)
第四步:找根節點。xmlroot
rootNote<-xmlRoot(xmldoc)
第五步:讀取根節點的數據。想想看,一般來說會有好幾個根節點,每個根節點下面又會有好幾個欄位和對應的數值。像這種洋蔥似的數據(自創名詞)的讀取和轉化怎能少了apply。
② 新手使用android的XML(DOM)解析問題,指定路徑XML如何讀取
一、在Android應用中的XML文件來源
1、本地xml文件
本地XML文件可以放在應用根目錄assets文件夾、res/xml、res/raw、SDcard卡、應用的data目錄等;
除res/xml可直接通過getXml(int id)獲取XML文檔,返回一個解析器對象(XmlResourceParer:XmlResourceParer是XmlPullParser的子類),其它位置情況都可以獲取XML文檔,返回一個Inputstream對象,進行讀取數據,獲取方法分別如下:
a.在res/xml目錄下(推薦使用):
[java] view plain
XmlResourceParser xmlParser = this.getResources().getXml(R.xml.XXX);
b.在res/xml、res/raw目錄下:
[java] view plain
InputStream inputStream = this.getResources().openRawResource(R.xml.XXX);
c.在assets文件夾下(本人測試發現通過此方法獲取的XML文檔不能帶有首行:<?xml version="1.0" encoding="utf-8"?>,否則解析報錯,具體原因未查明,知道原因請回復交流):
[java] view plain
InputStream inputStream = getResources().getAssets().open(fileName);
d.在應用指定目錄下(SDcard,應用data目錄等):
[java] view plain
// path路徑根據實際項目修改,此次獲取SDcard根目錄
String path = Environment.getExternalStorageDirectory().toString();
File xmlFlie = new File(path+fileName);
InputStream inputStream = new FileInputStream(xmlFlie);
2、通過url得到的xml文件
很多時候需要解析xml文件都用於客戶端與伺服器之間的數據交互,比如解析google天氣預報信息,或自己項目內定的一些XML數據結構,其中通過URL,使用DefaultHTTPClient get請求獲取XML文件方法如下:
[java] view plain
/**
* 讀取url的xml資源 轉成String
* @param url
* @return 返回 讀取url的xml字元串
*/
public String getStringByUrl(String url) {
String outputString = "";
// DefaultHttpClient
DefaultHttpClient httpclient = new DefaultHttpClient();
// HttpGet
HttpGet httpget = new HttpGet(url);
// ResponseHandler
ResponseHandler<String> responseHandler = new BasicResponseHandler();
try {
outputString = httpclient.execute(httpget, responseHandler);
outputString = new String(outputString.getBytes("ISO-8859-1"), "utf-8"); // 解決中文亂碼
Log.i("HttpClientConnector", "連接成功");
} catch (Exception e) {
Log.i("HttpClientConnector", "連接失敗");
e.printStackTrace();
}
httpclient.getConnectionManager().shutdown();
return outputString;
}
二、XML文件的解析方式
能夠運用在Android系統上解析XML文件的常用有三種方式:DOM、SAX和PULL,其中DOM解析XML是先把XML文件讀進內存中,再通過介面獲取數據,該方法使用相對小的XML文件,移動設備往往受硬體性能影響,如果XML文件比較大使用DOM解析往往效率跟不上;SAX和PULL都是採用事件驅動方式來進行解析,在Android中的事件機制是基於回調函數。
本例旨在考慮簡單方便性,綜合考慮選擇了PULL解析,PULL解析器是一個開源項目,Android平台已經內置了PULL解析器,同時Android系統本身也是使用PULL解析器來解析各種XML文檔。
1、事件回調類型
PULL解析XML文件時,回調XmlResourceParser內定義表示文檔開頭結束和節點開頭結束的數值(事件回調類型),表示如下:
a.讀取到XML文檔開頭(聲明)返回:XmlPullParser.START_DOCUMENT(0)
b.讀取到XML文檔結束返回:XmlPullParser.END_DOCUMENT (1)
c.讀取到XML節點開始返回:XmlPullParser.START_TAG (2)
d.讀取到XML節點結束返回:XmlPullParser.END_TAG (3)
e.讀取到XML文本返回:XmlPullParser.TEXT (4)
2、XmlPullParser有幾個主要方法(更多查閱Android APIs):
a.XmlPullParser.getEventType() : Returns the type of the current event (START_TAG, END_TAG, TEXT, etc.) 【獲取當前事件回調類型】
b.XmlPullParser.getName():For START_TAG or END_TAG events, the (local) name of the current element is returned when namespaces are enabled.【獲取當前節點名字】
c.XmlPullParser.getAttributeValue(int index):Returns the given attributes value.【根據id獲取節點屬性值】
d.XmlPullParser.getAttributeValue(String namespace, String name):Returns the attributes value identified by namespace URI and namespace localName.【根據name獲取節點屬性值】
e.XmlPullParser.netxText():If current event is START_TAG then if next element is TEXT then element content is returned or if next event is END_TAG then empty string is returned, otherwise exception is thrown.【回調節點START_TAG時,通過此方法獲取節點內容】
3、實際編碼中如何使用
在實際編碼中,主要根據事件回調類型,結合被解析的XML結構進行解析提取數據,PULL解析XML文件的主要模式如下,更具體使用看本文提供的例子:
[java] view plain
try {
//開始解析事件
int eventType = parser.getEventType();
//處理事件,不碰到文檔結束就一直處理
while (eventType != XmlPullParser.END_DOCUMENT) {
//因為定義了一堆靜態常量,所以這里可以用switch
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
// 不做任何操作或初開始化數據
break;
case XmlPullParser.START_TAG:
// 解析XML節點數據
// 獲取當前標簽名字
String tagName = parser.getName();
if(tagName.equals("XXXTAGXXX")){
// 通過getAttributeValue 和 netxText解析節點的屬性值和節點值
}
break;
case XmlPullParser.END_TAG:
// 單節點完成,可往集合里邊添加新的數據
break;
case XmlPullParser.END_DOCUMENT:
break;
}
// 別忘了用next方法處理下一個事件,不然就會死循環
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
③ java的xml的解析方式有什麼,他們的解析流程是怎麼樣的,有什麼區別
DOM4J,JDOM,SAX
public class DomTest3
{
public static void main(String[] args) throws Exception
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File("student.xml"));
//獲得根元素結點
Element root = doc.getDocumentElement();
parseElement(root);
}
private static void parseElement(Element element)
{
String tagName = element.getNodeName();
NodeList children = element.getChildNodes();
System.out.print("<" + tagName);
//element元素的所有屬性所構成的NamedNodeMap對象,需要對其進行判斷
NamedNodeMap map = element.getAttributes();
//如果該元素存在屬性
if(null != map)
{
for(int i = 0; i < map.getLength(); i++)
{
//獲得該元素的每一個屬性
Attr attr = (Attr)map.item(i);
String attrName = attr.getName();
String attrValue = attr.getValue();
System.out.print(" " + attrName + "=\"" + attrValue + "\"");
}
}
System.out.print(">");
for(int i = 0; i < children.getLength(); i++)
{
Node node = children.item(i);
//獲得結點的類型
short nodeType = node.getNodeType();
if(nodeType == Node.ELEMENT_NODE)
{
//是元素,繼續遞歸
parseElement((Element)node);
}
else if(nodeType == Node.TEXT_NODE)
{
//遞歸出口
System.out.print(node.getNodeValue());
}
else if(nodeType == Node.COMMENT_NODE)
{
System.out.print("<!--");
Comment comment = (Comment)node;
//注釋內容
String data = comment.getData();
System.out.print(data);
System.out.print("-->");
}
}
System.out.print("</" + tagName + ">");
}
}
public class SaxTest1
{
public static void main(String[] args) throws Exception
{
//step1: 獲得SAX解析器工廠實例
SAXParserFactory factory = SAXParserFactory.newInstance();
//step2: 獲得SAX解析器實例
SAXParser parser = factory.newSAXParser();
//step3: 開始進行解析
parser.parse(new File("student.xml"), new MyHandler());
}
}
class MyHandler extends DefaultHandler
{
@Override
public void startDocument() throws SAXException
{
System.out.println("parse began");
}
@Override
public void endDocument() throws SAXException
{
System.out.println("parse finished");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
System.out.println("start element");
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException
{
System.out.println("finish element");
}
}
public class JDomTest1
{
public static void main(String[] args) throws Exception
{
Document document = new Document();
Element root = new Element("root");
document.addContent(root);
Comment comment = new Comment("This is my comments");
root.addContent(comment);
Element e = new Element("hello");
e.setAttribute("sohu", "www.sohu.com");
root.addContent(e);
Element e2 = new Element("world");
Attribute attr = new Attribute("test", "hehe");
e2.setAttribute(attr);
e.addContent(e2);
e2.addContent(new Element("aaa").setAttribute("a", "b")
.setAttribute("x", "y").setAttribute("gg", "hh").setText("text content"));
Format format = Format.getPrettyFormat();
format.setIndent(" ");
// format.setEncoding("gbk");
XMLOutputter out = new XMLOutputter(format);
out.output(document, new FileWriter("jdom.xml"));
}
}
④ 在java中解析xml有哪幾種方法
(1)DOM解析
DOM是html和xml的應用程序介面(API),以層次結構(類似於樹型)來組織節點和信息片段,映射XML文檔的結構,允許獲取
和操作文檔的任意部分,是W3C的官方標准
【優點】
①允許應用程序對數據和結構做出更改。
②訪問是雙向的,可以在任何時候在樹中上下導航,獲取和操作任意部分的數據。
【缺點】
①通常需要載入整個XML文檔來構造層次結構,消耗資源大。
【解析詳解】
①構建Document對象:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = bdf.newDocumentBuilder();
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(xml文件);
Document doc = bd.parse(is);
②遍歷DOM對象
Document: XML文檔對象,由解析器獲取
NodeList: 節點數組
Node: 節點(包括element、#text)
Element: 元素,可用於獲取屬性參數
(2)SAX(Simple API for XML)解析
流模型中的"推"模型分析方式。通過事件驅動,每發現一個節點就引發一個事件,事件推給事件處理器,通過回調方法
完成解析工作,解析XML文檔的邏輯需要應用程序完成
【優勢】
①不需要等待所有數據都被處理,分析就能立即開始。
②只在讀取數據時檢查數據,不需要保存在內存中。
③可以在某個條件得到滿足時停止解析,不必解析整個文檔。
④效率和性能較高,能解析大於系統內存的文檔。
【缺點】
①需要應用程序自己負責TAG的處理邏輯(例如維護父/子關系等),文檔越復雜程序就越復雜。
②單向導航,無法定位文檔層次,很難同時訪問同一文檔的不同部分數據,不支持XPath。
【原理】
簡單的說就是對文檔進行順序掃描,當掃描到文檔(document)開始與結束、元素(element)開始與結束時通知事件
處理函數(回調函數),進行相應處理,直到文檔結束
【事件處理器類型】
①訪問XML DTD:DTDHandler
②低級訪問解析錯誤:ErrorHandler
③訪問文檔內容:ContextHandler
【DefaultHandler類】
SAX事件處理程序的默認基類,實現了DTDHandler、ErrorHandler、ContextHandler和EntityResolver介面,通常
做法是,繼承該基類,重寫需要的方法,如startDocument()
【創建SAX解析器】
SAXParserFactory saxf = SAXParserFactory.newInstance();
SAXParser sax = saxf.newSAXParser();
註:關於遍歷
①深度優先遍歷(Depthi-First Traserval)
②廣度優先遍歷(Width-First Traserval)
(3)JDOM(Java-based Document Object Model)
Java特定的文檔對象模型。自身不包含解析器,使用SAX
【優點】
①使用具體類而不是介面,簡化了DOM的API。
②大量使用了Java集合類,方便了Java開發人員。
【缺點】
①沒有較好的靈活性。
②性能較差。
(4)DOM4J(Document Object Model for Java)
簡單易用,採用Java集合框架,並完全支持DOM、SAX和JAXP
【優點】
①大量使用了Java集合類,方便Java開發人員,同時提供一些提高性能的替代方法。
②支持XPath。
③有很好的性能。
【缺點】
①大量使用了介面,API較為復雜。
(5)StAX(Streaming API for XML)
流模型中的拉模型分析方式。提供基於指針和基於迭代器兩種方式的支持,JDK1.6新特性
【和推式解析相比的優點】
①在拉式解析中,事件是由解析應用產生的,因此拉式解析中向客戶端提供的是解析規則,而不是解析器。
②同推式解析相比,拉式解析的代碼更簡單,而且不用那麼多庫。
③拉式解析客戶端能夠一次讀取多個XML文件。
④拉式解析允許你過濾XML文件和跳過解析事件。
【簡介】
StAX API的實現是使用了Java Web服務開發(JWSDP)1.6,並結合了Sun Java流式XML分析器(SjsXP)-它位於
javax.xml.stream包中。XMLStreamReader介面用於分析一個XML文檔,而XMLStreamWriter介面用於生成一個
XML文檔。XMLEventReader負責使用一個對象事件迭代子分析XML事件-這與XMLStreamReader所使用的游標機制
形成對照。
⑤ 如何安裝resin
1.Resin 可以在 http://www.caucho.com/download/index.xtp 免費下載和使用。使用Resin開發或者學習是免費的,但是如果把Resin作為收費產品發布是需要付費的。目前的版本是2.10.
下載Resin 時選擇Archive Versions 中的 windows.zip的普通安裝包resin-2.1.0.zip.
把該zip包解壓到任何目錄下面,如d: esin.以下介紹都假設Resin安裝在d: esin下。進入d: esinin,
鍵入httpd,可以在命令行控制台下運行Resin伺服器。此時彈出一個有start 和stop兩個Radio按紐和一close按紐的對話框。在這里可以看到Resin的運行信息。這些信息同時Resin可以在d: esinlog目錄下面的stdout.log 日誌文件中察看到。如:
Resin 2.0.4 (built Thu Nov 15 17:56:24 PST 2001)
Copyright(c) 1998-2001 Caucho Technology. All rights reserved.
Starting Resin on Wed, 23 Jan 2002 14:41:47 +0800 (CST)
http listening to *:80
srun listening to haitaiserver:6802
點選stop,可以停止當前的Resin伺服器進程;再點選start,又可以開啟新的Resin伺服器進程。關閉該對話框,則回到Command 控制台的盤符提示狀態下。如果在nt4或者win2k環境下,需要把Resin當成服務,只需要在Command控制台的該目錄下,鍵入 httpd ?install,就可以在管理工具的服務下面看到新增了一條Resin
Web Server的自動的服務。以後只要進入nt 4或者win2k,就可以啟動Resin服務。該服務也可以像其他服務一樣設置成手動或者禁用狀態。注意有的時候在安裝完服務後,啟動Resin,並不能看到自己寫的Resin常式可以被解析,瀏覽器顯示伺服器找不到錯誤。只要重新啟動win2k或者nt,就能解決該問題。
下面簡要介紹一下Resin伺服器的配置。Resin伺服器和大多數Java Web伺服器一樣,通過一個Xml文件配置。
進入d: esinconf目錄,打開resin.conf,這是一個xml格式的文本。
這裡面有很多標記,先查找到:。在標記對中的配置和resin的
Java Web 伺服器有關。找到,在標記對中的表示resin的根,相當於Apache的htdocs 或者 IIS 的wwwroot.Resin自帶http伺服器,但是也可以不使用它,採用Apache 或者 IIS做http伺服器。這個在下面段落中會提到。
再查找標記,它可以這樣配置。host參數指定的是伺服器,port指定的是http埠,默認是localhost和8080.還有標記。這個是jsp 和java Servlet的引擎配置。一般默認就可以了,除非6802埠已經被別的程序佔用了。然後,配置jdk.這個需要在classpath中設置。右鍵點擊我的電腦,在系統特性的高級標簽中,點擊環境變數,
在系統變數中新建一個環境變數,變數名為classpath,值為jdk所在的目錄;再新建另外一個環境變數,變數名為path,值為javac.exe 和java.exe所在的目錄(在jdk所在的目錄下面的bin目錄下)。一般這樣子配置以後,Resin就可以使用了。在d: esindoc中(假設你的對中的名稱是doc,也就是根是d:/resin/doc,而且你的如左配置),隨便寫一個jsp文件,如可以寫
個test.jsp文件,內容為。然後,在瀏覽器中,鍵入http://localhost/test.jsp.如果你可以看到瀏覽器顯示6,則表示Resin伺服器已經可以正常運行了。注意,修改配置後,一般重新啟動resin才能看到變化
2.
安裝:
解壓resin之後,以和apache結合的方式編譯resin3
./configure --with-apache=/home/webadm
.make
.make install
編譯完成之後.要修改apache的配置文件httpd.conf. 之前和2.0.x結合的apache的配置為CauchoConfigFile /home/resin/conf/resin.conf, 現在必須將這一行改成
ResinConfigServer localhost 6802 (6802為resin的srun的埠 ), 這樣才能實現apache和resin的結合.
主要配置說明
resin3的web-app配置和2.0有一定的區別.
首先,將web-app-deploy的相關配置去掉(該目錄主要為打包的war文件設置目錄,當與下面的host的document-directory不同時,document-directory無效 ) , 然後修改
<host> 的<document-directory>/home/webpub</document-directory>, /home/webpub為程序主頁存放的目錄.
配置servlet-mapping,在web-app里設置.如下
<servlet-mapping url-pattern='/servlet/*' servlet-name='invoker'/>
配置資料庫.範例如下
<database>
<jndi-name>jdbc/test</jndi-name>
<driver type="org.gjt.mm.mysql.Driver">
<url>jdbc:mysql://127.0.0.1:3306/test</url>
<user>test</user>
<password>test</password>
<init-param useUnicode="true"/>
<init-param characterEncoding="gb2312"/>
</driver>
<prepared-statement-cache-size>8</prepared-statement-cache-size>
<max-connections>300</max-connections>
<max-idle-time>30s</max-idle-time>
</database>
需要注意的是,resin3的DBPool沒有了getPool(String PoolName)的方法.所以以前的數據池連接方法不能使用了.比較折中的修改方法是, 重寫一個DBPool類,然後把java類裡面的import com.caucho.sql.*;去掉避免沖突.
DBPool類範例:
package com.netease.mm;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
public class DBPool
{
private Connection conn = null;
public static DBPool getPool(String poolName)
{
try
{
Context env = (Context) new InitialContext().lookup("java:comp/env");
DataSource source = (DataSource) env.lookup("jdbc/"+poolName);
DBPool pool = new DBPool();
pool.conn = source.getConnection();
return pool;
}
catch(Exception e)
{
return null;
}
}
public Connection getConnection()
{
return conn;
}
}
配置stderr,stdout等log問題. Resin3默認並不會將程序出錯的信息列印出來.需要自己設置.
在<resin>結點之下添加如下配置:
<log name='' level='all' path='stderr:' timestamp="[%H:%M:%S.%s]"
format=" ${log.level} ${log.loggerName} ${log.message}"/>
配置中無法解決的問題: 在resin2.0.x中.可以設置error-page,當resin啟動錯誤或未啟動時,訪問主頁將自動轉向到所設置的error-page, 在resin3中,雖然主頁幫助裡面提到這個設置
例:<error-page exception-type='connection' location='/errpage.html'/>, 但經過測試.無論將此設置放在哪一層結點(resin,server,host,web-app)之下.都無法起到轉向的作用. 這就引發一個嚴重的問題,當resin3未啟動而apache運行時.訪問jsp頁面,將直接顯示出源碼.該問題在resin3至今發布的版本都存在,目前找不到有效便捷的解決方法.
⑥ java解析xml需要學習哪些知識
下面是一位項目經理的博客內容
最近,總有很多初學Java的朋友詢問學Java要學哪些內容。回想8年前我學Java的時候,也是對此一無所知。看著那黑呼呼的命令行窗口,怎麼也猜不出它和企業開發有什麼關系,也想像不出在控制台輸出的乘法口訣1*1=1除了給幼兒園的小朋友做練習之外還有什麼用途。
兄弟連JAVA戰狼班
現在,經歷了8年的開發,終於可以有一點東西,供當年和我一樣喜歡Java、想從事於java軟體開發的朋友們參考。
1 java語法。通過任何一本Java入門書籍,都可以學會Java的基本語法。千萬不要認為,你把書上的例子程序都能寫出來就算學會了Java語法。要想真正掌握,還需要做大量的測試題。對語法不準確的理解,會使你寫的代碼出現邏輯錯誤。而這些錯誤會使你在真正的項目開發中吃盡苦頭:你認為正確才會寫上去。而在幾十萬行代碼中找出幾行有邏輯錯誤的代碼,非常困難。因為你幾乎不會懷疑你認為正確的代碼存在錯誤。
2 常用類。永遠不要寫別人已經實現的代碼。有很多功能,用JDk中現有的類就可以完成。你需要熟悉JDK.可以通過研究JDK幫助文檔和JDK源代碼的方式,逐漸了解,你需要的類都在什麼地方。一方面,要熟悉有哪些可以直接使用的資源,另一方面,學習一下,SUN公司的工程師怎樣寫代碼。
3 IDE 集成開發環境。現在企業最常用的是IBM公司的eclipse。類似的還有JBuilder,Idea,NetBeans等等。畢竟,只有5%的頂尖高手在使用簡單的文本編輯器在寫Java代碼。多數程序員都是在使用這些東西。
4 資料庫.MySql,Oracle,DB2.小項目多數使用MySql這樣的免費資料庫。大一些的項目會考慮使用Oracle或者DB2. Java項目很少使用SqlServer.因此,你還需要學習資料庫方面的一些知識。可以從SQL語言開始。這些資料庫都支持標准SQL.學會基本的SQL,參考具體的資料庫手冊,就可以完成一般的項目開發了。當然,要想使你的程序運行的效率更高,需要更深入的學習。大部分的程序優化,都是從這部分開始的。
5 JDBC Java資料庫連接。使用Java程序操作資料庫。這部分非常重要。幾乎所有的企業項目都會用到。
6 HTML CSS Javascript。
HTML--(HyperTextMark-upLanguage) 超文本標記語言。 CSS --(Cascading Style Sheets)層疊樣式表。你千萬不要以為,CS又出了加強版。呵呵。 JavaScript--是一種由Netscape的LiveScript發展而來的腳本語言.
准確的說,這些東西和Java語言本身關系不大。但是,現在的企業項目,以B/S結構的居多。因此,我們的Java程序,會有大量的機會和它們打交道。需要提前准備一下。
7 你需要學習如何使用及管理WEB伺服器,例如tomcat,並且知道如何在其基礎上擴展和維護WEB程序,如何使用它的附加服務,如連接池。
8 JSP Servlet.這兩個是初級Java程序員必須掌握的基本技能,是所有B/S結構框架的基礎。相應的,還需要學習EL以及JSTL(StandardTagLibraries)和可以選擇的第三方TagLibraries,以提高表示層的處理能力。
9 企業流行框架 Struts,Spring,Hibernate等。
10 Java設計模式。有一些特殊的功能,只有按照特定的設計模式才能實現。如果你有了5萬行以上的代碼經驗,可以開始研究一下設計模式。
11 你還要跟上技術發展的步伐,了解在Java項目中使用的新技術。如Ajax等。
還有
目前,JAVA是開發人員的熱寵,很多論壇都有不少熱愛JAVA的開發人員,也有不少想成為JAVA程序員,
但苦於不知道該如何學習,也不清楚該學些什麼知識才能成為一個JAVA程序員。本人在這里拋磚引玉,
和大家討論成為一個JAVA初級程序員應該具有的知識,與大家共享。
個人認為想成為一個合格的JAVA初級程序員應該具備如下知識:
一、面向對象的知識:JAVA是一個面向對象的開發語言,因此熟悉面向對象對學習JAVA很有必要,您
要了解:什麼是對象,什麼是類;什麼是封裝,什麼是多態,什麼是繼承;什麼是抽象類,什麼是
介面。了解了概念後,您還需要這些概念是如何體現的,如類和對象有什麼區別?類是如何封裝的?
二、JAVA語法:如果您已經有了開發經驗,恭喜您,您學習JAVA語法來將比較容易。如果您有C++等
面向對象語言的開發經驗,您只需簡單的翻看一下介紹JAVA的相關書籍就可以了。如果您是新手,沒有關
系,您下些工夫,好好研究一本JAVA初級教程之類的書就可以了。
學習了JAVA語法,加上面向對象的知識,只有您用心,您就可以寫出來比較好的JAVA代碼了。如果您再
抽出時間熟悉一下JAVA編程規范,您代碼的水平就應該不俗了。
三、JSP和HTML:在我國的絕大多數公司,做JAVA程序員都少不了和JSP以及HTML打交道。因此,想成為JAVA程序員就不可避免的要熟悉JSP和HTML,您最好能知道JSP的幾個內置對象,如Session,Request,Reponse,,以及常用的JSP標簽,如include,userBean等。盡管一些工具會幫您生成HTML代碼,但您還是要熟悉比如title,,<table>,<tr>,<td>等。如果您再熟悉一下JS和CSS就更好了,那會使您製作的頁面更友好。
四、WebServer:熟悉了以上三種,可以肯定的說您已經可以製作出來JSP頁面了,您也可以在您的頁面里使用自己開發的JAVA類(JAVABEAN)了,但您的頁面總要跑起來才能看到您要的效果,這就要求您必須熟悉一種WebServer,比如:TOMCAT,RESIN等。您要熟悉如何發布您的應用,如何利用WebServer的資料庫資源等。
五、開發工具:大家都知道,開發工具可以幫助您更好更快地開發,因此熟悉幾種開發工具很有必要。目前JAVA的開發工具比較流行的有JBuilder,IDEA,Eclipse,HTML的開發工具有Dreamweaver等。
六、熟悉一種框架:熟悉一種框架其實是成為JAVA程序員的一種可選知識,但目前開發B/S結構的應用的開發小組,都差不多會採用一種框架來構建自己的應用系統。框架都會有許多可重用的代碼,良好的層次關系和業務控制邏輯,基於框架的開發使你可以省出很多的開發成本。目前比較流行的框架有Struts和WAF等。
我要說明,您要想從本文中學到一些JAVA高級知識是學不到的,因為本文告訴您的作為一個(高級)JAVA工程師應該學什麼,而不是告訴您具體的知識細節。
一、JAVA。要想成為JAVA(高級)工程師肯定要學習JAVA。一般的程序員或許只需知道一些JAVA的語法結構就可以應付了。但要成為JAVA(高級)工程師,您要對JAVA做比較深入的研究。您應該多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、線程。如果可能,希望您對JAVA的所有包都瀏覽一下,知道大概的API,這樣您就發現其實您想實現的很多功能,通過JAVA的API都可以實現了,就不必自己費太多的腦經了。
二、設計模式。其實寫代碼是很容易的事情,我相信您也有同感。但如何寫得好就比較難了。這個「好」字包括代碼可重用性,可維護性,可擴展性等。如何寫出好的代碼往往要藉助一些設計模式。當然長期的代碼經驗積累,只要您用心,會使您形成自己代碼風格。相信您的代碼也比較符合代碼的可重用性,可維護性,可擴展性。但既然前人已經給我們總結出了經驗,我們何不踩著前人的肩膀前進?
三、XML。現在的系統中不使用XML幾乎是不可能的。XML的功能非常強大,它可以做數據轉換、做系統的配置、甚至可保存您的系統業務數據。因此您必須了解XML,包括它的語法,結構。您還需要比較熟練的使用解析XML的一些API,比如JDOM,SAX等,因為在我們一般的項目中,XML往往擔當系統配置信息的作用,您需要用這些API解析這些配置信息,開發完美的項目。
四、精通使用一種或兩種框架。像在《如何成為java初級程序員》中提到的那樣,「框架都會有許多可重用的代碼,良好的層次關系和業務控制邏輯,基於框架的開發使你可以省出很多的開發成本」。但我這里希望您能精通,更多的是希望您能通過框架的使用了解框架的思想。這樣您在開發一個項目時思路會開闊一些,比如您會想到把SQL語句與您的JAVA代碼分開,再比如您會考慮把您的業務邏輯配置到XML或者資料庫中,這樣整個項目就很容易擴張了。
五、熟悉主流資料庫。其實真正比較大的項目都是有人專門做資料庫的,但往往很多項目要求作為(高級)工程師的您也參與資料庫的設計以及SQL的編寫。所以為了更好的為國家做貢獻,建議您還是多了解一些主流資料庫,比如SQLSERVER,ORACLE,多連接SQL和存儲過程以及觸發器。如果您不是「科班」出身,您還需要補充一些資料庫原理方面的知識。
六、精通一種或兩種WEBServer。盡管我再《如何成為java初級程序員》里講過它,我還是要強調您要精通一種或兩種。因為作為JAVA工程師,特別時想成為高級JAVA工程師的您,您不可避免地要部署您的項目到WebServer上,而且只有當您精通一種WebServer,您才可能最大限度地使用它的資源,這往往可以節省很多時間和精力。
七、UML。我知道您肯定想成為高級工程師,因此您有必要了解或熟練或精通UML,這取決於您有多大決心想成為高級工程師和項目經理。在比較正規的開發團隊中,UML是討論項目的交流工具,您要想做一個軟體工程師,您至少要能看懂,您要想做高級工程師,您要能通過它來描述您對項目的理解,盡管這不是必須,但卻很重要。
八、站在高度分析問題:這不是一個知識點,也不是通過書本就能學得到的。只所以提到這一點,是因為我比您還著急,我希望您更快的成為一個高級的軟體工程師,而不是一個一般的軟體工程師。希望您在工作中多向您的系統分析員、需求分析員、系統設計員學習,多站在他們角度上去看您在開發的項目。在最好在項目之初先在您的腦海里對項目有個大致的分析、設計,然後和他們進行比較,找找差別,想想缺點。
九、工具。與在《如何成為java初級程序員》里提到的不同,您在這個階段可能接觸到不同的工具了,盡管您還需要使用JB或者IDEA,但能可能對ROSE,Together要多了解一些,因為您要畫UML了。不要再對Dreamweaver等HTML編輯器情有獨鍾了,那些JSP頁面讓初級程序員去寫吧。