真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

企業(yè)eqjava源代碼 eq java

求一個JAVA的壓縮程序源代碼。

package com.io2.homework;

成都創(chuàng)新互聯(lián)公司專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、孟村網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5響應(yīng)式網(wǎng)站、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為孟村等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

/*壓縮文件夾*/

public class MyMultipleFileZip

{

private String currentZipFilePath = "F:/MyZip.zip";

private String sourceFilePath;

private ZipOutputStream zos;

private FileInputStream fis;

public MyMultipleFileZip(String sourceFilePath)

{

try

{

this.sourceFilePath = sourceFilePath;

zos = new ZipOutputStream(new FileOutputStream(currentZipFilePath));

//設(shè)定文件壓縮級別

zos.setLevel(9);

} catch (FileNotFoundException e)

{

e.printStackTrace();

}

}

// 在當(dāng)前條目中寫入具體內(nèi)容

public void writeToEntryZip(String filePath)

{

try

{

fis = new FileInputStream(filePath);

} catch (FileNotFoundException e1)

{

e1.printStackTrace();

}

byte[] buff = new byte[1024];

int len = 0;

try

{

while ((len = fis.read(buff)) != -1)

{

zos.write(buff, 0, len);

}

} catch (IOException e)

{

e.printStackTrace();

}finally

{

if (fis != null)

try

{

fis.close();

} catch (IOException e)

{

e.printStackTrace();

}

}

}

// 添加文件條目

public void addFileEntryZip(String fileName)

{

try

{

zos.putNextEntry(new ZipEntry(fileName));

} catch (IOException e)

{

e.printStackTrace();

}

}

public void addDirectoryEntryZip(String directoryName)

{

try

{

zos.putNextEntry(new ZipEntry(directoryName + "/"));

} catch (IOException e)

{

e.printStackTrace();

}

}

// 遍歷文件夾

public void listMyDirectory(String filePath)

{

File f = new File(filePath);

File[] files = f.listFiles();

if(files!=null)

{

for (File currentFile : files)

{

// 設(shè)置條目名稱(此步驟非常關(guān)鍵)

String entryName= currentFile.getAbsolutePath().split(":")[1].substring(1);

// 獲取文件物理路徑

String absolutePath = currentFile.getAbsolutePath();

if (currentFile.isDirectory())

{

addDirectoryEntryZip(entryName);

//進(jìn)行遞歸調(diào)用

listMyDirectory(absolutePath);

}

else

{

addFileEntryZip(entryName);

writeToEntryZip(absolutePath);

}

}

}

}

// 主要流程

public void mainWorkFlow()

{

listMyDirectory(this.sourceFilePath);

if(zos!=null)

try

{

zos.close();

} catch (IOException e)

{

e.printStackTrace();

}

}

public static void main(String[] args)

{

new MyMultipleFileZip("F:/fountainDirectory").mainWorkFlow();

}

}

求一個完整的javaweb項目的購物網(wǎng)站源代碼

JAVA WEB項目的網(wǎng)絡(luò)購物網(wǎng)站源代碼的話,很復(fù)雜的話,肯定是沒有的,你可以去eoe或者安卓巴士網(wǎng)站看看有沒有源碼

idea里怎么查看導(dǎo)入的一個java項目的后臺各功能源代碼在哪?

您好,看到您圖片的目錄結(jié)構(gòu),項目應(yīng)該是基于 MVC 的分層結(jié)構(gòu)進(jìn)行開發(fā)代碼的。一般程序的請求入口是您的 controller 包下面。

如果目前還不確定是哪個請求,先在瀏覽器打開開發(fā)者控制臺,找到具體的請求地址。這里以京東為例。域名后面的一般就是請求的路徑,比如下圖這個 /getinfo。

確認(rèn)具體的請求路徑后,在 idea 左側(cè)選中項目根目錄右鍵 Find in the path,輸入請求路徑 getinfo,應(yīng)該能定位到具體的 controller 接口。

如果還是搜索不到,可以在 idea 下載一個 Restful Tool kit 插件,下載好后重啟 idea,使用快捷鍵 cmd + / 進(jìn)行快捷搜索 RESTful 接口。

希望我的回答可以幫助到你。

求系統(tǒng)編程的源代碼下載網(wǎng)站,最好是簡單點的,別太復(fù)雜

1、JDK (Java Development Kit)Java開發(fā)工具集

從初學(xué)者角度來看,采用JDK開發(fā)Java程序能夠很快理解程序中各部分代碼之間的關(guān)系,

有利于理解Java面向?qū)ο蟮脑O(shè)計思想。JDK的另一個顯著特點是隨著Java (J2EE、J2SE

以及J2ME)版本的升級而升級。但它的缺點也是非常明顯的就是從事大規(guī)模企業(yè)級Java

應(yīng)用開發(fā)非常困難,不能進(jìn)行復(fù)雜的Java軟件開發(fā),也不利于團(tuán)體協(xié)同開發(fā)。

2、Java Workshop

3、NetBeans 與Sun Java Studio 5

NetBeans是開放源碼的Java集成開發(fā)環(huán)境(IDE),適用于各種客戶機(jī)和Web應(yīng)用。

Sun Java Studio是Sun公司最新發(fā)布的商用全功能Java IDE,支持Solaris、Linux和Win

dows平臺,適于創(chuàng)建和部署2層Java Web應(yīng)用和n層J2EE應(yīng)用的企業(yè)開發(fā)人員使用。

NetBeans是業(yè)界第一款支持創(chuàng)新型Java開發(fā)的開放源碼IDE。開發(fā)人員可以利用業(yè)界

強(qiáng)大的開發(fā)工具來構(gòu)建桌面、Web或移動應(yīng)用。同時,通過NetBeans和開放的API的模塊

化結(jié)構(gòu),第三方能夠非常輕松地擴(kuò)展或集成NetBeans平臺。

NetBeans3.5.1主要針對一般Java軟件的開發(fā)者,而Java One Studio5則主要針對企

業(yè)做網(wǎng)絡(luò)服務(wù)等應(yīng)用的開發(fā)者。Sun不久還將推出Project Rave,其目標(biāo)是幫助企業(yè)的開

發(fā)者進(jìn)行軟件開發(fā)。NetBeans 3.5.1版本與其他開發(fā)工具相比,最大區(qū)別在于不僅能夠

開發(fā)各種臺式機(jī)上的應(yīng)用,而且可以用來開發(fā)網(wǎng)絡(luò)服務(wù)方面的應(yīng)用,可以開發(fā)基于J2ME

的移動設(shè)備上的應(yīng)用等。在NetBeans 3.5.1基礎(chǔ)上,Sun開發(fā)出了Java

One Studio5,為用戶提供了一個更加先進(jìn)的企業(yè)編程環(huán)境。在新的Java

One Studio5里有一個應(yīng)用框架,開發(fā)者可以利用這些模塊快速開發(fā)自己在網(wǎng)絡(luò)服務(wù)方面

的各種應(yīng)用程序。

4、Borland 的JBuilder

Jbuilder進(jìn)入了Java集成開發(fā)環(huán)境的王國,它滿足很多方面的應(yīng)用,尤其是對于服

務(wù)器方以及EJB開發(fā)者們來說。下面簡單介紹一下Jbuilder的特點:

1)Jbuilder支持最新的Java技術(shù),包括Applets、JSP/Servlets、JavaBean以及EJB

(Enterprise JavaBeans)的應(yīng)用。

2)用戶可以自動地生成基于后端數(shù)據(jù)庫表的EJB Java類,Jbuilder同時還簡化了EJ

B的自動部署功能.此外它還支持CORBA,相應(yīng)的向?qū)С绦蛴兄谟脩羧娴毓芾鞩DL(分布

應(yīng)用程序所必需的接口定義語言Interface Definition Language)和控制遠(yuǎn)程對象。

3)Jbuilder支持各種應(yīng)用服務(wù)器。Jbuilder與Inprise Application Server緊密集

成,同時支持WebLogic Server,支持EJB 1.1和EJB 2.0,可以快速開發(fā)J2EE的電子商務(wù)

應(yīng)用。

4)Jbuilder能用Servlet和JSP開發(fā)和調(diào)試動態(tài)Web 應(yīng)用。

5)利用Jbuilder可創(chuàng)建(沒有專有代碼和標(biāo)記)純Java2應(yīng)用。由于Jbuilder是用純J

ava語言編寫的,其代碼不含任何專屬代碼和標(biāo)記,它支持最新的Java標(biāo)準(zhǔn)。

6)Jbuilder擁有專業(yè)化的圖形調(diào)試介面,支持遠(yuǎn)程調(diào)試和多線程調(diào)試,調(diào)試器支持

各種JDK版本,包括J2ME/J2SE/J2EE。

JBuilder環(huán)境開發(fā)程序方便,它是純的Java 開發(fā)環(huán)境,適合企業(yè)的J2EE開發(fā);缺點

是往往一開始人們難于把握整個程序各部分之間的關(guān)系,對機(jī)器的硬件要求較高,比較

吃內(nèi)存,這時運行速度顯得較慢。

5、Oracle 的JDeveloper

Oracle9i JDeveloper(定為9.0版,最新為10g)為構(gòu)建具有J2EE功能,XML和Web

services的復(fù)雜的,多層的Java應(yīng)用程序提供了一個完全集成的開發(fā)環(huán)境。它為運用Ora

cle9i數(shù)據(jù)庫和應(yīng)用服務(wù)器的開發(fā)人員提供特殊的功能和增強(qiáng)性能,除此以外,它也有資

格成為用于多種用途Java開發(fā)的一個強(qiáng)大的工具。

Oracle9i JDeveloper的主要特點如下:

① 具有UML(Unified Modeling Language,一體化建模語言)建模功能。可以將業(yè)

務(wù)對象及e-business應(yīng)用模型化。

② 配備有高速Java調(diào)試器(Debuger)、內(nèi)置Profiling工具、提高代碼質(zhì)量的工具

“CodeCoach”等。

③ 支持SOAP(Simple Object Access Protocol)“簡單對象訪問協(xié)議”、UDDI(U

niversal Description, Discovery and Integration)“統(tǒng)一描述、發(fā)現(xiàn)和集成協(xié)議”

、WSDL(Web Services Description Language)“WEB服務(wù)描述語言”等Web服務(wù)標(biāo)準(zhǔn)。

JDeveloper 不僅僅是很好的 Java 編程工具,而且是 Oracle Web 服務(wù)的延伸,支

持 Apache SOAP,以及 9iAS ,可擴(kuò)充的環(huán)境和 XML 和 WSDL 語言緊密相關(guān)。Oracle9i

Jdeveloper完全利用Java編寫,能夠與以前的Oracle服務(wù)器軟件以及其他廠商支持J2EE

的應(yīng)用服務(wù)器產(chǎn)品相兼容,而且在設(shè)計時著重針對Oracle9i,能夠無縫化跨平臺之間的

應(yīng)用開發(fā),提供了業(yè)界第一個完整的、集成了J2EE和XML的開發(fā)環(huán)境,允許開發(fā)者快速開

發(fā)可以通過Web、無線設(shè)備及語音界面訪問的Web服務(wù)和交易應(yīng)用,以往只能通過將傳統(tǒng)J

ava編程技巧與最新模塊化方式結(jié)合到一個單一集成的開發(fā)環(huán)境中之后才能完成J2EE應(yīng)用

開發(fā)生命周期管理的事實,從根本上得到改變。缺點就是對于初學(xué)者來說,較復(fù)雜,也

比較難。

6、IBM的Visual Age for Java

Visual Age for Java是一個非常成熟的開發(fā)工具,它的特性以于IT開發(fā)者和業(yè)余的

Java編程人員來說都是非常用有用的。它提供對可視化編程的廣泛支持,支持利用CICS

連接遺傳大型機(jī)應(yīng)用,支持EJB的開發(fā)應(yīng)用,支持與Websphere的集成開發(fā),方便的bean

創(chuàng)建和良好的快速應(yīng)用開發(fā)(RAD)支持和無文件式的文件處理。

IBM為建設(shè)Web站點所推出的WebSphere Studio Advanced Edition及其包含的Visual

Age for Java Professional Edition軟件已全面轉(zhuǎn)向以Java為中心,這樣,Java開發(fā)人

員對WebSphere全套工具的感覺或許會好了許多。Studio所提供的工具有:Web站點管理

、快速開發(fā) JDBC頁向?qū)С绦?、HTML編輯器和HTML語法檢查等。這確實是個不錯的HTML站

點頁面編輯環(huán)境。Studio和VisualAge集成度很高,菜單中提供了在兩種軟件包之間快速

移動代碼的選項。這就讓使用Studio的Web頁面設(shè)計人員和使用VisualAge的Java程序員

可以相互交換文件、協(xié)同工作。

Visual Age for Java支持團(tuán)隊開發(fā),內(nèi)置的代碼庫可以自動地根據(jù)用戶做出改動而

修改程序代碼,這樣就可以很方便地將目前代碼和早期版本做出比較。與Visual Age緊

密結(jié)合的Websphere Studio本身并不提供源代碼和版本管理的支持,它只是包含了一個

內(nèi)置文件鎖定系統(tǒng),當(dāng)編輯項目的時候可以防止其他人對這些文件的錯誤修改,軟件還支

持諸如Microsoft Visual SourceSafe這樣的第三方源代碼控制系統(tǒng)。Visual Age for

Java完全面向?qū)ο蟮某绦蛟O(shè)計思想使得開發(fā)程序非??焖佟⒏咝?。你可以不編寫任何代

碼就可以設(shè)計出一個典型的應(yīng)用程序框架。Visual Age for Java作為IBM電子商務(wù)解決

方案其中產(chǎn)品之一,可以無縫地與其他IBM產(chǎn)品,如WebSphere、DB2融合, 迅速完成從設(shè)

計、開發(fā)到部署應(yīng)用的整個過程。

Visual Age for Java獨特的管理文件方式使其集成外部工具非常困難,你無法讓Vis

ual Age for Java與其他工具一起聯(lián)合開發(fā)應(yīng)用。

7、BEA 的 WebLogic Workshop

BEA WebLogic Workshop是一個統(tǒng)一、簡化、可擴(kuò)展的開發(fā)環(huán)境,使所有的開發(fā)人員

都能在 BEA WebLogic Enterprise Platform之上構(gòu)建基于標(biāo)準(zhǔn)的企業(yè)級應(yīng)用,從而提高

了開發(fā)部門的生產(chǎn)力水平,加快了價值的實現(xiàn)。

WebLogic Workshop除了提供便捷的Web服務(wù)之外,它能夠用于創(chuàng)建更多種類的應(yīng)用

。作為整個BEA WebLogic Platform的開發(fā)環(huán)境。不管是創(chuàng)建門戶應(yīng)用、編寫工作流、還

是創(chuàng)建Web應(yīng)用,Workshop 8.1都可以幫助開發(fā)人員更快更好地完成。

WebLogic Workshop的主要特點如下:

① 使 J2EE 開發(fā)切實可行,提高開發(fā)效率

BEA WebLogic Workshop 使開發(fā)人員遠(yuǎn)離 J2EE 內(nèi)在的復(fù)雜性,集中精力專注業(yè)務(wù)

邏輯,無須操心單調(diào)乏味的基礎(chǔ)結(jié)構(gòu)代碼。這種創(chuàng)新意味著,已被企業(yè)驗證的 J2EE 的

強(qiáng)大功能,最終被大多數(shù)不熟悉 Java 和 J2EE 的應(yīng)用開發(fā)人員所掌握,從而使 IT 部

門的工作效率提高一個數(shù)量級。

可視化設(shè)計器以及直觀的概念,如事件、屬性和控件等,實現(xiàn)了基于事件的開發(fā)。W

orkshop 簡化的程序設(shè)計模型,使開發(fā)人員不必掌握復(fù)雜的 J2EE API 和面向?qū)ο蟮某?/p>

序設(shè)計原理。所有開發(fā)人員,包括 J2EE 專家和具有可視化和過程化語言技能的應(yīng)用開

發(fā)人員在內(nèi),都可以共同工作在 BEA WebLogic Enterprise Platform 之上。Workshop

的可視化開發(fā)環(huán)境,創(chuàng)建帶有代碼注釋的標(biāo)準(zhǔn) Java 文件,用來說明由運行時框架實施

