導航:首頁 > 編程語言 > java開發項目代碼

java開發項目代碼

發布時間:2024-08-21 22:13:54

① 我是java初學者,拿到一個做好的java項目代碼,我該如何分析這個代碼結構和採用了什麼java框架技術。

1、拿到代碼查看枝嫌項豎納目當中是否有readme這樣的文件,如果沒有查看是否有文檔之類的
2、代碼當中沒有文檔,那麼就想你的同事或者其他人要這個框架的介紹或者資料
3、先請教別人這個框架的大體思路
4、自己獨立去按照文檔或者其他人說的思路去看代碼
5、不懂的地方全部記錄下面,一次行去問,有的時候很多問題在你看到後面的東西的時候就自然明白了
6、看懂了代碼之猛纖手後自己嘗試著寫一個,看自己的理解是否正確就這么多了。

② 求JAVA小項目的完整代碼

給你個做好了的Java的源程序的記事本,自己看看就行了的,不怎麼難的···
import java.awt.*;
import java.awt.event.*;
import java.io.*;

import javax.swing.*;

public class MyNotepad implements ActionListener{
private JFrame frame=new JFrame("新記事本");
private JTextArea jta=new JTextArea();
private String result="";
private boolean flag=true;
private File f;
private JButton jb=new JButton("開始");
private JTextField jtf=new JTextField(15);
private JTextField jt=new JTextField(15);
private JButton jbt=new JButton("替換為");
private JButton jba=new JButton("全部替換");
private Icon ic=new ImageIcon("D:\\java課堂筆記\\GUI\\11.gif");
private String value;
private int start=0;
private JFrame jf=new JFrame("查找");
private JFrame jfc=new JFrame("替換");

@Override
public void actionPerformed(ActionEvent e) {
String comm=e.getActionCommand();
if("新建".equals(comm)){
if(!(frame.getTitle().equals("新記事本"))){
if(!flag){
write();
newNew();
}else{
JFileChooser jfc=new JFileChooser("D:\\java課堂筆記");
int returnVal = jfc.showDialog(null,"保存為");
if(returnVal == JFileChooser.APPROVE_OPTION) {//選擇文件後再執行下面的語句,保證了程序的健壯性
f=jfc.getSelectedFile();
flag=false;
write();
}
}
}else if(!(jta.getText().isEmpty())){
JFileChooser jfc=new JFileChooser("D:\\java課堂筆記");
int returnVal = jfc.showDialog(null,"保存為");
if(returnVal == JFileChooser.APPROVE_OPTION) {//選擇文件後再執行下面的語句,保證了程序的健壯性
f=jfc.getSelectedFile();
flag=false;
write();
newNew();
}
}else{
newNew();
}
}else if("打開".equals(comm)){
JFileChooser jfc=new JFileChooser("D:\\java課堂筆記");
jfc.setDialogType(JFileChooser.OPEN_DIALOG);
int returnVal = jfc.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION) {//選擇文件後再執行下面的語句,保證了程序的健壯性
f=jfc.getSelectedFile();
frame.setTitle(f.getName());
result=read();
flag=false;
value=result;
jta.setText(result);
}
}else if("保存".equals(comm)){
JFileChooser jfc=new JFileChooser("D:\\java課堂筆記");
if(flag){
int returnVal = jfc.showDialog(null,"保存為");
if(returnVal == JFileChooser.APPROVE_OPTION) {//選擇文件後再執行下面的語句,保證了程序的健壯性
f=jfc.getSelectedFile();
flag=false;
write();
}
}else{
write();
}
}else if("另存".equals(comm)){
JFileChooser jfc=new JFileChooser("D:\\java課堂筆記");
int returnVal = jfc.showDialog(null,"另存");
if(returnVal == JFileChooser.APPROVE_OPTION) {//選擇文件後再執行下面的語句,保證了程序的健壯性
f=jfc.getSelectedFile();
write();
}
}else if("退出".equals(comm)){
System.exit(0);
}else if("撤銷".equals(comm)){
jta.setText(value);
}else if("剪切".equals(comm)){
value=jta.getText();
jta.cut();
}else if("復制".equals(comm)){
jta.();
}else if("粘貼".equals(comm)){
value=jta.getText();
jta.paste();
}else if("刪除".equals(comm)){
value=jta.getText();
jta.replaceSelection(null);
}else if("全選".equals(comm)){
jta.selectAll();
}else if("查找".equals(comm)){
value=jta.getText();
jf.add(jtf,BorderLayout.CENTER);
jf.add(jb,BorderLayout.SOUTH);

jf.setLocation(300,300);
jf.pack();
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}else if("替換".equals(comm)){
value=jta.getText();
GridLayout gl=new GridLayout(3,3);
JLabel jl1=new JLabel("查找內容:");
JLabel jl2=new JLabel("替換為:");
jfc.setLayout(gl);
jfc.add(jl1);
jfc.add(jtf);
jfc.add(jb);
jfc.add(jl2);
jfc.add(jt);
jfc.add(jbt);
JLabel jl3=new JLabel();
JLabel jl4=new JLabel();
jfc.add(jl3);
jfc.add(jl4);
jfc.add(jba);

jfc.setLocation(300,300);
jfc.pack();
jfc.setVisible(true);
jfc.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}else if("版本".equals(comm)){
JDialog jd=new JDialog(frame,"關於對話框");
jd.setSize(200,200);
JLabel l=new JLabel("哈哈哈哈哈哈哈哈哈哈呵呵呵呵呵呵呵呵呵呵呵呵呵");
jd.add(l,BorderLayout.CENTER);
jd.setLocation(100,200);
jd.setSize(300,300);
jd.setVisible(true);
// jd.pack();
jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
}else if("開始".equals(comm)||"下一個".equals(comm)){
String temp=jtf.getText();
int s=value.indexOf(temp,start);
if(value.indexOf(temp,start)!=-1){
jta.setSelectionStart(s);
jta.setSelectionEnd(s+temp.length());
jta.setSelectedTextColor(Color.GREEN);
start=s+1;
jb.setText("下一個");
// value=value.substring(s+temp.length());//不能截取字串
}else {
JOptionPane.showMessageDialog(jf, "查找完畢!", "提示", 0, ic);
jf.dispose();
}
}else if("替換為".equals(comm)){
String temp=jtf.getText();
int s=value.indexOf(temp,start);
if(value.indexOf(temp,start)!=-1){
jta.setSelectionStart(s);
jta.setSelectionEnd(s+temp.length());
jta.setSelectedTextColor(Color.GREEN);
start=s+1;
jta.replaceSelection(jt.getText());
}else {
JOptionPane.showMessageDialog(jf, "查找完畢!", "提示", 0, ic);
jf.dispose();
}
}else if("全部替換".equals(comm)){
String temp=jta.getText();
temp=temp.replaceAll(jtf.getText(), jt.getText());
jta.setText(temp);

}
}
public String read(){
String temp="";
try {
FileInputStream fis = new FileInputStream(f.getAbsolutePath());
byte[] b=new byte[1024];
while(true){
int num=fis.read(b);
if(num==-1)break;
temp=temp+new String(b,0,num);
}
fis.close();
} catch (Exception e1) {
e1.printStackTrace();
}
return temp;
}

