Java源程序結構

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

1.package語句

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

因此package的兩個主要做用就呼之欲出了:管理類,解決命名衝突。code

  例如:package com;public class Test{}blog

        package cn;public class Test{}接口

    雖然以上兩個類同名,可是並不會出現命名衝突;也能夠理解爲其實包名就至關於一我的的姓氏,而類名就至關於一我的的名;而一我的的姓名是姓+名;因此以上兩個類ip

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

l 通常地,咱們將具備相同功能的類放在一個package中。編譯器

2.import語句

l import 表明此類中須要引入和封裝的包,通常置頂。io

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文件。

相關文章
相關標籤/搜索