的企業(yè)級需求。J2EE 和其他高級開發(fā)人員,借助功能強(qiáng)大的代碼編輯功能,可以訪問

Java 源代碼,從而彌補(bǔ)了可視化設(shè)計器的不足。

② 構(gòu)建企業(yè)級應(yīng)用

通過在可伸縮、安全可靠的企業(yè)級架構(gòu)上實施各種應(yīng)用,BEA WebLogic

Workshop 大大降低了開發(fā)風(fēng)險。而且,所有應(yīng)用的創(chuàng)建都使用標(biāo)準(zhǔn)的 J2EE 組件,既保

護(hù)了您的技術(shù)投資,又保持了最大的靈活性。

BEA WebLogic Workshop 運行框架,是統(tǒng)一整個架構(gòu)的匯聚層,使單一、簡化的程序設(shè)

計模型擴(kuò)展到所有的 BEA WebLogic Enterprise Platform 應(yīng)用類型。通過解釋設(shè)計時

創(chuàng)建的注釋代碼,運行時框架可以實現(xiàn)必要的 J2EE 組件,并且提取出與 J2EE 應(yīng)用開

發(fā)有關(guān)的所有底層細(xì)節(jié)。

③ 降低 IT 復(fù)雜性

BEA WebLogic Workshop 提供各種 Java 控件,使得與 IT 資源的連接更輕而易舉

。另外,在構(gòu)建任何 BEA WebLogic Platform 的應(yīng)用中,Java 控件不僅可擴(kuò)展而且完

全相同。這種強(qiáng)大、有效的方法能夠:降低 IT 技術(shù)的復(fù)雜性,優(yōu)化信息的可用性,推

動包含"最佳業(yè)務(wù)方案"的可重用服務(wù)的開發(fā),使開發(fā)人員能以更低的成本、更短的時間

實現(xiàn)更大的產(chǎn)出。

利用 BEA WebLogic Workshop,任何開發(fā)人員都能以最大的生產(chǎn)效率,構(gòu)建各種

Web 服務(wù)、Web 應(yīng)用、門戶和集成項目。BEA WebLogic Workshop是BEA的產(chǎn)品戰(zhàn)略核心

,它幫助客戶接觸和利用面向服務(wù)架構(gòu)(SOA)的強(qiáng)大功能。BEA Weblogic Workshop

8.1極大簡化了當(dāng)前實際企業(yè)集成環(huán)境中企業(yè)級應(yīng)用和服務(wù)的構(gòu)建,并成為全面支持關(guān)鍵

企業(yè)級應(yīng)用(如異步、真正松耦合和粗粒度消息傳送等)的自然選擇。它的缺點就是過于

復(fù)雜,對于初學(xué)者來說,理解起來較為困難。

8、WebGain 的Visual Cafe for Java

Visual Cafe 是只能在Symantec公司的Java虛擬機(jī)、Netscape公司的Java虛擬機(jī)和M

icrosoft虛擬機(jī)上工作的調(diào)試器。這對于開發(fā)者來講是一個重要的特性,因為用戶開發(fā)的

Java代碼中的許多軟件bug就可能中會在某種特定的虛擬機(jī)上起作用。

在修改后進(jìn)行編譯基繼續(xù)進(jìn)行調(diào)試時,Visual Cafe會自動將文件存盤,使用Visual

Cafe創(chuàng)建的原生應(yīng)用具有許多特點。除了明顯的速度提高之外,Symantec使類庫的二進(jìn)制

方式比正常的JDK小Visual Cafe為所指定的關(guān)系自動生成或更新必要的Java代碼。利用V

isual Cafe,用戶可以從一個標(biāo)準(zhǔn)對象數(shù)據(jù)庫中集合完整的Java應(yīng)用程序和Applet,而

不必再編寫源代碼。Visual Cafe還提供了一個擴(kuò)充的源代碼開發(fā)工具集。

Visual Cafe綜合了Java軟件的可視化源程序開發(fā)工具,它允許開發(fā)人員在可視化視

圖和源視圖之間進(jìn)行有效地轉(zhuǎn)換。在可視化視圖中進(jìn)行的修改立即反映在源代碼中。對

源代碼的改變自動更新可視化視圖。

Visual Cafe具有許多源文件方面的特性,如全局檢索和替換。絕大多數(shù)Java開發(fā)工

具的文獻(xiàn)的問題在于簡單地挨個介紹開發(fā)工具的每部分組件,但用戶在開應(yīng)用時還需要

一個面向任務(wù)的手冊,利用這個手冊你可以不必知道工具每一部分的特定功能就可以開

始創(chuàng)建自己的應(yīng)用。Visual Cafe提供了非常全面的用戶指南,它對最開始的安裝到創(chuàng)建

第一個Java應(yīng)用和Applet都提供了全面的幫助,Visual Cafe將自動生成所指明關(guān)系的必

要Java代碼。Visual Cafe可以在Windows 95和Windows NT平臺下運行,Symantec公司為

Java開發(fā)工作提供一個在Macintosh操作系統(tǒng)下可以運行的RAD工具。Visual Cafe編譯器

速度很快,在國際化支持方面比較突出;缺點就是對于初學(xué)者來說,較復(fù)雜,也比較難

。

9、Macromedia的JRUN

Macromedia公司的JRun是一個具有最廣闊適用性的Java引擎,用于開發(fā)及實施由Jav

a Servlets和JavaServer Pages編寫的服務(wù)器端Java應(yīng)用。JRun是第一個完全支持JSP

1.0 規(guī)格書的商業(yè)化產(chǎn)品,全球有超過80,000名開發(fā)人員使用JRun在他們已有的Web服務(wù)

器上添加服務(wù)器端Java的功能。其中Web服務(wù)器包括了Microsoft IIS,Netscape

Enterprise Server,Apache等。

JRun是開發(fā)實施服務(wù)器端Java的先進(jìn)引擎。如果我們希望在我們的Web應(yīng)用中添加服

務(wù)器端Java功能,那么JRun將成為我們的正確選擇。

JRun目前有3個版本,它是第一個支持Java Server Pages(JSP)規(guī)格書1.0的商業(yè)化

產(chǎn)品。JSP是一種強(qiáng)大的服務(wù)器端技術(shù),它是用于創(chuàng)建復(fù)雜Web應(yīng)用的一整套快速應(yīng)用開

發(fā)系統(tǒng)。JRun可以使我們開始開發(fā)并測試Java應(yīng)用。它最多接受5個并發(fā)的連接并且包括

全部Java Servlet API,支持JavaServer Pages(JSP),支持所有主要的Web

servers和計算機(jī)平臺。 JRun Pro能夠在生產(chǎn)環(huán)境下承受大訪問量的負(fù)載,幫助我們實

施應(yīng)用、服務(wù)或Web站點(包括內(nèi)聯(lián)網(wǎng))。JRun Pro 支持無限量并發(fā)式連接運行多個Jav

a虛擬機(jī),包括多個并發(fā)的Java虛擬機(jī)(JVM)。提供一個遠(yuǎn)程管理applet以及一個遠(yuǎn)程

可再分布式的管理applet。JRun Pro Unlimited包括了所有JRun Pro的功能,除次以外

,還可以運行無限量的,并發(fā)的JVM。

JRun依靠其內(nèi)置的JRun Web Server可以單獨運行。使用服務(wù)器端Java,用戶可以開

發(fā)出復(fù)雜的商業(yè)應(yīng)用系統(tǒng)。最重要的一點是,由于servlets的平臺獨立性,以及更加簡

單的開發(fā)、更快速的實施、更經(jīng)濟(jì)的維護(hù)成本,它是CGI(Common Gateway

Interface)或Perl scripts的極佳的替代產(chǎn)品。缺點就是對于初學(xué)者來說,較復(fù)雜,也

比較難。

10、JCreator

JCreator 是一個Java程序開發(fā)工具,也是一個Java集成開發(fā)環(huán)境(IDE)。無論你

是要開發(fā)Java應(yīng)用程序或者網(wǎng)頁上的Applet元件都難不倒它。在功能上與Sun公司所公布

的JDK等文字模式開發(fā)工具相較之下來得容易,還允許使用者自訂義操作窗口界面及無限

Undo/Redo等功能。