public void write(){
try {
FileOutputStream fos=new FileOutputStream(f);
fos.write(jta.getText().getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void newNew(){
frame.dispose();
new MyNotepad();
flag=true;
}
public MyNotepad(){
JMenuBar jmb=new JMenuBar();
String[] menuLab={"文件","編輯","幫助"};
String[][] menuItemLab={{"新建","打開","保存","另存","退出"},
{"撤銷","剪切","復制","粘貼","刪除","全選","查找","替換"},
{"版本"}};
for(int i=0;i<menuLab.length;i++){
JMenu menu=new JMenu(menuLab[i]);
jmb.add(menu);
for(int j=0;j<menuItemLab[i].length;j++){
JMenuItem jmi=new JMenuItem(menuItemLab[i][j]);
menu.add(jmi);
jmi.addActionListener(this);
}
}
frame.setJMenuBar(jmb);
jta.setLineWrap(true);//自動換行
JScrollPane jsp=new JScrollPane(jta);//滾動窗口面板
frame.add(jsp);

jb.addActionListener(this);
jbt.addActionListener(this);
jba.addActionListener(this);

frame.setLocation(200,50);
frame.setSize(620,660);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new MyNotepad();
}
}

③ 怎麼寫好Java(或者Java web)代碼

作為一個Java開發攻城獅(lao si ji),我可以負責任地告訴你,多看多寫~
首先,鑒於題主你說你是剛接觸地階段,我並不推薦你你上來就要寫工業級或者企業級的代碼,當下的話應該是迅速積累項目經驗,快速掌握java web的開發流程為主,可以網上看看什麼視頻教程,有些還是能學到規范的。
分享一下我的經歷吧~
讀大學的時候我接一些外包【朋友介紹】,一開始也很虛啊,覺得這里不對,那裡不對的。寫得多了,慢慢理解整個開發流程後,就覺得也就是增刪改查嘛,沒什麼的。每次都要寫,好麻煩啊,既然這樣,不如自己造一些輪子,後來就是項目多了,又造了一些輪子,然後做了系列的封裝。期間穿插讀了 重構和effective java兩本書,代碼方法保持整潔,但一些代碼上還是不規范。
再後來,學習了java的一些高級特性,反射、自省【提高了寫代碼250%的效率】以及參考了部分阿里的規范,感覺逐漸能寫出比以前看上去優雅的代碼了。
接下來的一段時間,因為興趣的原因,研究了一下三大框架,自己強行擼了三個閹割版。回去看源碼的時候,發現spring寫得真的太優雅了,然後又小小改了一下風格。
最後,出來工作了,哦謝特~ 大家寫得什麼鬼啊~ 什麼規范都不參照~ 簡直內心爆炸,一萬點傷害~ 好吧,我還是照著我原先的思路,搞一搞~
所以說,工業級、企業級代碼不是每個公司都有,但是對自身有要求是好事啊~ 你也別急,慢慢寫,也能逐漸規范起來~ 只是現在,不合適~ 加油~
還有問題的話,歡迎聯系我~

④ java的源代碼怎麼查找如何下載


工具如何查找源代碼

1、首先打開電腦的ie瀏覽器進去,如下圖所示。進入ie瀏覽器首頁後,點擊查看,如下圖所示。在查看菜單下選擇源,如下圖所示。最後打開源就看到本網頁的源代碼了,在最下方,如下圖所示。

2、第二種方法就是根據瀏覽器狀態欄或工具欄中的點擊「查看」然後就用一項「查看源代碼」,點擊查看源代碼即可查看此網頁的源代碼源文件。

3、首先打開谷歌瀏覽器(GoogleChrome),任意打開一個網頁(例如網路),在瀏覽器右上角的菜單中找到更多工具開發者工具並打開(也可以直接按F12打開)。

4、要查看基於SpringBoot的Java項目的代碼,您需要進行以下步驟:查看項目結構:您可以在部署項目的位置找到項目文件夾。打開項目文件夾並查看項目結構。

5、可以設置路徑映射和搜索路徑,幫助工具查找實驗中引用的文件。

怎麼通過快捷方式找到原文件?

1、具體操作方法是:打開Word軟體,選擇「文件」-「信息」-「管理文檔」-「恢復未保存的文檔」。

2、通過快捷方式找到源文件。將游標選中快捷方式。點擊右鍵彈出菜單欄。點擊最下方的屬性。點擊左下方【打開文件所在位置】選項。找到該文件的源文件。

3、在那個快捷方式那裡,右鍵,屬性,然後選擇下面那裡的「打開文件位置」,然後把那個「原文件」拖到桌面就可以了。

4、文件變成快捷方式怎麼恢復?在桌面或文件夾中找到有問題的快捷方式,右鍵單擊並選擇「刪除」,然後重新創建一個新的快捷方式。

絕對路徑不管源文件在什麼位置都可以非常精確地找到

1、絕對路徑是指目錄下的絕對位置,直接到達目標位置,通常是從盤符開始的路徑。完整的描述文件位置的路徑就是絕對路徑,以web站點根目錄為參考基礎的目錄路徑。

2、我們可以根據該路徑明確地找到所對應的文件(夾)。

3、絕對路徑:一般是指文件在所在盤符的位置,而且是從盤符開始算起,如某文件位於「C:ProgramFilesJiangMin」下面,那麼這個路徑就是它的絕對路徑。

4、絕對路徑是指目錄下的絕對位置,直接到達目標位置。物理路徑指的是某一台計算機本地的路徑,以盤符開頭,例如C:、D: emp等等。

5、絕對路徑:就是文件在本地硬碟上的真正路徑即URL和物理路徑。相對路徑:相對與某個基準目錄的路徑(一般針對web目錄而言,包含Web的相對路徑)。

計算機中路徑相關的查找器是什麼?

路徑查找器協議就是為了支持模塊和已初始化包的導入,也為了給命名空間包提供組成部分,路徑條目查找器必須實現find_spec()方法。find_spec()接受兩個參數,即要導入模塊的完整限定名稱,以及(可選的)目標模塊。

第一個查找器就是簡單的在package.preload表中查找載入器。第二個查找器用於查找Lua庫的載入庫。它使用儲存在package.path中的路徑來做查找工作。查找過程和函數package.searchpath描述的一致。

ai路徑查找器是一款關於查找ai路徑的選擇器,ai路徑查找器分割不了圖片是查找器的分割方式沒選對。查找器(finger)是告訴你姓名及其電子郵件地址的程序。

元路徑就是程序開發中最小的單元。當指定名稱的模塊在sys.moles中找不到時,Python會接著搜索sys.meta_path,其中包含元路徑查找器對象列表。這些查找器按順序被查詢以確定它們是否知道如何處理該名稱的模塊。

怎麼在相冊里選中一張片後獲得它的絕對路徑

1、首先確定源文件在什麼位置,如果圖片的文件名和源文件在同一級,可以直接引用。

2、首先,打開手機桌面,點擊打開相冊,然後進入下一步。其次,進入圖庫後,以「相冊」文件夾為例,在顯示的相冊中找到需要查找的照片,如下圖所示,然後進入下一步。

3、你好,保存手機里的照片應該到圖片圖找就可以找到。

4、編輯」(或長按要移動的照片)--選擇「剪切」--返回到要移入的文件夾中--點擊「粘貼」】;整個文件夾移動:操作方法:【文件管理--長按要移動的相冊--剪切--返回到要移入的文件夾中--點擊右下角的「粘貼」】。

西馬移動硬碟中文件的源位置在哪裡查找

驗,建議大家用下列方法試一下:方法一:移動硬碟盤符X--右鍵屬性--工具--查錯--開始檢查,在「自動修復文件系統錯誤」前打鉤,然後點擊「開始」,檢查完畢後,打開移動硬碟即可顯示其中的所有文件。

雙擊原來系統盤所在分區。進入之後,雙擊「用戶」文件夾。進入文件夾之後,接著雙擊「Administrator」文件夾。進入之後找到「桌面」文件夾並點擊打開。進入之後就可以看到存放在桌面的文件了。

移動硬碟里的文件總是提示不在目錄里解決辦法:打開我的計算機,在需要修復的磁碟上單擊右鍵,選擇屬性。在彈出的屬性窗口中點擊工具選項卡,在查錯裡面點擊開始檢查。

點擊「RecovertoLocalDrive」後面的「Browse」按鈕,在彈出的窗口中選擇好目標目錄即可。

⑤ java項目推薦 | IJPay支付項目,讓你的代碼飛起來

在眾多Java支付項目中,IJPay憑借其卓越的性能和可靠性脫穎而出。這個開源項目在GitHub上收獲了3000多顆星,歷經考驗,是值得信賴的合作夥伴。它封裝了微信支付、QQ支付、支付寶、京東支付、銀聯支付、PayPal等多種主流支付方式,為開發者提供了一站式解決方案。


IJPay的設計理念在於簡單易用,無需依賴第三方MVC框架,直接作為開發工具,快速集成支付模塊,無縫融入各種系統。其豐富的介面支持使得項目接入變得輕而易舉,對開發者來說,不僅降低了開發難度,還提供了詳盡的文檔,極大地節省了開發時間。


快速入門:在Demo項目IJPay-Demo-SpringBoot中,你可以輕松找到使用步驟。默認配置在resources/dev下,只需按照文檔調整屬性文件,運行com.ijpay.demo.DemoApplication,前端頁面在com.ijpay.demo.controller.IndexController中即可呈現。項目耦合度極低,方便調試和擴展。


IJPay不僅是國內首個開源的互聯網支付系統,它還包含完整的賬戶、用戶、支付接入、交易和結算體系,致力於打造一個輕量且易操作的支付收款平台,為互聯網業務提供無縫支付和資金管理功能。


作為一款成熟的開源支付系統,IJPay的價值不僅在於其功能完備,更重要的是它為開發者提供了深入學習支付系統的機會。無論是否直接應用在項目中,對於提升技術能力來說,它都是不可多得的資源。


技術基石:IJPay基於Spring Boot的核心框架,集成Apache Shiro安全框架、MyBatis ORM、Druid數據連接池、Redis緩存以及Maven項目管理,為高性能和穩定性的實現提供了堅實的技術支撐。


結構與流程:項目採用清晰的模塊化結構,支付流程設計嚴謹,從底層介面到用戶界面,每一環節都為高效開發和維護提供了便利。


總的來說,IJPay以其強大的功能、簡潔的使用體驗和豐富的學習價值,是Java開發者構建支付模塊的理想選擇。立即體驗IJPay,讓您的代碼在支付領域飛速發展!

⑥ java軟體開發的代碼規范

1、組織與風格
(1).關鍵詞和操作符之間加適當的空格。
(2).相對獨立的程序塊與塊之間加空行
(3).較長的語句、表達式等要分成多行書寫。
(4).劃分出的新行要進行適應的縮進,使排版整齊,語句可讀。
(5).長表達式要在低優先順序操作符處劃分新行,操作符放在新行之首。
(6).循環、判斷等語句中若有較長的表達式或語句,則要進行適應的劃分。
(7).若函數或過程中的參數較長,則要進行適當的劃分。
(8).不允許把多個短語句寫在一行中,即一行只寫一條語句。
(9).函數或過程的開始、結構的定義及循環、判斷等語句中的代碼都要採用縮進風格。
註:如果大家有興趣可以到安安DIY創作室博客,有相關說明性的文章和解釋。
2、註解
Java 的語法與 C++ 及為相似,那麼,你知道 Java 的注釋有幾種嗎?是兩種?
// 注釋一行
/* ...... */ 注釋若干行
不完全對,除了以上兩種之外,還有第三種,文檔注釋:
/** ...... */ 注釋若干行,並寫入 javadoc 文檔
注釋要簡單明了。
String userName = null; //用戶名
邊寫代碼邊注釋,修改代碼同時修改相應的注釋,以保證注釋與代碼的一致性。
在必要的地方注釋,注釋量要適中。注釋的內容要清楚、明了,含義准確,防止注釋二義性。
保持注釋與其描述的代碼相鄰,即注釋的就近原則。
對代碼的注釋應放在其上方相鄰位置,不可放在下面。對數據結構的注釋應放在其上方相鄰位置,不可放在下面;對結構中的每個域的注釋應放在此域的右方;
同一結構中不同域的注釋要對齊。
變數、常量的注釋應放在其上方相鄰位置或右方。
全局變數要有較詳細的注釋,包括對其功能、取值范圍、哪些函數或過程存取它以及存取時注意事項等的說明。
在每個源文件的頭部要有必要的注釋信息,包括:文件名;版本號;作者;生成日期;模塊功能描述(如功能、主要演算法、內部各部分之間的關系、該文件與其它文件關系等);主要函數或過程清單及本文件歷史修改記錄等。
/**
* Copy Right Information : Neusoft IIT
* Project : eTrain
* JDK version used : jdk1.3.1
* Comments : config path
* Version : 1.01
* Modification history :2003.5.1
* Sr Date Modified By Why & What is modified
* 1. 2003.5.2 Kevin Gao new
**/
在每個函數或過程的前面要有必要的注釋信息,包括:函數或過程名稱;功能描述;輸入、輸出及返回值說明;調用關系及被調用關系說明等
/**
* Description :checkout 提款
* @param Hashtable cart info
* @param OrderBean order info
* @return String
*/
public String checkout(Hashtable htCart,
OrderBean orderBean)
throws Exception{
}
javadoc注釋標簽語法
@author 對類的說明 標明開發該類模塊的作者
@version 對類的說明 標明該類模塊的版本
@see 對類、屬性、方法的說明 參考轉向,也就是相關主題
@param 對方法的說明 對方法中某參數的說明
@return 對方法的說明 對方法返回值的說明
@exception 對方法的說明 對方法可能拋出的異常進行說明
3、命名規范
定義這個規范的目的是讓項目中所有的文檔都看起來像一個人寫的,增加可讀性,減少項目組中因為換人而帶來的損失。(這些規范並不是一定要絕對遵守,但是一定要讓程序有良好的可讀性)較短的單詞可通過去掉母音形成縮寫;要不然最後自己寫的代碼自己都看不懂了,那可不行。
較長的單詞可取單詞的頭幾發符的優先順序,並用括弧明確表達式的操作順序,避免使用默認優先順序。
使用匈牙利表示法
Package 的命名
Package 的名字應該都是由一個小寫單片語成。
package com.neu.util
Class 的命名
Class 的名字必須由大寫字母開頭而其他字母都小寫的單片語成,對於所有標識符,其中包含的所有單詞都應緊靠在一起,而且大寫中間單詞的首字母。
public class ThisAClassName{}
Class 變數的命名
變數的名字必須用一個小寫字母開頭。後面的單詞用大寫字母開頭
userName , thisAClassMethod
Static Final 變數的命名
static Final 變數的名字應該都大寫,並且指出完整含義。
/**
*DBConfig PATH
**/
public static final String
DB_CONFIG_FILE_PATH =com.neu.etrain.dbconfig;
參數的命名
參數的名字必須和變數的命名規范一致。
數組的命名
數組應該總是用下面的方式來命名:
byte[] buffer;
而不是:
byte buffer[];
方法的參數
使用有意義的參數命名,如果可能的話,使用和要賦值的欄位一樣的名字:
SetCounter(int size){
this.size = size;
}
4、文件樣式
所有的 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[]) 方法已經定義了, 那麼它應該寫在類的底部.
5、代碼可讀性
避免使用不易理解的數字,用有意義的標識來替代。
不要使用難懂的技巧性很高的語句。
源程序中關系較為緊密的代碼應盡可能相鄰。
6、代碼性能
在寫代碼的時候,從頭至尾都應該考慮性能問題。這不是說時間都應該浪費在優化代碼上,而是我們時刻應該提醒自己要注意代碼的效率。比如:如果沒有時間來實現一個高效的演算法,那麼我們應該在文檔中記錄下來,以便在以後有空的時候再來實現她。
不是所有的人都同意在寫代碼的時候應該優化性能這個觀點的,他們認為性能優化的問題應該在項目的後期再去考慮,也就是在程序的輪廓已經實現了以後。
不必要的對象構造
不要在循環中構造和釋放對象
使用 StringBuffer 對象
在處理 String 的時候要盡量使用 StringBuffer 類,StringBuffer 類是構成 String 類的基礎。
String 類將 StringBuffer 類封裝了起來,(以花費更多時間為代價)為開發人員提供了一個安全的介面。當我們在構造字元串的時候,我們應該用 StringBuffer 來實現大部分的工作,當工作完成後將 StringBuffer 對象再轉換為需要的 String 對象。比如:如果有一個字元串必須不斷地在其後添加許多字元來完成構造,那麼我們應該使用StringBuffer 對象和她的 append() 方法。如果我們用 String 對象代替StringBuffer 對象的話,會花費許多不必要的創建和釋放對象的 CPU 時間。大家可以來安安DIY創作室一起討論。
避免太多的使用 synchronized 關鍵字避免不必要的使用關鍵字 synchronized,應該在必要的時候再使用她,這是一個避免死鎖的好方法。
7、編程技巧
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() 方法仍然有效。由於這個原因,這個技術的缺陷最好註明在文檔中,或者只在自己的包中使用。
8、編寫格式
代碼樣式
代碼應該用 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 // 正確 - 的確需要括弧
9、代碼編譯
1.編寫代碼時要注意隨時保存,並定期備份,防止由於斷電、硬碟損壞等原因造成代碼丟失。
2.同一項目組內,最好使用相同的編輯器,並使用相同的設置選項。
3.合理地設計軟體系統目錄,方便開發人員使用。
4.打開編譯器的所有告警開關對程序進行編譯。
5.在同一項目組或產品組中,要統一編譯開關選項。
6.使用工具軟體(如Visual SourceSafe)對代碼版本進行維護。如果大家有不明白的可以到安安DIY創作室留言。
10、可移植性
Borland Jbulider 不喜歡 synchronized 這個關鍵字,如果你的斷點設在這些關鍵字的作用域內的話,調試的時候你會發現的斷點會到處亂跳,讓你不知所措。除非必須,盡量不要使用。
換行
如果需要換行的話,盡量用 println 來代替在字元串中使用 。
你不要這樣:
System.out.print(Hello,world! );
要這樣:
System.out.println(Hello,world!);
或者你構造一個帶換行符的字元串,至少要象這樣:
String newline = System.getProperty(line.separator);
System.out.println(Hello world + newline);
PrintStream
PrintStream 已經被不贊成(deprecated)使用,用 PrintWrite 來代替它。

閱讀全文

與java開發項目代碼相關的資料

熱點內容
python數字字元串轉數字 瀏覽:657
c程序員可以轉互聯網嗎 瀏覽:490
深圳交醫保用什麼app 瀏覽:461
pdf合並成一張 瀏覽:670
ie9文件夾怎麼查看ftp 瀏覽:62
唯品會python解密 瀏覽:852
安卓高拍儀有什麼用 瀏覽:241
同步盤用什麼app好 瀏覽:188
伺服器上下載是什麼意思 瀏覽:169
s6怎麼接電話加密 瀏覽:152
電腦的命令指令符打不開怎麼辦 瀏覽:535
可編程邏輯器件cpld開發板 瀏覽:888
加裝文件夾圖片 瀏覽:425
27歲程序員offer 瀏覽:619
中國建築史梁思成pdf 瀏覽:198
單片機雙核與單核區別 瀏覽:850
xss攻擊需要編譯的符號 瀏覽:140
南京單片機定址 瀏覽:897
自製西門子編程電纜 瀏覽:807
伺服器還叫什麼名 瀏覽:712