當前位置:首頁 » 編程軟體 » clong編譯器

clong編譯器

發布時間: 2022-09-22 03:54:19

java語言中Object類定義了哪11種方法

Java中所有類(包括用戶自己定義的類)都自動繼承Object類,即Object類是所有類的父類。

Object中常用方法:

public boolean equals(Object obj)

比較當前對象與obj是否為同一對象,返回值:ture/false

public String toString()

返回當前對象的字元串表達形式

public native int hashCode();

返回對象的Hash碼。Hash碼是標志對象的唯一值,Hash碼相同的對象是同一對象

protected void finalize()throws Throwable

對象銷毀時被調用

以下三個函數用於控制線程

public final native void notify();public final native void notifyAll();public final native void wait();

native型方法指由C++語言編寫的方法,Java解釋器對其進行轉義後才執行。

「==」與equals()

"==" 一般用於基本數據類型比較。若用作兩個引用對象比較,僅當引用變數引用同一個對象時,才返回true,否則false。

void EqualCompare()
{
String s1 = new String("Hello");
String s2 = new String("Hello");
String s3 = "Hello";
String s4 = "Hello";

//未使用new,s4引用既存的對象(編譯器創建對象之前先進行檢測"Hello"是否已經存在,若存在,則返回原對象的引用)
System.out.println(s1.equals(s2)); //truex1行
System.out.println(s1 ==s2); // false 兩變數引用不同對象
System.out.println(s3.equals(s4)); //true 兩變數引用相同對象
System.out.println(s3 ==s4); // true 兩變數引用相同對象
}

比較對象時,一般用equal()方法。

Object類方法定義:public boolean equals(Object obj){ return (this == obj);}

不同的類可方便的對該對象進行覆蓋。String類就覆蓋了Object類的equals()方法,所以x1行輸出true.

a==b 如果a,b引用同一對象,則返回true;

a.equals(b) 如果a對象內容和b對象內容相同,則返回true

如果未重載equals()方法的類對象使用該方法與另一個對象進行比較,則調用Object的equals()方法,仍然是對象的比較,返回值為false。

㈡ 關於C++ Primer中「15.8.2復制未知類型」一段代碼的錯誤提示

沒什麼原因,微軟編譯器的問題,VC9似乎可以了。換成GCC完全可以的。別太依賴某一個編譯器,多嘗試幾個看看。

可以這樣設計:
void *clone() const
{
return new Bulk_item(*this);
}
然後強制轉化void *指針,但是強制轉化類型就體現不出虛函數的特點了,這只是一個折衷的方法。

一樓的說也有道理的,但是你的題目給出的是復制未知類型,那樣的話就不是復制未知類型了。
至於虛函數重寫的返回值問題,你這種寫法是對的,這是C++新標准加進去的,只不過不是所有編譯器都實現了。這是一個例外:當基類虛函數返回是指針或者引用時,派生類也可以隨著改變返回類型,該返回類型應該為基類返回的類或者其派生類的指針或引用。

㈢ c# clone 使用問題

想使用當前對象的拷貝嗎 ?
Matrix result=this.Clone() as Matrix;
這一句Matrix 中你沒有定義Clone()方法,需要實現Icloneable介面,就一個clone()方法。
注意 protected double[] elements = null不能拷貝

㈣ 為什麼數組可以直接調用clone()方法

該問題從clone()方法開始引出。

clone()是基類Object類中的一個protected方法。

對該方法做以下測試。

1.在類A中調用類A實例a的clone()方法

public class A implements Cloneable {
public static void main(String[] args) throws CloneNotSupportedException {
A a = new A(); // 調用正確
A a2 = (A) a.clone();
}
}

以上調用成功,因為A是object的子類,繼承了Object中的clone()方法,所以可以直接調用。

2.在類B中調用類A實例a的clone()方法

public class B { public static void main(String[] args) {
A a = new A(); // 調用失敗
a.clone();
}
}

錯誤信息:

4.提問

  • Java中是否有一個類對應數組?數組在jvm中是一個怎樣的存在?

  • 數組的clone()方法是怎麼實現的?為什麼可以直接調用?為什麼是public的?

  • 數組的.length方法是怎麼實現的?為什麼IDE點不進去源碼

  • 參考

  • 一些參考,可能對可能不對的解釋。

  • 其實是有對應的類的,但不是Java的類,是JVM編譯的時候實現的

  • 這個類的命名,如int數組為[I,如String數組為[Ljava.lang.String;,如A數組為[Ltest.cloneTest.A;。

  • 用.getClass().getName()和.getClass().getInterfaces()即可知道該特殊類的類名和該類實現的介面。

  • 得到該類實現了Cloneable和Serializable介面。和Object中寫明的Note that all arrays are considered to implement the interface Cloneable吻合。

  • 猜測是Java編譯器允許的數組定義的語法糖,其實JVM會生成一個類,該類實現了Cloneable和Serializable介面,並且有一個public的clone()方法,可以在其他類中直接調用。(其實沒有這個方法,可以通過.get.getMethods()進行驗證)

  • 至於數組的length屬性,可能是直接保存在這個特殊的類的類頭部中了,畢竟數組長度是不能修改的,直接保存著是完全符合邏輯的。

編程常用的英文有哪些

application 應用程式 應用、應用程序
application framework 應用程式框架、應用框架 應用程序框架
architecture 架構、系統架構 體系結構
argument 引數(傳給函式的值)。叄見 parameter 叄數、實質叄數、實叄、自變數
array 陣列 數組
arrow operator arrow(箭頭)運運算元 箭頭操作符
assembly 裝配件
assembly language 組合語言
assert(ion) 斷言
assign 指派、指定、設值、賦值 賦值
assignment 指派、指定 賦值、分配
assignment operator 指派(賦值)運運算元 = 賦值操作符
associated 相應的、相關的 相關的、關聯、相應的
associative container 關聯式容器(對應 sequential container) 關聯式容器
atomic 不可分割的 原子的
attribute 屬性 屬性、特性
audio 音訊 音頻
A.I. 人工智慧 人工智慧
background 背景 背景(用於圖形著色)
後台(用於行程)
backward compatible 回溯相容 向下兼容
bandwidth 頻寬 帶寬
base class 基礎類別 基類
base type 基礎型別 (等同於 base class)
batch 批次(意思是整批作業) 批處理
benefit 利益 收益
best viable function 最佳可行函式 最佳可行函式
(從 viable functions 中挑出的最佳吻合者)
binary search 二分搜尋法 二分查找
binary tree 二元樹 二叉樹
binary function 二元函式 雙叄函數
binary operator 二元運運算元 二元操作符
binding 系結 綁定
bit 位元 位
bit field 位元欄 位域
bitmap 位元圖 點陣圖
bitwise 以 bit 為單元逐一┅
bitwise 以 bit 為單元進行復制;位元逐一復制 位拷貝
block 區塊,區段 塊、區塊、語句塊
boolean 布林值(真假值,true 或 false) 布爾值
border 邊框、框線 邊框
brace(curly brace) 大括弧、大括弧 花括弧、花括弧
bracket(square brakcet) 中括弧、中括弧 方括弧、方括弧
breakpoint 中斷點 斷點
build 建造、構築、建置(MS 用語)
build-in 內建 內置
bus 匯流排 匯流排
business 商務,業務 業務
buttons 按鈕 按鈕
byte 位元組(由 8 bits 組成) 位元組
cache 快取 高速緩存
call 呼叫、叫用 調用
callback 回呼 回調
call operator call(函式呼叫)運運算元調用操作符
(同 function call operator)
candidate function 候選函式 候選函數
(在函式多載決議程序中出現的候選函式)
chain 串鏈(例 chain of function calls) 鏈
character 字元 字元
check box 核取方塊 (i.e. check button) 復選框
checked exception 可控式異常(Java)
check button 方鈕 (i.e. check box) 復選按鈕
child class 子類別(或稱為derived class, subtype) 子類
class 類別 類
class body 類別本體 類體
class declaration 類別宣告、類別宣告式 類聲明
class definition 類別定義、類別定義式 類定義
class derivation list 類別衍化列 類繼承列表
class head 類別表頭 類頭
class hierarchy 類別繼承體系, 類別階層 類層次體系
class library 類別程式庫、類別庫 類庫
class template 類別模板、類別範本 類模板
class template partial specializations
類別模板偏特化 類模板部分特化
class template specializations
類別模板特化 類模板特化
cleanup 清理、善後 清理、清除
client 客端、客戶端、客戶 客戶
client-server 主從架構 客戶/伺服器
clipboard 剪貼簿 剪貼板
clone 復制 克隆
collection 群集 集合
combo box 復合方塊、復合框 組合框
command line 命令列 命令行
(系統文字模式下的整行執行命令)
communication 通訊 通訊
compatible 相容 兼容
compile time 編譯期 編譯期、編譯時
compiler 編譯器 編譯器
component 組件 組件
composition 復合、合成、組合 組合
computer 電腦、計算機 計算機、電腦
concept 概念 概念
concrete 具象的 實在的
concurrent 並行 並發
configuration 組態 配置
connection 連接,連線(網路,資料庫) 連接
constraint 約束(條件)
construct 構件 構件
container 容器 容器
(存放資料的某種結構如 list, vector...)
containment 內含 包容
context 背景關系、周遭環境、上下脈絡 環境、上下文
control 控制元件、控制項 控制項
console 主控台 控制台
const 常數(constant 的縮寫,C++ 關鍵字)
constant 常數(相對於 variable) 常量
constructor(ctor) 建構式 構造函數
(與class 同名的一種 member functions)
(v) 復制、拷貝 拷貝
(n) 復件, 副本
cover 涵蓋 覆蓋
create 創建、建立、產生、生成 創建
creation 產生、生成 創建
cursor 游標 游標
custom 訂制、自定 定製
data 資料 數據
database 資料庫 資料庫
database schema 資料庫結構綱目
data member 資料成員、成員變數 數據成員、成員變數
data structure 資料結構 數據結構
datagram 資料元 數據報文
dead lock 死結 死鎖
debug 除錯 調試
debugger 除錯器 調試器
declaration 宣告、宣告式 聲明
dection 推導(例:template argument dection) 推導、推斷
default 預設 預設、默認
defer 延緩 推遲
define 定義 預定義
definition 定義、定義區、定義式 定義
delegate 委派、委託、委任 委託
delegation (同上)
demarshal 反編列 散集
dereference 提領(取出指標所指物體的內容) 解叄考
dereference operator dereference(提領)運運算元 * 解叄考操作符
derived class 衍生類別 派生類
design by contract 契約式設計
design pattern 設計範式、設計樣式 設計模式
※ 最近我比較喜歡「設計範式」一詞
destroy 摧毀、銷毀
destructor 解構式 析構函數
device 裝置、設備 設備
dialog 對話窗、對話盒 對話框
directive 指令(例:using directive) (編譯)指示符
directory 目錄 目錄
disk 碟 盤
dispatch 分派 分派
distributed computing 分布式計算 (分布式電算) 分布式計算
分散式計算 (分散式電算)
document 文件 文檔
dot operator dot(句點)運運算元 . (圓)點操作符
driver 驅動程式 驅動(程序)
dynamic binding 動態系結 動態綁定
efficiency 效率 效率
efficient 高效 高效
end user 終端用戶
entity 物體 實體、物體
encapsulation 封裝 封裝
enclosing class 外圍類別(與巢狀類別 nested class 有關)外圍類
enum (enumeration) 列舉(一種 C++ 資料型別) 枚舉
enumerators 列舉元(enum 型別中的成員) 枚舉成員、枚舉器
equal 相等 相等
equality 相等性 相等性
equality operator equality(等號)運運算元 == 等號操作符
equivalence 等價性、等同性、對等性 等價性
equivalent 等價、等同、對等 等價
escape code 轉義碼 轉義碼
evaluate 評估、求值、核定 評估
event 事件 事件
event driven 事件驅動的 事件驅動的
exception 異常情況 異常
exception declaration 異常宣告(ref. C++ Primer 3/e, 11.3) 異常聲明
exception handling 異常處理、異常處理機制 異常處理、異常處理機制
exception specification 異常規格(ref. C++ Primer 3/e, 11.4) 異常規范
exit 退離(指離開函式時的那一個執行點) 退出
explicit 明白的、明顯的、顯式 顯式
export 匯出 引出、導出
expression 運算式、算式 表達式
facility 設施、設備 設施、設備
feature 特性
field 欄位,資料欄(Java) 欄位, 值域(Java)
file 檔案 文件
firmware 韌體 固件
flag 旗標 標記
flash memory 快閃記憶體 快閃記憶體
flexibility 彈性 靈活性
flush 清理、掃清 刷新
font 字型 字體
form 表單(programming 用語) 窗體
formal parameter 形式叄數 形式叄數
forward declaration 前置宣告 前置聲明
forwarding 轉呼叫,轉發 轉發
forwarding function 轉呼叫函式,轉發函式 轉發函數
fractal 碎形 分形
framework 框架 框架
full specialization 全特化(ref. partial specialization)
function 函式、函數 函數
function call operator 同 call operator
function object 函式物件(ref. C++ Primer 3/e, 12.3) 函數對象
function overloaded resolution
函式多載決議程序 函數重載解決(方案)
functionality 功能、機能 功能
function template 函式模板、函式範本 函數模板
functor 仿函式 仿函式、函子
game 游戲 游戲
generate 生成
generic 泛型、一般化的 一般化的、通用的、泛化
generic algorithm 泛型演演算法 通用演算法
getter (相對於 setter) 取值函式
global 全域的(對應於 local) 全局的
global object 全域物件 全局對象
global scope resolution operator
全域生存空間(范圍決議)運運算元 :: 全局范圍解析操作符
group 群組
group box 群組方塊 分組框
guard clause 衛述句 (Refactoring, p250) 衛語句
GUI 圖形介面 圖形界面
hand shaking 握手協商
handle 識別碼、識別號、號碼牌、權柄 句柄
handler 處理常式 處理函數
hard-coded 編死的 硬編碼的
hard- 硬拷圖 屏幕截圖
hard disk 硬碟 硬碟
hardware 硬體 硬體
hash table 雜湊表 哈希表、散列表
header file 表頭檔、標頭檔 頭文件
heap 堆積 堆
hierarchy 階層體系 層次結構(體系)
hook 掛鉤 鉤子
hyperlink 超鏈結 超鏈接
icon 圖示、圖標 圖標
IDE 整合開發環境 集成開發環境
identifier 識別字、識別符號 標識符
if and only if 若且唯若 當且僅當
Illinois 伊利諾 伊利諾斯
image 影像 圖象
immediate base 直接的(緊臨的)上層 base class。 直接上層基類
immediate derived 直接的(緊臨的)下層 derived class。 直接下層派生類
immutability 不變性
immutable 不可變(的)
implement 實作、實現 實現
implementation 實作品、實作體、實作碼、實件 實現
implicit 隱喻的、暗自的、隱式 隱式
import 匯入 導入
increment operator 累加運運算元 ++ 增加操作符
infinite loop 無窮迴圈 無限循環
infinite recursive 無窮遞回 無限遞歸
information 資訊 信息
infrastructure 公共基礎建設
inheritance 繼承、繼承機制 繼承、繼承機制
inline 行內 內聯
inline expansion 行內展開 內聯展開
initialization 初始化(動作) 初始化
initialization list 初值列 初始值列表
initialize 初始化 初始化
inner class 內隱類別 內嵌類
instance 實體 實例
(根據某種表述而實際產生的「東西」)
instantiated 具現化、實體化(常應用於 template) 實例化
instantiation 具現體、具現化實體(常應用於 template) 實例
integer (integral) 整數(的) 整型(的)
integrate 整合 集成
interacts 交談、互動 交互
interface 介面 介面
for GUI 介面 界面
interpreter 直譯器 解釋器
invariants 恆常性,約束條件 約束條件
invoke 喚起 調用
iterate 迭代(迴圈一個輪回一個輪回地進行) 迭代
exception 異常情況 異常
exception declaration 異常宣告(ref. C++ Primer 3/e, 11.3) 異常聲明
exception handling 異常處理、異常處理機制 異常處理、異常處理機制
exception specification 異常規格(ref. C++ Primer 3/e, 11.4) 異常規范
exit 退離(指離開函式時的那一個執行點) 退出
explicit 明白的、明顯的、顯式 顯式
export 匯出 引出、導出
expression 運算式、算式 表達式
facility 設施、設備 設施、設備
feature 特性
field 欄位,資料欄(Java) 欄位, 值域(Java)
file 檔案 文件
firmware 韌體 固件
flag 旗標 標記
flash memory 快閃記憶體 快閃記憶體
flexibility 彈性 靈活性
flush 清理、掃清 刷新
font 字型 字體
form 表單(programming 用語) 窗體
formal parameter 形式叄數 形式叄數
forward declaration 前置宣告 前置聲明
forwarding 轉呼叫,轉發 轉發
forwarding function 轉呼叫函式,轉發函式 轉發函數
fractal 碎形 分形
framework 框架 框架
full specialization 全特化(ref. partial specialization)
function 函式、函數 函數
function call operator 同 call operator
function object 函式物件(ref. C++ Primer 3/e, 12.3) 函數對象
function overloaded resolution
函式多載決議程序 函數重載解決(方案)
functionality 功能、機能 功能
function template 函式模板、函式範本 函數模板
functor 仿函式 仿函式、函子
game 游戲 游戲
generate 生成
generic 泛型、一般化的 一般化的、通用的、泛化
generic algorithm 泛型演演算法 通用演算法
getter (相對於 setter) 取值函式
global 全域的(對應於 local) 全局的
global object 全域物件 全局對象
global scope resolution operator
全域生存空間(范圍決議)運運算元 :: 全局范圍解析操作符
group 群組
group box 群組方塊 分組框
guard clause 衛述句 (Refactoring, p250) 衛語句
GUI 圖形介面 圖形界面
hand shaking 握手協商
handle 識別碼、識別號、號碼牌、權柄 句柄
handler 處理常式 處理函數
hard-coded 編死的 硬編碼的
hard- 硬拷圖 屏幕截圖
hard disk 硬碟 硬碟
hardware 硬體 硬體

㈥ java關於clone的問題

嗯,正常情況下,Object.clone()會正確返回一個當前對象的一個復本。
除非當前對象沒有實現java.lang.Cloneable。

你的程序直接運行沒有錯誤,無論在JDK1.3\1.4\1.5\1.6下都是正確的。
看了java的規范,理論上任何JDK都應該實現Object.clone()的。

那麼反過來考慮,如果要產生你那個NullPointerException,必須使clone()返回null,那麼只有兩種可能: Object.clone()返回null或者拋出異常。
進而推論為Account對象沒有實現 java.lang.Cloneable!

因此,我猜測在你程序的同一個目錄下,還有個Cloneable.java,定義了一個自定義的Cloneable,或者你給的這段程序少了下面一段:

interface Cloneable {
public Object clone();
}

我試了一下,如果有個自定義的Cloneable,那麼編譯器就不會認為Account類實現了java.lang.Cloneable,因此Object.clone()就會拋出異常了。

㈦ 樹莓派 編譯 platform選哪個

1、獲取升級所需源碼

1)下載地址:
官方網址:https://github.com/raspberrypi
上面列出了樹莓派所有的開源軟體:
firmware:樹莓派的交叉編譯好的二進制內核、模塊、庫、bootloader
linux:內核源碼
tools:編譯內核和其他源碼所需的工具——交叉編譯器等
我們只需要以上三個文件即可,下面的工程可以了解一下

documentation:樹莓派離線幫助文檔,教你如何使用、部署樹莓派(樹莓派官方使用教程)
userland:arm端用戶空間的一些應用庫的源碼——vc視頻硬浮點、EGL、mmal、openVG等
hats:Hardware Attached on Top,樹莓派 B+型板子的擴展板資料
maynard:一個gtk寫成的桌面環境
scratch:一個簡易、可視化編程環境
noobs:一個樹莓派鏡像管理工具,他可以讓你在一個樹莓派上部署多個鏡像
weston:一個應用程序
target_fs:樹莓派最小文件系統,使用busybox製作
quake3:雷神之錘3有線開發源碼firmwareb
2)下載方法:
a、網頁直接下載:

點到所需要下載的工程,左上角選版本,右方有一個download ZIP按鈕可直接下載(筆者下載完成後,在linux中解壓提示出錯,windows又非常慢切內核建議不要在windows環境解壓,所以筆者不建議使用這種辦法)

b、使用git下載
$ mkdir raspeberrypi_src
$ cd raspberrypi_src
$ git clone git://github.com/raspberrypi/firmware.git
$ git clone git://github.com/raspberrypi/linux.git
$ git clone git://github.com/raspberrypi/tools.git

會得到三個文件夾
firmware linux tools

2、編譯、提取內核及其模塊

1)獲得內核配置文件
在運行的樹莓派中運行:
$ls /proc/
可看到一個叫config.gz的文件,他是當前的樹莓派配置選項記錄文件,我們將他拷出,放入我們的內核源碼目錄樹下

