Java源程序結構


完整的java源程序應該包括下列部分

1.package語句

l java編譯器為每個類生成一個字節碼文件,且文件名與類名相同,這就會帶來一個問題:同名的類會發生沖突。

所以package的兩個主要作用就呼之欲出了:管理類,解決命名沖突。

  例如:package com;public class Test{}

        package cn;public class Test{}

    雖然以上兩個類同名,但是並不會出現命名沖突;也可以理解為其實包名就相當於一個人的姓氏,而類名就相當於一個人的名;而一個人的姓名是姓+名;所以以上兩個類

  的全稱分別是:com.Test、cn.Test;當然就不會出現命名沖突了;

l 一般地,我們將具有相同功能的類放在一個package中。

2.import語句

l import 代表此類中需要引入和封裝的包,一般置頂。

1,加載已定義好的類或包
2,導入支持類(可以是JDK基礎類或者自己編寫的類),可以供本類調用方法和屬性。

l import導入聲明可分為兩種: 
    1,單類型導入(single-type-import) 例:import java.util.ArrayList;  
    2,按需類型導入(type-import-on-demand)   :import java.util.*;

l Import的使用主要是為了偷懶。Java為了解決命名沖突使用了package來管理類,那么問題就來了,如果在寫代碼的時候都使用類的全稱,例如一下這樣: 

java.io.InputStream is = java.lang.System.in;
java.io.InputStreamReader isr= new java.io.InputStreamReader(is);
java.io.BufferedReader br = new java.io.BufferedReader(isr);

這樣的代碼看起來確實不是那么舒服,寫起來更不舒服;所以我們使用了import,只需要在類聲明前導入相關包:

   import java.lang.System;
   import java.io.InputStream;
   import java.io.InputStreamReader;
   import java.io.BufferedReader 

代碼就清爽多了:

     InputStream = System.in;
     InputStreamReader isr = new InputStreamReader(is);
     BufferedReader br = new BufferedReader(isr);

所以有人說import的使用就是一種偷懶的做法,這一點,我並不否認;

l Import后出現命名沖突,在使用Import偷懶的時候也會出一些問題;例如:有人在同時import java.awt.*;import java.util.*后,在代碼里面使用List,這個時候就炸鍋了,因為這兩個下面都有List,編譯器就蒙圈了,它不知道,你要使用哪一個List;所以這個時候就要指定清楚,你具體使用哪一個。比如Java.util.List;這樣編譯器就知道了。

l import可以使用通配符*,*代表某package下所有的class,不包括子目錄。看到了吧,就是說*只能導入類不能導入子目錄,比如 import java.awt.*之后,你還是不能使用 java.awt.event下面的類,因為event是個子包啊,這個子包下面的類,*就無能為力了。現在知道為什么不能,直接import Java.*了吧。

 

總之,在使用import的時候,最好還是使用單類型導入,總結起來好處有兩個:(1)編譯速度:雖然無論是哪種導入都不影響Java代碼執行效率,但是在一個很大的項目中,它們會極大的影響編譯速度. (2)命名沖突:解決避免命名沖突問題的答案就是使用全名.而按需導入恰恰就是使用導入聲明初衷的否定. 

 

3./接口定義部分

類或者定義部分就是Java源程序的主體了:

l 類定義

[修飾符]class 類名[extends 父類] [implements 接口名]{[各種屬性][各種方法]} 

例如:

public class SearchDaoImpl extends BaseSearchDaoImpl implements SearchDao {
   protected final Log LOGGER = LogFactory.getLog(getClass());
   SearchConfigService searchConfigService;
   public SearchPage findPage(SearchPageable searchPageable) {
       return null;
   }  

l 接口定義

[修飾符]  interface 接口名 [ extends 父接口]  {[各種常量][各種方法的聲明]}

例如:

public interface TipDao extends BaseDao<Tip, Long> {
    boolean termExists(String term);
}

注:

  一個java源程序至多只能有一個公共類的定義。

  若java源程序有一個公共類的定義,則該源文件名字必須與該公共類的名字完全相同。

  若源程序中不包含公共類的定義,則該文件名可以任意取名。

  若一個源程序中有多個類定義,則在編譯時將為每個類生成一個。class文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM