包+类导入+静态导入+类放入包中+包作用域
【0】README
0.1)本文轉自 core java volume 1, 旨在理清 包和類導入的相關知識;
【1】 包
1.1) java 允許使用包將類組織起來,包可以方便組織代碼,并將自己的代碼與別人提供的代碼庫分開管理;
1.2) 標準的java 類庫分別在多個包中, 包括 java.lang、java.util 和java.net;所有標準的 java 包都處于java 和 javax 包層次中;
1.3) 使用包的主要原因是確保類名的唯一性;且為了保證包名的絕對唯一,Sun 公司建議將公司的因特網域名以逆序的形式作為包名;
【2】 類的導入
2.1)一個類可以使用所屬包中的所有類,以及其他包中的共有類;
2.2)我們可以采用兩種方式訪問另一個包中的公有類:
- 第一種方式是: 在類名之前添加完整的包名; java.util.Date today = new java.util.Date();
- 第二種方式是:更簡單的方式是 使用import 語句;
Attention)需要注意的是, 只能使用星號(*)導入一個包, 而不能使用 import java.* 或 import java.*.* 導入以 java為前綴的所有包;
2.3)出現的問題+解決方法:當類名發生命名沖突的時候,就要注意包名, 看個荔枝:
如,java.util 和 java.sql 都有日期類Date, 如果導入了兩個包:
- 2.3.1)問題: 那么在程序中使用的Date類的時候,就會出現編譯錯誤;
- 2.3.1)解決方法: 此時編譯器無法確定程序使用的是哪一個Date 類;可以增加一個 import語句來解決這個問題:
- 2.3.2)問題: 如果這兩個 Date 類都需要使用;
- 2.3.2)解決方法: 在每個類名的前面加上完整的包名:
在包中定位類是編譯器的工作, 類文件中的字節碼肯定使用完整的包名來引用其他類;
【3】 靜態導入
3.1) import語句不僅可以導入類,還增加了導入靜態方法和靜態域的功能;
3.2)看個荔枝(導入靜態域 和 靜態方法):
如,添加一條指令, import static java.lang.System.*; 就可以使用 System類的靜態方法和靜態域, 而不必加類名前綴:
3.3)看個荔枝(導入特定的方法和域):
import static java.lang.Math.sqrt; import static java.lang.Math.pow; import static java.lang.System.out;public static void main(String[] args){double aDouble;aDouble = sqrt(4);out.printf("%4f", pow(aDouble, 2));}
我們還可以看到 sqrt(pow(x, 2) + pow(y, 2)) 看起來要比 Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)) 清晰多了;
【4】 將類放入包中
4.1)要想將類放入包中, 就必須將包的名字放在源文件的開頭, 包中定義類的代碼之前;
4.2)默認包:如果沒有在 源文件中放置 package 語句, 這個源文件的類就被放置在默認包中;
4.3)將包中的文件放到與完整包名匹配的子目錄中, 如, com.horstmann.corejava 包中的所有源文件應該被放置在 子目錄 com/hosrtman/corejava 中;編譯器將類文件也放在相同的目錄結構中;
4.4)需要注意: 編譯器對文件(帶有文件分隔符 和 擴展名.java 的文件)進行操作, 而java 解釋器加載類(帶有點(.)分隔符), 如(.號 和 /號 的區別)
Alert)編譯器在編譯源文件的時候不檢查目錄結構(但該程序卻無法運行):
如, 假定有一個源文件開頭有下列語句: package com.mycompany;即使這個源文件沒有在子目錄 com/mycompany 下,也可以進行編譯;如果它不依賴于其他包, 就不會出現編譯錯誤。但是,最終的出程序將無法運行,因為虛擬機找不到類文件;
【5】包的作用域
1)如果沒有指定 public 或 private, 那么這個部分(類、方法或變量)可以被同一個包中的所有方法訪問;
Attention)
- A1) JDK 的實現者修改了類加載器, 明確禁止加載用戶自定義的、包名以“java.” 開始的類!
- A2)可以通過 包密封機制 來解決將各種包混雜在一起的問題, 如果將一個包密封起來,就不能再向這個包添加類了;( 制作包含密封包的 JAR 文件的方法)
總結
以上是生活随笔為你收集整理的包+类导入+静态导入+类放入包中+包作用域的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一加 Open 可折叠手机真机曝光
- 下一篇: java 白皮书的关键术语