$cp /proc/config /home/pi
我們這里使用前面交過的samba拷出並拷入內核源碼目錄下,不熟悉的人可參考前面文章

在linux內核源碼下執行:
$zcat config.gz > .config

2)配置、編譯內核
a、修改內核源碼makefile ARCH類型和編譯器路徑
$vi Makefile +195
找到以上類似代碼,改為如圖所示

b、查看、修改配置選項
$make menuconfig
可出現以下界面

如果不做修改,直接選中exit即可(注意使用鍵盤操作)

c、編譯內核鏡像
$make
在arch/arm/boot目錄下可以看到一個叫zImage的文件,就是我們新的內核

但是樹莓派需要另外一種格式的鏡像,需要進行處理一下,執行以下命令
$cd tools/mkimage

$./imagetool-uncompressed.py ../../linux/arch/arm/boot/zImage
即可在當前文件夾下看到一個叫:kernel.img的文件,就是我們需要的新內核了

d、提取moles
上一步其實不但編譯出來了內核的源碼,一些模塊文件也編譯出來了,這里我們提取一下
$cd raspberrypi_src
$mkdir moles
$cd linux
$ make moles_install INSTALL_MOD_PATH=../moles

即可在moles得到我們需要的模塊文件

2、升級RPi的kernel、Firmware、lib
將SD卡拔下插在電腦上(可使用讀卡器)
1)升級內核
將新編好的內核拷入SD卡,改名為:kernel_new.img
打開boot目錄下
找到config.txt文件,加入:kernel=kernel_new.img這一行