JCreator為用戶提供了相當(dāng)強(qiáng)大的功能,例如項目管理功能,項目模板功能,可個

性化設(shè)置語法高亮屬性、行數(shù)、類瀏覽器、標(biāo)簽文檔、多功能編繹器,向?qū)Чδ芤约巴?/p>

全可自定義的用戶界面。通過JCreator,我們不用激活主文檔而直接編繹或運行我們的J

AVA程序。

JCreator能自動找到包含主函數(shù)的文件或包含Applet的Html文件,然后它會運行適

當(dāng)?shù)墓ぞ?。在JCreator中,我們可以通過一個批處理同時編繹多個項目。JCreator的設(shè)

計接近Windows界面風(fēng)格,用戶對它的界面比較熟悉。其最大特點是與我們機(jī)器中所裝的

JDK完美結(jié)合,是其它任何一款I(lǐng)DE所不能比擬的。它是一種初學(xué)者很容易上手的java開

發(fā)工具,缺點是只能進(jìn)行簡單的程序開發(fā),不能進(jìn)行企業(yè)J2EE的開發(fā)應(yīng)用。

11、Microsoft VJ++

Visual J++ 是Microsoft 公司推出的可視化的Java 語言集成開發(fā)環(huán)境(IDE),為Ja

va 編程人員提供了一個新的開發(fā)環(huán)境,是一個相當(dāng)出色的開發(fā)工具。無論集成性、編譯

速度、調(diào)試功能、還是易學(xué)易用性,都體現(xiàn)了Microsoft 的一慣風(fēng)格。Visual J++ 具有

下面的特點:

1)Visual J++ 把Java 虛擬機(jī)(JVM)作為獨立的操作系統(tǒng)組件放入Windows,使之從

瀏覽器中獨立出來。

2)Microsoft 的應(yīng)用基本類庫(AFC,Application Foundation Class Library)對SU

N 公司的JDK 作了擴(kuò)展,使應(yīng)用基本類庫更加適合在Windows 下使用。

3) Visual J++ 的調(diào)試器支持動態(tài)調(diào)試,包括單步執(zhí)行、設(shè)置斷點、觀察變量數(shù)值

等。

4) Visual J++ 提供了一些程序向?qū)?Wizards)和生成器(Builders),它們可以方

便地幫助用戶快速地生成Java 程序,幫助你在自己的工程中創(chuàng)建和修改文件。

5) Visual J++ 界面友好,其代碼編輯器具有智能感知、聯(lián)機(jī)編譯等功能,使程序

編寫十分方便。Visual J++ 中建立了Java 的WFC,這一新的應(yīng)用程序框架能夠直接訪問

Windows 應(yīng)用程序接口(API),使你能夠用Java 語言編寫完全意義上的Windows 應(yīng)用程

序。

6)Visual J++ 中表單設(shè)計器的快速應(yīng)用開發(fā)特性使用WFC 創(chuàng)建基于表單的應(yīng)用程

序變得輕松、簡單。通過WFC 可以方便地使用ActiveX 數(shù)據(jù)對象(ADO,ActiveX Data

Objects)來檢索數(shù)據(jù)和執(zhí)行簡單數(shù)據(jù)的綁定。通過在表單設(shè)計器中使用ActiveX 數(shù)據(jù)對

象,可以快速地在表單中訪問和顯示數(shù)據(jù)。

Visual J++能結(jié)合微軟的一貫的編程風(fēng)格,很方便進(jìn)行Java 的應(yīng)用開發(fā),但它的移

植性較差,不是純的Java 開發(fā)環(huán)境。

12、Eclipse

Eclipse是一種可擴(kuò)展的開放源代碼IDE。2001年11月,IBM公司捐出價值4,000萬美

元的源代碼組建了Eclipse聯(lián)盟,并由該聯(lián)盟負(fù)責(zé)這種工具的后續(xù)開發(fā)。集成開發(fā)環(huán)境(I

DE)經(jīng)常將其應(yīng)用范圍限定在“開發(fā)、構(gòu)建和調(diào)試”的周期之中。為了幫助集成開發(fā)環(huán)境

(IDE)克服目前的局限性,業(yè)界廠商合作創(chuàng)建了Eclipse平臺。Eclipse允許在同一IDE中

集成來自不同供應(yīng)商的工具,并實現(xiàn)了工具之間的互操作性,從而顯著改變了項目工作

流程,使開發(fā)者可以專注在實際的嵌入式目標(biāo)上。

Eclipse框架的這種靈活性來源于其擴(kuò)展點。它們是在XML中定義的已知接口,并充

當(dāng)插件的耦合點。擴(kuò)展點的范圍包括從用在常規(guī)表述過濾器中的簡單字符串,到一個Jav

a類的描述。任何Eclipse插件定義的擴(kuò)展點都能夠被其它插件使用,反之,任何Eclipse

插件也可以遵從其它插件定義的擴(kuò)展點。除了解由擴(kuò)展點定義的接口外,插件不知道它

們通過擴(kuò)展點提供的服務(wù)將如何被使用。

利用Eclipse,我們可以將高級設(shè)計(也許是采用UML)與低級開發(fā)工具(如應(yīng)用調(diào)試器

等)結(jié)合在一起。如果這些互相補(bǔ)充的獨立工具采用Eclipse擴(kuò)展點彼此連接,那么當(dāng)我

們用調(diào)試器逐一檢查應(yīng)用時,UML對話框可以突出顯示我們正在關(guān)注的器件。事實上,由

于Eclipse并不了解開發(fā)語言,所以無論Java語言調(diào)試器、C/C++調(diào)試器還是匯編調(diào)試器

都是有效的,并可以在相同的框架內(nèi)同時瞄準(zhǔn)不同的進(jìn)程或節(jié)點。

Eclipse的最大特點是它能接受由Java開發(fā)者自己編寫的開放源代碼插件,這類似于

微軟公司的Visual Studio和Sun微系統(tǒng)公司的NetBeans平臺。Eclipse為工具開發(fā)商提供

了更好的靈活性,使他們能更好地控制自己的軟件技術(shù)。Eclipse聯(lián)盟已經(jīng)宣布將在2004

年中期發(fā)布其3.0版軟件。這是一款非常受歡迎的java開發(fā)工具,這國內(nèi)的用戶越來越多

,實際上實用它java開發(fā)人員是最多的。缺點就是較復(fù)雜,對初學(xué)者來說,理解起來比

較困難。

13、Ant

Another Neat Tool(Ant)是一種基于Java的build工具。理論上來說,它有些類似于

(Unix)C中的make ,但沒有make的缺陷。因為Ant的原作者在多種(硬件)平臺上開發(fā)軟

件時,無法忍受這些工具的限制和不便。類似于make的工具本質(zhì)上是基于shell(語言)

的:他們計算依賴關(guān)系,然后執(zhí)行命令(這些命令與你在命令行敲的命令沒太大區(qū)別)

。這就意味著你可以很容易地通過使用OS特有的或編寫新的(命令)程序擴(kuò)展該工具;

然而,這也意味著你將自己限制在了特定的OS,或特定的OS類型上,如Unix。Ant就不同

了。與基于shell命令的擴(kuò)展模式不同,Ant用Java的類來擴(kuò)展。(用戶)不必編寫shell

命令,配置文件是基于XML的,通過調(diào)用target樹,就可執(zhí)行各種task。每個task由實現(xiàn)

了一個實現(xiàn)了特定Task接口的對象來運行。

Ant支持一些可選task,一個可選task一般需要額外的庫才能工作。可選task與Ant

的內(nèi)置task分開,單獨打包。這個可選包可以從你下載Ant的同一個地方下載。ANT本身

就是這樣一個流程腳本引擎,用于自動化調(diào)用程序完成項目的編譯,打包,測試等。除

了基于JAVA是平臺無關(guān)的外,腳本的格式是基于XML的,比make腳本來說還要好維護(hù)一些

。Ant是Apache提供給Java開發(fā)人員的構(gòu)建工具,它可以在Windows OS和Unix OS下運行

,它不僅開放源碼并且還是一個非常好用的工具。Ant是Apache Jakarta中一個很好用的

Java開發(fā)工具,Ant配置文件采用XML文檔編寫,所以Java程序員對其語法相當(dāng)熟悉,Ant

