freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

java學(xué)習(xí)必備總結(jié)(編輯修改稿)

2024-10-20 20:29 本頁面
 

【文章內(nèi)容簡介】 得到多個Singleton實例。關(guān)于lazy initialization的Singleton有很多涉及doublechecked locking(DCL)的討論,有興趣者進(jìn)一步研究。一般認(rèn)為第一種形式要更加安全些。使用Singleton注意事項:有時在某些情況下,使用Singleton并不能達(dá)到Singleton的目的,如有多個Singleton對象同時被不同的類裝入器裝載;在EJB這樣的分布式系統(tǒng)中使用也要注意這種情況,因為EJB是跨服務(wù)器,跨JVM的。private static Singleton instance = null。public static synchronized Singleton getInstance(){//這個方法比上面有所改進(jìn),不用每次都進(jìn)行生成對象,只是第一次//使用時生成實例,提高了效率!if(instance==null)instance=new Singleton()。return instance。} //這里提供了一個供外部訪問本class的靜態(tài)方法,可以直接訪問public static Singleton getInstance(){return instance。} 我們以SUN公司的寵物店源碼(Pet Store )的ServiceLocator為例稍微分析一下:在Pet Store中ServiceLocator有兩種,一個是EJB目錄下;一個是WEB目錄下,我們檢查這兩個ServiceLocator會發(fā)現(xiàn)內(nèi)容差不多,都是提供EJB的查詢定位服務(wù),可是為什么要分開呢?仔細(xì)研究對這兩種ServiceLocator才發(fā)現(xiàn)區(qū)別:在WEB中的ServiceLocator的采取Singleton模式,ServiceLocator屬于資源定位,理所當(dāng)然應(yīng)該使用Singleton模式。但是在EJB中,Singleton模式已經(jīng)失去作用,所以ServiceLocator才分成兩種,一種面向WEB服務(wù)的,一種是面向EJB服務(wù)的。Singleton模式看起來簡單,使用方法也很方便,但是真正用好,是非常不容易,需要對Java的類線程 內(nèi)存等概念有相當(dāng)?shù)牧私?。設(shè)計模式之Factory(20080807 12:59:17)轉(zhuǎn)載 標(biāo)簽:雜談設(shè)計模式之Factory定義:?工廠模式是我們最常用的模式了,著名的Jive論壇 ,就大量使用了工廠模式,工廠模式在Java程序系統(tǒng)可以說是隨處可見。為什么工廠模式是如此常用?因為工廠模式就相當(dāng)于創(chuàng)建實例對象的new,我們經(jīng)常要根據(jù)類Class生成實例對象,如A a=new A()工廠模式也是用來創(chuàng)建實例對象的,所以以后new時就要多個心眼,是否可以考慮實用工廠模式,雖然這樣做,可能多做一些工作,但會給你系統(tǒng)帶來更大的可擴(kuò)展性和盡量少的修改量。我們以類Sample為例,如果我們要創(chuàng)建Sample的實例對象: Sample sample=new Sample()。可是,實際情況是,通常我們都要在創(chuàng)建sample實例時做點初始化的工作,比如賦值查詢數(shù)據(jù)庫等。首先,我們想到的是,可以使用Sample的構(gòu)造函數(shù),這樣生成實例就寫成: Sample sample=new Sample(參數(shù))。但是,如果創(chuàng)建sample實例時所做的初始化工作不是象賦值這樣簡單的事,可能是很長一段代碼,如果也寫入構(gòu)造函數(shù)中,那你的代碼很難看了(就需要Refactor重整)。為什么說代碼很難看,初學(xué)者可能沒有這種感覺,我們分析如下,初始化工作如果是很長一段代碼,說明要做的工作很多,將很多工作裝入一個方法中,相當(dāng)于將很多雞蛋放在一個籃子里,是很危險的,這也是有背于Java面向?qū)ο蟮脑瓌t,面向?qū)ο蟮姆庋b(Encapsulation)和分派(Delegation)告訴我們,盡量將長的代碼分派“切割”成每段,將每段再“封裝”起來(減少段和段之間偶合聯(lián)系性),這樣,就會將風(fēng)險分散,以后如果需要修改,只要更改每段,不會再發(fā)生牽一動百的事情。在本例中,首先,我們需要將創(chuàng)建實例的工作與使用實例的工作分開, 也就是說,讓創(chuàng)建實例所需要的大量初始化工作從Sample的構(gòu)造函數(shù)中分離出去。這時我們就需要Factory工廠模式來生成對象了,不能再用上面簡單new Sample(參數(shù))。還有,如果Sample有個繼承如MySample, 按照面向接口編程,有兩個子類MySample ,如下: Sample mysample=new MySample()。Sample hissample=new HisSample()。隨著項目的深入,Sample可能還會“生出很多兒子出來”, 那么我們要對這些兒子一個個實例化,更糟糕的是,可能還要對以前的代碼進(jìn)行修改:,(20080813 23:55:39)轉(zhuǎn)載 標(biāo)簽:雜談 什么是回調(diào)軟件模塊之間總是存在著一定的接口,從調(diào)用方式上,可以把他們分為三類:同步調(diào)用、回調(diào)和異步調(diào)用。同步調(diào)用是一種阻塞式調(diào)用,調(diào)用方要等待對方執(zhí)行完畢才返回,它是一種單向調(diào)用;回調(diào)是一種雙向調(diào)用模式,也就是說,被調(diào)用方在接口被調(diào)用時也會調(diào)用對方的接口;異步調(diào)用是一種類似消息或事件的機(jī)制,不過它的調(diào)用方向剛好相反,接口的服務(wù)在收到某種訊息或發(fā)生某種事件時,會主動通知客戶方(即調(diào)用客戶方的接口)?;卣{(diào)和異步調(diào)用的關(guān)系非常緊密,通常我們使用回調(diào)來實現(xiàn)異步消息的注冊,通過異步調(diào)用來實現(xiàn)消息的通知。同步調(diào)用是三者當(dāng)中最簡單的,而回調(diào)又常常是異步調(diào)用的基礎(chǔ),因此,下面我們著重討論回調(diào)機(jī)制在不同軟件架構(gòu)中的實現(xiàn)。對于不同類型的語言(如結(jié)構(gòu)化語言和對象語言)、平臺(Win3JDK)或構(gòu)架(CORBA、DCOM、WebService),客戶和服務(wù)的交互除了同步方式以外,都需要具備一定的異步通知機(jī)制,讓服務(wù)方(或接口提供方)在某些情況下能夠主動通知客戶,而回調(diào)是實現(xiàn)異步的一個最簡捷的途徑。對于一般的結(jié)構(gòu)化語言,可以通過回調(diào)函數(shù)來實現(xiàn)回調(diào)?;卣{(diào)函數(shù)也是一個函數(shù)或過程,不過它是一個由調(diào)用方自己實現(xiàn),供被調(diào)用方使用的特殊函數(shù)。在面向?qū)ο蟮恼Z言中,回調(diào)則是通過接口或抽象類來實現(xiàn)的,我們把實現(xiàn)這種接口的類成為回調(diào)類,回調(diào)類的對象成為回調(diào)對象。對于象C++或Object Pascal這些兼容了過程特性的對象語言,不僅提供了回調(diào)對象、回調(diào)方法等特性,也能兼容過程語言的回調(diào)函數(shù)機(jī)制。Windows平臺的消息機(jī)制也可以看作是回調(diào)的一種應(yīng)用,我們通過系統(tǒng)提供的接口注冊消息處理函數(shù)(即回調(diào)函數(shù)),從而實現(xiàn)接收、處理消息的目的。由于Windows平臺的API是用C語言來構(gòu)建的,我們可以認(rèn)為它也是回調(diào)函數(shù)的一個特例。對于分布式組件代理體系CORBA,異步處理有多種方式,如回調(diào)、事件服務(wù)、通知服務(wù)等。事件服務(wù)和通知服務(wù)是CORBA用來處理異步消息的標(biāo)準(zhǔn)服務(wù),他們主要負(fù)責(zé)消息的處理、派發(fā)、維護(hù)等工作。對一些簡單的異步處理過程,我們可以通過回調(diào)機(jī)制來實現(xiàn)。反射機(jī)制(20080814 00:04:19)轉(zhuǎn)載 標(biāo)簽:雜談JAVA反射機(jī)制JAVA反射機(jī)制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機(jī)制。Java反射機(jī)制主要提供了以下功能: 在運行時判斷任意一個對象所屬的類;在運行時構(gòu)造任意一個類的對象;在運行時判斷任意一個類所具有的成員變量和方法;在運行時調(diào)用任意一個對象的方法;生成動態(tài)代理。 public Object getProperty(Object owner, String fieldName)throws Exception { 2 Class ownerClass = ()。3 4 Field field = (fieldName)。5 6 Object property = (owner)。7 8 return property。9 } Class ownerClass = ():得到該對象的Class。Field field = (fieldName):通過Class得到類聲明的屬性。Object property = (owner):通過對象得到該屬性的實例,如果這個屬性是非公有的,這里會報IllegalAccessException。public Object getStaticProperty(String className, String fieldName)2 throws Exception { 3 Class ownerClass = (className)。4 5 Field field = (fieldName)。6 7 Object property = (ownerClass)。8 9 return property。10 }Class ownerClass = (className):首先得到這個類的Class。Field field = (fieldName):和上面一樣,通過Class得到類聲明的屬性。Object property = (ownerClass):這里和上面有些不同,因為該屬性是靜態(tài)的,所以直接從類的Class里取。public Object invokeMethod(Object owner, String methodName, Object[] args)throws Exception { 2 3 Class ownerClass = ()。4 5 Class[] argsClass = new Class[]。6 7 for(int i = 0, j = 。i j。i++){ 8 argsClass[i] = args[i].getClass()。9 } 10 11 Method method = (methodName, argsClass)。12 13 return (owner, args)。14 } Class owner_class = ():首先還是必須得到這個對象的Class。5~9行:配置參數(shù)的Class數(shù)組,作為尋找Method的條件。Method method = (methodName, argsClass):通過Method名和參數(shù)的Class數(shù)組得到要執(zhí)行的Method。(owner, args):執(zhí)行該Method,invoke方法的參數(shù)是執(zhí)行這個方法的對象,和參數(shù)數(shù)組。返回值是Object,也既是該方法的返回值。public Object invokeStaticMethod(String className, String methodName, 2 Object[] args)throws Exception { 3 Class ownerClass = (className)。4 5 Class[] argsClass = new Class[]。6 7 for(int i = 0, j = 。i j。i++){ 8 argsClass[i] = args[i].getClass()。9 } 10 11 Method method = (methodName, argsClass)。12 13 return (null, args)。14 }基本的原理和實例3相同,不同點是最后一行,invoke的一個參數(shù)是null,因為這是靜態(tài)方法,不需要借助實例運行。 1 2 public Object newInstance(String className, Object[] args)throws Exception { 3 Class newoneClass = (className)。4 5 Class[] argsClass = new Class[]。6 7 for(int i = 0, j = 。i j。i++){ 8 argsClass[i] = args[i].getClass()。9 } 10 11 Constructor cons = (argsClass)。12 13 return (args)。14 15 }這里說的方法是執(zhí)行帶參數(shù)的構(gòu)造函數(shù)來新建實例的方法。如果不需要參數(shù),()來實現(xiàn)。Class newoneClass = (className):第一步,得到要構(gòu)造的實例的Class。第5~第9行:得到參數(shù)的Class數(shù)組。Constructor cons = (argsClass):得到構(gòu)造子。(args):新建實例。 public boolean isInstance(Object obj, Class cls){ 2 return (obj)。3 } public Object getByArray(Object array, int index){ 2 return Array 在了解Oracle體系結(jié)構(gòu)之前必須掌握以下兩個基本的概念: 數(shù)據(jù)庫和實例。?/P一、數(shù)據(jù)庫 ?/P 數(shù)據(jù)庫(database)是一個數(shù)據(jù)集合.?/P 無論數(shù)據(jù)庫是采用關(guān)系結(jié)構(gòu)還是面向?qū)ο蠼Y(jié)構(gòu), oracle數(shù)據(jù)庫都將 ?/P , 數(shù)據(jù)庫結(jié)構(gòu)數(shù)據(jù)對文件的邏輯 ?/P 映射, 使不同的數(shù)據(jù)分開存儲, 這些邏輯劃分稱為表空間.?/P 表空間和文件介紹: ?/P 1: 表空間 ?/P 表空間(tablespace)是數(shù)據(jù)庫的邏輯劃分, 每個數(shù)據(jù)庫至少有一個表空間,叫做系統(tǒng)表空間(system 表空間).一個表空間只能屬于一個數(shù)據(jù)庫。?/P 每個表空間由同一個磁盤上的一個或多個文件組成, 這些文件稱為數(shù)據(jù)文件.?/P 表空間的特性: ?/P(1)控制數(shù)據(jù)庫數(shù)據(jù)磁盤分配 ?/P(2)限制用戶在表空間中可以使用的磁盤空間大小 ?/P(3)表空間具有 online, offline, readonly, readwrite屬性 ?/P 修改表空間的屬性: ?/P SQL alter tablespace 表空間名稱屬性。查詢表空間狀態(tài): SQL select tablespace_name, status from dba_tablespaces。?/P 注意: system, undo, temp表空間不能設(shè)為offl
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1