2)升級boot
將firmware/boot/目錄下 以下文件拷入SD卡boot目錄:fbootcode.bin fixup.dat fixup_cd.dat start.elf

3)更新vc庫及內核moles
將第3步d步中編譯出來的moles/lib/moles拷入樹莓派文件系統/lib下

㈧ java編程,創建兩個異常,傳遞相應得字元串作為錯誤提示參數給兩個異常的構造器

不受檢異常:
一般情況下 Error 和 RuntimeException 的子類所描述的錯誤和運行時異常都是 Unchecked Exception,即對有可能拋出這些錯誤或運行時異常的代碼段可以作異常捕獲處理或對包含它們的方法做異常拋出聲明,但這不是必須的。如果沒有捕獲和拋出聲明也一樣能通過編譯器的語法檢測正常編譯。比如:OutOfMemoryError 因為內存溢出或沒有可用的內存提供給垃圾回收器時,Java 虛擬機無法分配一個對象,這時拋出該錯誤。像這樣嚴重的異常情況如果出現,你即便捕獲到了也不大可能通過異常處理解決此異常情況,所以不是必須(當然也沒必要或不應該)捕獲它們或作拋出聲明。對於運行時異常,例如:NullPointerExcetion 如果代碼編寫的沒有漏洞,空指針異常完全可以避免(通過 if (s != null) s.doSomething();),所以同樣不應該捕獲或聲明拋出。雖然運行時異常絕大多數不應捕獲,但有時做捕獲處理有利於簡化代碼的邏輯,例如:將字元串解析成整數的 Integer.parseInt(String s) 方法,如果字元串格式不正確可能拋出 NumberFormatException 這個運行時異常,作捕獲處理會比在解析前用正則表達式先校驗其格式方便得多。
常見的不受檢異常有:(運行時異常)
1.類型轉換異常(ClassCastException)
2.數組超界異常(ArrayIndexOutBoundsException)
3.指定數組維數為負值異常(NegativeArraySizeException)
4.算術異常(ArithmeticException)
5.Java系統內部異常(IncompatibleTypeException)
6.內存溢出異常(OutOfMemoryException)
7.沒有找到類定義異常(NoClassDefFoundException)
8.空指針異常(NullPointerException)

受檢異常:
這以上之外的其它異常都是 Checked Exception,分別描述了不同的異常情況,對於這些異常都應該也必須作異常捕獲處理或對方法作異常拋出聲明,否則代碼通不過編譯器編譯
常見受檢異常:(非運行時異常)
1.ClassNotFoundException:找不到類或介面所產生的異常
2.CloneNotSupportedException:使用對象的clone方法,但無法執行Cloneable所產生的異常.
3.IllegalAccessException:類定義不明確所產生的異常
4.IOException:在一般情況下不能完成IO操作所產生的異常.
5.EOFException:打開文件沒有數據可以讀取所產生的異常
6.FileNotFoundException:在文件系統中,找不到文件名稱或路徑所產生的異常
7.InterruptedIOException:目前線程等待執行,另一線程中斷目前線程IO運行所產生的異常

public class ChackedException extends ClassNotFoundException {
public ChackedException(){
super("拋出受檢異常");
}

public ChackedException(String massage){
super(massage);
}

}

/**
* 這里繼承的是,是屬於不受檢的異常,
* 這里繼承哪個都行,只要是不受檢的異常類就行。
* @author Administrator
*
*/
public class UnCheckedException extends {
public UnCheckedException(){
super("拋出不受檢異常");
}

public UnCheckedException(String massage){
super(massage);
}
}

import java.util.*;

public class ExceptionTest {

/**
* @param args
*/
public static void main(String[] args) throws ChackedException{
// TODO 自動生成方法存根
int number = new Random().nextInt(100);
System.out.println("number = " + number);
if(number > 50 ){
try{
throw new ChackedException();
}catch(ChackedException e){
System.err.println(e.getMessage());
}finally{
System.out.println("finally in chacked");

}
}

if(number < 20){
try{
throw new UnCheckedException();
}catch(UnCheckedException e){
System.err.println(e.getMessage());
}finally{
System.out.println("finally in unchacked");
}

}

}

}

總結:不受檢異常可以捕獲或拋出,也可以不捕獲不拋出,這時也能夠通過編譯,只會在運行是出現異常時終止程序.

受檢異常必須捕獲或拋出,否則就通不過編譯.

㈨ JAVA編碼規范