是專用于Java項目平臺,能夠用純Java來開發(fā),它能夠運行于Java安裝的平臺,即體現(xiàn)

了它的跨平臺功能。它的缺點顯示執(zhí)行結(jié)果只能是DOS字符界面,不能進(jìn)行復(fù)雜的java程

序開發(fā)。

14、IntelliJ

Intellij IDEA是一款綜合的Java 編程環(huán)境,被許多開發(fā)人員和行業(yè)專家譽(yù)為市場

上最好的IDE。它提供了一系列最實用的的工具組合:智能編碼輔助和自動控制,支持J2

EE,Ant,JUnit和CVS集成,非平行的編碼檢查和創(chuàng)新的GUI設(shè)計器。IDEA把Java開發(fā)人

員從一些耗時的常規(guī)工作中解放出來,顯著地提高了開發(fā)效率。具有運行更快速,生成

更好的代碼;持續(xù)的重新設(shè)計和日常編碼變得更加簡易,與其它工具的完美集成;很高

的性價比等特點。在4.0版本中支持Generics,BEA WebLogic集成,改良的CVS集成以及G

UI設(shè)計器。

IntelliJ IDEA能盡可能地促進(jìn)程序員的編程速度。它包括了很多輔助的功能,并且

與Java結(jié)合得相當(dāng)好。不同的工具窗口圍繞在主編程窗口周圍,當(dāng)鼠標(biāo)點到時即可打開

,無用時也可輕松關(guān)閉,使用戶得到了最大化的有效屏幕范圍。以技術(shù)為導(dǎo)向的IDEA集

成了調(diào)試器,支持本地和遠(yuǎn)程的調(diào)試,即使我們需要修改一些設(shè)置上的東西使我們的工

作順利進(jìn)展。另外,它還提供了通常的監(jiān)視,分步調(diào)試以及手動設(shè)置斷點功能,在這種

斷點模式下,我們可以自動地在斷點之外設(shè)置現(xiàn)場訪問,甚至可以瀏覽不同的變量的值

。IDE支持多重的JVM設(shè)置,幾個編譯程序和Ant建造系統(tǒng),并且,它使得設(shè)置多重的自定

義的類途徑變得簡單。

IntelliJ Idea是一個相對較新的Java IDE。它是Java開發(fā)環(huán)境中最為有用的一個。

高度優(yōu)化的IntelleJ Idea使普通任務(wù)變得相當(dāng)容易,Idea支持很多整合功能,更重要的

使它們設(shè)計的好容易使用。Idea支持XML中的代碼實現(xiàn),Idea同時還會校正XML,Idea支

持JSP的結(jié)構(gòu)。作用于普通Java代碼的眾多功能同樣適用于JSP(比如整合功能),同時

支持JSP調(diào)試;支持EJB,盡管它不包括對個別應(yīng)用服務(wù)器的特殊支持。Idea支持Ant建立

工具,不僅是運行目標(biāo)它還支持編譯與運行程序前后運行目標(biāo),另外也支持綁定鍵盤快

捷鍵。在編輯一個Ant建立XML文件時,Idea還對組成Ant工程的XML部分提供支持。Intel

liJ IDEA 被稱為是最好的JAVA IDE開發(fā)平臺,這套軟件就是以其聰明的即時分析和方便

的 refactoring 功能深獲大家所喜愛。缺點是較復(fù)雜,對初學(xué)者來說,理解起來比較困

難。

小結(jié)

現(xiàn)在常用的Java項目開發(fā)環(huán)境有:JBuilder、VisualAge for Java、Forte for

Java, Visual Cafe、Eclipse、NetBeans IDE、JCreator +J2SDK、jdk+記事本、EditPl

us+ J2SDK等等。一般開發(fā)J2EE項目時都需要安裝各公司的應(yīng)用服務(wù)器(中間件)和相應(yīng)

的開發(fā)工具,在使用這些開發(fā)工具之前,我們最好能熟知這些軟件的優(yōu)點和缺點,以便

根據(jù)實際情況選擇應(yīng)用。編程工具只是工具,為了方便人們工作而開發(fā)的,各有特點,

因此,選工具主要的依據(jù)自己將要從事的領(lǐng)域是什么,而不是盲目的認(rèn)為那種工具好,

那種工具不好。最后希望大家都能找到自己合適的java 開發(fā)工具

如何將下載的java源代碼導(dǎo)入到eclipse中運行

eclipse打開并運行一個已經(jīng)寫好的java文件步驟如下:

1、新建一個java工程項目:右鍵Eclipse的PackageExplorer空白部分,點擊New,再點擊JavaProject,輸入工程名,點擊finish;

2、在新建的工程里新建一個類:右鍵工程,點擊New,再點擊Class,輸入類名,點擊finish;

3、把寫好的java文件的代碼復(fù)制到新建的類中;

4、右鍵新建的類文件,點擊RunAs,再點擊JavaApplication即可運行Java文件。

需要注意的是:java文件要成功運行,前提是要有主方法(main)的存在,沒有主方法沒辦法運行java程序。

Java代碼優(yōu)化有哪些常用的方法

1、 盡量指定類的final修飾符 帶有final修飾符的類是不可派生的。

在Java核心API中,有許多應(yīng)用final的例子,例如java.lang.String。為String類指定final防止了人們覆蓋length()方法。另外,如果指定一個類為final,則該類所有的方法都是final。Java編譯器會尋找機(jī)會內(nèi)聯(lián)(inline)所有的final方法(這和具體的編譯器實現(xiàn)有關(guān))。此舉能夠使性能平均提高50% 。

2、 盡量重用對象。

特別是String 對象的使用中,出現(xiàn)字符串連接情況時應(yīng)用StringBuffer 代替。由于系統(tǒng)不僅要花時間生成對象,以后可能還需花時間對這些對象進(jìn)行垃圾回收和處理。因此,生成過多的對象將會給程序的性能帶來很大的影響。

3、 盡量使用局部變量,調(diào)用方法時傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時變量都保存在棧(Stack)中,速度較快。

其他變量,如靜態(tài)變量、實例變量等,都在堆(Heap)中創(chuàng)建,速度較慢。另外,依賴于具體的編譯器/JVM,局部變量還可能得到進(jìn)一步優(yōu)化。請參見《盡可能使用堆棧變量》。

4、 不要重復(fù)初始化變量

默認(rèn)情況下,調(diào)用類的構(gòu)造函數(shù)時, Java會把變量初始化成確定的值:所有的對象被設(shè)置成null,整數(shù)變量(byte、short、int、long)設(shè)置成0,float和double變量設(shè)置成0.0,邏輯值設(shè)置成false。當(dāng)一個類從另一個類派生時,這一點尤其應(yīng)該注意,因為用new關(guān)鍵詞創(chuàng)建一個對象時,構(gòu)造函數(shù)鏈中的所有構(gòu)造函數(shù)都會被自動調(diào)用。

5、 在JAVA + ORACLE 的應(yīng)用系統(tǒng)開發(fā)中,java中內(nèi)嵌的SQL語句盡量使用大寫的形式,以減輕ORACLE解析器的解析負(fù)擔(dān)。

6、 Java 編程過程中,進(jìn)行數(shù)據(jù)庫連接、I/O流操作時務(wù)必小心,在使用完畢后,即使關(guān)閉以釋放資源。

因為對這些大對象的操作會造成系統(tǒng)大的開銷,稍有不慎,會導(dǎo)致嚴(yán)重的后果。

7、 由于JVM的有其自身的GC機(jī)制,不需要程序開發(fā)者的過多考慮,從一定程度上減輕了開發(fā)者負(fù)擔(dān),但同時也遺漏了隱患,過分的創(chuàng)建對象會消耗系統(tǒng)的大量內(nèi)存,嚴(yán)重時會導(dǎo)致內(nèi)存泄露,因此,保證過期對象的及時回收具有重要意義。

JVM回收垃圾的條件是:對象不在被引用;然而,JVM的GC并非十分的機(jī)智,即使對象滿足了垃圾回收的條件也不一定會被立即回收。所以,建議我們在對象使用完畢,應(yīng)手動置成null。

8、 在使用同步機(jī)制時,應(yīng)盡量使用方法同步代替代碼塊同步。

9、 盡量減少對變量的重復(fù)計算

