最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java編程中包package的內容與包對象的規(guī)范

 更新時間:2015年12月21日 16:08:43   作者:爪哇小博  
這篇文章主要介紹了Java編程中包package的內容與包對象的規(guī)范,是Java入門學習中的基礎知識,需要的朋友可以參考下

包的內容
包的內容應該仔細設計,使其只包含在功能上相關的類和接口。包中的類可以自由地訪問該包中其他類的非私有成員,有些類甚至可能有足夠的權限去訪問其他類的內部細節(jié),為了避免這樣的類對類成員進行誤操作,我們需要對類成員進行保護。任何沒有被聲明為private的成員都可以被同一個包中的其他所有類型訪問,所以任何不相關的類之間的藕合程度都可能會比我們所期望的程度高。

  包還為尋找有用的接口和類的程序員提供了邏輯分組的功能。由不相關的類組成的包使程序員很難分辨出哪些接口和類是有用的,而類的邏輯分組可以幫助程序員重用代碼,因為程序員通過邏輯分組能夠更容易地找到他們所需要的東西。如果包中只包含相關的、緊藕合的類型集,則意味著我們可以給類型取一些更直觀的名字,從而避免名字沖突。

  包可以嵌套。例如,java.lang就是一個嵌套包,其中,包Lang嵌套在更大的包java中,而包j ava卻還包含一些其他的包。嵌套使得相關的包構成了具有層次結構的命名系統(tǒng)。

  例如,為了創(chuàng)建一組包,用于諸如神經(jīng)網(wǎng)絡和遺傳算法這樣的自適應系統(tǒng),我們可以用以圓點分隔的名字來命名包,從而創(chuàng)建嵌套包:

  package adaptive. neural Net;

  含有上面這條聲明語句的源文件位于adaptive.neuralNet包中,而adaptive.neuralNet包本身又是adaptive包的子包。adaptive包中可能包含一些與通用的自適應算法相關的類,例如泛化問題陳述類或基準測試類。在層次結構中處于更深位置的包(例如adaptive. neu-ralNet或adaptive.genetic)包含與特定類型的自適應算法相關的類。

  包的嵌套僅僅是組織相關包的一種工具,它并不能提供包之間的任何特殊的訪問權限。

  adaptive.genetic包中的類代碼無法訪問adaptive或adaptive.neuralNet包中具有包訪問權限的成員,包作用域只適用于特定的包。包的嵌套可以對相關的包進行分組,并幫助程序員更方便地在邏輯層次中找到想要的類,但是除此之外,它并未帶來其他的任何益處。

  包的注解

  包也可以有注解。但是問題在于,由于包是一種組織結構,沒有源代碼實體,它們并沒有實際的定義,所以不能像對類或方法那樣對它們進行注解,因此包的注解只能通過在源文件中對包的聲明語句進行注解來實現(xiàn)。然而,在每個包中只能有一個包聲明可以擁有作用于它的注解。

  那么究竟如何對包進行注解呢?事實上,Java語言并沒有強制程序員必須使用某種方式來處理“單一注解的包語句”規(guī)則。所建議的方式是在包目錄中創(chuàng)建一個名為package一i nfo.java的文件,在這個文件中只存儲包語句和該包的注解,而不放置任何其他內容。例如,用于attr包的package一info.java文件看起來就是這樣的:

  @PackageSpec(name二”Attr Project",version="1.0"

  @DevelopmentSite("attr.project.org")

  @DevelopmentModel("open一source")

  package attr;

  其中Packagespec,Developmentsite和Devel opmentmodel用來修飾注解類型,當然,它們具有運行時的保存策略。package一info.java文件應該和包中的其他源文件一起編譯。

  我們推薦將所有與包相關的信息都放置在package一info. java文件中。如果你這樣做了,那么你就可以在文件的開頭放置文檔注釋,從而使這些文檔被注釋成包文檔。

包對象和規(guī)范
包通常會實現(xiàn)某種規(guī)范,并且通常是來自于某個組織的。Package對象與其他的反射類型不同,不能用來創(chuàng)建或操作包,而只能充當提供信息的知識庫,用來提供有關包所實現(xiàn)的規(guī)范的信息(規(guī)范的標題、供應商和版本號)和有關包的實現(xiàn)本身的信息(包的標題、供應商和版本號)。雖然包通常來自于單個的組織,但它所實現(xiàn)的規(guī)范(如統(tǒng)計分析庫)卻可能是其他組織已定義過的。使用包的程序可能需要知道該包所實現(xiàn)的規(guī)范的版本,從而可以使用只在某個版本中定義的功能。類似地,這些程序還可能需要知道提供給它的是哪個實現(xiàn)版本,這主要是為了處理在不同版本中可能存在的缺陷。Package類的一些主要方法允許訪問到這些信息:

  •   ·public Stri ng getName ():返回該包的名字。
  •   .public string getspecificationTitle p:返回該包所實現(xiàn)的規(guī)范的標題,如果標題未知,則返回null,
  •   .public string getspecificationversion():返回一個描述該包所實現(xiàn)的規(guī)范的版本信息的字符串,如果版本信息未知,則返回null,
  •   .public string getspecificationvendor Q:返回供應商的名字,這個供應商擁有并維護該包所實現(xiàn)的規(guī)范,如果供應商未知,則返回null,
  •   .public string getImplerentationTitle():返回該包所提供的實現(xiàn)的標題,如果標題未知,則返回null, ·public string getImplementationversion():返回一個描述該包所提供的實現(xiàn)的版本信息的字符串,如果版本信息未知,則返回null,
  •   ·public string getImplementationvendor():返回提供該實現(xiàn)的組織(供應商)的名字,如果該組織未知,則返回null,

  例如,在我們的系統(tǒng)中提取java.lang包的這些信息,將會得到如下結果:'

  Specification Title: Java Platform API Specification

  Specification Version: 1.4

  Specification Vendor:Sun Microsystems,Inc.

  Implementation Title:Java Runtime Environment

  Implementation Version:1.5.0_02

  Implementation Vendor: Sun Microsystems,Inc.

  規(guī)范版本號由句點分隔符分開的非負數(shù)字組成,如‘'2.0'‘或”11.0.12"。這種模式使得我們可以調用iscompatiblewith方法對遵循該模式的版本號與包的版本號進行比較。如果包的版本號大于等于傳人的版本號,那么該方法就返回true。這種比較每次只比較一個由句點分隔的數(shù)字,如果這些數(shù)字中任何一個小于傳遞進來的版本號中對應位置的值,那么這兩個版本就不兼容。如果其中一個版本號比另一個長,那么在短的版本號中缺少的部分將被認為是零。例如,如果包的規(guī)范版本號是”1.4",并且我們用iscompatiblewith方法將其與”1.2","1.3.1'.或”.1.81.進行比較時,那么將返回true;但是如果與''1.4.2'.或”.5"進行比較,那么將返回false。之所以得出這樣的結論,是因為這種比較機制假設規(guī)范版本是向后兼容的。

  實現(xiàn)的版本號沒有規(guī)定的格式,因為提供實現(xiàn)的不同組織會對實現(xiàn)版本做不同的定義。在實現(xiàn)版本之間唯一能做的比較是測試版本是否相同,其中沒有向下兼容的假設。

  包可以被密封起來,這意味著不能再向這個包中添加類了。未密封的包可以包含來自類搜索路徑中多個不同位置的類,而被密封的包的內容必須來自相同的位置—要么是某個特定的歸檔文件,要么是由某個URL指定的位置。有兩種方法可以確定一個包是否被密封了:

  .public boolean issealed p:如果該包被密封了,則返回trueo

  .public boolean issealed(URL url):如果該包對于給定的URL是密封的,則返回true,也就是說,該包中的類可以從這個給定的URL處加載。如果包中的類不能從給定的URL加載,或者包沒有被密封,則返回false,包的規(guī)范和實現(xiàn)信息通常是作為與包存儲在一起的清單文件的一部分而提供的—例如作為Java歸檔文件(jar)中的清單文件的一部分,就像25.9.2節(jié)“歸檔文件java.util.jar”中描述的那樣。當加載包中類時,這些信息就會被讀人。類加載器(ClassLoader)可以為它要加載的類動態(tài)地定義一個Package對象:

  我們可以調用給定類的Class對象的getPackage方法來獲得這個類的Package對象。我們也可以用給定的包名調用靜態(tài)方Package.getPackage來獲得Package對象,或者調用靜態(tài)方Package.getPackages,它將返回由類加載器當前已知的所有包組成Package數(shù)組。這兩個方法都與調用它們的代碼的類加載器有關,因為這些代碼將調用其類加載器的get-Package或getPackages方法。這些類加載器的方法將搜索特定的類加載器及其所有父類加載器,如果對當前類加載器沒有做任何設置,那么此時就會使用系統(tǒng)類加載器。請注意,如果包未知,那么類加載器方法將返回null,因為此時還沒有加載包中的任何類型。

相關文章

  • MyBatis深入分析數(shù)據(jù)庫交互與關系映射

    MyBatis深入分析數(shù)據(jù)庫交互與關系映射

    這篇文章主要介紹了MyBatis中的數(shù)據(jù)庫交互與關系映射,MyBatis是一款優(yōu)秀的持久層框架,它支持定制化SQL、存儲過程以及高級映射,MyBatis避免了幾乎所有的JDBC代碼和手動設置參數(shù)以及獲取結果集,需要的朋友可以參考下
    2024-05-05
  • java 動態(tài)加載的實現(xiàn)代碼

    java 動態(tài)加載的實現(xiàn)代碼

    這篇文章主要介紹了java 動態(tài)加載的實現(xiàn)代碼的相關資料,Java動態(tài)加載類主要是為了不改變主程序代碼,通過修改配置文件就可以操作不同的對象執(zhí)行不同的功能,需要的朋友可以參考下
    2017-07-07
  • Spring Security認證提供程序示例詳解

    Spring Security認證提供程序示例詳解

    這篇文章主要給大家介紹了關于Spring Security認證提供程序的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring Security具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • SpringBoot入門原理及優(yōu)勢分析

    SpringBoot入門原理及優(yōu)勢分析

    本篇文章主要來為大家介紹SpringBoot入門原理及優(yōu)勢分析,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進步,早日升職加薪
    2021-09-09
  • SpringBoot動態(tài)定時任務實現(xiàn)完整版

    SpringBoot動態(tài)定時任務實現(xiàn)完整版

    最近有幸要開發(fā)個動態(tài)定時任務,這里簡單再梳理一下,下面這篇文章主要給大家介紹了關于SpringBoot動態(tài)定時任務實現(xiàn)的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • Mybatis 創(chuàng)建方法、全局配置教程詳解

    Mybatis 創(chuàng)建方法、全局配置教程詳解

    MyBatis是一個半自動化的輕量級的持久化層框架。 MyBatis實際上是Ibatis3.0版本以后的持久化層框架,下面通過本文給大家分享Mybatis 創(chuàng)建方法、全局配置教程詳解,需要的朋友參考下吧
    2017-09-09
  • 基于Java快速實現(xiàn)一個簡單版的HashMap詳解

    基于Java快速實現(xiàn)一個簡單版的HashMap詳解

    這篇文章主要為大家詳細介紹了如何利用Java簡單實現(xiàn)一個底層數(shù)據(jù)結構為數(shù)組?+?鏈表的HashMap,不考慮鏈表長度超過8個時變?yōu)榧t黑樹的情況,需要的可以參考一下
    2023-02-02
  • 詳談Java中instanceof和isInstance的區(qū)別

    詳談Java中instanceof和isInstance的區(qū)別

    下面小編就為大家?guī)硪黄斦凧ava中instanceof和isInstance的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • 多數(shù)據(jù)源@DS和@Transactional實戰(zhàn)

    多數(shù)據(jù)源@DS和@Transactional實戰(zhàn)

    這篇文章主要介紹了多數(shù)據(jù)源@DS和@Transactional實戰(zhàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • springboot-dubbo cannot be cast to問題及解決

    springboot-dubbo cannot be cast to問題及解決

    這篇文章主要介紹了springboot-dubbo cannot be cast to問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評論

西青区| 天气| 正定县| 长沙市| 中江县| 民乐县| 民乐县| 嘉定区| 论坛| 昂仁县| 怀化市| 繁昌县| 兰坪| 南华县| 饶河县| 潼关县| 定陶县| 昌邑市| 荆门市| 榆中县| 新巴尔虎左旗| 南城县| 湖南省| 宝鸡市| 库尔勒市| 耒阳市| 安康市| 江川县| 定结县| 湟源县| 隆昌县| 平乐县| 微山县| 宁津县| 阜平县| 阿图什市| 张掖市| 新宁县| 德兴市| 镇安县| 顺平县|