導航:首頁 > 編程語言 > java編程模式與範例

java編程模式與範例

發布時間:2024-06-01 02:05:04

A. java編程規范!!!

名稱 Java語言編碼規范(Java Code Conventions)
簡介 本文檔講述了Java語言的編碼規范,較之陳世忠先生《c++編碼規范》的浩繁詳盡,此文當屬短小精悍了。而其中所列之各項條款,從編碼風格,到注意事項,不單只Java,對於其他語言,也都很有借鑒意義。因為簡短,所以易記,大家不妨將此作為handbook,常備案頭,逐一對驗。
1 介紹
1.1 為什麼要有編碼規范
1.2 版權聲明
2 文件名
2.1 文件後綴
2.2 常用文件名
3 文件組織
3.1 Java源文件
3.1.1 開頭注釋
3.1.2 包和引入語句
3.1.3 類和介面聲明
4 縮進排版
4.1 行長度
4.2 換行
5 注釋
5.1 實現注釋的格式
5.1.1 塊注釋
5.1.2 單行注釋
5.1.3 尾端注釋
5.1.4 行末注釋
5.2 文擋注釋
6 聲明
6.1 每行聲明變數的數量
6.2 初始化
6.3 布局
6.4 類和介面的聲明
7 語句
7.1 簡單語句
7.2 復合語句
7.3 返回語句
7.4 if,if-else,if else-if else語句
7.5 for語句
7.6 while語句
7.7 do-while語句
7.8 switch語句
7.9 try-catch語句
8 空白
8.1 空行
8.2 空格
9 命名規范
10 編程慣例
10.1 提供對實例以及類變數的訪問控制
10.2 引用類變數和類方法
10.3 常量
10.4 變數賦值
10.5 其它慣例
10.5.1 圓括弧
10.5.2 返回值
10.5.3 條件運算符"?"前的表達式"?"前的表達式
10.5.4 特殊注釋
11 代碼範例
11.1 Java源文件範例

1 介紹(Introction)

1.1 為什麼要有編碼規范(Why Have Code Conventions)

編碼規范對於程序員而言尤為重要,有以下幾個原因:

- 一個軟體的生命周期中,80%的花費在於維護
- 幾乎沒有任何一個軟體,在其整個生命周期中,均由最初的開發人員來維護
- 編碼規范可以改善軟體的可讀性,可以讓程序員盡快而徹底地理解新的代碼
- 如果你將源碼作為產品發布,就需要確任它是否被很好的打包並且清晰無誤,一如你已構建的其它任何產品

為了執行規范,每個軟體開發人員必須一致遵守編碼規范。每個人。

1.2 版權聲明(Acknowledgments)

本文檔反映的是Sun MicroSystems公司,Java語言規范中的編碼標准部分。主要貢獻者包括:Peter King,Patrick Naughton,Mike DeMoney,Jonni Kanerva,Kathy Walrath以及Scott Hommel。

本文檔現由Scott Hommel維護,有關評論意見請發至[email protected]

2 文件名(File Names)

這部分列出了常用的文件名及其後綴。

2.1 文件後綴(File Suffixes)

Java程序使用下列文件後綴:

文件類別 文件後綴
Java源文件 .java
Java位元組碼文件 .class

2.2 常用文件名(Common File Names)

常用的文件名包括:

文件名 用途
GNUmakefile makefiles的首選文件名。我們採用gnumake來創建(build)軟體。
README 概述特定目錄下所含內容的文件的首選文件名

3 文件組織(File Organization)

一個文件由被空行分割而成的段落以及標識每個段落的可選注釋共同組成。超過2000行的程序難以閱讀,應該盡量避免。"Java源文件範例"提供了一個布局合理的Java程序範例。

3.1 Java源文件(Java Source Files)

每個Java源文件都包含一個單一的公共類或介面。若私有類和介面與一個公共類相關聯,可以將它們和公共類放入同一個源文件。公共類必須是這個文件中的第一個類或介面。

Java源文件還遵循以下規則:

- 開頭注釋(參見"開頭注釋")
- 包和引入語句(參見"包和引入語句")
- 類和介面聲明(參見"類和介面聲明")

3.1.1 開頭注釋(Beginning Comments)

所有的源文件都應該在開頭有一個C語言風格的注釋,其中列出類名、版本信息、日期和版權聲明:

/*
* Classname
*
* Version information
*
* Date
*
* Copyright notice
*/

3.1.2 包和引入語句(Package and Import Statements)

在多數Java源文件中,第一個非注釋行是包語句。在它之後可以跟引入語句。例如:

package java.awt;

import java.awt.peer.CanvasPeer;

3.1.3 類和介面聲明(Class and Interface Declarations)

下表描述了類和介面聲明的各個部分以及它們出現的先後次序。參見"Java源文件範例"中一個包含注釋的例子。