例如:for(int i = 0;i list.size; i ++) {

}

應(yīng)替換為:

for(int i = 0,int len = list.size();i len; i ++){

}

10、盡量采用lazy loading 的策略,即在需要的時候才開始創(chuàng)建。

例如: String str = “aaa”;

if(i == 1) {

list.add(str);

}

應(yīng)替換為:

if(i == 1) {

String str = “aaa”;

list.add(str);

}

11、慎用異常

異常對性能不利。拋出異常首先要創(chuàng)建一個新的對象。Throwable接口的構(gòu)造函數(shù)調(diào)用名為fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法檢查堆棧,收集調(diào)用跟蹤信息。只要有異常被拋出,VM就必須調(diào)整調(diào)用堆棧,因為在處理過程中創(chuàng)建了一個新的對象。 異常只能用于錯誤處理,不應(yīng)該用來控制程序流程。

12、不要在循環(huán)中使用:

Try {

} catch() {

}

應(yīng)把其放置在最外層。

13、StringBuffer 的使用:

StringBuffer表示了可變的、可寫的字符串。

有三個構(gòu)造方法 :

StringBuffer (); //默認(rèn)分配16個字符的空間

StringBuffer (int size); //分配size個字符的空間

StringBuffer (String str); //分配16個字符+str.length()個字符空間

你可以通過StringBuffer的構(gòu)造函數(shù)來設(shè)定它的初始化容量,這樣可以明顯地提升性能。

這里提到的構(gòu)造函數(shù)是StringBuffer(int length),length參數(shù)表示當(dāng)前的StringBuffer能保持的字符數(shù)量。你也可以使用ensureCapacity(int minimumcapacity)方法在StringBuffer對象創(chuàng)建之后設(shè)置它的容量。首先我們看看StringBuffer的缺省行為,然后再找出一條更好的提升性能的途徑。

StringBuffer在內(nèi)部維護(hù)一個字符數(shù)組,當(dāng)你使用缺省的構(gòu)造函數(shù)來創(chuàng)建StringBuffer對象的時候,因為沒有設(shè)置初始化字符長度,StringBuffer的容量被初始化為16個字符,也就是說缺省容量就是16個字符。當(dāng)StringBuffer達(dá)到最大容量的時候,它會將自身容量增加到當(dāng)前的2倍再加2,也就是(2*舊值+2)。如果你使用缺省值,初始化之后接著往里面追加字符,在你追加到第16個字符的時候它會將容量增加到34(2*16+2),當(dāng)追加到34個字符的時候就會將容量增加到70(2*34+2)。無論何事只要StringBuffer到達(dá)它的最大容量它就不得不創(chuàng)建一個新的字符數(shù)組然后重新將舊字符和新字符都拷貝一遍――這也太昂貴了點。所以總是給StringBuffer設(shè)置一個合理的初始化容量值是錯不了的,這樣會帶來立竿見影的性能增益。StringBuffer初始化過程的調(diào)整的作用由此可見一斑。所以,使用一個合適的容量值來初始化StringBuffer永遠(yuǎn)都是一個最佳的建議。

14、合理的使用Java類 java.util.Vector。

簡單地說,一個Vector就是一個java.lang.Object實例的數(shù)組。Vector與數(shù)組相似,它的元素可以通過整數(shù)形式的索引訪問。但是,Vector類型的對象在創(chuàng)建之后,對象的大小能夠根據(jù)元素的增加或者刪除而擴(kuò)展、縮小。請考慮下面這個向Vector加入元素的例子:

Object bj = new Object();

Vector v = new Vector(100000);

for(int I=0;

I100000; I++) { v.add(0,obj); }

除非有絕對充足的理由要求每次都把新元素插入到Vector的前面,否則上面的代碼對性能不利。在默認(rèn)構(gòu)造函數(shù)中,Vector的初始存儲能力是10個元素,如果新元素加入時存儲能力不足,則以后存儲能力每次加倍。Vector類就對象StringBuffer類一樣,每次擴(kuò)展存儲能力時,所有現(xiàn)有的元素都要復(fù)制到新的存儲空間之中。下面的代碼片段要比前面的例子快幾個數(shù)量級:

Object bj = new Object();

Vector v = new Vector(100000);

for(int I=0; I100000; I++) { v.add(obj); }

同樣的規(guī)則也適用于Vector類的remove()方法。由于Vector中各個元素之間不能含有“空隙”,刪除除最后一個元素之外的任意其他元素都導(dǎo)致被刪除元素之后的元素向前移動。也就是說,從Vector刪除最后一個元素要比刪除第一個元素“開銷”低好幾倍。

假設(shè)要從前面的Vector刪除所有元素,我們可以使用這種代碼:

for(int I=0; I100000; I++)

{

v.remove(0);

}

但是,與下面的代碼相比,前面的代碼要慢幾個數(shù)量級:

for(int I=0; I100000; I++)

{

v.remove(v.size()-1);

}

從Vector類型的對象v刪除所有元素的最好方法是:

v.removeAllElements();

假設(shè)Vector類型的對象v包含字符串“Hello”??紤]下面的代碼,它要從這個Vector中刪除“Hello”字符串:

String s = "Hello";

int i = v.indexOf(s);

if(I != -1) v.remove(s);

這些代碼看起來沒什么錯誤,但它同樣對性能不利。在這段代碼中,indexOf()方法對v進(jìn)行順序搜索尋找字符串“Hello”,remove(s)方法也要進(jìn)行同樣的順序搜索。改進(jìn)之后的版本是:

String s = "Hello";

int i = v.indexOf(s);

if(I != -1) v.remove(i);

這個版本中我們直接在remove()方法中給出待刪除元素的精確索引位置,從而避免了第二次搜索。一個更好的版本是:

String s = "Hello"; v.remove(s);

最后,我們再來看一個有關(guān)Vector類的代碼片段:

for(int I=0; I++;I v.length)

如果v包含100,000個元素,這個代碼片段將調(diào)用v.size()方法100,000次。雖然size方法是一個簡單的方法,但它仍舊需要一次方法調(diào)用的開銷,至少JVM需要為它配置以及清除堆棧環(huán)境。在這里,for循環(huán)內(nèi)部的代碼不會以任何方式修改Vector類型對象v的大小,因此上面的代碼最好改寫成下面這種形式:

int size = v.size(); for(int I=0; I++;Isize)

雖然這是一個簡單的改動,但它仍舊贏得了性能。畢竟,每一個CPU周期都是寶貴的。

15、當(dāng)復(fù)制大量數(shù)據(jù)時,使用System.arraycopy()命令。

int[] src={1,3,5,6,7,8};

int[] dest = new int[6];

System.arraycopy(src, 0, dest, 0, 6);

src:源數(shù)組; srcPos:源數(shù)組要復(fù)制的起始位置;

dest:目的數(shù)組; destPos:目的數(shù)組放置的起始位置;

length:復(fù)制的長度.

注意:src and dest都必須是同類型或者可以進(jìn)行轉(zhuǎn)換類型的數(shù)組.

16、代碼重構(gòu):增強(qiáng)代碼的可讀性。

public class ShopCart {

private List carts ;

public void add (Object item) {

if(carts == null) {

carts = new ArrayList();

}

crts.add(item);

}

public void remove(Object item) {

if(carts. contains(item)) {

carts.remove(item);

}

}

public List getCarts() {

//返回只讀列表

return Collections.unmodifiableList(carts);

}

//不推薦這種方式

//this.getCarts().add(item);

}

17、不用new關(guān)鍵詞創(chuàng)建類的實例

用new關(guān)鍵詞創(chuàng)建類的實例時,構(gòu)造函數(shù)鏈中的所有構(gòu)造函數(shù)都會被自動調(diào)用。但如果一個對象實現(xiàn)了Cloneable接口,我們可以調(diào)用它的clone()方法。clone()方法不會調(diào)用任何類構(gòu)造函數(shù)。

在使用設(shè)計模式(Design Pattern)的場合,如果用Factory模式創(chuàng)建對象,則改用clone()方法創(chuàng)建新的對象實例非常簡單。例如,下面是Factory模式的一個典型實現(xiàn):

public static Credit getNewCredit() {

return new Credit();

}

改進(jìn)后的代碼使用clone()方法,如下所示:

private static Credit BaseCredit = new Credit();

public static Credit getNewCredit() {

return (Credit) BaseCredit.clone();

}

上面的思路對于數(shù)組處理同樣很有用。

18、乘法和除法

考慮下面的代碼:

for (val = 0; val 100000; val +=5) {

alterX = val * 8; myResult = val * 2;

}

用移位操作替代乘法操作可以極大地提高性能。下面是修改后的代碼:

for (val = 0; val 100000; val += 5) {

alterX = val 3; myResult = val 1;

}

修改后的代碼不再做乘以8的操作,而是改用等價的左移3位操作,每左移1位相當(dāng)于乘以2。相應(yīng)地,右移1位操作相當(dāng)于除以2。值得一提的是,雖然移位操作速度快,但可能使代碼比較難于理解,所以最好加上一些注釋。

19、在JSP頁面中關(guān)閉無用的會話。

一個常見的誤解是以為session在有客戶端訪問時就被創(chuàng)建,然而事實是直到某server端程序調(diào)用HttpServletRequest.getSession(true)這樣的語句時才被創(chuàng)建,注意如果JSP沒有顯示的使用 關(guān)閉session,則JSP文件在編譯成Servlet時將會自動加上這樣一條語句HttpSession session = HttpServletRequest.getSession(true);這也是JSP中隱含的session對象的來歷。由于session會消耗內(nèi)存資源,因此,如果不打算使用session,應(yīng)該在所有的JSP中關(guān)閉它。

對于那些無需跟蹤會話狀態(tài)的頁面,關(guān)閉自動創(chuàng)建的會話可以節(jié)省一些資源。使用如下page指令:%@ page session="false"%

20、JDBC與I/O

如果應(yīng)用程序需要訪問一個規(guī)模很大的數(shù)據(jù)集,則應(yīng)當(dāng)考慮使用塊提取方式。默認(rèn)情況下,JDBC每次提取32行數(shù)據(jù)。舉例來說,假設(shè)我們要遍歷一個5000行的記錄集,JDBC必須調(diào)用數(shù)據(jù)庫157次才能提取到全部數(shù)據(jù)。如果把塊大小改成512,則調(diào)用數(shù)據(jù)庫的次數(shù)將減少到10次。

21、Servlet與內(nèi)存使用

許多開發(fā)者隨意地把大量信息保存到用戶會話之中。一些時候,保存在會話中的對象沒有及時地被垃圾回收機(jī)制回收。從性能上看,典型的癥狀是用戶感到系統(tǒng)周期性地變慢,卻又不能把原因歸于任何一個具體的組件。如果監(jiān)視JVM的堆空間,它的表現(xiàn)是內(nèi)存占用不正常地大起大落。

解決這類內(nèi)存問題主要有二種辦法。第一種辦法是,在所有作用范圍為會話的Bean中實現(xiàn)HttpSessionBindingListener接口。這樣,只要實現(xiàn)valueUnbound()方法,就可以顯式地釋放Bean使用的資源。

另外一種辦法就是盡快地把會話作廢。大多數(shù)應(yīng)用服務(wù)器都有設(shè)置會話作廢間隔時間的選項。另外,也可以用編程的方式調(diào)用會話的setMaxInactiveInterval()方法,該方法用來設(shè)定在作廢會話之前,Servlet容器允許的客戶請求的最大間隔時間,以秒計。

22、使用緩沖標(biāo)記

一些應(yīng)用服務(wù)器加入了面向JSP的緩沖標(biāo)記功能。例如,BEA的WebLogic Server從6.0版本開始支持這個功能,Open Symphony工程也同樣支持這個功能。JSP緩沖標(biāo)記既能夠緩沖頁面片斷,也能夠緩沖整個頁面。當(dāng)JSP頁面執(zhí)行時,如果目標(biāo)片斷已經(jīng)在緩沖之中,則生成該片斷的代碼就不用再執(zhí)行。頁面級緩沖捕獲對指定URL的請求,并緩沖整個結(jié)果頁面。對于購物籃、目錄以及門戶網(wǎng)站的主頁來說,這個功能極其有用。對于這類應(yīng)用,頁面級緩沖能夠保存頁面執(zhí)行的結(jié)果,供后繼請求使用。

23、選擇合適的引用機(jī)制

在典型的JSP應(yīng)用系統(tǒng)中,頁頭、頁腳部分往往被抽取出來,然后根據(jù)需要引入頁頭、頁腳。當(dāng)前,在JSP頁面中引入外部資源的方法主要有兩種:include指令,以及include動作。

include指令:例如%@ include file="copyright.html" %。該指令在編譯時引入指定的資源。在編譯之前,帶有include指令的頁面和指定的資源被合并成一個文件。被引用的外部資源在編譯時就確定,比運行時才確定資源更高效。

include動作:例如jsp:include page="copyright.jsp" /。該動作引入指定頁面執(zhí)行后生成的結(jié)果。由于它在運行時完成,因此對輸出結(jié)果的控制更加靈活。但時,只有當(dāng)被引用的內(nèi)容頻繁地改變時,或者在對主頁面的請求沒有出現(xiàn)之前,被引用的頁面無法確定時,使用include動作才合算。

24、及時清除不再需要的會話

為了清除不再活動的會話,許多應(yīng)用服務(wù)器都有默認(rèn)的會話超時時間,一般為30分鐘。當(dāng)應(yīng)用服務(wù)器需要保存更多會話時,如果內(nèi)存容量不足,操作系統(tǒng)會把部分內(nèi)存數(shù)據(jù)轉(zhuǎn)移到磁盤,應(yīng)用服務(wù)器也可能根據(jù)“最近最頻繁使用”(Most Recently Used)算法把部分不活躍的會話轉(zhuǎn)儲到磁盤,甚至可能拋出“內(nèi)存不足”異常。在大規(guī)模系統(tǒng)中,串行化會話的代價是很昂貴的。當(dāng)會話不再需要時,應(yīng)當(dāng)及時調(diào)用HttpSession.invalidate()方法清除會話。HttpSession.invalidate()方法通??梢栽趹?yīng)用的退出頁面調(diào)用。

25、不要將數(shù)組聲明為:public static final 。

26、HashMap的遍歷效率討論

經(jīng)常遇到對HashMap中的key和value值對的遍歷操作,有如下兩種方法:

MapString, String[] paraMap = new HashMapString, String[]();

//第一個循環(huán)

SetString appFieldDefIds = paraMap.keySet();

for (String appFieldDefId : appFieldDefIds) {

String[] values = paraMap.get(appFieldDefId);

......

}

//第二個循環(huán)

for(EntryString, String[] entry : paraMap.entrySet()){

String appFieldDefId = entry.getKey();

String[] values = entry.getValue();

.......

}

第一種實現(xiàn)明顯的效率不如第二種實現(xiàn)。

分析如下 SetString appFieldDefIds = paraMap.keySet(); 是先從HashMap中取得keySet

代碼如下:

public SetK keySet() {

SetK ks = keySet;

return (ks != null ? ks : (keySet = new KeySet()));

}

private class KeySet extends AbstractSetK {

public IteratorK iterator() {

return newKeyIterator();

}

public int size() {

return size;

}

public boolean contains(Object o) {

return containsKey(o);

}

public boolean remove(Object o) {

return HashMap.this.removeEntryForKey(o) != null;

}

public void clear() {

HashMap.this.clear();

}

}

其實就是返回一個私有類KeySet, 它是從AbstractSet繼承而來,實現(xiàn)了Set接口。

再來看看for/in循環(huán)的語法

for(declaration : expression)

statement

在執(zhí)行階段被翻譯成如下各式

for(IteratorE #i = (expression).iterator(); #i.hashNext();){

declaration = #i.next();

statement

}

因此在第一個for語句for (String appFieldDefId : appFieldDefIds) 中調(diào)用了HashMap.keySet().iterator()

而這個方法調(diào)用了newKeyIterator()

IteratorK newKeyIterator() {

return new KeyIterator();

}

private class KeyIterator extends HashIteratorK {

public K next() {

return nextEntry().getKey();

}

}

所以在for中還是調(diào)用了

在第二個循環(huán)for(EntryString, String[] entry : paraMap.entrySet())中使用的Iterator是如下的一個內(nèi)部

