使用Eclipse編寫自己的第一個(gè)Java代碼。

公司主營業(yè)務(wù):網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出莊河免費(fèi)做網(wǎng)站回饋大家。
編寫如下:
1、首先打開自己安裝的Eclipse軟件。
2、然后選擇File-New-JavaProject。
3、然后找到工程打開,右擊src選擇-New-Class。
4、填入類名,選擇下面的publicstaticvoidmain(String[]args)。
5、然后寫入代碼publicclassDemo{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubSystem.out.println(HelloWorld)。
6、點(diǎn)擊上面的運(yùn)行按鈕,點(diǎn)擊確認(rèn),可以看到代碼運(yùn)行結(jié)果。
public class TestStar {
public static void main(String[] args) {
String star = "*";
for (int i = 0; i 5; i++) {
if (i == 0) {
System.out.print(" " + star);
System.out.println();
}
if (i == 1) {
for (int z = 0; z 4; z++) {
System.out.print(" " + star);
}
System.out.println();
}
if (i == 2) {
System.out.print(" ");
for (int x = 0; x 3; x++) {
System.out.print(" " + star);
}
System.out.println();
}
if (i == 3) {
for (int y = 0; y 2; y++) {
System.out.print(" " + star + " ");
}
}
}
}
}
是好使的 但是我沒找到畫五角星有什么規(guī)律(五角星好象不是正規(guī)圖形吧?)如果還有什么要求的話 補(bǔ)充問題(如果是用*填充所有的東西 不包括 “ ”的話 我可以重新再給你寫一個(gè))
Java新手入門的30個(gè)基本概念
在我們學(xué)習(xí)Java的過程中,掌握其中的基本概念對我們的學(xué)習(xí)無論是J2SE,J2EE,J2ME都是很重要的,J2SE是Java的基礎(chǔ),所以有必要對其中的基本概念做以歸納,以便大家在以后的學(xué)習(xí)過程中更好的理解java的精髓,在此我總結(jié)了30條基本的概念。
Java概述:
目前Java主要應(yīng)用于中間件的開發(fā)(middleware)---處理客戶機(jī)于服務(wù)器之間的通信技術(shù),早期的實(shí)踐證明,Java不適合pc應(yīng)用程序的開發(fā),其發(fā)展逐漸變成在開發(fā)手持設(shè)備,互聯(lián)網(wǎng)信息站,及車載計(jì)算機(jī)的開發(fā).Java于其他語言所不同的是程序運(yùn)行時(shí)提供了平臺的獨(dú)立性,稱許可以在windows,solaris,linux其他操作系統(tǒng)上使用完全相同的代碼.Java的語法與C++語法類似,C++/C程序員很容易掌握,而且Java是完全的徹底的面向?qū)ο蟮?其中提出了很好的GC(Garbage Collector)垃圾處理機(jī)制,防止內(nèi)存溢出。
Java的白皮書為我們提出了Java語言的11個(gè)關(guān)鍵特性。
(1)Easy:Java的語法比C++的相對簡單,另一個(gè)方面就是Java能使軟件在很小的機(jī)器上運(yùn)行,基礎(chǔ)解釋其和類庫的支持的大小約為40kb,增加基本的標(biāo)準(zhǔn)庫和線程支持的內(nèi)存需要增加125kb。
(2)分布式:Java帶有很強(qiáng)大的TCP/IP協(xié)議族的例程庫,Java應(yīng)用程序能夠通過URL來穿過網(wǎng)絡(luò)來訪問遠(yuǎn)程對象,由于servlet機(jī)制的出現(xiàn),使Java編程非常的高效,現(xiàn)在許多的大的web server都支持servlet。
(3)OO:面向?qū)ο笤O(shè)計(jì)是把重點(diǎn)放在對象及對象的接口上的一個(gè)編程技術(shù).其面向?qū)ο蠛虲++有很多不同,在與多重繼承的處理及Java的原類模型。
(4)健壯特性:Java采取了一個(gè)安全指針模型,能減小重寫內(nèi)存和數(shù)據(jù)崩潰的可能型。
(5)安全:Java用來設(shè)計(jì)網(wǎng)路和分布系統(tǒng),這帶來了新的安全問題,Java可以用來構(gòu)建防病毒和防攻擊的System.事實(shí)證明Java在防毒這一方面做的比較好。
(6)中立體系結(jié)構(gòu):Java編譯其生成體系結(jié)構(gòu)中立的目標(biāo)文件格式可以在很多處理器上執(zhí)行,編譯器產(chǎn)生的指令字節(jié)碼(Javabytecode)實(shí)現(xiàn)此特性,此字節(jié)碼可以在任何機(jī)器上解釋執(zhí)行。
(7)可移植性:Java中對基本數(shù)據(jù)結(jié)構(gòu)類型的大小和算法都有嚴(yán)格的規(guī)定所以可移植性很好。
(8)多線程:Java處理多線程的過程很簡單,Java把多線程實(shí)現(xiàn)交給底下操作系統(tǒng)或線程程序完成.所以多線程是Java作為服務(wù)器端開發(fā)語言的流行原因之一。
(9)Applet和servlet:能夠在網(wǎng)頁上執(zhí)行的程序叫Applet,需要支持Java的瀏覽器很多,而applet支持動態(tài)的網(wǎng)頁,這是很多其他語言所不能做到的。
基本概念:
1.OOP中唯一關(guān)系的是對象的接口是什么,就像計(jì)算機(jī)的銷售商她不管電源內(nèi)部結(jié)構(gòu)是怎樣的,他只關(guān)系能否給你提供電就行了,也就是只要知道can or not而不是how and why.所有的程序是由一定的屬性和行為對象組成的,不同的對象的訪問通過函數(shù)調(diào)用來完成,對象間所有的交流都是通過方法調(diào)用,通過對封裝對象數(shù)據(jù),很大限度上提高復(fù)用率。
2.OOP中最重要的思想是類,類是模板是藍(lán)圖,從類中構(gòu)造一個(gè)對象,即創(chuàng)建了這個(gè)類的一個(gè)實(shí)例(instance)。
3.封裝:就是把數(shù)據(jù)和行為結(jié)合起在一個(gè)包中)并對對象使用者隱藏?cái)?shù)據(jù)的實(shí)現(xiàn)過程,一個(gè)對象中的數(shù)據(jù)叫他的實(shí)例字段(instance field)。
4.通過擴(kuò)展一個(gè)類來獲得一個(gè)新類叫繼承(inheritance),而所有的類都是由Object根超類擴(kuò)展而得,根超類下文會做介紹。
5.對象的3個(gè)主要特性
behavior---說明這個(gè)對象能做什么.
state---當(dāng)對象施加方法時(shí)對象的反映.
identity---與其他相似行為對象的區(qū)分標(biāo)志.
每個(gè)對象有唯一的indentity 而這3者之間相互影響.
6.類之間的關(guān)系:
use-a :依賴關(guān)系
has-a :聚合關(guān)系
is-a :繼承關(guān)系--例:A類繼承了B類,此時(shí)A類不僅有了B類的方法,還有其自己的方法.(個(gè)性存在于共性中)
7.構(gòu)造對象使用構(gòu)造器:構(gòu)造器的提出,構(gòu)造器是一種特殊的方法,構(gòu)造對象并對其初始化。
例:Data類的構(gòu)造器叫Data
new Data()---構(gòu)造一個(gè)新對象,且初始化當(dāng)前時(shí)間.
Data happyday=new Data()---把一個(gè)對象賦值給一個(gè)變量happyday,從而使該對象能夠多次使用,此處要聲明的使變量與對象變量二者是不同的.new返回的值是一個(gè)引用。
構(gòu)造器特點(diǎn):構(gòu)造器可以有0個(gè),一個(gè)或多個(gè)參數(shù)
構(gòu)造器和類有相同的名字
一個(gè)類可以有多個(gè)構(gòu)造器
構(gòu)造器沒有返回值
構(gòu)造器總是和new運(yùn)算符一起使用.
8.重載:當(dāng)多個(gè)方法具有相同的名字而含有不同的參數(shù)時(shí),便發(fā)生重載.編譯器必須挑選出調(diào)用哪個(gè)方法。
9.包(package)Java允許把一個(gè)或多個(gè)類收集在一起成為一組,稱作包,以便于組織任務(wù),標(biāo)準(zhǔn)Java庫分為許多包.java.lang java.util java,net等,包是分層次的所有的java包都在java和javax包層次內(nèi)。
10.繼承思想:允許在已經(jīng)存在的類的基礎(chǔ)上構(gòu)建新的類,當(dāng)你繼承一個(gè)已經(jīng)存在的類時(shí),那么你就復(fù)用了這個(gè)類的方法和字段,同時(shí)你可以在新類中添加新的方法和字段。
11.擴(kuò)展類:擴(kuò)展類充分體現(xiàn)了is-a的繼承關(guān)系. 形式為:class (子類) extends (基類)。
12.多態(tài):在java中,對象變量是多態(tài)的.而java中不支持多重繼承。
13.動態(tài)綁定:調(diào)用對象方法的機(jī)制。
(1)編譯器檢查對象聲明的類型和方法名。
(2)編譯器檢查方法調(diào)用的參數(shù)類型。
(3)靜態(tài)綁定:若方法類型為priavte static final 編譯器會準(zhǔn)確知道該調(diào)用哪個(gè)方法。
(4)當(dāng)程序運(yùn)行并且使用動態(tài)綁定來調(diào)用一個(gè)方法時(shí),那么虛擬機(jī)必須調(diào)用x所指向的對象的實(shí)際類型相匹配的方法版本。
(5)動態(tài)綁定:是很重要的特性,它能使程序變得可擴(kuò)展而不需要重編譯已存代碼。
14.final類:為防止他人從你的類上派生新類,此類是不可擴(kuò)展的。
15.動態(tài)調(diào)用比靜態(tài)調(diào)用花費(fèi)的時(shí)間要長。
16.抽象類:規(guī)定一個(gè)或多個(gè)抽象方法的類本身必須定義為abstract。
例: public abstract string getDescripition
17.Java中的每一個(gè)類都是從Object類擴(kuò)展而來的。
18.object類中的equal和toString方法。
equal用于測試一個(gè)對象是否同另一個(gè)對象相等。
toString返回一個(gè)代表該對象的字符串,幾乎每一個(gè)類都會重載該方法,以便返回當(dāng)前狀態(tài)的正確表示.
(toString 方法是一個(gè)很重要的方法)
19.通用編程:任何類類型的所有值都可以同object類性的變量來代替。
20.數(shù)組列表:ArrayList動態(tài)數(shù)組列表,是一個(gè)類庫,定義在java.uitl包中,可自動調(diào)節(jié)數(shù)組的大小。
21.class類 object類中的getclass方法返回ckass類型的一個(gè)實(shí)例,程序啟動時(shí)包含在main方法的類會被加載,虛擬機(jī)要加載他需要的所有類,每一個(gè)加載的類都要加載它需要的類。
22.class類為編寫可動態(tài)操縱java代碼的程序提供了強(qiáng)大的功能反射,這項(xiàng)功能為JavaBeans特別有用,使用反射Java能支持VB程序員習(xí)慣使用的工具。
能夠分析類能力的程序叫反射器,Java中提供此功能的包叫Java.lang.reflect反射機(jī)制十分強(qiáng)大.
1.在運(yùn)行時(shí)分析類的能力。
2.在運(yùn)行時(shí)探察類的對象。
3.實(shí)現(xiàn)通用數(shù)組操縱代碼。
4.提供方法對象。
而此機(jī)制主要針對是工具者而不是應(yīng)用及程序。
反射機(jī)制中的最重要的部分是允許你檢查類的結(jié)構(gòu).用到的API有:
java.lang.reflect.Field 返回字段.
java.reflect.Method 返回方法.
java.lang.reflect.Constructor 返回參數(shù).
方法指針:java沒有方法指針,把一個(gè)方法的地址傳給另一個(gè)方法,可以在后面調(diào)用它,而接口是更好的解決方案。
23.接口(Interface)說明類該做什么而不指定如何去做,一個(gè)類可以實(shí)現(xiàn)一個(gè)或多個(gè)interface。
24.接口不是一個(gè)類,而是對符合接口要求的類的一套規(guī)范。
若實(shí)現(xiàn)一個(gè)接口需要2個(gè)步驟:
1.聲明類需要實(shí)現(xiàn)的指定接口。
2.提供接口中的所有方法的定義。
聲明一個(gè)類實(shí)現(xiàn)一個(gè)接口需要使用implements 關(guān)鍵字
class actionB implements Comparable 其actionb需要提供CompareTo方法,接口不是類,不能用new實(shí)例化一個(gè)接口.
25.一個(gè)類只有一個(gè)超類,但一個(gè)類能實(shí)現(xiàn)多個(gè)接口。Java中的一個(gè)重要接口:Cloneable
26.接口和回調(diào).編程一個(gè)常用的模式是回調(diào)模式,在這種模式中你可以指定當(dāng)一個(gè)特定時(shí)間發(fā) 生時(shí)回調(diào)對象上的方法。
例:ActionListener 接口監(jiān)聽.
類似的API有:java.swing.JOptionPane
java.swing.Timer
java.awt.Tookit
27.對象clone:clone方法是object一個(gè)保護(hù)方法,這意味著你的代碼不能簡單的調(diào)用它。
28.內(nèi)部類:一個(gè)內(nèi)部類的定義是定義在另一個(gè)內(nèi)部的類。
原因是:
1.一個(gè)內(nèi)部類的對象能夠訪問創(chuàng)建它的對象的實(shí)現(xiàn),包括私有數(shù)據(jù)。
2.對于同一個(gè)包中的其他類來說,內(nèi)部類能夠隱藏起來。
3.匿名內(nèi)部類可以很方便的定義回調(diào)。
4.使用內(nèi)部類可以非常方便的編寫事件驅(qū)動程序。
29.代理類(proxy):
1.指定接口要求所有代碼
2.object類定義的所有的方法(toString equals)
30.數(shù)據(jù)類型:Java是強(qiáng)調(diào)類型的語言,每個(gè)變量都必須先申明它都類型,java中總共有8個(gè)基本類型.4種是整型,2種是浮點(diǎn)型,一種是字符型,被用于Unicode編碼中的字符,布爾型。
一、入門
《Java 2從入門到精通》- 推薦
《Thinking in Java》- 強(qiáng)烈推薦*
O’reilly的Java編程基礎(chǔ)系列 - 參考*
二、進(jìn)階
《Java Cook Book》- 非常推薦* (包含了Java編程的Tips,適合當(dāng)做手冊來查閱)
《O’reilly-Java IO》- 推薦* (包含Java IO編程的各個(gè)方面)
《O’reilly-Database Programming with JDBC》- 推薦* (JDBC編程)
《O’reilly-Java Programming with Oracle JDBC》- 參考*
三、Java Web編程
《O’reilly-Java Server Pages》- 強(qiáng)烈推薦*
《O’reilly-Java Servlet Programming》- 非常推薦*
《O’reilly-Jakarta Struts》- 推薦* (Java Web編程的一個(gè)MVC實(shí)現(xiàn)框架Struts的書)
四、EJB編程
《J2EE應(yīng)用與BEA Weblogic Server》- 強(qiáng)烈推薦
《Mastering EJB 2.0》- 非常推薦*
《Enterprise Java Bean》- 推薦*
五、Java XML編程
《O’reilly-Java and XML》- 推薦*
《O’reilly-Java and SOAP》- 參考* (Java的SOAP編程)
六、設(shè)計(jì)模式
《Core J2EE Patterns》- 強(qiáng)烈推薦* (J2EE設(shè)計(jì)模式,設(shè)計(jì)企業(yè)應(yīng)用軟件必備參考書)
《EJB Design Patterns》- 推薦*
頁面功能 【加入收藏】 【推薦給朋友】 【字體:大 中 小】 【關(guān)閉】
java編程規(guī)范-
作者:佚名 來自:未知
命名規(guī)范
定義這個(gè)規(guī)范的目的是讓項(xiàng)目中所有的文檔都看起來像一個(gè)人寫的,增加可讀性,減少項(xiàng)目組中因?yàn)閾Q人而帶來的損失。(這些規(guī)范并不是一定要絕對遵守,但是一定要讓程序有良好的可讀性)
Package 的命名
Package 的名字應(yīng)該都是由一個(gè)小寫單詞組成。
Class 的命名
Class 的名字必須由大寫字母開頭而其他字母都小寫的單詞組成
Class 變量的命名
變量的名字必須用一個(gè)小寫字母開頭。后面的單詞用大寫字母開頭。
Static Final 變量的命名
Static Final 變量的名字應(yīng)該都大寫,并且指出完整含義。
參數(shù)的命名
參數(shù)的名字必須和變量的命名規(guī)范一致。
數(shù)組的命名
數(shù)組應(yīng)該總是用下面的方式來命名:
byte[] buffer;
而不是:
byte buffer[];
方法的參數(shù)
使用有意義的參數(shù)命名,如果可能的話,使用和要賦值的字段一樣的名字:
SetCounter(int size){
this.size = size;
}
Java 文件樣式
所有的 Java(*.java) 文件都必須遵守如下的樣式規(guī)則
版權(quán)信息
版權(quán)信息必須在 java 文件的開頭,比如:
/**
* Copyright ? 2000 Shanghai XXX Co. Ltd.
* All right reserved.
*/
其他不需要出現(xiàn)在 javadoc 的信息也可以包含在這里。
Package/Imports
package 行要在 import 行之前,import 中標(biāo)準(zhǔn)的包名要在本地的包名之前,而且按照字母順序排列。如果 import 行中包含了同一個(gè)包中的不同子目錄,則應(yīng)該用 * 來處理。
package hotlava.net.stats;
import java.io.*;
import java.util.Observable;
import hotlava.util.Application;
這里 java.io.* 使用來代替InputStream and OutputStream 的。
Class
接下來的是類的注釋,一般是用來解釋類的。
/**
* A class representing a set of packet and byte counters
* It is observable to allow it to be watched, but only
* reports changes when the current set is complete
*/
接下來是類定義,包含了在不同的行的 extends 和 implements
public class CounterSet
extends Observable
implements Cloneable
Class Fields
接下來是類的成員變量:
/**
* Packet counters
*/
protected int[] packets;
public 的成員變量必須生成文檔(JavaDoc)。Proceted、private和 package 定義的成員變量如果名字含義明確的話,可以沒有注釋。
存取方法
接下來是類變量的存取的方法。它只是簡單的用來將類的變量賦值獲取值的話,可以簡單的寫在一行上。
/**
* Get the counters
* @return an array containing the statistical data. This array has been
* freshly allocated and can be modified by the caller.
*/
public int[] getPackets() { return copyArray(packets, offset); }
public int[] getBytes() { return copyArray(bytes, offset); }
public int[] getPackets() { return packets; }
public void setPackets(int[] packets) { this.packets = packets; }
其它的方法不要寫在一行上
構(gòu)造函數(shù)
接下來是構(gòu)造函數(shù),它應(yīng)該用遞增的方式寫(比如:參數(shù)多的寫在后面)。
訪問類型 ('public', 'private' 等.) 和 任何 'static', 'final' 或 'synchronized' 應(yīng)該在一行中,并且方法和參數(shù)另寫一行,這樣可以使方法和參數(shù)更易讀。
public
CounterSet(int size){
this.size = size;
}
克隆方法
如果這個(gè)類是可以被克隆的,那么下一步就是 clone 方法:
public
Object clone() {
try {
CounterSet obj = (CounterSet)super.clone();
obj.packets = (int[])packets.clone();
obj.size = size;
return obj;
}catch(CloneNotSupportedException e) {
throw new InternalError('Unexpected CloneNotSUpportedException: ' + e.getMessage());
}
}
類方法
下面開始寫類的方法:
/**
* Set the packet counters
* (such as when restoring from a database)
*/
protected final
void setArray(int[] r1, int[] r2, int[] r3, int[] r4)
throws IllegalArgumentException
{
//
// Ensure the arrays are of equal size
//
if (r1.length != r2.length || r1.length != r3.length || r1.length != r4.length)
throw new IllegalArgumentException('Arrays must be of the same size');
System.arraycopy(r1, 0, r3, 0, r1.length);
System.arraycopy(r2, 0, r4, 0, r1.length);
}
toString 方法
無論如何,每一個(gè)類都應(yīng)該定義 toString 方法:
public
String toString() {
String retval = 'CounterSet: ';
for (int I = 0; I data.length(); i++) {
retval += data.bytes.toString();
retval += data.packets.toString();
}
return retval;
}
}
main 方法
如果main(String[]) 方法已經(jīng)定義了, 那么它應(yīng)該寫在類的底部.
代碼編寫格式
代碼樣式
代碼應(yīng)該用 unix 的格式,而不是 windows 的(比如:回車變成回車+換行)
文檔化
必須用 javadoc 來為類生成文檔。不僅因?yàn)樗菢?biāo)準(zhǔn),這也是被各種 java 編譯器都認(rèn)可的方法。使用 @author 標(biāo)記是不被推薦的,因?yàn)榇a不應(yīng)該是被個(gè)人擁有的。
縮進(jìn)
縮進(jìn)應(yīng)該是每行2個(gè)空格. 不要在源文件中保存Tab字符. 在使用不同的源代碼管理工具時(shí)Tab字符將因?yàn)橛脩粼O(shè)置的不同而擴(kuò)展為不同的寬度.
如果你使用 UltrEdit 作為你的 Java 源代碼編輯器的話,你可以通過如下操作來禁止保存Tab字符, 方法是通過 UltrEdit中先設(shè)定 Tab 使用的長度室2個(gè)空格,然后用 Format|Tabs to Spaces 菜單將 Tab 轉(zhuǎn)換為空格。
頁寬
頁寬應(yīng)該設(shè)置為80字符. 源代碼一般不會超過這個(gè)寬度, 并導(dǎo)致無法完整顯示, 但這一設(shè)置也可以靈活調(diào)整. 在任何情況下, 超長的語句應(yīng)該在一個(gè)逗號或者一個(gè)操作符后折行. 一條語句折行后, 應(yīng)該比原來的語句再縮進(jìn)2個(gè)字符.
{} 對
{} 中的語句應(yīng)該單獨(dú)作為一行. 例如, 下面的第1行是錯(cuò)誤的, 第2行是正確的:
if (i0) { I ++ }; // 錯(cuò)誤, { 和 } 在同一行
if (i0) {
I ++
}; // 正確, { 單獨(dú)作為一行
} 語句永遠(yuǎn)單獨(dú)作為一行.
如果 } 語句應(yīng)該縮進(jìn)到與其相對應(yīng)的 { 那一行相對齊的位置。
括號
左括號和后一個(gè)字符之間不應(yīng)該出現(xiàn)空格, 同樣, 右括號和前一個(gè)字符之間也不應(yīng)該出現(xiàn)空格. 下面的例子說明括號和空格的錯(cuò)誤及正確使用:
CallProc( Aparameter ); // 錯(cuò)誤
CallProc(Aparameter); // 正確
不要在語句中使用無意義的括號. 括號只應(yīng)該為達(dá)到某種目的而出現(xiàn)在源代碼中。下面的例子說明錯(cuò)誤和正確的用法:
if ((I) = 42) { // 錯(cuò)誤 - 括號毫無意義
if (I == 42) or (J == 42) then // 正確 - 的確需要括號
程序編寫規(guī)范
exit()
exit 除了在 main 中可以被調(diào)用外,其他的地方不應(yīng)該調(diào)用。因?yàn)檫@樣做不給任何代碼代碼機(jī)會來截獲退出。一個(gè)類似后臺服務(wù)地程序不應(yīng)該因?yàn)槟骋粋€(gè)庫模塊決定了要退出就退出。
異常
申明的錯(cuò)誤應(yīng)該拋出一個(gè)RuntimeException或者派生的異常。
頂層的main()函數(shù)應(yīng)該截獲所有的異常,并且打印(或者記錄在日志中)在屏幕上。
垃圾收集
JAVA使用成熟的后臺垃圾收集技術(shù)來代替引用計(jì)數(shù)。但是這樣會導(dǎo)致一個(gè)問題:你必須在使用完對象的實(shí)例以后進(jìn)行清場工作。比如一個(gè)prel的程序員可能這么寫:
…
{
FileOutputStream fos = new FileOutputStream(projectFile);
project.save(fos, 'IDE Project File');
}
…
除非輸出流一出作用域就關(guān)閉,非引用計(jì)數(shù)的程序語言,比如JAVA,是不能自動完成變量的清場工作的。必須象下面一樣寫:
FileOutputStream fos = new FileOutputStream(projectFile);
project.save(fos, 'IDE Project File');
fos.close();
Clone
下面是一種有用的方法:
implements Cloneable
public
Object clone()
{
try {
ThisClass obj = (ThisClass)super.clone();
obj.field1 = (int[])field1.clone();
obj.field2 = field2;
return obj;
} catch(CloneNotSupportedException e) {
throw new InternalError('Unexpected CloneNotSUpportedException: ' + e.getMessage());
}
}
final 類
絕對不要因?yàn)樾阅艿脑驅(qū)㈩惗x為 final 的(除非程序的框架要求)
如果一個(gè)類還沒有準(zhǔn)備好被繼承,最好在類文檔中注明,而不要將她定義為 final 的。這是因?yàn)闆]有人可以保證會不會由于什么原因需要繼承她。
訪問類的成員變量
大部分的類成員變量應(yīng)該定義為 protected 的來防止繼承類使用他們。
注意,要用'int[] packets',而不是'int packets[]',后一種永遠(yuǎn)也不要用。
public void setPackets(int[] packets) { this.packets = packets; }
CounterSet(int size)
{
this.size = size;
}
編程技巧
byte 數(shù)組轉(zhuǎn)換到 characters
為了將 byte 數(shù)組轉(zhuǎn)換到 characters,你可以這么做:
'Hello world!'.getBytes();
Utility 類
Utility 類(僅僅提供方法的類)應(yīng)該被申明為抽象的來防止被繼承或被初始化。
初始化
下面的代碼是一種很好的初始化數(shù)組的方法:
objectArguments = new Object[] { arguments };
枚舉類型
JAVA 對枚舉的支持不好,但是下面的代碼是一種很有用的模板:
class Colour {
public static final Colour BLACK = new Colour(0, 0, 0);
public static final Colour RED = new Colour(0xFF, 0, 0);
public static final Colour GREEN = new Colour(0, 0xFF, 0);
public static final Colour BLUE = new Colour(0, 0, 0xFF);
public static final Colour WHITE = new Colour(0xFF, 0xFF, 0xFF);
}
這種技術(shù)實(shí)現(xiàn)了RED, GREEN, BLUE 等可以象其他語言的枚舉類型一樣使用的常量。 他們可以用 == 操作符來比較。
但是這樣使用有一個(gè)缺陷:如果一個(gè)用戶用這樣的方法來創(chuàng)建顏色 BLACK
new Colour(0,0,0)
那么這就是另外一個(gè)對象,==操作符就會產(chǎn)生錯(cuò)誤。她的 equal() 方法仍然有效。由于這個(gè)原因,這個(gè)技術(shù)的缺陷最好注明在文檔中,或者只在自己的包中使用。
Swing
避免使用 AWT 組件
混合使用 AWT 和 Swing 組件
如果要將 AWT 組件和 Swing 組件混合起來使用的話,請小心使用。實(shí)際上,盡量不要將他們混合起來使用。
滾動的 AWT 組件
AWT 組件絕對不要用 JscrollPane 類來實(shí)現(xiàn)滾動。滾動 AWT 組件的時(shí)候一定要用 AWT ScrollPane 組件來實(shí)現(xiàn)。
避免在 InternalFrame 組件中使用 AWT 組件
盡量不要這么做,要不然會出現(xiàn)不可預(yù)料的后果。
Z-Order 問題
AWT 組件總是顯示在 Swing 組件之上。當(dāng)使用包含 AWT 組件的 POP-UP 菜單的時(shí)候要小心,盡量不要這樣使用。
調(diào)試
調(diào)試在軟件開發(fā)中是一個(gè)很重要的部分,存在軟件生命周期的各個(gè)部分中。調(diào)試能夠用配置開、關(guān)是最基本的。
很常用的一種調(diào)試方法就是用一個(gè) PrintStream 類成員,在沒有定義調(diào)試流的時(shí)候就為 null,類要定義一個(gè) debug 方法來設(shè)置調(diào)試用的流。
性能
在寫代碼的時(shí)候,從頭至尾都應(yīng)該考慮性能問題。這不是說時(shí)間都應(yīng)該浪費(fèi)在優(yōu)化代碼上,而是我們時(shí)刻應(yīng)該提醒自己要注意代碼的效率。比如:如果沒有時(shí)間來實(shí)現(xiàn)一個(gè)高效的算法,那么我們應(yīng)該在文檔中記錄下來,以便在以后有空的時(shí)候再來實(shí)現(xiàn)她。
不是所有的人都同意在寫代碼的時(shí)候應(yīng)該優(yōu)化性能這個(gè)觀點(diǎn)的,他們認(rèn)為性能優(yōu)化的問題應(yīng)該在項(xiàng)目的后期再去考慮,也就是在程序的輪廓已經(jīng)實(shí)現(xiàn)了以后。
不必要的對象構(gòu)造
不要在循環(huán)中構(gòu)造和釋放對象
for (Employee e : staff)
是java的一種新的增強(qiáng)型循環(huán) staff是一個(gè)Employee類型的集合
這句話的意思是,以e為循環(huán)變量,從頭開始取出staff中的Employee對象賦給e,直到staff結(jié)尾。
所以下面這句就是把staff中的所有Employee提升工資5。
for (Employee e : staff)
e.raiseSalary(5);
public Employee(String n, double s, int year, int month, int day)
{
name = n;
salary = s
這是Employee的構(gòu)造函數(shù),把參數(shù)n和s賦給類的成員變量name,salary。
public?static?void?main(String[]?args)?{
while(true)?{
//填寫你的邏輯
}
}
這樣?因?yàn)閣hile(true)所以會一直運(yùn)行while block里的
當(dāng)前名稱:從頭開始的代碼java 重新開始代碼
文章地址:http://chinadenli.net/article20/hepoco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、定制網(wǎng)站、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)