當一個專案非常龐大的時候,有各式各樣不同功能的程式碼,這時候如果沒有分類的話,不是你的眼睛先脫窗就是你的腦袋先爆炸。
Java使用package 進行分類,使用import 將不同分類好的package 引入使用。
package代表一個包 ,裡面放的是這個程式中定義好的類或接口 等文件位置,一個.java 文件中只會有一個package ,並且要放在class 外面和上面。
格式:package folder_name;
一般在命名一個專案時,會依照網域的倒過來並且全部使用小寫命名(並且以能夠一眼就知道它的功能是甚麼為主,假設今天公司網域為www.jaspercompany.com 時,會設定成com/jaspercompany/各個java的package。
例如這樣:
src/
└── com/
└── jaspercompany/
└── person/
└── Person.java
在Person.jave 檔案中的上方會有這個package 的位置。
package com.jaspercompany.people;
package 中也可以再放其他的package ,並且會用. 當作是不同資料夾的分層。
格式:package folder_name.other_folder_name;
src/
└── com/
└── jaspercompany/
└── person/
└── Person.java
└── person_behavior
└── PersonBehavior.java
在PersonBehavior.jave 檔案中的上方會有這個package 的位置。
package com.jaspercompany.people.person_behavior;
使用package 的優點:
class 時能夠標示能不能夠給其他的class 使用(後續會再提到)。一個package 中不可以定義多個相同名稱的class,但是不同的package是可以定義相同名稱的。
import指的是從其他定義好的package 中引用class使用。
import java.utils.Arrays;
這樣就可以使用Arrays 中的方法等。
當要引用這個package中的所有class時可以在後面直接加上* 。
例如:
import java.utils.*;
這樣就可以直接使用java.utils 中所有的class ,但是如果裡面的class 又有其他的package 時,是沒有辦法直接使用。
當使用不同package 但是相同class 名稱時,其中一個可以使用import 的方式,但是另一個需要在使用時輸入完整的package 位置。
例如:
import java.util.Date;
public class Person {
public static void main(String[] args) {
Date birthday = new Date();
java.sql.Date now = new java.sql.Date(415657L);
}
}
已經import java.util.Date 了,所以birthday 是可以直接宣告型別 並實例化 ,但是要使用java.sql.Date 時,在宣告時需要加入完整的package 位置,並且實例化 時也同樣要加上。