完整的java源程序應該包括下列部分:java
l java編譯器爲每一個類生成一個字節碼文件,且文件名與類名相同,這就會帶來一個問題:同名的類會發生衝突。spa
l 因此package的兩個主要做用就呼之欲出了:管理類,解決命名衝突。code
例如:package com;public class Test{}blog
package cn;public class Test{}接口
雖然以上兩個類同名,可是並不會出現命名衝突;也能夠理解爲其實包名就至關於一我的的姓氏,而類名就至關於一我的的名;而一我的的姓名是姓+名;因此以上兩個類ip
的全稱分別是:com.Test、cn.Test;固然就不會出現命名衝突了;get
l 通常地,咱們將具備相同功能的類放在一個package中。編譯器
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)命名衝突:解決避免命名衝突問題的答案就是使用全名.而按需導入偏偏就是使用導入聲明初衷的否認.
類或者定義部分就是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文件。