(1) 類名首字母應該大寫。欄位、方法以及對象(句柄)的首字母應小寫。對於所有標識符,其中包含的所有單詞都應緊靠在一起,而且大寫中間單詞的首字母。例如:
ThisIsAClassName
thisIsMethodOrFieldName
若在定義中出現了常數初始化字元,則大寫static final基本類型標識符中的所有字母。這樣便可標志出它們屬於編譯期的常數。
Java包(Package)屬於一種特殊情況:它們全都是小寫字母,即便中間的單詞亦是如此。對於域名擴展名稱,如com,org,net或者e等,全部都應小寫(這也是Java 1.1和Java 1.2的區別之一)。
(2) 為了常規用途而創建一個類時,請採取"經典形式",並包含對下述元素的定義:
equals()
hashCode()
toString()
clone()(implement Cloneable)
implement Serializable
(3) 對於自己創建的每一個類,都考慮置入一個main(),其中包含了用於測試那個類的代碼。為使用一個項目中的類,我們沒必要刪除測試代碼。若進行了任何形式的改動,可方便地返回測試。這些代碼也可作為如何使用類的一個示例使用。
(4) 應將方法設計成簡要的、功能性單元,用它描述和實現一個不連續的類介面部分。理想情況下,方法應簡明扼要。若長度很大,可考慮通過某種方式將其分割成較短的幾個方法。這樣做也便於類內代碼的重復使用(有些時候,方法必須非常大,但它們仍應只做同樣的一件事情)。
(5) 設計一個類時,請設身處地為客戶程序員考慮一下(類的使用方法應該是非常明確的)。然後,再設身處地為管理代碼的人考慮一下(預計有可能進行哪些形式的修改,想想用什麼方法可把它們變得更簡單)。
(6) 使類盡可能短小精悍,而且只解決一個特定的問題。下面是對類設計的一些建議:
一個復雜的開關語句:考慮採用"多形"機制
數量眾多的方法涉及到類型差別極大的操作:考慮用幾個類來分別實現
許多成員變數在特徵上有很大的差別:考慮使用幾個類
(7) 讓一切東西都盡可能地"私有"--private。可使庫的某一部分"公共化"(一個方法、類或者一個欄位等等),就永遠不能把它拿出。若強行拿出,就可能破壞其他人現有的代碼,使他們不得不重新編寫和設計。若只公布自己必須公布的,就可放心大膽地改變其他任何東西。在多線程環境中,隱私是特別重要的一個因素--只有private欄位才能在非同步使用的情況下受到保護。
(8) 謹惕"巨大對象綜合症"。對一些習慣於順序編程思維、且初涉OOP領域的新手,往往喜歡先寫一個順序執行的程序,再把它嵌入一個或兩個巨大的對象里。根據編程原理,對象表達的應該是應用程序的概念,而非應用程序本身。
(9) 若不得已進行一些不太雅觀的編程,至少應該把那些代碼置於一個類的內部。
(10) 任何時候只要發現類與類之間結合得非常緊密,就需要考慮是否採用內部類,從而改善編碼及維護工作(參見第14章14.1.2小節的"用內部類改進代碼")。
(11) 盡可能細致地加上注釋,並用javadoc注釋文檔語法生成自己的程序文檔。
(12) 避免使用"魔術數字",這些數字很難與代碼很好地配合。如以後需要修改它,無疑會成為一場噩夢,因為根本不知道"100"到底是指"數組大小"還是"其他全然不同的東西"。所以,我們應創建一個常數,並為其使用具有說服力的描述性名稱,並在整個程序中都採用常數標識符。這樣可使程序更易理解以及更易維護。
(13) 涉及構建器和異常的時候,通常希望重新丟棄在構建器中捕獲的任何異常--如果它造成了那個對象的創建失敗。這樣一來,調用者就不會以為那個對象已正確地創建,從而盲目地繼續。
(14) 客戶程序員用完對象以後,若你的類要求進行任何清除工作,可考慮將清除代碼置於一個良好定義的方法里,採用類似於cleanup()這樣的名字,明確表明自己的用途。除此以外,可在類內放置一個boolean(布爾)標記,指出對象是否已被清除。在類的finalize()方法里,請確定對象已被清除,並已丟棄了從RuntimeException繼承的一個類(如果還沒有的話),從而指出一個編程錯誤。在採取象這樣的方案之前,請確定finalize()能夠在自己的系統中工作(可能需要調用System.runFinalizersOnExit(true),從而確保這一行為)。
(15) 在一個特定的作用域內,若一個對象必須清除(非由垃圾收集機制處理),請採用下述方法:初始化對象;若成功,則立即進入一個含有finally從句的try塊,開始清除工作。
(16) 若在初始化過程中需要覆蓋(取消)finalize(),請記住調用super.finalize()(若Object屬於我們的直接超類,則無此必要)。在對finalize()進行覆蓋的過程中,對super.finalize()的調用應屬於最後一個行動,而不應是第一個行動,這樣可確保在需要基礎類組件的時候它們依然有效。
(17) 創建大小固定的對象集合時,請將它們傳輸至一個數組(若准備從一個方法里返回這個集合,更應如此操作)。這樣一來,我們就可享受到數組在編譯期進行類型檢查的好處。此外,為使用它們,數組的接收者也許並不需要將對象"造型"到數組里。
(18) 盡量使用interfaces,不要使用abstract類。若已知某樣東西准備成為一個基礎類,那麼第一個選擇應是將其變成一個interface(介面)。只有在不得不使用方法定義或者成員變數的時候,才需要將其變成一個abstract(抽象)類。介面主要描述了客戶希望做什麼事情,而一個類則致力於(或允許)具體的實施細節。
(19) 在構建器內部,只進行那些將對象設為正確狀態所需的工作。盡可能地避免調用其他方法,因為那些方法可能被其他人覆蓋或取消,從而在構建過程中產生不可預知的結果(參見第7章的詳細說明)。
(20) 對象不應只是簡單地容納一些數據;它們的行為也應得到良好的定義。
(21) 在現成類的基礎上創建新類時,請首先選擇"新建"或"創作"。只有自己的設計要求必須繼承時,才應考慮這方面的問題。若在本來允許新建的場合使用了繼承,則整個設計會變得沒有必要地復雜。
(22) 用繼承及方法覆蓋來表示行為間的差異,而用欄位表示狀態間的區別。一個非常極端的例子是通過對不同類的繼承來表示顏色,這是絕對應該避免的:應直接使用一個"顏色"欄位。
(23) 為避免編程時遇到麻煩,請保證在自己類路徑指到的任何地方,每個名字都僅對應一個類。否則,編譯器可能先找到同名的另一個類,並報告出錯消息。若懷疑自己碰到了類路徑問題,請試試在類路徑的每一個起點,搜索一下同名的.class文件。
(24) 在Java 1.1 AWT中使用事件"適配器"時,特別容易碰到一個陷阱。若覆蓋了某個適配器方法,同時拼寫方法沒有特別講究,最後的結果就是新添加一個方法,而不是覆蓋現成方法。然而,由於這樣做是完全合法的,所以不會從編譯器或運行期系統獲得任何出錯提示--只不過代碼的工作就變得不正常了。
(25) 用合理的設計方案消除"偽功能"。也就是說,假若只需要創建類的一個對象,就不要提前限制自己使用應用程序,並加上一條"只生成其中一個"注釋。請考慮將其封裝成一個"獨生子"的形式。若在主程序里有大量散亂的代碼,用於創建自己的對象,請考慮採納一種創造性的方案,將些代碼封裝起來。
(26) 警惕"分析癱瘓"。請記住,無論如何都要提前了解整個項目的狀況,再去考察其中的細節。由於把握了全局,可快速認識自己未知的一些因素,防止在考察細節的時候陷入"死邏輯"中。
(27) 警惕"過早優化"。首先讓它運行起來,再考慮變得更快--但只有在自己必須這樣做、而且經證實在某部分代碼中的確存在一個性能瓶頸的時候,才應進行優化。除非用專門的工具分析瓶頸,否則很有可能是在浪費自己的時間。性能提升的隱含代價是自己的代碼變得難於理解,而且難於維護。
(28) 請記住,閱讀代碼的時間比寫代碼的時間多得多。思路清晰的設計可獲得易於理解的程序,但注釋、細致的解釋以及一些示例往往具有不可估量的價值。無論對你自己,還是對後來的人,它們都是相當重要的。如對此仍有懷疑,那麼請試想自己試圖從聯機Java文檔里找出有用信息時碰到的挫折,這樣或許能將你說服。
(29) 如認為自己已進行了良好的分析、設計或者實施,那麼請稍微更換一下思維角度。試試邀請一些外來人士--並不一定是專家,但可以是來自本公司其他部門的人。請他們用完全新鮮的眼光考察你的工作,看看是否能找出你一度熟視無睹的問題。採取這種方式,往往能在最適合修改的階段找出一些關鍵性的問題,避免產品發行後再解決問題而造成的金錢及精力方面的損失。
(30) 良好的設計能帶來最大的回報。簡言之,對於一個特定的問題,通常會花較長的時間才能找到一種最恰當的解決方案。但一旦找到了正確的方法,以後的工作就輕松多了,再也不用經歷數小時、數天或者數月的痛苦掙扎。我們的努力工作會帶來最大的回報(甚至無可估量)。而且由於自己傾注了大量心血,最終獲得一個出色的設計方案,成功的快感也是令人心動的。堅持抵制草草完工的誘惑--那樣做往往得不償失。

