Java中的import

有些人寫了一陣子 Java,但是對於 Java的 package 跟 import 仍是不太瞭解。不少人覺得原始碼 .java 文件中的 import 會讓編譯器把所 import 的程序統統寫到編譯好的 .class 檔案中,或是認爲 import 跟 C/C++的 #include 類似,實際上,這是錯誤的觀念。html

  讓咱們先了解一下,Java 的 package 到底有何用處。java

  其實,package 名稱就像是咱們的姓,而 class 名稱就像是咱們的名字。package 名稱有不少 . 的,就好像是複姓。好比說 java.lang.String,就是複姓 java.lang,名字爲 String 的類別;java.io.InputStream 則是複姓htm

  java.io,名字爲 InputStream 的類別。get

  Java 會使用 package 這種機制的緣由也很是明顯,就像咱們取姓名同樣,光是一間學校的同一屆同窗中,就有可能會出現很多同名的同窗,若是不取姓的話,那學校在處理學生數據,或是同窗彼此之間的稱呼,就會發生很大的困擾。相同的,全世界的 Java 類別數量,恐怕比臺灣人口還多,並且還不斷的在成長當中,若是類別不使用套件名稱,那在用到相同名稱的不一樣類別時,就會產生極大的困擾。幸運的是,Java 的套件名稱咱們能夠本身取,不像人的姓沒有太大的選擇 ( 因此有不少同名同姓的 ),若是依照 Sun 的規範來取套件名稱,那理論上不一樣人所取的套件名稱不會相同 ( 請參閱 "命名慣例"的相關文章 ),也就不會發生名稱衝突的狀況。編譯器

  但是問題來了,由於不少套件的名稱很是的長,在寫程序時,會多打好多字,花費很多時間,好比說:io

  java.io.InputStream is = java.lang.System.in;編譯

  java.io.InputStreamReader isr= new java.io.InputStreamReader(is);class

  java.io.BufferedReader br = new java.io.BufferedReader(isr);import

  實在是不美觀又麻煩。因而,Sun 想了一個辦法,就是 import。程序

  這個 import 就是在程序一開頭的時候,先說明程序中會用到那些類別的

  簡稱,也就是隻稱呼名字,不稱呼他的姓。首先,在檔案開頭寫:

  import java.lang.System;

  import java.io.InputStream;

  import java.io.InputStreamReader;

  import java.io.BufferedReader;

  這幾行說明了這四個姓名的類別,在程序中只用他的名字來稱呼,因此當程序中提到 System 就是指 java.lang.System,而 InputStream 就是指 java.io.InputStream,依此類推。因而原來的程序就變成:

  InputStream = System.in;

  InputStreamReader isr = new InputStreamReader(is);

  BufferedReader br = new BufferedReader(isr);

  這樣看起來是否是清爽多了呢?若是這些類別用的次數不少,那就更能體會到import 的好處了。但是這樣仍是不夠,由於懶是人的天性,仍是會有人以爲打太多 import 了也很浪費時間,因而 Sun 又提供了一個方法:

  import java.lang.*;

  import java.io.*;

  意思就是,等一下程序中提到的沒有姓名的類別,不是姓 java.lang,就是姓java.io,若是這兩個裏面有一樣名字的類別,而不幸的你又只用名字稱呼這個類別,那編譯器仍然會跟你抱怨,由於它仍是不知道你說的這個類別指那一

  個姓的類別。那可不能夠再懶一點呢,只寫:

  import java.*;

  歷史告訴咱們,人能夠懶,但不能太懶,這樣是不行的。由於那些類別是姓 java.io 而不是姓 java。就像姓『諸葛』的人應該不會喜歡你稱他爲『諸』先生吧。

  爲甚麼我一開始說 import 跟 #include 不一樣呢?由於 import 的功能到此爲止,它不像 #include 同樣,會將檔案內容載入進來。import 只是請編譯器幫你打字,讓編譯器把沒有姓的類別加上姓,並不會把別的文件的程式碼寫進來。若是你想練習打字,能夠不要使用 import,只要在用到類別的時候,用它的所有姓名來稱呼它就好了(就像例子一開始那樣),跟使用 import 徹底沒有甚麼兩樣。

  另外,雖然人不能夠太懶,可是 Sun 仍是幫咱們多偷了一點懶。由於java.lang 這個套件實在是太常太常太經常使用到了,幾乎沒有程序不用它的,因此無論你有沒有寫 import java.lang;,編譯器都會自動幫你補上,也就是說編譯器只要看到沒有姓的類別,它就會自動去 java.lang 裏面找找看,看這個類別是否是屬於這個套件的。因此咱們就不用特別去import java.lang了。

 

 

轉自:http://soft.chinabyte.com/database/361/11365861.shtml

相關文章
相關標籤/搜索