欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java 命名空間 命名規(guī)則

 更新時(shí)間:2008年01月30日 20:55:09   作者:  
java 命名空間 命名規(guī)則

圖 1 parent delegation模型

   需要指出的是,Class Loader是對(duì)象,它的父子關(guān)系和類的父子關(guān)系沒有任何關(guān)系。一對(duì)父子loader可能實(shí)例化自同一個(gè)Class,也可能不是,甚至父loader實(shí)例化自子類,子loader實(shí)例化自父類。假設(shè)MyClassLoader繼承自ParentClassLoader,我們可以有如下父子loader:

ClassLoader loader1 = new MyClassLoader();
//參數(shù) loader1 為 parent
ClassLoader loader2 = new ParentClassLoader(loader1); 
    那么parent delegation模型為什么更安全了?因?yàn)樵诖四P拖掠脩糇远x的類裝載器不可能裝載應(yīng)該由父親裝載器裝載的可靠類,從而防止不可靠甚至惡意的代碼代替由父親裝載器裝載的可靠代碼。實(shí)際上,類裝載器的編寫者可以自由選擇不用把請(qǐng)求委托給parent,但正如上所說,會(huì)帶來安全的問題。

命名空間及其作用

   每個(gè)類裝載器有自己的命名空間,命名空間由所有以此裝載器為初始類裝載器的類組成。不同命名空間的兩個(gè)類是不可見的,但只要得到類所對(duì)應(yīng)的Class對(duì)象的reference,還是可以訪問另一命名空間的類。

   例2演示了一個(gè)命名空間的類如何使用另一命名空間的類。在例子中,LoaderSample2由系統(tǒng)類裝載器裝載,LoaderSample3由自定義的裝載器loader負(fù)責(zé)裝載,兩個(gè)類不在同一命名空間,但LoaderSample2得到了LoaderSample3所對(duì)應(yīng)的Class對(duì)象的reference,所以它可以訪問LoaderSampl3中公共的成員(如age)。

例2  不同命名空間的類的訪問

/*LoaderSample2.java*/import java.net.*;import java.lang.reflect.*;public class LoaderSample2 {    public static void main(String[] args) {        try {            String path = System.getProperty("user.dir");            URL[] us = {new URL("file://" + path + "/sub/")};            ClassLoader loader = new URLClassLoader(us);            Class c = loader.loadClass("LoaderSample3");            Object o = c.newInstance();            Field f = c.getField("age");            int age = f.getInt(o);            System.out.println("age is " + age);        } catch (Exception e) {            e.printStackTrace();        }    }
}
/*sub/Loadersample3.java*/public class LoaderSample3 {    static {        System.out.println("LoaderSample3 loaded");    }    public int age = 30;}
編譯:
javac LoaderSample2.java; 
javac sub/LoaderSample3.java

運(yùn)行:java LoaderSample2

LoaderSample3 loaded
age is 30

從運(yùn)行結(jié)果中可以看出,在類LoaderSample2中可以創(chuàng)建處于另一命名空間的類LoaderSample3中的對(duì)象并可以訪問其公共成員age。

運(yùn)行時(shí)包(runtime package)

    由同一類裝載器定義裝載的屬于相同包的類組成了運(yùn)行時(shí)包,決定兩個(gè)類是不是屬于同一個(gè)運(yùn)行時(shí)包,不僅要看它們的包名是否相同,還要看類裝載器是否相同。只有屬于同一運(yùn)行時(shí)包的類才能互相訪問包可見的類和成員。這樣的限制避免了用戶自己的代碼冒充核心類庫(kù)的類訪問核心類庫(kù)包可見成員的情況。假設(shè)用戶自己定義了一個(gè)類java.lang.Yes,并用用戶自定義的類裝載器裝載,由于java.lang.Yes和核心類庫(kù)java.lang.*由不同的裝載器裝載,它們屬于不同的運(yùn)行時(shí)包,所以java.lang.Yes不能訪問核心類庫(kù)java.lang中類的包可見的成員。 

總結(jié)

   在簡(jiǎn)單討論了類裝載器,parent delegation模型,命名空間,運(yùn)行時(shí)包后,相信大家已經(jīng)對(duì)它們的作用有了一定的了解。命名空間并沒有完全禁止屬于不同空間的類的互相訪問,雙親委托模型加強(qiáng)了Java的安全,運(yùn)行時(shí)包增加了對(duì)包可見成員的保護(hù)。

相關(guān)文章

  • Java看完秒懂版熔斷和降級(jí)的關(guān)系

    Java看完秒懂版熔斷和降級(jí)的關(guān)系

    這篇文章主要介紹了Java熔斷和降級(jí)的關(guān)系,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • spring boot使用WebClient調(diào)用HTTP服務(wù)代碼示例

    spring boot使用WebClient調(diào)用HTTP服務(wù)代碼示例

    這篇文章主要介紹了spring boot使用WebClient調(diào)用HTTP服務(wù)代碼示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 詳解Java中的時(shí)區(qū)類TimeZone的用法

    詳解Java中的時(shí)區(qū)類TimeZone的用法

    TimeZone可以用來獲取或者規(guī)定時(shí)區(qū),也可以用來計(jì)算時(shí)差,這里我們就來詳解Java中的時(shí)區(qū)類TimeZone的用法,特別要注意下面所提到的TimeZone相關(guān)的時(shí)間校準(zhǔn)問題.
    2016-06-06
  • Spring Boot如何通過自定義注解實(shí)現(xiàn)日志打印詳解

    Spring Boot如何通過自定義注解實(shí)現(xiàn)日志打印詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot如何通過自定義注解實(shí)現(xiàn)日志打印的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • spring boot jpa寫原生sql報(bào)Cannot resolve table錯(cuò)誤解決方法

    spring boot jpa寫原生sql報(bào)Cannot resolve table錯(cuò)誤解決方法

    在本篇文章里小編給大家整理的是關(guān)于spring boot jpa寫原生sql報(bào)Cannot resolve table錯(cuò)誤的解決方法,需要的朋友學(xué)習(xí)下。
    2019-11-11
  • Java設(shè)計(jì)模式之觀察者模式(Observer模式)介紹

    Java設(shè)計(jì)模式之觀察者模式(Observer模式)介紹

    這篇文章主要介紹了Java設(shè)計(jì)模式之觀察者模式(Observer模式)介紹,Java深入到一定程度,就不可避免的碰到設(shè)計(jì)模式(design pattern)這一概念,了解設(shè)計(jì)模式,將使自己對(duì)java中的接口或抽象類應(yīng)用有更深的理解,需要的朋友可以參考下
    2015-03-03
  • java數(shù)組的初始化及操作詳解

    java數(shù)組的初始化及操作詳解

    在本文中小編給大家整理了關(guān)于java數(shù)組的初始化及操作的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的讀者們參考下。
    2019-07-07
  • Websocket如何保證接收消息完整性

    Websocket如何保證接收消息完整性

    用springboot起了個(gè)websocket服務(wù)端,有時(shí)候客戶端發(fā)來的消息過長(zhǎng),無法接收完整,需要進(jìn)行額外的處理,這篇文章主要介紹了Websocket如何保證接收消息完整性,需要的朋友可以參考下
    2023-09-09
  • logback?OutputStreamAppender高效日志輸出源碼解析

    logback?OutputStreamAppender高效日志輸出源碼解析

    這篇文章主要介紹了為大家logback?OutputStreamAppender日志輸出效率提升示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • java中Optional的使用詳細(xì)解析

    java中Optional的使用詳細(xì)解析

    這篇文章主要介紹了java新特性之Optional的詳細(xì)解析,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04

最新評(píng)論