㈩ JAVA初學問題!

Java新手入門的30個基本概念
在我們學習Java的過程中,掌握其中的基本概念對我們的學習無論是J2SE,J2EE,J2ME都是很重要的,J2SE是Java的基礎,所以有必要對其中的基本概念做以歸納,以便大家在以後的學習過程中更好的理解java的精髓,在此我總結了30條基本的概念。
Java概述:
目前Java主要應用於中間件的開發(middleware)---處理客戶機於伺服器之間的通信技術,早期的實踐證明,Java不適合pc應用程序的開發,其發展逐漸變成在開發手持設備,互聯網信息站,及車載計算機的開發.Java於其他語言所不同的是程序運行時提供了平台的獨立性,稱許可以在windows,solaris,linux其他操作系統上使用完全相同的代碼.Java的語法與C++語法類似,C++/C程序員很容易掌握,而且Java是完全的徹底的面向對象的,其中提出了很好的GC(Garbage Collector)垃圾處理機制,防止內存溢出。
Java的白皮書為我們提出了Java語言的11個關鍵特性。
(1)Easy:Java的語法比C++的相對簡單,另一個方面就是Java能使軟體在很小的機器上運行,基礎解釋其和類庫的支持的大小約為40kb,增加基本的標准庫和線程支持的內存需要增加125kb。
(2)分布式:Java帶有很強大的TCP/IP協議族的常式庫,Java應用程序能夠通過URL來穿過網路來訪問遠程對象,由於servlet機制的出現,使Java編程非常的高效,現在許多的大的web server都支持servlet。
(3)OO:面向對象設計是把重點放在對象及對象的介面上的一個編程技術.其面向對象和C++有很多不同,在與多重繼承的處理及Java的原類模型。
(4)健壯特性:Java採取了一個安全指針模型,能減小重寫內存和數據崩潰的可能型。
(5)安全:Java用來設計網路和分布系統,這帶來了新的安全問題,Java可以用來構建防病毒和防攻擊的System.事實證明Java在防毒這一方面做的比較好。
(6)中立體系結構:Java編譯其生成體系結構中立的目標文件格式可以在很多處理器上執行,編譯器產生的指令位元組碼(Javabytecode)實現此特性,此位元組碼可以在任何機器上解釋執行。
(7)可移植性:Java中對基本數據結構類型的大小和演算法都有嚴格的規定所以可移植性很好。
(8)多線程:Java處理多線程的過程很簡單,Java把多線程實現交給底下操作系統或線程程序完成.所以多線程是Java作為伺服器端開發語言的流行原因之一。
(9)Applet和servlet:能夠在網頁上執行的程序叫Applet,需要支持Java的瀏覽器很多,而applet支持動態的網頁,這是很多其他語言所不能做到的。
基本概念:
1.OOP中唯一關系的是對象的介面是什麼,就像計算機的銷售商她不管電源內部結構是怎樣的,他只關系能否給你提供電就行了,也就是只要知道can or not而不是how and why.所有的程序是由一定的屬性和行為對象組成的,不同的對象的訪問通過函數調用來完成,對象間所有的交流都是通過方法調用,通過對封裝對象數據,很大限度上提高復用率。
2.OOP中最重要的思想是類,類是模板是藍圖,從類中構造一個對象,即創建了這個類的一個實例(instance)。
3.封裝:就是把數據和行為結合起在一個包中)並對對象使用者隱藏數據的實現過程,一個對象中的數據叫他的實例欄位(instance field)。
4.通過擴展一個類來獲得一個新類叫繼承(inheritance),而所有的類都是由Object根超類擴展而得,根超類下文會做介紹。
5.對象的3個主要特性
behavior---說明這個對象能做什麼.
state---當對象施加方法時對象的反映.
identity---與其他相似行為對象的區分標志.
每個對象有唯一的indentity 而這3者之間相互影響.
6.類之間的關系:
use-a :依賴關系
has-a :聚合關系
is-a :繼承關系--例:A類繼承了B類,此時A類不僅有了B類的方法,還有其自己的方法.(個性存在於共性中)
7.構造對象使用構造器:構造器的提出,構造器是一種特殊的方法,構造對象並對其初始化。
例:Data類的構造器叫Data
new Data()---構造一個新對象,且初始化當前時間.
Data happyday=new Data()---把一個對象賦值給一個變數happyday,從而使該對象能夠多次使用,此處要聲明的使變數與對象變數二者是不同的.new返回的值是一個引用。
構造器特點:構造器可以有0個,一個或多個參數
構造器和類有相同的名字
一個類可以有多個構造器
構造器沒有返回值
構造器總是和new運算符一起使用.
8.重載:當多個方法具有相同的名字而含有不同的參數時,便發生重載.編譯器必須挑選出調用哪個方法。
9.包(package)Java允許把一個或多個類收集在一起成為一組,稱作包,以便於組織任務,標准Java庫分為許多包.java.lang java.util java,net等,包是分層次的所有的java包都在java和javax包層次內。
10.繼承思想:允許在已經存在的類的基礎上構建新的類,當你繼承一個已經存在的類時,那麼你就復用了這個類的方法和欄位,同時你可以在新類中添加新的方法和欄位。
11.擴展類:擴展類充分體現了is-a的繼承關系. 形式為:class (子類) extends (基類)。
12.多態:在java中,對象變數是多態的.而java中不支持多重繼承。
13.動態綁定:調用對象方法的機制。
(1)編譯器檢查對象聲明的類型和方法名。
(2)編譯器檢查方法調用的參數類型。
(3)靜態綁定:若方法類型為priavte static final 編譯器會准確知道該調用哪個方法。
(4)當程序運行並且使用動態綁定來調用一個方法時,那麼虛擬機必須調用x所指向的對象的實際類型相匹配的方法版本。
(5)動態綁定:是很重要的特性,它能使程序變得可擴展而不需要重編譯已存代碼。
14.final類:為防止他人從你的類上派生新類,此類是不可擴展的。
15.動態調用比靜態調用花費的時間要長。
16.抽象類:規定一個或多個抽象方法的類本身必須定義為abstract。
例: public abstract string getDescripition
17.Java中的每一個類都是從Object類擴展而來的。
18.object類中的equal和toString方法。
equal用於測試一個對象是否同另一個對象相等。
toString返回一個代表該對象的字元串,幾乎每一個類都會重載該方法,以便返回當前狀態的正確表示.
(toString 方法是一個很重要的方法)
19.通用編程:任何類類型的所有值都可以同object類性的變數來代替。
20.數組列表:ArrayList動態數組列表,是一個類庫,定義在java.uitl包中,可自動調節數組的大小。
21.class類 object類中的getclass方法返回ckass類型的一個實例,程序啟動時包含在main方法的類會被載入,虛擬機要載入他需要的所有類,每一個載入的類都要載入它需要的類。
22.class類為編寫可動態操縱java代碼的程序提供了強大的功能反射,這項功能為JavaBeans特別有用,使用反射Java能支持VB程序員習慣使用的工具。
能夠分析類能力的程序叫反射器,Java中提供此功能的包叫Java.lang.reflect反射機制十分強大.
1.在運行時分析類的能力。
2.在運行時探察類的對象。
3.實現通用數組操縱代碼。
4.提供方法對象。
而此機制主要針對是工具者而不是應用及程序。
反射機制中的最重要的部分是允許你檢查類的結構.用到的API有:
java.lang.reflect.Field 返回欄位.
java.reflect.Method 返回方法.
java.lang.reflect.Constructor 返回參數.
方法指針:java沒有方法指針,把一個方法的地址傳給另一個方法,可以在後面調用它,而介面是更好的解決方案。
23.介面(Interface)說明類該做什麼而不指定如何去做,一個類可以實現一個或多個interface。
24.介面不是一個類,而是對符合介面要求的類的一套規范。
若實現一個介面需要2個步驟:
1.聲明類需要實現的指定介面。
2.提供介面中的所有方法的定義。
聲明一個類實現一個介面需要使用implements 關鍵字
class actionB implements Comparable 其actionb需要提供CompareTo方法,介面不是類,不能用new實例化一個介面.
25.一個類只有一個超類,但一個類能實現多個介面。Java中的一個重要介面:Cloneable
26.介面和回調.編程一個常用的模式是回調模式,在這種模式中你可以指定當一個特定時間發 生時回調對象上的方法。
例:ActionListener 介面監聽.
類似的API有:java.swing.JOptionPane
java.swing.Timer
java.awt.Tookit
27.對象clone:clone方法是object一個保護方法,這意味著你的代碼不能簡單的調用它。
28.內部類:一個內部類的定義是定義在另一個內部的類。
原因是:
1.一個內部類的對象能夠訪問創建它的對象的實現,包括私有數據。
2.對於同一個包中的其他類來說,內部類能夠隱藏起來。
3.匿名內部類可以很方便的定義回調。
4.使用內部類可以非常方便的編寫事件驅動程序。
29.代理類(proxy):
1.指定介面要求所有代碼
2.object類定義的所有的方法(toString equals)
30.數據類型:Java是強調類型的語言,每個變數都必須先申明它都類型,java中總共有8個基本類型.4種是整型,2種是浮點型,一種是字元型,被用於Unicode編碼中的字元,布爾型。
一、入門
《Java 2從入門到精通》- 推薦
《Thinking in Java》- 強烈推薦*
O』reilly的Java編程基礎系列 - 參考*