private class EntryIterator extends HashIteratorMap.EntryK,V {

public Map.EntryK,V next() {

return nextEntry();

}

}

此時第一個循環(huán)得到key,第二個循環(huán)得到HashMap的Entry效率就是從循環(huán)里面體現(xiàn)出來的第二個循環(huán)此致可以直接取key和value值而第一個循環(huán)還是得再利用HashMap的get(Object key)來取value值現(xiàn)在看看HashMap的get(Object key)方法

public V get(Object key) {

Object k = maskNull(key);

int hash = hash(k);

int i = indexFor(hash, table.length); //Entry[] table

EntryK,V e = table;

while (true) {

if (e == null)

return null;

if (e.hash == hash eq(k, e.key))

return e.value;

e = e.next;

}

}

其實就是再次利用Hash值取出相應(yīng)的Entry做比較得到結(jié)果,所以使用第一中循環(huán)相當(dāng)于兩次進(jìn)入HashMap的Entry

中而第二個循環(huán)取得Entry的值之后直接取key和value,效率比第一個循環(huán)高。其實按照Map的概念來看也應(yīng)該是用第二個循環(huán)好一點,它本來就是key和value的值對,將key和value分開操作在這里不是個好選擇。

27、array(數(shù)組) 和 ArryList的使用

array([]):最高效;但是其容量固定且無法動態(tài)改變;

ArrayList:容量可動態(tài)增長;但犧牲效率;

基于效率和類型檢驗,應(yīng)盡可能使用array,無法確定數(shù)組大小時才使用ArrayList!

ArrayList是Array的復(fù)雜版本

ArrayList內(nèi)部封裝了一個Object類型的數(shù)組,從一般的意義來說,它和數(shù)組沒有本質(zhì)的差別,甚至于ArrayList的許多方法,如Index、IndexOf、Contains、Sort等都是在內(nèi)部數(shù)組的基礎(chǔ)上直接調(diào)用Array的對應(yīng)方法。

ArrayList存入對象時,拋棄類型信息,所有對象屏蔽為Object,編譯時不檢查類型,但是運行時會報錯。

注:jdk5中加入了對泛型的支持,已經(jīng)可以在使用ArrayList時進(jìn)行類型檢查。

從這一點上看來,ArrayList與數(shù)組的區(qū)別主要就是由于動態(tài)增容的效率問題了

28、盡量使用HashMap 和ArrayList ,除非必要,否則不推薦使用HashTable和Vector ,后者由于使用同步機(jī)制,而導(dǎo)致了性能的開銷。

29、StringBuffer 和StringBuilder的區(qū)別:

java.lang.StringBuffer線程安全的可變字符序列。一個類似于 String 的字符串緩沖區(qū),但不能修改。

StringBuilder。與該類相比,通常應(yīng)該優(yōu)先使用 java.lang.StringBuilder類,因為它支持所有相同的操作,但由于它不執(zhí)行同步,所以速度更快。為了獲得更好的性能,在構(gòu)造 StirngBuffer 或 StirngBuilder 時應(yīng)盡可能指定它的容量。當(dāng)然,如果你操作的字符串長度不超過 16 個字符就不用了。 相同情況下使用 StirngBuilder 相比使用 StringBuffer 僅能獲得 10%-15% 左右的性能提升,但卻要冒多線程不安全的風(fēng)險。而在現(xiàn)實的模塊化編程中,負(fù)責(zé)某一模塊的程序員不一定能清晰地判斷該模塊是否會放入多線程的環(huán)境中運行,因此:除非你能確定你的系統(tǒng)的瓶頸是在 StringBuffer 上,并且確定你的模塊不會運行在多線程模式下,否則還是用 StringBuffer 吧。

30、盡量避免使用split

除非是必須的,否則應(yīng)該避免使用split,split由于支持正則表達(dá)式,所以效率比較低,如果是頻繁的幾十,幾百萬的調(diào)用將會耗費大量資源,如果確實需要頻繁的調(diào)用split,可以考慮使用apache的 StringUtils.split(string,char),頻繁split的可以緩存結(jié)果。

其他補(bǔ)充:

1、及時清除不再使用的對象,設(shè)為null

2、盡可能使用final,static等關(guān)鍵字

3、盡可能使用buffered對象

如何優(yōu)化代碼使JAVA源文件及編譯后CLASS文件更小

1 盡量使用繼承,繼承的方法越多,你要寫的代碼量也就越少

2 打開JAVA編譯器的優(yōu)化選項: javac -O 這個選項將刪除掉CLASS文件中的行號,并能把

一些private, static,final的小段方法申明為inline方法調(diào)用

3 把公用的代碼提取出來

4 不要初始化很大的數(shù)組,盡管初始化一個數(shù)組在JAVA代碼中只是一行的代碼量,但

編譯后的代碼是一行代碼插入一個數(shù)組的元素,所以如果你有大量的數(shù)據(jù)需要存在數(shù)組

中的話,可以先把這些數(shù)據(jù)放在String中,然后在運行期把字符串解析到數(shù)組中

5 日期類型的對象會占用很大的空間,如果你要存儲大量的日期對象,可以考慮把它存儲為

long型,然后在使用的時候轉(zhuǎn)換為Date類型

6 類名,方法名和變量名盡量使用簡短的名字,可以考慮使用Hashjava, Jobe, Obfuscate and Jshrink等工具自動完成這個工作

7 將static final類型的變量定義到Interface中去

8 算術(shù)運算 能用左移/右移的運算就不要用*和/運算,相同的運算不要運算多次

2. 不要兩次初始化變量

Java通過調(diào)用獨特的類構(gòu)造器默認(rèn)地初始化變量為一個已知的值。所有的對象被設(shè)置成null,integers (byte, short, int, long)被設(shè)置成0,float和double設(shè)置成0.0,Boolean變量設(shè)置成false。這對那些擴(kuò)展自其它類的類尤其重要,這跟使用一個新的關(guān)鍵詞創(chuàng)建一個對象時所有一連串的構(gòu)造器被自動調(diào)用一樣。

3. 在任何可能的地方讓類為Final

標(biāo)記為final的類不能被擴(kuò)展。在《核心Java API》中有大量這個技術(shù)的例子,諸如java.lang.String。將String類標(biāo)記為final阻止了開發(fā)者創(chuàng)建他們自己實現(xiàn)的長度方法。

更深入點說,如果類是final的,所有類的方法也是final的。Java編譯器可能會內(nèi)聯(lián)所有的方法(這依賴于編譯器的實現(xiàn))。在我的測試?yán)?,我已?jīng)看到性能平均增加了50%。

9. 異常在需要拋出的地方拋出,try catch能整合就整合

try {

some.method1(); // Difficult for javac

} catch( method1Exception e ) { // and the JVM runtime

// Handle exception 1 // to optimize this

} // code

try {

some.method2();

} catch( method2Exception e ) {

// Handle exception 2

}

try {

some.method3();

} catch( method3Exception e ) {

// Handle exception 3

}

已下代碼 更容易被編譯器優(yōu)化

try {

some.method1(); // Easier to optimize

some.method2();

some.method3();

} catch( method1Exception e ) {

// Handle exception 1

} catch( method2Exception e ) {

// Handle exception 2

} catch( method3Exception e ) {

// Handle exception 3

}

10. For循環(huán)的優(yōu)化

Replace…

for( int i = 0; i collection.size(); i++ ) {

...

}

with…

for( int i = 0, n = collection.size(); i n; i++ ) {

...

}

5、 在JAVA + ORACLE 的應(yīng)用系統(tǒng)開發(fā)中,java中內(nèi)嵌的SQL語句盡量使用大寫的形式,以減輕ORACLE解析器的解析負(fù)擔(dān)。

10、盡量采用lazy loading 的策略,即在需要的時候才開始創(chuàng)建。

例如: String str = “aaa”;

if(i == 1) {

list.add(str);

}

應(yīng)替換為:

if(i == 1) {

String str = “aaa”;

list.add(str);

}

12、不要在循環(huán)中使用:

Try {

} catch() {

}

應(yīng)把其放置在最外層


當(dāng)前名稱:企業(yè)eqjava源代碼 eq java
瀏覽路徑:http://weahome.cn/article/doopije.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部