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

深入解讀Java代碼組織中的package包結(jié)構(gòu)

 更新時(shí)間:2016年03月16日 08:57:34   作者:vang  
這篇文章主要介紹了Java代碼組織中的package包結(jié)構(gòu),是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

如果我們?cè)贑lass對(duì)象上調(diào)用getPackage方法,就可以得到描述該類所在包的Package對(duì)象(Package類是在java.lang中定義的)。我們也可以用包名通過(guò)調(diào)用靜態(tài)方法getPackage或者調(diào)用靜態(tài)方法getPackages(該方法返回由系統(tǒng)中所有已知包構(gòu)成的數(shù)組)來(lái)獲得Package對(duì)象。getName方法可以返回包的全名。

  Package對(duì)象的使用與其他反射類型完全不同,即我們不能在運(yùn)行時(shí)創(chuàng)建或操縱包。我們可以使用Package對(duì)象來(lái)獲取有關(guān)包的信息,諸如包的用途、誰(shuí)創(chuàng)建了包、包的版本等。我們將把這些內(nèi)容延后到后面詳細(xì)介紹包時(shí)再討論。

包的命名
包的名字應(yīng)該避免與其他包沖突,所以選擇一個(gè)既有意義又唯一的名字是包設(shè)計(jì)的一個(gè)重要方面。但是全球的程序員都在開(kāi)發(fā)包,根本就沒(méi)有辦法獲知誰(shuí)采用了什么包名,因此選擇唯一的包名是一個(gè)難題。如果我們確定某個(gè)包只在我們的組織內(nèi)部使用,那么我們就可以讓內(nèi)部仲裁者(internal arbiter)來(lái)確保項(xiàng)目之間不會(huì)發(fā)生名字沖突。

  但是對(duì)于整個(gè)世界而言,這種方法是不實(shí)際的。包的標(biāo)識(shí)符都是簡(jiǎn)單的名字,一種比較好的能夠確保包名唯一的方法是使用Internet域名。如果我們所就職的公司的名字為Magic.lnc,該公司的域名為magi c.com,那么屬性包的聲明就應(yīng)該是:

  

  package com.magic.attr; 

注意,這里的域名構(gòu)成元素是按常規(guī)域名的倒序排列的。

  如果我們采用這種慣用法,那么除了在我們的組織內(nèi)部可能會(huì)產(chǎn)生沖突外,我們所采用的包名就不會(huì)與其他任何人的包名沖突了。如果我們的組織內(nèi)部確實(shí)產(chǎn)生了沖突(可能是大型的企業(yè)),那么我們可以使用更具體的域名來(lái)進(jìn)一步限定。許多大型公司都有內(nèi)部子域名,如east和europe,可以使用這樣的子域名來(lái)進(jìn)一步限定包的名字:

  package corn. magic.japan.attr;

  使用這種方案可能會(huì)使包的名字變得很長(zhǎng),但是相對(duì)比較安全。使用這種技巧的程序員不會(huì)選擇相同的包名,而不使用這種技巧的程序員也不會(huì)選擇我們所采用的名字。

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

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

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

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

  package adaptive. neural Net;

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

  包的嵌套僅僅是組織相關(guān)包的一種工具,它并不能提供包之間的任何特殊的訪問(wèn)權(quán)限。

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

包的注解

  包也可以有注解。但是問(wèn)題在于,由于包是一種組織結(jié)構(gòu),沒(méi)有源代碼實(shí)體,它們并沒(méi)有實(shí)際的定義,所以不能像對(duì)類或方法那樣對(duì)它們進(jìn)行注解,因此包的注解只能通過(guò)在源文件中對(duì)包的聲明語(yǔ)句進(jìn)行注解來(lái)實(shí)現(xiàn)。然而,在每個(gè)包中只能有一個(gè)包聲明可以擁有作用于它的注解。

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

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

  @DevelopmentSite("attr.project.org")

  @DevelopmentModel("open一source")

  package attr;

  其中Packagespec,Developmentsite和Devel opmentmodel用來(lái)修飾注解類型,當(dāng)然,它們具有運(yùn)行時(shí)的保存策略。package一info.java文件應(yīng)該和包中的其他源文件一起編譯。

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