二、進階
《Java Cook Book》- 非常推薦* (包含了Java編程的Tips,適合當做手冊來查閱)
《O』reilly-Java IO》- 推薦* (包含Java IO編程的各個方面)
《O』reilly-Database Programming with JDBC》- 推薦* (JDBC編程)
《O』reilly-Java Programming with Oracle JDBC》- 參考*

三、Java Web編程
《O』reilly-Java Server Pages》- 強烈推薦*
《O』reilly-Java Servlet Programming》- 非常推薦*
《O』reilly-Jakarta Struts》- 推薦* (Java Web編程的一個MVC實現框架Struts的書)

四、EJB編程
《J2EE應用與BEA Weblogic Server》- 強烈推薦
《Mastering EJB 2.0》- 非常推薦*
《Enterprise Java Bean》- 推薦*

五、Java XML編程
《O』reilly-Java and XML》- 推薦*
《O』reilly-Java and SOAP》- 參考* (Java的SOAP編程)

六、設計模式
《Core J2EE Patterns》- 強烈推薦* (J2EE設計模式,設計企業應用軟體必備參考書)
《EJB Design Patterns》- 推薦*

頁面功能 【加入收藏】 【推薦給朋友】 【字體:大 中 小】 【關閉】

java編程規范-
作者:佚名 來自:未知
命名規范
定義這個規范的目的是讓項目中所有的文檔都看起來像一個人寫的,增加可讀性,減少項目組中因為換人而帶來的損失。(這些規范並不是一定要絕對遵守,但是一定要讓程序有良好的可讀性)

Package 的命名
Package 的名字應該都是由一個小寫單片語成。
Class 的命名
Class 的名字必須由大寫字母開頭而其他字母都小寫的單片語成
Class 變數的命名
變數的名字必須用一個小寫字母開頭。後面的單詞用大寫字母開頭。
Static Final 變數的命名
Static Final 變數的名字應該都大寫,並且指出完整含義。
參數的命名
參數的名字必須和變數的命名規范一致。
數組的命名
數組應該總是用下面的方式來命名:

byte[] buffer;

而不是:

byte buffer[];

方法的參數
使用有意義的參數命名,如果可能的話,使用和要賦值的欄位一樣的名字:

SetCounter(int size){
this.size = size;
}

Java 文件樣式
所有的 Java(*.java) 文件都必須遵守如下的樣式規則

版權信息
版權信息必須在 java 文件的開頭,比如:

/**
* Copyright ? 2000 Shanghai XXX Co. Ltd.
* All right reserved.
*/

其他不需要出現在 javadoc 的信息也可以包含在這里。