類/介面聲明的各部分 註解
1 類/介面文檔注釋(/**……*/) 該注釋中所需包含的信息,參見"文檔注釋"
2 類或介面的聲明
3 類/介面實現的注釋(/*……*/)如果有必要的話 該注釋應包含任何有關整個類或介面的信息,而這些信息又不適合作為類/介面文檔注釋。
4 類的(靜態)變數 首先是類的公共變數,隨後是保護變數,再後是包一級別的變數(沒有訪問修飾符,access modifier),最後是私有變數。
5 實例變數 首先是公共級別的,隨後是保護級別的,再後是包一級別的(沒有訪問修飾符),最後是私有級別的。
6 構造器
7 方法 這些方法應該按功能,而非作用域或訪問許可權,分組。例如,一個私有的類方法可以置於兩個公有的實例方法之間。其目的是為了更便於閱讀和理解代碼。

4 縮進排版(Indentation)

4個空格常被作為縮進排版的一個單位。縮進的確切解釋並未詳細指定(空格 vs. 製表符)。一個製表符等於8個空格(而非4個)。

4.1 行長度(Line Length)

盡量避免一行的長度超過80個字元,因為很多終端和工具不能很好處理之。

注意:用於文檔中的例子應該使用更短的行長,長度一般不超過70個字元。

4.2 換行(Wrapping Lines)

當一個表達式無法容納在一行內時,可以依據如下一般規則斷開之:

- 在一個逗號後面斷開
- 在一個操作符前面斷開
- 寧可選擇較高級別(higher-level)的斷開,而非較低級別(lower-level)的斷開
- 新的一行應該與上一行同一級別表達式的開頭處對齊
- 如果以上規則導致你的代碼混亂或者使你的代碼都堆擠在右邊,那就代之以縮進8個空格。

以下是斷開方法調用的一些例子:

someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);

var = someMethod1(longExpression1,
someMethod2(longExpression2,
longExpression3));

以下是兩個斷開算術表達式的例子。前者更好,因為斷開處位於括弧表達式的外邊,這是個較高級別的斷開。

longName1 = longName2 * (longName3 + longName4 - longName5)
+ 4 * longname6; //PREFFER

longName1 = longName2 * (longName3 + longName4
- longName5) + 4 * longname6; //AVOID

以下是兩個縮進方法聲明的例子。前者是常規情形。後者若使用常規的縮進方式將會使第二行和第三行移得很靠右,所以代之以縮進8個空格

//CONVENTIONAL INDENTATION
someMethod(int anArg, Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}

//INDENT 8 SPACES TO AVOID VERY DEEP INDENTS
private static synchronized horkingLongMethodName(int anArg,
Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}

if語句的換行通常使用8個空格的規則,因為常規縮進(4個空格)會使語句體看起來比較費勁。比如:

//DON』T USE THIS INDENTATION
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) { //BAD WRAPS
doSomethingAboutIt(); //MAKE THIS LINE EASY TO MISS
}

//USE THIS INDENTATION INSTEAD
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}

//OR USE THIS
if ((condition1 && condition2) || (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}

這里有三種可行的方法用於處理三元運算表達式:

alpha = (aLongBooleanExpression) ? beta : gamma;

alpha = (aLongBooleanExpression) ? beta
: gamma;

alpha = (aLongBooleanExpression)
? beta
: gamma;

5 注釋(Comments)

Java程序有兩類注釋:實現注釋(implementation comments)和文檔注釋(document comments)。實現注釋是那些在C++中見過的,使用/*...*/和//界定的注釋。文檔注釋(被稱為"doc comments")是Java獨有的,並由/**...*/界定。文檔注釋可以通過javadoc工具轉換成HTML文件。

實現注釋用以注釋代碼或者實現細節。文檔注釋從實現自由(implementation-free)的角度描述代碼的規范。它可以被那些手頭沒有源碼的開發人員讀懂。

注釋應被用來給出代碼的總括,並提供代碼自身沒有提供的附加信息。注釋應該僅包含與閱讀和理解程序有關的信息。例如,相應的包如何被建立或位於哪個目錄下之類的信息不應包括在注釋中。

在注釋里,對設計決策中重要的或者不是顯而易見的地方進行說明是可以的,但應避免提供代碼中己清晰表達出來的重復信息。多餘的的注釋很容易過時。通常應避免那些代碼更新就可能過時的注釋。

注意:頻繁的注釋有時反映出代碼的低質量。當你覺得被迫要加註釋的時候,考慮一下重寫代碼使其更清晰。

注釋不應寫在用星號或其他字元畫出來的大框里。注釋不應包括諸如製表符和回退符之類的特殊字元。

5.1 實現注釋的格式(Implementation Comment Formats)

程序可以有4種實現注釋的風格:塊(block)、單行(single-line)、尾端(trailing)和行末(end-of-line)。

5.1.1 塊注釋(Block Comments)

塊注釋通常用於提供對文件,方法,數據結構和演算法的描述。塊注釋被置於每個文件的開始處以及每個方法之前。它們也可以被用於其他地方,比如方法內部。在功能和方法內部的塊注釋應該和它們所描述的代碼具有一樣的縮進格式。

塊注釋之首應該有一個空行,用於把塊注釋和代碼分割開來,比如:

/*
* Here is a block comment.
*/

塊注釋可以以/*-開頭,這樣indent(1)就可以將之識別為一個代碼塊的開始,而不會重排它。

/*-
* Here is a block comment with some very special
* formatting that I want indent(1) to ignore.
*
* one
* two
* three
*/

注意:如果你不使用indent(1),就不必在代碼中使用/*-,或為他人可能對你的代碼運行indent(1)作讓步。

參見"文檔注釋"

5.1.2 單行注釋(Single-Line Comments)

短注釋可以顯示在一行內,並與其後的代碼具有一樣的縮進層級。如果一個注釋不能在一行內寫完,就該採用塊注釋(參見"塊注釋")。單行注釋之前應該有一個空行。以下是一個Java代碼中單行注釋的例子:

if (condition) {

/* Handle the condition. */
...
}