包的訪問(wèn)
在聲明包中的頂層類和頂層接口的可訪問(wèn)性時(shí),有兩種選擇:包訪問(wèn)權(quán)限(package)和公共訪問(wèn)權(quán)限(public)。用public修飾的類或接口可以被包外的代碼所訪問(wèn),而沒(méi)有用public修飾的類型則具有包作用域:它們可以被同一個(gè)包中的其他代碼所訪問(wèn);但對(duì)于包外的代碼,甚至是子包中的代碼,它們都是隱藏的。我們?cè)诼暶黝愋蜁r(shí),應(yīng)該只把其他程序員需要使用的那些類型聲明為public的,而隱藏那些屬于包的實(shí)現(xiàn)細(xì)節(jié)的類型。這種技術(shù)給我們提供了極大的靈活性,由于程序員并不依賴于這些他們所不能訪問(wèn)的實(shí)現(xiàn)細(xì)節(jié)的類型,所以當(dāng)我們想改變實(shí)現(xiàn)細(xì)節(jié)時(shí),可以自由地改變它們。

  沒(méi)有被聲明為public,protected或private的類成員可以被包內(nèi)的任何代碼直接訪問(wèn),但對(duì)包外的代碼是隱藏的。換句話說(shuō),默認(rèn)的訪問(wèn)修飾符是“package",但接口的成員例外,它們的默認(rèn)訪問(wèn)修飾符是“public" .

  在包內(nèi)沒(méi)有聲明為private的字段或方法可以被該包中的所有其他代碼所訪問(wèn),因此,同一個(gè)包中的類都被認(rèn)為是“友好的”或“可以信任的”。這樣就使得我們可以定義組合了預(yù)定代碼(predefined code)和占位符代碼(placeholder code)的應(yīng)用框架,其中占位符代碼被框架類的子類覆蓋。預(yù)定義代碼可以使用包訪問(wèn)權(quán)限修飾符,這樣包內(nèi)的其他相互協(xié)作的代碼就可以直接訪問(wèn)它們,但對(duì)于包外用戶,這些代碼是不可訪問(wèn)的。然而,這些代碼所在包的子包是不被信任的,反之亦然。例如,在包dit中用包訪問(wèn)權(quán)限修飾符修飾的代碼不能被其子包dit.dat中的代碼所訪問(wèn),反之亦然。

  因此,每種類型都定義了三種不同的契約:

  .publi。契約:定義了類型的主要功能。

  .protected契約:定義了子類可獲得的用于特化目的的功能。

  .package契約:定義了包內(nèi)其他代碼可獲得的用來(lái)實(shí)現(xiàn)包內(nèi)類型之間協(xié)作的功能。所有這些契約都需要仔細(xì)考慮和設(shè)計(jì)。

  可訪問(wèn)性和及蓋方法

  只有在超類中可以訪問(wèn)到的方法才可以在子類中被覆蓋。如果超類中的某個(gè)方法不能被訪問(wèn),那么即使子類中的方法與該方法同名,在子類中也不能覆蓋該方法。當(dāng)某個(gè)方法在運(yùn)行時(shí)被調(diào)用時(shí),系統(tǒng)會(huì)考慮它的可訪問(wèn)性,從而決定運(yùn)行它的哪一個(gè)具體實(shí)現(xiàn)。

  下面這個(gè)特意構(gòu)建的例子解釋得更加清楚。假設(shè)我們?cè)赑1包中聲明了一個(gè)Abstract-Base類:

    package P1;

    { Ab Ab AbAb

       public abstract class AbstractBase

       private void pri()
   {
	   print( " stractBase.pri()”):} void pac () {print(" stractBase.pac() ” );
   }


       protected void pro()
   {
	   print( " stractBase.pro()" );
   }


       public void pub()
   {
	   print (" stractBase.pub()”);}

  public final void show()

  pri();

  pac();

  pro();

  pub();

  }

  }

  在這個(gè)類中,我們定義了4個(gè)方法,每個(gè)方法都具有不同的訪問(wèn)權(quán)限修飾符,且方法體都只是標(biāo)識(shí)其自身。方法show在當(dāng)前對(duì)象上依次調(diào)用了這4個(gè)方法,當(dāng)把該方法應(yīng)用于不同的子類對(duì)象時(shí),就可以說(shuō)明到底調(diào)用了這些方法的哪個(gè)實(shí)現(xiàn)。

  現(xiàn)在,我們定義類Concretel,這個(gè)類擴(kuò)展了AbstractBase類,但是位于P2包中:

  package P2;

  import P1.AbstractBase

  public class Concretel extends AbstractBase{

  public void pri(){print("Concretel.pri()”);}

  public void pac(){print("Concretel.pac()”);}

  public void pro(){print("Concretel.pro()”);}

  public void pub(){print("Concretel.pub()");}

  }

  在該類中重新聲明了超類中的4個(gè)方法,并改變了它們的實(shí)現(xiàn),這些實(shí)現(xiàn)在報(bào)告它們屬于Con-cretel類。同時(shí),它們的訪問(wèn)權(quán)限都被改成了public,以便其他代碼訪問(wèn)。執(zhí)行下面的代碼

  new Concretel().show():

  將產(chǎn)生如下輸出:

  AbstractBase.pri()

  AbstractBase.pac()

  Concretel.pro()

  Concretel.pub ()

  因?yàn)樗接蟹椒╬ri不能被子類(或其他類)所訪問(wèn),所以show方法總是調(diào)用AbstractBase類中的pri方法的實(shí)現(xiàn)。AbstractBase類中的具有包訪問(wèn)權(quán)限的pac方法不能被Concretel訪問(wèn),因此Concretel類中的pac方法的實(shí)現(xiàn)不能覆蓋AbstractBase類中的定義,故show方法調(diào)用的是AbstractBase.pac方法。pro方法和pub方法在Concretel類中都是可以訪問(wèn)的,同時(shí)也可以被覆蓋,所以show方法中調(diào)用的是Concretel類中的這兩個(gè)方法的實(shí)現(xiàn)。

  接卜采我們足義類Concrete2,來(lái)擴(kuò)展類Concretel,然后我們把它和AbstractBase類放到同一個(gè)包P1中':

  package P1;

  import P2.Concretel

  public class Concrete2 extends Concretel{

  public void pri(){print("Concrete2.pri()”);}

  public void pac(){print("Concrete2.pac ()”);}

  public void pro(){print("Concrete2.pro()”);}

  public void pub(){print("Concrete2.pub()");}

  }

  因?yàn)镃oncretel中的方法都具有public訪問(wèn)權(quán)限,所以在Concrete2中都可以訪問(wèn)到,而且Concrete2中的每一個(gè)方法分別對(duì)其相應(yīng)的方法進(jìn)行了覆蓋。此外,因?yàn)镃oncrete2和Ab-stractBase在同一個(gè)包中,所以在Concrete2中也可以訪問(wèn)到方法AbstractBase.pac,并且可以覆蓋方法Concrete2.pac。在Concrete2對(duì)象上調(diào)用show方法,打印結(jié)果如下:

  AbstractBase.pri()

  Concrete2.pac()

  Concrete2 .pro()

  Concrete2.pub()

  最后,我們定義類Concrete3來(lái)擴(kuò)展類Concrete2,并放在包P3中:

  package P3

  import P1.Concrete2;

  public class Concrete3 extends Concrete2{

  public void pri(){print("Concrete3.pri()”);}

  public void pac Q{print("Concrete3.pac()”);}

  public void pro(){print("Concrete3.pro()”);}

  public void pub(){print("Concrete3.pub()”);}

  }

  在Concrete3對(duì)象上調(diào)用show方法,打印結(jié)果如下:

  AbstractBase.pri()

  Concrete3.pac ()

  Concrete3.pro()

  Concrete3.pub()

  在這里方法Concrete3.pac看起來(lái)是覆蓋了不可訪問(wèn)的AbstractBase.pac方法,但實(shí)際上是,方法Concrete3.pac覆蓋了方法Concrete2.pac,而方法Concrete2.pac覆蓋了方法AbstractBase.pac,因此方法Concrete3.pac間接地覆蓋了方法AbstractBase.pac。通過(guò)在類Concrete2中重新把pac方法聲明為具有public訪問(wèn)權(quán)限,可以使其能夠被任何子類所訪問(wèn)和覆蓋。


包對(duì)象和規(guī)范

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

  ·public Stri ng getName ():返回該包的名字。

  .public string getspecificationTitle p:返回該包所實(shí)現(xiàn)的規(guī)范的標(biāo)題,如果標(biāo)題未知,則返回null,

  .public string getspecificationversion():返回一個(gè)描述該包所實(shí)現(xiàn)的規(guī)范的版本信息的字符串,如果版本信息未知,則返回null,

  .public string getspecificationvendor Q:返回供應(yīng)商的名字,這個(gè)供應(yīng)商擁有并維護(hù)該包所實(shí)現(xiàn)的規(guī)范,如果供應(yīng)商未知,則返回null,

  .public string getImplerentationTitle():返回該包所提供的實(shí)現(xiàn)的標(biāo)題,如果標(biāo)題未知,則返回null, ·public string getImplementationversion():返回一個(gè)描述該包所提供的實(shí)現(xiàn)的版本信息的字符串,如果版本信息未知,則返回null,

  ·public string getImplementationvendor():返回提供該實(shí)現(xiàn)的組織(供應(yīng)商)的名字,如果該組織未知,則返回null,

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

  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ī)范版本號(hào)由句點(diǎn)分隔符分開(kāi)的非負(fù)數(shù)字組成,如‘'2.0'‘或”11.0.12"。這種模式使得我們可以調(diào)用iscompatiblewith方法對(duì)遵循該模式的版本號(hào)與包的版本號(hào)進(jìn)行比較。如果包的版本號(hào)大于等于傳人的版本號(hào),那么該方法就返回true。這種比較每次只比較一個(gè)由句點(diǎn)分隔的數(shù)字,如果這些數(shù)字中任何一個(gè)小于傳遞進(jìn)來(lái)的版本號(hào)中對(duì)應(yīng)位置的值,那么這兩個(gè)版本就不兼容。如果其中一個(gè)版本號(hào)比另一個(gè)長(zhǎng),那么在短的版本號(hào)中缺少的部分將被認(rèn)為是零。例如,如果包的規(guī)范版本號(hào)是”1.4",并且我們用iscompatiblewith方法將其與”1.2","1.3.1'.或”.1.81.進(jìn)行比較時(shí),那么將返回true;但是如果與''1.4.2'.或”.5"進(jìn)行比較,那么將返回false。之所以得出這樣的結(jié)論,是因?yàn)檫@種比較機(jī)制假設(shè)規(guī)范版本是向后兼容的。

  實(shí)現(xiàn)的版本號(hào)沒(méi)有規(guī)定的格式,因?yàn)樘峁?shí)現(xiàn)的不同組織會(huì)對(duì)實(shí)現(xiàn)版本做不同的定義。在實(shí)現(xiàn)版本之間唯一能做的比較是測(cè)試版本是否相同,其中沒(méi)有向下兼容的假設(shè)。

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

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

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

  .protected Package de臺(tái)nePackage (String name,string specTitle,Stringspecversion,string specvendor, String implTitle,string implversion,string implvendor, uRL sealBase):該方法將返回一個(gè)Package對(duì)象,該對(duì)象具有給定的包名和由相應(yīng)的引元設(shè)置的規(guī)范和實(shí)現(xiàn)值。如果參數(shù)sealBase為null,那么這個(gè)包就是沒(méi)有密封的,否則包對(duì)于這個(gè)URL就是密封的:類的Package對(duì)象必須要在該類被定義之前定義,并且包的名字在類加載器中必須是唯一的。如果包名與現(xiàn)有名字重復(fù),就會(huì)拋出工11ega1ArgumentException異常。

  我們可以調(diào)用給定類的Class對(duì)象的getPackage方法來(lái)獲得這個(gè)類的Package對(duì)象。我們也可以用給定的包名調(diào)用靜態(tài)方Package.getPackage來(lái)獲得Package對(duì)象,或者調(diào)用靜態(tài)方Package.getPackages,它將返回由類加載器當(dāng)前已知的所有包組成Package數(shù)組。這兩個(gè)方法都與調(diào)用它們的代碼的類加載器有關(guān),因?yàn)檫@些代碼將調(diào)用其類加載器的get-Package或getPackages方法。這些類加載器的方法將搜索特定的類加載器及其所有父類加載器,如果對(duì)當(dāng)前類加載器沒(méi)有做任何設(shè)置,那么此時(shí)就會(huì)使用系統(tǒng)類加載器。請(qǐng)注意,如果包未知,那么類加載器方法將返回null,因?yàn)榇藭r(shí)還沒(méi)有加載包中的任何類型。

相關(guān)文章

  • Java線程同步問(wèn)題--哲學(xué)家就餐

    Java線程同步問(wèn)題--哲學(xué)家就餐

    這篇文章主要介紹了Java線程同步問(wèn)題,線程的同步是保證多線程安全訪問(wèn)競(jìng)爭(zhēng)資源的一種手段。線程的同步是Java多線程編程的難點(diǎn),下面文章舉例的方式講解Java線程同步,具有一定的參考價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Java工具之ja-netfilter?2022.1?配置教程

    Java工具之ja-netfilter?2022.1?配置教程

    這篇文章主要介紹了Java工具之ja-netfilter?2022.1?配置教程,本防火墻基于javaagent,所以目前只有基于java的程序能夠使用,需要的朋友可以參考下
    2022-04-04
  • Java實(shí)戰(zhàn)項(xiàng)目之校園跑腿管理系統(tǒng)的實(shí)現(xiàn)

    Java實(shí)戰(zhàn)項(xiàng)目之校園跑腿管理系統(tǒng)的實(shí)現(xiàn)

    只有理論是不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+vue+maven+elementui+mysql實(shí)現(xiàn)一個(gè)校園跑腿管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2022-01-01
  • 基于Java實(shí)現(xiàn)多線程下載并允許斷點(diǎn)續(xù)傳

    基于Java實(shí)現(xiàn)多線程下載并允許斷點(diǎn)續(xù)傳

    這篇文章主要介紹了基于Java實(shí)現(xiàn)多線程下載并允許斷點(diǎn)續(xù)傳,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • JAVA StringBuffer類與StringTokenizer類代碼解析

    JAVA StringBuffer類與StringTokenizer類代碼解析

    這篇文章主要介紹了JAVA StringBuffer類與StringTokenizer類代碼解析,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • SpringBoot 整合 Shiro 密碼登錄的實(shí)現(xiàn)代碼

    SpringBoot 整合 Shiro 密碼登錄的實(shí)現(xiàn)代碼

    這篇文章主要介紹了SpringBoot 整合 Shiro 密碼登錄的實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Spring配置多個(gè)數(shù)據(jù)源并實(shí)現(xiàn)數(shù)據(jù)源的動(dòng)態(tài)切換功能

    Spring配置多個(gè)數(shù)據(jù)源并實(shí)現(xiàn)數(shù)據(jù)源的動(dòng)態(tài)切換功能

    這篇文章主要介紹了Spring配置多個(gè)數(shù)據(jù)源并實(shí)現(xiàn)數(shù)據(jù)源的動(dòng)態(tài)切換功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • java后端如何獲取完整url的代碼

    java后端如何獲取完整url的代碼

    這篇文章主要介紹了java后端如何獲取完整url的代碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java中的clone方法實(shí)例詳解

    Java中的clone方法實(shí)例詳解

    這篇文章主要介紹了Java中的clone方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 構(gòu)建多模塊的Spring Boot項(xiàng)目步驟全紀(jì)錄

    構(gòu)建多模塊的Spring Boot項(xiàng)目步驟全紀(jì)錄

    這篇文章主要給大家介紹了關(guān)于如何構(gòu)建多模塊的Spring Boot項(xiàng)目的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評(píng)論

朔州市| 彭泽县| 沾益县| 闸北区| 江安县| 乌什县| 鄂伦春自治旗| 临高县| 黄龙县| 卢氏县| 古交市| 淮安市| 响水县| 宿州市| 栾川县| 康乐县| 彭山县| 德州市| 嵊州市| 保定市| 清水河县| 论坛| 岳池县| 漳浦县| 苗栗县| 茶陵县| 琼海市| 乌拉特前旗| 饶平县| 怀集县| 永清县| 吴堡县| 兴国县| 海伦市| 台湾省| 成武县| 长岛县| 灵石县| 临武县| 昌邑市| 聂拉木县|