Package/Imports
package 行要在 import 行之前,import 中標準的包名要在本地的包名之前,而且按照字母順序排列。如果 import 行中包含了同一個包中的不同子目錄,則應該用 * 來處理。

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 Array(packets, offset); }
public int[] getBytes() { return Array(bytes, offset); }

public int[] getPackets() { return packets; }
public void setPackets(int[] packets) { this.packets = packets; }

其它的方法不要寫在一行上

構造函數
接下來是構造函數,它應該用遞增的方式寫(比如:參數多的寫在後面)。
訪問類型 ('public', 'private' 等.) 和 任何 'static', 'final' 或 'synchronized' 應該在一行中,並且方法和參數另寫一行,這樣可以使方法和參數更易讀。

public
CounterSet(int size){
this.size = size;
}

克隆方法
如果這個類是可以被克隆的,那麼下一步就是 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.array(r1, 0, r3, 0, r1.length);
System.array(r2, 0, r4, 0, r1.length);
}

toString 方法
無論如何,每一個類都應該定義 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[]) 方法已經定義了, 那麼它應該寫在類的底部.

代碼編寫格式

代碼樣式
代碼應該用 unix 的格式,而不是 windows 的(比如:回車變成回車+換行)
文檔化
必須用 javadoc 來為類生成文檔。不僅因為它是標准,這也是被各種 java 編譯器都認可的方法。使用 @author 標記是不被推薦的,因為代碼不應該是被個人擁有的。
縮進
縮進應該是每行2個空格. 不要在源文件中保存Tab字元. 在使用不同的源代碼管理工具時Tab字元將因為用戶設置的不同而擴展為不同的寬度.
如果你使用 UltrEdit 作為你的 Java 源代碼編輯器的話,你可以通過如下操作來禁止保存Tab字元, 方法是通過 UltrEdit中先設定 Tab 使用的長度室2個空格,然後用 Format|Tabs to Spaces 菜單將 Tab 轉換為空格。
頁寬
頁寬應該設置為80字元. 源代碼一般不會超過這個寬度, 並導致無法完整顯示, 但這一設置也可以靈活調整. 在任何情況下, 超長的語句應該在一個逗號或者一個操作符後折行. 一條語句折行後, 應該比原來的語句再縮進2個字元.
{} 對
{} 中的語句應該單獨作為一行. 例如, 下面的第1行是錯誤的, 第2行是正確的:

if (i>0) { I ++ }; // 錯誤, { 和 } 在同一行

if (i>0) {
I ++
}; // 正確, { 單獨作為一行

} 語句永遠單獨作為一行.

如果 } 語句應該縮進到與其相對應的 { 那一行相對齊的位置。

括弧
左括弧和後一個字元之間不應該出現空格, 同樣, 右括弧和前一個字元之間也不應該出現空格. 下面的例子說明括弧和空格的錯誤及正確使用:

CallProc( Aparameter ); // 錯誤
CallProc(Aparameter); // 正確

不要在語句中使用無意義的括弧. 括弧只應該為達到某種目的而出現在源代碼中。下面的例子說明錯誤和正確的用法:

if ((I) = 42) { // 錯誤 - 括弧毫無意義
if (I == 42) or (J == 42) then // 正確 - 的確需要括弧

程序編寫規范

exit()
exit 除了在 main 中可以被調用外,其他的地方不應該調用。因為這樣做不給任何代碼代碼機會來截獲退出。一個類似後台服務地程序不應該因為某一個庫模塊決定了要退出就退出。
異常
申明的錯誤應該拋出一個RuntimeException或者派生的異常。
頂層的main()函數應該截獲所有的異常,並且列印(或者記錄在日誌中)在屏幕上。
垃圾收集
JAVA使用成熟的後台垃圾收集技術來代替引用計數。但是這樣會導致一個問題:你必須在使用完對象的實例以後進行清場工作。比如一個prel的程序員可能這么寫:


{
FileOutputStream fos = new FileOutputStream(projectFile);
project.save(fos, 'IDE Project File');
}


除非輸出流一出作用域就關閉,非引用計數的程序語言,比如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 類
絕對不要因為性能的原因將類定義為 final 的(除非程序的框架要求)
如果一個類還沒有準備好被繼承,最好在類文檔中註明,而不要將她定義為 final 的。這是因為沒有人可以保證會不會由於什麼原因需要繼承她。
訪問類的成員變數
大部分的類成員變數應該定義為 protected 的來防止繼承類使用他們。
注意,要用'int[] packets',而不是'int packets[]',後一種永遠也不要用。

public void setPackets(int[] packets) { this.packets = packets; }

CounterSet(int size)
{
this.size = size;
}

編程技巧

byte 數組轉換到 characters
為了將 byte 數組轉換到 characters,你可以這么做:

'Hello world!'.getBytes();

Utility 類
Utility 類(僅僅提供方法的類)應該被申明為抽象的來防止被繼承或被初始化。

初始化
下面的代碼是一種很好的初始化數組的方法:

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);
}

這種技術實現了RED, GREEN, BLUE 等可以象其他語言的枚舉類型一樣使用的常量。 他們可以用 == 操作符來比較。
但是這樣使用有一個缺陷:如果一個用戶用這樣的方法來創建顏色 BLACK

new Colour(0,0,0)

那麼這就是另外一個對象,==操作符就會產生錯誤。她的 equal() 方法仍然有效。由於這個原因,這個技術的缺陷最好註明在文檔中,或者只在自己的包中使用。

Swing

避免使用 AWT 組件
混合使用 AWT 和 Swing 組件
如果要將 AWT 組件和 Swing 組件混合起來使用的話,請小心使用。實際上,盡量不要將他們混合起來使用。

滾動的 AWT 組件
AWT 組件絕對不要用 JscrollPane 類來實現滾動。滾動 AWT 組件的時候一定要用 AWT ScrollPane 組件來實現。

避免在 InternalFrame 組件中使用 AWT 組件
盡量不要這么做,要不然會出現不可預料的後果。

Z-Order 問題
AWT 組件總是顯示在 Swing 組件之上。當使用包含 AWT 組件的 POP-UP 菜單的時候要小心,盡量不要這樣使用。

調試

調試在軟體開發中是一個很重要的部分,存在軟體生命周期的各個部分中。調試能夠用配置開、關是最基本的。

很常用的一種調試方法就是用一個 PrintStream 類成員,在沒有定義調試流的時候就為 null,類要定義一個 debug 方法來設置調試用的流。

性能

在寫代碼的時候,從頭至尾都應該考慮性能問題。這不是說時間都應該浪費在優化代碼上,而是我們時刻應該提醒自己要注意代碼的效率。比如:如果沒有時間來實現一個高效的演算法,那麼我們應該在文檔中記錄下來,以便在以後有空的時候再來實現她。

不是所有的人都同意在寫代碼的時候應該優化性能這個觀點的,他們認為性能優化的問題應該在項目的後期再去考慮,也就是在程序的輪廓已經實現了以後。
不必要的對象構造
不要在循環中構造和釋放對象

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:639
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:368
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:84
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:310
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:793
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:344
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:213
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:812
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:366
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:593