国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

包+類導入+靜態導入+類放入包中+包作用域

2019-11-14 15:12:50
字體:
來源:轉載
供稿:網友

【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, 如果導入了兩個包:

import java.util.* ;import java.sql.*;
  • 2.3.1)問題: 那么在程序中使用的Date類的時候,就會出現編譯錯誤;
  • 2.3.1)解決方法: 此時編譯器無法確定程序使用的是哪一個Date 類;可以增加一個 import語句來解決這個問題:

    import java.util.* ;import java.sql.*;import java.util.Date ;
  • 2.3.2)問題: 如果這兩個 Date 類都需要使用;
  • 2.3.2)解決方法: 在每個類名的前面加上完整的包名:

    java.util.Date today = new java.util.Date();java.sql.Date today = new java.sql.Date();

    在包中定位類是編譯器的工作, 類文件中的字節碼肯定使用完整的包名來引用其他類;


    【3】 靜態導入

    3.1) import語句不僅可以導入類,還增加了導入靜態方法和靜態域的功能;
    3.2)看個荔枝(導入靜態域 和 靜態方法):
    如,添加一條指令, import static java.lang.System.*; 就可以使用 System類的靜態方法和靜態域, 而不必加類名前綴:

    out.PRintln("hello, world");exit(0);

    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 解釋器加載類(帶有點(.)分隔符), 如(.號 和 /號 的區別)

javac com/mycompany/Pay.javajava com.mycompany.Pay.java

Alert)編譯器在編譯源文件的時候不檢查目錄結構(但該程序卻無法運行):
如, 假定有一個源文件開頭有下列語句: package com.mycompany;即使這個源文件沒有在子目錄 com/mycompany 下,也可以進行編譯;如果它不依賴于其他包, 就不會出現編譯錯誤。但是,最終的出程序將無法運行,因為虛擬機找不到類文件;


【5】包的作用域

1)如果沒有指定 public 或 private, 那么這個部分(類、方法或變量)可以被同一個包中的所有方法訪問;
Attention)

  • A1) JDK 的實現者修改了類加載器, 明確禁止加載用戶自定義的、包名以“java.” 開始的類!
  • A2)可以通過 包密封機制 來解決將各種包混雜在一起的問題, 如果將一個包密封起來,就不能再向這個包添加類了;( 制作包含密封包的 JAR 文件的方法)

上一篇:java發展簡史


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吴旗县| 永年县| 林口县| 武山县| 通州区| 呼图壁县| 通州区| 临桂县| 迭部县| 苍梧县| 武邑县| 海门市| 柘荣县| 荥阳市| 梁山县| 阜南县| 肇州县| 沁水县| 社会| 江阴市| 都安| 孟连| 金沙县| 凌海市| 墨脱县| 新巴尔虎右旗| 沛县| 乡城县| 伽师县| 景洪市| 阿克苏市| 鄂伦春自治旗| 乌什县| 佛坪县| 辽阳县| 宝兴县| 霍山县| 龙口市| 湘潭县| 眉山市| 安塞县|