5.1.3 尾端注釋(Trailing Comments)

極短的注釋可以與它們所要描述的代碼位於同一行,但是應該有足夠的空白來分開代碼和注釋。若有多個短注釋出現於大段代碼中,它們應該具有相同的縮進。

以下是一個Java代碼中尾端注釋的例子:

if (a == 2) {
return TRUE; /* special case */
} else {
return isPrime(a); /* works only for odd a */
}

5.1.4 行末注釋(End-Of-Line Comments)

注釋界定符"//",可以注釋掉整行或者一行中的一部分。它一般不用於連續多行的注釋文本;然而,它可以用來注釋掉連續多行的代碼段。以下是所有三種風格的例子:

if (foo > 1) {

// Do a double-flip.
...
}
else {
return false; // Explain why here.
}

//if (bar > 1) {
//
// // Do a triple-flip.
// ...
//}
//else {
// return false;
//}

5.2 文檔注釋(Documentation Comments)

注意:此處描述的注釋格式之範例,參見"Java源文件範例"

若想了解更多,參見"How to Write Doc Comments for Javadoc",其中包含了有關文檔注釋標記的信息(@return, @param, @see):

http://java.sun.com/javadoc/writingdoccomments/index.html

若想了解更多有關文檔注釋和javadoc的詳細資料,參見javadoc的主頁:

http://java.sun.com/javadoc/index.html

文檔注釋描述Java的類、介面、構造器,方法,以及欄位(field)。每個文檔注釋都會被置於注釋定界符/**...*/之中,一個注釋對應一個類、介面或成員。該注釋應位於聲明之前:

/**
* The Example class provides ...
*/
public class Example { ...

注意頂層(top-level)的類和介面是不縮進的,而其成員是縮進的。描述類和介面的文檔注釋的第一行(/**)不需縮進;隨後的文檔注釋每行都縮進1格(使星號縱向對齊)。成員,包括構造函數在內,其文檔注釋的第一行縮進4格,隨後每行都縮進5格。

若你想給出有關類、介面、變數或方法的信息,而這些信息又不適合寫在文檔中,則可使用實現塊注釋(見5.1.1)或緊跟在聲明後面的單行注釋(見5.1.2)。例如,有關一個類實現的細節,應放入緊跟在類聲明後面的實現塊注釋中,而不是放在文檔注釋中。

文檔注釋不能放在一個方法或構造器的定義塊中,因為Java會將位於文檔注釋之後的第一個聲明與其相關聯。

6 聲明(Declarations)

6.1 每行聲明變數的數量(Number Per Line)

推薦一行一個聲明,因為這樣以利於寫注釋。亦即,

int level; // indentation level
int size; // size of table

要優於,

int level, size;

不要將不同類型變數的聲明放在同一行,例如:

int foo, fooarray[]; //WRONG!

注意:上面的例子中,在類型和標識符之間放了一個空格,另一種被允許的替代方式是使用製表符:

int level; // indentation level
int size; // size of table
Object currentEntry; // currently selected table entry

6.2 初始化(Initialization)

盡量在聲明局部變數的同時初始化。唯一不這么做的理由是變數的初始值依賴於某些先前發生的計算。

6.3 布局(Placement)

只在代碼塊的開始處聲明變數。(一個塊是指任何被包含在大括弧"{"和"}"中間的代碼。)不要在首次用到該變數時才聲明之。這會把注意力不集中的程序員搞糊塗,同時會妨礙代碼在該作用域內的可移植性。

void myMethod() {
int int1 = 0; // beginning of method block

if (condition) {
int int2 = 0; // beginning of "if" block
...
}
}

該規則的一個例外是for循環的索引變數

for (int i = 0; i < maxLoops; i++) { ... }

避免聲明的局部變數覆蓋上一級聲明的變數。例如,不要在內部代碼塊中聲明相同的變數名:

int count;
...
myMethod() {
if (condition) {
int count = 0; // AVOID!
...
}
...
}

6.4 類和介面的聲明(Class and Interface Declarations)

當編寫類和介面是,應該遵守以下格式規則:

- 在方法名與其參數列表之前的左括弧"("間不要有空格
- 左大括弧"{"位於聲明語句同行的末尾
- 右大括弧"}"另起一行,與相應的聲明語句對齊,除非是一個空語句,"}"應緊跟在"{"之後

class Sample extends Object {
int ivar1;
int ivar2;

Sample(int i, int j) {
ivar1 = i;
ivar2 = j;
}

int emptyMethod() {}

...
}

- 方法與方法之間以空行分隔

7 語句(Statements)

7.1 簡單語句(Simple Statements)

每行至多包含一條語句,例如:

argv++; // Correct
argc--; // Correct
argv++; argc--; // AVOID!

7.2 復合語句(Compound Statements)

復合語句是包含在大括弧中的語句序列,形如"{ 語句 }"。例如下面各段。

- 被括其中的語句應該較之復合語句縮進一個層次
- 左大括弧"{"應位於復合語句起始行的行尾;右大括弧"}"應另起一行並與復合語句首行對齊。
- 大括弧可以被用於所有語句,包括單個語句,只要這些語句是諸如if-else或for控制結構的一部分。這樣便於添加語句而無需擔心由於忘了加括弧而引入bug。

7.3 返回語句(return Statements)

一個帶返回值的return語句不使用小括弧"()",除非它們以某種方式使返回值更為顯見。例如:

return;

return myDisk.size();

return (size ? size : defaultSize);

7.4 if,if-else,if else-if else語句(if, if-else, if else-if else Statements)

if-else語句應該具有如下格式:

if (condition) {
statements;
}

if (condition) {
statements;
} else {
statements;
}

if (condition) {
statements;
} else if (condition) {
statements;
} else{
statements;
}

注意:if語句總是用"{"和"}"括起來,避免使用如下容易引起錯誤的格式:

if (condition) //AVOID! THIS OMITS THE BRACES {}!
statement;

7.5 for語句(for Statements)

一個for語句應該具有如下格式:

for (initialization; condition; update) {
statements;
}

一個空的for語句(所有工作都在初始化,條件判斷,更新子句中完成)應該具有如下格式:

for (initialization; condition; update);

當在for語句的初始化或更新子句中使用逗號時,避免因使用三個以上變數,而導致復雜度提高。若需要,可以在for循環之前(為初始化子句)或for循環末尾(為更新子句)使用單獨的語句。

7.6 while語句(while Statements)

一個while語句應該具有如下格式

while (condition) {
statements;
}

一個空的while語句應該具有如下格式:

while (condition);

7.7 do-while語句(do-while Statements)

一個do-while語句應該具有如下格式:

do {
statements;
} while (condition);

7.8 switch語句(switch Statements)

一個switch語句應該具有如下格式:

switch (condition) {
case ABC:
statements;
/* falls through */
case DEF:
statements;
break;

case XYZ:
statements;
break;

default:
statements;
break;
}

每當一個case順著往下執行時(因為沒有break語句),通常應在break語句的位置添加註釋。上面的示例代碼中就包含注釋/* falls through */。

7.9 try-catch語句(try-catch Statements)

一個try-catch語句應該具有如下格式:

try {
statements;
} catch (ExceptionClass e) {
statements;
}

一個try-catch語句後面也可能跟著一個finally語句,不論try代碼塊是否順利執行完,它都會被執行。

try {
statements;
} catch (ExceptionClass e) {
statements;
} finally {
statements;
}

8 空白(White Space)

8.1 空行(Blank Lines)

空行將邏輯相關的代碼段分隔開,以提高可讀性。

下列情況應該總是使用兩個空行:

- 一個源文件的兩個片段(section)之間
- 類聲明和介面聲明之間

下列情況應該總是使用一個空行:

- 兩個方法之間
- 方法內的局部變數和方法的第一條語句之間
- 塊注釋(參見"5.1.1")或單行注釋(參見"5.1.2")之前
- 一個方法內的兩個邏輯段之間,用以提高可讀性

8.2 空格(Blank Spaces)

下列情況應該使用空格:

- 一個緊跟著括弧的關鍵字應該被空格分開,例如:

while (true) {
...
}

注意:空格不應該置於方法名與其左括弧之間。這將有助於區分關鍵字和方法調用。
- 空白應該位於參數列表中逗號的後面
- 所有的二元運算符,除了".",應該使用空格將之與操作數分開。一元操作符和操作數之間不因該加空格,比如:負號("-")、自增("++")和自減("--")。例如:
a += c + d;
a = (a + b) / (c * d);

while (d++ = s++) {
n++;
}
printSize("size is " + foo + "\n");

- for語句中的表達式應該被空格分開,例如:
for (expr1; expr2; expr3)

- 強制轉型後應該跟一個空格,例如:
myMethod((byte) aNum, (Object) x);
myMethod((int) (cp + 5), ((int) (i + 3)) + 1);

9 命名規范(Naming Conventions)

命名規范使程序更易讀,從而更易於理解。它們也可以提供一些有關標識符功能的信息,以助於理解代碼,例如,不論它是一個常量,包,還是類。

標識符類型 命名規則 例子
包(Packages) 一個唯一包名的前綴總是全部小寫的ASCII字母並且是一個頂級域名,通常是com,e,gov,mil,net,org,或1981年ISO 3166標准所指定的標識國家的英文雙字元代碼。包名的後續部分根據不同機構各自內部的命名規范而不盡相同。這類命名規范可能以特定目錄名的組成來區分部門(department),項目(project),機器(machine),或注冊名(login names)。 com.sun.eng
com.apple.quicktime.v2
e.cmu.cs.bovik.cheese
類(Classes) 命名規則:類名是個一名詞,採用大小寫混合的方式,每個單詞的首字母大寫。盡量使你的類名簡潔而富於描述。使用完整單詞,避免縮寫詞(除非該縮寫詞被更廣泛使用,像URL,HTML) class Raster;
class ImageSprite;
介面(Interfaces) 命名規則:大小寫規則與類名相似 interface RasterDelegate;
interface Storing;
方法(Methods) 方法名是一個動詞,採用大小寫混合的方式,第一個單詞的首字母小寫,其後單詞的首字母大寫。 run();
runFast();
getBackground();
變數(Variables) 除了變數名外,所有實例,包括類,類常量,均採用大小寫混合的方式,第一個單詞的首字母小寫,其後單詞的首字母大寫。變數名不應以下劃線或美元符號開頭,盡管這在語法上是允許的。
變數名應簡短且富於描述。變數名的選用應該易於記憶,即,能夠指出其用途。盡量避免單個字元的變數名,除非是一次性的臨時變數。臨時變數通常被取名為i,j,k,m和n,它們一般用於整型;c,d,e,它們一般用於字元型。 char c;
int i;
float myWidth;
實例變數(Instance Variables) 大小寫規則和變數名相似,除了前面需要一個下劃線 int _employeeId;
String _name;
Customer _customer;
常量(Constants) 類常量和ANSI常量的聲明,應該全部大寫,單詞間用下劃線隔開。(盡量避免ANSI常量,容易引起錯誤) static final int MIN_WIDTH = 4;
static final int MAX_WIDTH = 999;
static final int GET_THE_CPU = 1;

10 編程慣例(Programming Practices)

10.1 提供對實例以及類變數的訪問控制(Providing Access to Instance and Class Variables)

若沒有足夠理由,不要把實例或類變數聲明為公有。通常,實例變數無需顯式的設置(set)和獲取(gotten),通常這作為方法調用的邊緣效應 (side effect)而產生。

一個具有公有實例變數的恰當例子,是類僅作為數據結構,沒有行為。亦即,若你要使用一個結構(struct)而非一個類(如果java支持結構的話),那麼把類的實例變數聲明為公有是合適的。

B. java鐨勫嶮縐嶈捐℃ā寮忥紵

鍦╦ava鍩硅鐨勮繃紼嬩腑錛屾垜浠闇瑕佷簡瑙e埌鍏充簬java鐨勮捐℃ā寮忥紝涓嬮潰鏄鏄屽鉤java鍩硅浠嬬粛鐨勫叧浜巎ava璁捐℃ā寮忕殑鐩稿叧浠嬬粛銆



1銆佹ˉ姊佹ā寮(Bridge)錛氬皢鎶借薄閮ㄥ垎涓庡畠鐨勫疄鐜伴儴鍒嗗垎紱伙紝浣垮畠浠閮藉彲浠ョ嫭絝嬪湴鍙樺寲銆


2銆佸悎鎴愭ā寮(Composite)錛氬皢瀵硅薄緇勫悎鎴愭爲褰㈢粨鏋勪互琛ㄧず"閮ㄥ垎-鏁翠綋"鐨勫眰嬈$粨鏋勩傚畠浣垮緱瀹㈡埛瀵瑰崟涓瀵硅薄鍜屽嶅悎瀵硅薄鐨勪嬌鐢ㄥ叿鏈変竴鑷存с


3銆佹娊璞″伐鍘傛ā寮(AbstractFactory)錛氭彁渚涗竴涓鍒涘緩涓緋誨垪鐩稿叧鎴栫浉浜掍緷璧栧硅薄鐨勬帴鍙o紝鑰屾棤闇鎸囧畾瀹冧滑鍏蜂綋鐨勭被銆


4銆佽呴グ妯″紡(Decorator)錛氬姩鎬佸湴緇欎竴涓瀵硅薄娣誨姞涓浜涢濆栫殑鑱岃矗銆傚氨鎵╁睍鍔熻兘鑰岃█錛屽畠鑳界敓鎴愬瓙綾葷殑鏂瑰紡鏇翠負鐏墊椿銆


5銆侀傞厤鍣ㄦā寮(Adapter)錛氬皢涓涓綾葷殑鎺ュ彛杞鎹㈡垚瀹㈡埛甯屾湜鐨勫彟澶栦竴涓鎺ュ彛銆傞傞厤鍣ㄦā寮忎嬌寰楀師鏈鐢變簬鎺ュ彛鎴栫被涓嶅吋瀹硅屼笉鑳戒竴璧峰伐浣滅殑綾誨彲浠ヤ竴璧峰伐浣溿


6銆佽矗浠婚摼妯″紡(ChainofResponsibility)錛氫負瑙i櫎璇鋒眰鐨勫彂閫佽呭拰鎺ユ敹鑰呬箣闂磋﹀悎錛岃屼嬌澶氫釜瀵硅薄閮芥湁鏈轟細澶勭悊榪欎釜璇鋒眰銆傚皢榪欎簺瀵硅薄榪炴垚涓鏉¢摼錛屽苟娌跨潃榪欐潯閾句紶閫掕ヨ鋒眰錛岀洿鍒版湁涓涓瀵硅薄澶勭悊瀹冦


7銆佸伐鍘傛柟娉(FactoryMethod)錛氬畾涔変竴涓鐢ㄤ簬鍒涘緩瀵硅薄鐨勬帴鍙o紝璁╁瓙綾誨喅瀹氬皢鍝涓涓綾誨疄渚嬪寲銆侳actoryMethod浣誇竴涓綾葷殑瀹炰緥鍖栧歡榪熷埌鍏跺瓙綾匯


8銆佸緩閫犳ā寮(Builder)錛氬皢涓涓澶嶆潅瀵硅薄鐨勬瀯寤轟笌瀹冪殑琛ㄧず鍒嗙伙紝浣垮悓鏍風殑鏋勫緩榪囩▼鍙浠ュ壋寤轟笉鍚岀殑琛ㄧず銆


9銆侀棬闈㈡ā寮(Facade)錛氫負瀛愮郴緇熶腑鐨勪竴緇勬帴鍙f彁渚涗竴涓涓鑷寸殑鐣岄潰錛岄棬闈㈡ā寮忓畾涔変簡涓涓楂樺眰鎺ュ彛錛岃繖涓鎺ュ彛浣垮緱榪欎竴瀛愮郴緇熸洿鍔犲規槗浣跨敤銆


10銆佸懡浠ゆā寮(Command)錛氬皢涓涓璇鋒眰灝佽呬負涓涓瀵硅薄錛屼粠鑰屽彲鐢ㄤ笉鍚岀殑璇鋒眰瀵瑰㈡埛榪涜屽弬鏁板寲;瀵硅鋒眰鎺掗槦鎴栬板綍璇鋒眰鏃ュ織錛屼互鍙婃敮鎸佸彲鍙栨秷鐨勬搷浣溿


C. JAVA23種設計模式

一、大約分為三類:

1、創建型模式(5種):工廠方法模式,抽象工廠模式,單例模式,建造者模式,原型模式。

二、設計模式遵循的原則有6個:

1、開閉原則(Open Close Principle)

對擴展開放,對修改關閉。

2、里氏代換原則(Liskov Substitution Principle)

只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。

3、依賴倒轉原則(Dependence Inversion Principle)

這個是開閉原則的基礎,對介面編程,依賴於抽象而不依賴於具體。

4、介面隔離原則(Interface Segregation Principle)

使用多個隔離的借口來降低耦合度。

5、迪米特法則(最少知道原則)(Demeter Principle)

一個實體應當盡量少的與其他實體之間發生相互作用,使得系統功能模塊相對獨立。

6、合成復用原則(Composite Reuse Principle)

原則是盡量使用合成/聚合的方式,而不是使用繼承。繼承實際上破壞了類的封裝性,超類的方法可能會被子類修改。

D. java支持的編程範式

Java編程範式

1.命令式編程
核心內容就是:「用語句更改程序的狀態」
大多數流行的編程語言都或多或少基於命令式編程發展而來,命令式語言最典型的實例就是C語言

2.面向對象編程
面向對象編程經常與命令式編程聯系在一起,在實踐當中,兩者是可以共存的。Java就是這種協作的生動證明
面向對象基於四個基本原則:封裝、繼承、多態、抽象

3.聲明式編程
與命令式編程相反,聲明式編程它指定程序應該做什麼,而不具體說明怎麼做。
純粹的聲明式語言包括資料庫查詢語言(如SQL和Xpath)以及正則表達式。
與命令式編程語言相比,聲明式編程語言更加抽象,它們並不模擬硬體結構,因此不會改變程序狀態,而是將它們轉換為新狀態,並且更接近數學邏輯
通常,非命令是的編程範式都被認為屬於聲明式類別。

4.函數式編程
函數式編程是聲明式編程的子範式,與命令式編程相反,函數式變成不會改變程序的內部狀態。
在函數式編程術語中,函數類似於數學函數,函數的輸出僅依賴於其參數,而不管程序的狀態如何,完全不受函數式是何時執行的影響
函數式語言受歡迎的原因之一是它們可以輕松的在並行環境中運行,這與多線程不太一樣,函數式語言支持並行的關鍵在於它們的基本原理:函數僅依賴與輸入參數而不依賴於程序的狀態。它們可以在任何地方運行,然後將多個並行執行的結果連接起來並進一步使用

E. java中都有哪些設計模式

大致有23種
都是表示類與類之間的構架關系 也就是表示對象的邏輯關系
設計模式根據使用類型可以分為三種:
1、 創建模式:工廠模式、單子模式、建造者模式、原型模式、工廠方法模式。
2、 結構模式:外觀模式、代理模式、適配器模式、組合模式、裝飾模式、橋模式、
共享模式。
3、 行為模式:模板模式、紀念品模式、觀察者模式、責任鏈模式、命令模式、聲明模式、
策略模式、中介模式、解釋器模式、訪問模式
說白了模式就是前人經過大量的實踐,總結出來的優化的對象關系 你也可以自己總結出來

F. 本人初學java想找些編程例子,鞏固前面所學,最好關於面向對象三大思想方面和多線程、IO等。不要選擇題。

【試題1】任務一:求階乘
l 接受一個輸入,輸出這個數的階乘
l 用長整型計算

任務二:輸出階梯形式的9*9口訣表,如圖1.1所示。
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
圖1.1 階梯形式的9*9口訣表
要求:使用循環結構語句實現。

任務三:編程實現判斷一個整數是否為「水仙花數」。所謂「水仙花數」是指一個三位的整數,其各位數字立方和等於該數本身。例如:153是一個「水仙花數」,因為153=13+53+33。
要求:用帶有一個輸入參數的方法或函數實現,返回值類型為布爾類型。
【試題2】

任務一:已知某個班有M個學生,學習N門課程,已知所有學生的各科成績,編程:分別求每個學生的平均成績,並輸出。
要求:
l 定義一個二維數組,用於存放M個學生的N門成績。定義一個一維數組,用於存放每個學生的平均成績。
l 做二重循環,將每個學生的成績輸入到該二維數組中。
l 做二重循環,對已經存在於二維數組的中的值進行平均分計算,將結果保存到一個一維數組中。
l 做循環輸出該一維數組(即平均分)的值。

任務二:編寫一個程序找出100~1000之間的所有姐妹素數。
註:姐妹素數是指相鄰兩個奇數均為素數。
要求:使用循環結構語句實現。
任務三:求n以內(不包括n)同時能被3和7整除的所有自然數之和的平方根s,並作為函數值返回,最後結果s輸出到文件out.txt中。例如若n為1000時,函數值應為:s=153.909064。

【試題3】
任務一:求2!+3!+4!+5!
任務二:編寫一個程序,對用戶輸入的任意一組數字字元如{3,1,4,7,2,1,1,2,2},輸出其中出現次數最多的字元,並顯示其出現次數。如果有多個字元出現次數均為最大且相等,則輸出最先出現的那個字元和它出現的次數。例如,上面輸入的字元集合中,「1」和「2」都出現了3次,均為最大出現次數,因為「1」先出現,則輸出字元「1」和它出現的次數3次。
任務三:中華人民共和國2011年新的個人所得稅草案規定,個稅的起征點為3000元,分成7級,稅率情況見表1.3, 從鍵盤上輸入月工資,計算應交納的個人所得稅。
表1.3稅率情況表
級數
全月應納稅所得額
稅率 (%)
1
不超過1500元的(即3000-4500之間)
5
2
超過1500元至4500元的部分
10
3
超過4500元至9000元的部分
20
4
超過9000元至35000元的部分
25
5
超過35000元至55000元的部分
30
6
超過55000元至80000元的部分
35
7
超過80000元的部分
45

注意:超出部分按所在稅的級數計算,如:一個人的月收入為6000,應交個人所得稅為:1500*0.05 +((6000-3000)-1500)*0.1=225
請在鍵盤上輸入一個人的月收入,編程實現該公民所要交的稅。
例如:輸入「4000」,則輸出「你要交的稅為:50」。

【試題4】
任務一:請編寫函數fun,其功能是:將兩個兩位數的正整數a、b合並形成一個整數放在c中。合並的方式是:將a數的十位和個位數依次放在c數個位和十位上,b數的十位和個位數依次放在c數的百位和千位上。例如,當a=16,b=35,調用該函數後,c=5361。

任務二:孫悟空在大鬧蟠桃園的時候,第一天吃掉了所有桃子總數一半多一個,第二天又將剩下的桃子吃掉一半多一個,以後每天吃掉前一天剩下的一半多一個,到第n天准備吃的時候只剩下一個桃子。這下可把神仙們心疼壞了,請幫忙計算一下,第一天開始吃的時候桃園一共有多少個桃子。
要求:用循環語句實現,從鍵盤隨機輸入參數n

任務三:輸入一個5位正整數,輸出它是不是迴文數。迴文數是這樣一種數,它的逆序數和它本身相等。例如,12321的逆序數是12321,和它本身相等,所以它是迴文數。又例如25128的逆序數是82152,所以它不是迴文數。
要求:使用分支或循環結構語句實現。

【試題5】

任務一:判斷一個年份N閏年;
輸入:年份N
任務二:一個球從100m高度自由落下,每次落地後反彈回原高度的一半,再落下,再反彈。求它在第十次落地時,共經過多少米?第十次反彈多高?
任務三:Redraiment的老家住在工業區,日耗電量非常大。是政府的眼中釘肉中刺,但又沒辦法,這里頭住的可都是納稅大戶呀。
今年7月,又傳來了不幸的消息,政府要在7、8月對該區進行拉閘限電。但迫於壓力,限電制度規則不會太摳門,政府決定從7月1日停電,然後隔一天到7月3日再停電,再隔兩天到7月6日停電,依次下去,每次都比上一次晚一天。
Redraiment可是軟體專業的學生,怎麼離得開計算機。如果停電,就「英雄無用武之地」了。所以他開始盤算起自己回家的日子了,他想知道自己到家後到底要經歷多少天倒霉的停電。你能幫他算一算嗎?
要求:從鍵盤輸入放假日期,開學日期,日期限定在7、8月份,且開學日期大於放假日期。
提示:可以用數組標記停電的日期

【試題6】

任務一:定義一個電腦類,包含電腦的品牌,價格,型號。
任務二:某班同學上體育課,從1開始報數,共38人,老師要求按1,2,3重復報數,報數為1的同學往前走一步,而報數為2的同學往後退一步,試分別將往前走一步和往後退一步的同學的序號列印出來。
要求:用循環語句實現

任務三:一個人很倒霉,不小心打碎了一位婦女的一籃子雞蛋。為了賠償便詢問籃子里有多少雞蛋。那婦女說,她也不清楚,只記得每次拿兩個則剩一個,每次拿3個則剩2個,每次拿5個則剩4個,若每個雞蛋1元,請你幫忙編程,計算最少應賠多少錢?
要求:用循環語句實現,直接列印出結果不給分

【試題7】

任務一:從鍵盤接收一個整數N,統計出1~N之間能被7整除的整數的個數,以及這些能被7整除的數的和。
屏幕提示樣例:
請輸入一個整數:20
1~20之間能被7整除的數的個數:2
1~20之間能被7整除的所有數之和:21

任務二:從鍵盤輸入一個整數N,列印出有N*2-1行的菱形。
例如輸入整數4,則屏幕輸出如下菱形。

要求:使用循環結構語句實現。

任務三:編程實現判斷一個整數是否為素數。所謂素整是一個大於1的正整數,除了1和它本身,該數不能被其它的正整數整除。
要求:用帶有一個輸入參數的方法或函數實現,返回值類型為布爾類型。

【試題8】
任務一:設計一個學生類,包括學號,姓名,班次,系別,聯系電話,並包含一個構造方法。
要求:構造方法必須有5個參數,能對學生類中的屬性進行賦初值。

任務二:使用冒泡排序法對數組中的整數按升序進行排序,如下所示:
原始數組:a[]={1,9,3,7,4,2,5,0,6,8}
排序後: a[]={0,1,2,3,4,5,6,7,8,9}
要求:使用循環結構語句實現。

任務三:編程實現以下要求。n個人圍坐成一卷,從第一個人開始計數,數到m,第m個人出列,接下來繼續計數,直到所有人都出列。例如:共有5個人,數到3出列,則順序為3,1,5,2,4。
要求:用帶有兩個輸入參數(一個總人數n,一個為計數m)的方法或函數實現,返回值類型為數組。

【試題9】

任務一:輸入一行字元,輸出其中的數字的個數。例如輸入「fwEt2f44F2k8」,輸出結果為5。

任務二:用循環列印楊輝三角到N層
輸入:自然數N

任務三:刪去一維數組中相同的數
輸入 2 3 3 3 4 5 2 9 10 9 3 2 4
輸出2 3 4 5 9 10
【試題10】

任務一:定義一個矩形類,包括長,寬兩個屬性,計算周長方法和計算面積方法。

任務二:編寫程序實現:輸入一個整數,判斷它能否被3、5、7整除,並輸出以下信息之一:
能同時被3、5、7整除
能同時被3、5整除
能同時被3、7整除
能同時被5、7整除
只能被3、5、7中的一個整除
不能被3、5、7任一個整除
要求:使用分支結構語句實現。

任務三:尋找最大數經常在計算機應用程序中使用。例如:確定銷售競賽優勝者的程序要輸入每個銷售員的銷售量,銷量最大的員工為銷售競賽的優勝者,寫一個程序:從鍵盤輸入10個數,列印出其中最大的數。
要求:程序應正確使用如下兩個變數:number:當前輸入程序的數,largest:到目前為止的最大數。

給你30個題 慢慢做吧

閱讀全文

與java編程模式與範例相關的資料

熱點內容
雲伺服器可以攻擊嗎 瀏覽:558
主力吸籌派發區域指標源碼 瀏覽:695
單片機pc的低位元組怎麼算 瀏覽:230
pythoneval函數源碼 瀏覽:242
linuxmongodb服務啟動 瀏覽:766
在哪裡下載核酸檢測app 瀏覽:310
esxi啟動虛擬機命令 瀏覽:969
軍工級單片機 瀏覽:113
伺服器安全保護是什麼意思 瀏覽:789
刪除運行命令 瀏覽:720
龍之召喚伺服器如何 瀏覽:119
linux目錄跳轉 瀏覽:368
程序員和老闆稱兄道弟 瀏覽:759
直播網路連接源碼 瀏覽:736
用安卓手機怎麼登錄蘋果手機id 瀏覽:710
論文查重工具源碼 瀏覽:401
android銀聯demo 瀏覽:86
智能演算法發展 瀏覽:351
房車露營地用什麼app 瀏覽:70
spark編程指南python 瀏覽:553