ava程序包括源代碼,由編譯器生成的類文件,有歸檔工具jar生成的.jar文件、內對象狀態序列化.ser文件。其中源代容碼的結構如下:
1、package語句。0或多個,用於使文件存入指定包中,這條語句必須置於文件之首。
2、import語句。0或多個。必須在所有類定義之前引入標准類。
3、public class Definition(公共類定義),0或1個,指定應用程序類名,需與源文件名一致。
4、class Definition,0或多個,類定義。
5、interface Definition,0或多個,介面定義。
② JAVA IO的使用原則及stream 和 reader的區別
嗨你好
avaIO的一般使用原則:
一、按數據來源(去向)分類:
1、是文件:FileInputStream,FileOutputStream,FileReader,FileWriter
2、是byte[]:ByteArrayInputStream,ByteArrayOutputStream
3、是Char[]:CharArrayReader,CharArrayWriter
4、是String:StringBufferInputStream,StringReader,StringWriter
5、網路數據流:InputStream,OutputStream,Reader,Writer
二、按是否格式化輸出分:
1、要格式化輸出:PrintStream,PrintWriter
三、按是否要緩沖分:
1、要緩沖:BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter
四、按數據格式分:
1、二進制格式(只要不能確定是純文本的):InputStream,OutputStream及其所有帶Stream結束的子類
2、純文本格式(含純英文與漢字或其他編碼方式);Reader,Writer及其所有帶Reader,Writer的子類
五、按輸入輸出分:
1、輸入:Reader,InputStream類型的子類
2、輸出:Writer,OutputStream類型的子類
六、特殊需要:
1、從Stream到Reader,Writer的轉換類:InputStreamReader,OutputStreamWriter
2、對象輸入輸出:ObjectInputStream,ObjectOutputStream
3、進程間通信:PipeInputStream,PipeOutputStream,PipeReader,PipeWriter
4、合並輸入:SequenceInputStream
5、更特殊的需要:PushbackInputStream,PushbackReader,LineNumberInputStream,LineNumberReader
決定使用哪個類以及它的構造進程的一般准則如下(不考慮特殊需要):
首先,考慮最原始的數據格式是什麼:原則四
第二,是輸入還是輸出:原則五
第三,是否需要轉換流:原則六第1點
第四,數據來源(去向)是什麼:原則一
第五,是否要緩沖:原則三(特別註明:一定要注意的是readLine()是否有定義,有什麼比read,write更特殊的輸入或輸出方法)
第六,是否要格式化輸出:原則二
Java中Inputstream與Reader的區別
Reader支持16位的Unicode字元輸出,InputStream支持8位的字元輸出。
Reader和InputStream分別是I/O庫提供的兩套平行獨立的等級機構,
InputStream、OutputStream是用來處理8位元的流,
Reader、Writer是用來處理16位元的流。
而在JAVA語言中,byte類型是8位的,char類型是16位的,所以在處理中文的時候需要用Reader和Writer。
值得說明的是,在這兩種等級機構下,還有一道橋梁InputStreamReader、OutputStreamWriter負責進行InputStream到Reader的適配和由OutputStream到Writer的適配。
java.io.Reader和java.io.InputStream組成了Java輸入類。Reader用於讀入16位字元,也就是Unicode編碼的字元;而InputStream用於讀入ASCII字元和二進制數據。
在Java中,有不同類型的Reader輸入流對應於不同的數據源:
FileReader用於從文件輸入;
CharArrayReader用於從程序中的字元數組輸入;
StringReader用於從程序中的字元串輸入;
PipedReader用於讀取從另一個線程中的PipedWriter寫入管道的數據。
相應的也有不同類型的InputStream輸入流對應於不同的數據源:FileInputStream,ByteArrayInputStream,StringBufferInputStream,PipedInputStream。另外,還有兩種沒有對應Reader類型的InputStream輸入流:
Socket用於套接字;
URLConnection用於URL連接。
這兩個類使用getInputStream()來讀取數據。
相應的,java.io.Writer和java.io.OutputStream也有類似的區別。
③ ava中有幾種方法可以實現一個線程用什麼關鍵字修飾同步方法 stop()和suspend()方法為何不推薦使用
的ActiveX
ActiveX的ActiveX起源時,最初只是一個品牌名稱,它涵蓋了技術不是孤立的,其中大部分是與Internet和Web有一定關聯。更重要的是,在ActiveX的整體技術是微軟的COM(組件對象模型組件對象模型)的建立。但不要誤認為ActiveX是定義了所有包含基於COM的技術。 COM和Microsoft Office和Windows,微軟正在做相關的一切,很明顯,這些產品是不是ActiveX的家庭成員。
的ActiveX復合文檔從微軟的技術 - OLE成長起來的。 OLE初始釋放,但針對復合文檔,但在後續版本OLE2進口COM。 COM的的OLE設計師需求的誕生。其基本出發點是做一個軟體,通過一個共同的機構提供服務,另一家軟體。因此,COM用戶OLE2。事實上,COM和復合文檔,是沒有多大意義的。後來,COM完全無關的復合文檔技術開始得到廣泛的應用。因此,微軟開始「染指」通用平台技術。 COM是不是一個產品,它需要一個商標名稱。不幸的是,市場專家們選擇了「OLE」作為商號。然後,利用COM技術的OLE標簽粘貼。當然,這些技術的絕大多數具有沒有關系與化合物筆。微軟為了向人們解釋:「OLE不僅是指復合文檔!」這是一個相當大的量的能量和時間。
所以,在1996年的春天,微軟改變了主意,選擇了ActiveX作為一個新的品牌名稱。 ActiveX是一個鬆散定義的基於COM的技術的集合,OLE仍然僅指復合文檔。當然,最重要的核心COM。
對象模型完全獨立於編程語言,這是一個非常新穎的想法。從C + +和Java對象,我們將能夠理解。但所謂的COM對象是什麼就是什麼呢?為了便於理解,COM可以看出一些種(軟體)封裝技術,可以看到它作為一個不同的軟體的一部分,結合成某種形式的面向對象的,可以交互的過程和一組支持庫。 COM對象可以被寫入在C + +,Java中,和VB語言的任何DLL或文件的不同進程的工作的實施。任何語言編寫的客戶端使用COM對象,而不關注的對象,和不關心它的DLL,或者到另一個進程來執行。從客戶端,沒有任何區別。
這樣一個共同的處理方法是非常有用的。例如,兩個應用程序協調運行的用戶,可以合作的一部分,作為COM對象實現(當然,現在可以做的OLE復合文檔)之間的相互作用。在瀏覽器中執行從Web伺服器下載的代碼,瀏覽器就可以看到它作為一個COM對象。換句話說,COM技術也是一種打包下載代碼的標准方法(ActiveX控制項執行此功能)。
甚至是應用程序與本地操作系統交互的方法,您可以使用COM來指定新的API(Windows和Windows NT,多數被定義為一個COM對象)。 COM雖然起源於一個復合文檔,但它可以被有效地應用於許多軟體問題。
的ActiveX英國
活動平台是微軟的世界觀。其基本思想是:使用ActiveX控制項來建立,包括從組織與用戶互動和交易處理監視器,以適應COM的Web伺服器,所有的自動。活動平台包括兩部分:活動伺服器和活動的客戶端。
活動伺服器的中間層。組件或Active Server Pages,為客戶提供業務邏輯和應用處理的地方。 ActiveServer技術的核心NT Server,Microsoft事務伺服器,數據管理服務,目錄服務,Web服務,以及網路服務。
交易伺服器是微軟的基於組件的編程模型,結合了傳統的TP多個線程生成和資料庫監控功能。其他組件的數據管理服務,如主動OLE DB和ODBC訪問DB2,甲骨文,SQL Server和其他數據源。目錄服務提供目錄服務層,使在網路上的遠程對象的相互四處搜尋DCOM(分布式COM,分布式COM)。 Inter網伺服器為中心的Web服務建立在Web伺服器上,應用程序的開發,生成腳本(腳本)的機構。通過中介網路為中心的網路服務,DCOM建立MS-RPC同步,這樣一來就能連接的控制。
活躍的客戶端是一個跨平台的。微軟的技術,即使排斥,但也希望,這項技術是開放的多個操作系統。該計劃的具體實施是使用腳本引擎(腳本引擎)。腳本引擎是一個標準的HTML和Java虛擬機(JVM)與微軟特色,微軟的VBScript司法人員敘用委員會RIPT的構成。組裝到微軟的IE 3.0和4.0的ActiveX,可以成為活躍的客戶端的C / S
從企業用戶只使用Windows的Active平台可以提供一個強大的,可擴展的伺服器應用程序開發平台的應用程序的一部分。 ActiveServer的TP監視器高端產品這樣的場合,使用常見的工具和技術。因此,小型工作組和內聯網應用程序將無法超越的Active Server的能力。 ACTI VE的目標平台是一個異構的環境,但由於過度依賴IE,所以你不能開車到客戶端。雖然一些非Windows平台上也推出了瀏覽器,但最好的支持,最新版本的資源管理器或窗口s。
的ActiveX進步
COM擴展初始版本的分布式計算,假設COM對象和它的客戶端運行在同一台機器(在同一個進程,而且在不同的進程),DCOM的的ActiveX家庭成員。後來,它可以使用在Windows 95中。 COM對象的DCOM客戶端交互不能做任何。
客戶端使用完全相同的代碼可以訪問本地和遠程對象。然而,很多情況下,客戶需要的一些DCOM附件。 DCOM提供分布式的安全保密機制,以提供驗證和數據加密。發布於1998年,是Windows NT 5.0,Kerberos等安全保密協議,追加到DCOM。 DCOM已經能夠使用簡潔的域名服務,目錄服務,搜索其他計算機上的COM對象。 NT 5.0支持更多的的ACTI已經指南。 Active Directory的域名服務和輕量級目錄訪問協議的基礎上。
DCOM的對手,一直是OMG(對象管理組織)的CORBA(公共對象R equest代理體系結構)。它被組裝成IONA的Orbix和Visigenic的VisiBroker和其他產品。不久前,另一位技術支持分散的對象 - Java遠程方法調用介紹。兩個C ORBA,DCOM,可以在多語言寫對象之間的通信。 RMI只限於Java實現對象之間的通信。很顯然,這是一個制約因素。 RMI是非常簡單的使用。 RMI開發人員可以使用Java來設計的協議規范。因此,在語言的功能,可以進行無縫的。
寫一個的DCOM伺服器處理只有兩三個客戶端,是相當簡單的。然而,建立一個高效的處理數百成千上萬的客戶端DCOM伺服器,相當困難。
為了便於編寫可擴展的DCOM伺服器,微軟事務伺服器(MTS)。在支持該交易的同時,MTS自動生成的線索和重復使用的智能對象。 MTS可伸縮的伺服器的生產變得相當簡單。即使沒有事務處理應用程序,使用MTS也不錯。事實上,M icrosoft鼓勵人們使用VB寫的MTS應用程序。這是發展業務伺服器的傳統做法不同,所有MTS應用程序的COM對象寫入一個以上的,而且必須實現的一個DLL。在正常情況下,客戶端將無法看到MTS。客戶端只是繼續生產,使用COM對象可以是。
標准化組件的
基於組件的應用程序的開發,組裝電子設備,你可以使用現成的零部件來構建應用程序。桌面使用的ActiveX控制項,基於COM的組件。所謂的ActiveX控制項,但要符合一定的標准,COM對象進行交互的客戶端。
例如,ActiveX控制項,必須通過自動化(調度介面)來公開方法。這種標准化的交互功能,可以使用在一個數量不同的情況下,相同的控制。 「幕後」這個標准介面,ActiveX控制項是幾乎能勝任。現在,許多軟體公司都能夠控制各種功能。
ActiveX控制項的DDL的准備,為此,它必須被載入到一個容器中。 ActiveX控制項容器VB原型,此外,也有多種選擇的容器。目前,一個非常重要的控制容器是微軟的網路瀏覽器
那些元素的所謂的ActiveX控制項,它是要實現的許多方法。他們已經從本地硬碟的機器VB和其他容器。數百KB和MB管制的,似乎沒有什麼大的區別。但是當你想控制被載入到Web瀏覽器,它很可能是通過電話線速度非常緩慢。現在,該大小的控制是非常關鍵的問題。要進行控制,超過一定限度,就會延長下載時間。因此,Microsoft提供了ActiveX控制項,只有在絕對必要的功能。
蘋果公司和IBM公司推出的OpenDoc,是主要競爭對手的ActiveX控制項。的OpenDoc贊助的企業現在已正式宣布暫停經濟援助。與微軟的企業青睞JavaBeans(J ava的基於組件的結構)的對抗。基本上是捆綁的ActiveX控制項和Windows,在二進制機器代碼,而JavaBeans是不同的,它是能夠執行。這,當然是有代價的。很明顯,只要不犧牲便攜性,它是不可能完全徹底利用當地的環境。要編寫的組件可以從公共互聯網上下載的,應優先考慮選擇JavaBeans的。
桌面組件市場的持續快速增長。其中大部分是基於ActiveX控制項的建立(Java Beans的仍是少數)。伺服器組件的標准化落後。在桌面上,VB,PowerBuilder編程環境,容器,Web瀏覽器是強大的。如果在伺服器容器是必須要做的嗎?集裝箱的伺服器組件事務伺服器是一個更好的選擇。
微軟的競爭對手,並盡一切可能防止MTS和NT佔領市場。他們是在全速發展標準的伺服器組件,其中一個最有前途的是對En??terprise JavaBeans。 JavaBeans的擴張,並定義了一個事務處理伺服器介面。 Enterprise JavaBeans的支持者,獨立軟體供應商,作為一個COM組件來寫,但寫豆類的伺服器組件。
ActiveX構建工具的
推廣的ActiveX控制項,ActiveX控制項的開發工具是與日俱增。由於ActiveX是不依賴於語言,傳統的開發工具基本上可以建立的ActiveX控制項。最常用的Delphi,寶werBuilder以及Visual Basic中的Visual C + +時,Visual J + +等。基本配置文件
1。 ActiveX控制項的3GL開發:①MFC(微軟基礎類,Microsoft基礎類),②ActiveX模板庫,ActiveX模板庫(ATL),③BaseCtrl的框架等。 MFC是最經典的,使用MFC開發人員不關心的介面,而是將注意力集中在對象的動作。它的缺點是必須存在的控制和執行DLL與容器的尺寸就越大。 ATL可以使用模板來生成代碼。也就是說,圖書館和DLL沒有一起推出的控制。在ATL中,你需要一些基本的派生類從現有的模板。 AT L也有缺點,即該介面的處理是困難的,該應用程序的必要的介面,必須創建。此外,ATL不支持的類向導,類向導。不幸的是,沒有對象描述語言(對象描述語言)和介面定義語言文件,自動同步用戶代碼向導。 BaseCtrl是一??個簡單的類型庫。 ATL是非常相似,但沒有模板。事實上,由於BaseCtrl太容易了,微軟不支持它。在BaseCtrl中,一些無所不能的控制(骨架控制)。該ActiveX的發展模式BaseCtrl提供容易理解的,但與ATL並不簡單,是不是和ATL和靈活性。現在看來,ActiveX控制項的開發人員,BaseCt RL是「苦」的選擇。
2。開發工具
ActiveX控制項可以,第一個工具的Microsoft Visual C + +。它可以提供最大程度的控制ActiveX開發。的Visual J + +和ActiveX控制項也可以。
Borland公司推出了兩款工具(JBuilder和IntraBuilder),也是很可觀的。然而,BORL和工具創建ActiveX組件,只有德爾福3.0和C + + Builder中。 Borland的Delphi的A ctiveX發展的特點,被稱為內有效。它是任意的Delphi窗口的形式的ActiveX。活躍??在配備了新的控制項在Web上。 Delphi控制項COM和DCOM的鏈接。
PowerBuilder的5.0轉化為可用於開發的ActiveX客戶端/伺服器開發工具。作為一個ActiveX控制項,可配鮑威的rBuilder數據窗口(PowerBuilder應用開發的核心部分)。為了使PowerBuilder開發人員現在可以使用的PowerScript編程語言,一些熟悉的功能。
擁有最好的工具,使ActivX控制項,無疑是微軟。例如,使用Visual Basic 5.0中,開發人員可以使用可視化編程環境和本地語言Visual Basic應用開發控制。
5的ActiveX
事實上,Windows和Windows NT,ActiveX技術環境的世界。但無論MICR OSOFT以及如何推進它的操作系統,也不能所有的企業已成為所有Windows。 ,MICROS經常要盡量使COM,DCOM和ActiveX家庭的一部分,也可以使用其他OS。 Macin胡說已經支持ActiveX,這其中也包括對ActiveX控制項的支持。 Software AG的這些技術被移植到多種Unix和IBM的OS/390。 DEC和HP還打算在自己的系統中使用這些技術,他們也是微軟的源代碼移植的方式來實現。
COM的Windows 95和Windows NT環境為基礎的軟體已成為一個重要組成部分,但它是未來,有很多不確定因素。例如,微軟是作為一個多平台的技術,能夠COM開發允許繼續存在呢?按企業現有的NT伺服器,有必要使DCOM的分布式服務,也可以應用在非微軟平台上。為了解決這些問題,它需要相當長的一段時間。基於CORBA的產品,和JAV一個RMI已經成功地運行在多操作系統環境。後期推出的多平台,DCOM,CORBA和RMI領先??的多。
ActiveX控制項和JavaBeans競爭力的前景?無論在Web瀏覽器或運行在另一個地方運行的軟體,或在短的,組件的軟體(構件的)是一種軟體開發的熱點。目前,ActiveX控制項,暫時處於領先地位,但由於的OpenDoc的運行過程,與微軟的企業競爭成為了一個與之抗衡的。用戶再也不想看到「獨霸天下」,僅僅這一點的,JavaBean將在此的市場競爭中搶佔一席之地。
④ java中t是什麼意思
JAVA 中<t>是泛型的意思
意思是Tree這個類裡面需要用到另外一個類,但是又不能確定要用到的那個類的具體類型,所以暫時用T來代替,當具體的程序知道要用到的那個類型是什麼的時候就用那個類型來代替T,就ok了。例如我需要實例化一個Tree類,需要用到的那個類是String,那麼我就可以這么來實例化Tree<String>()。
第一是泛化。可以用T代表任意類型Java語言中引入泛型是一個較大的功能增強不僅語言、類型系統和編譯器有了較大的變化,以支持泛型,而且類庫也進行了大翻修,所以許多重要的類,比如集合框架,都已經成為泛型化的了,這帶來了很多好處。
第二是類型安全。泛型的一個主要目標就是提高ava程序的類型安全,使用泛型可以使編譯器知道變數的類型限制,進而可以在更高程度上驗證類型假設。如果不用泛型,則必須使用強制類型轉換,而強制類型轉換不安全,在運行期可能發生ClassCast Exception異常,如果使用泛型,則會在編譯期就能發現該錯誤。
第三是消除強制類型轉換。泛型可以消除源代碼中的許多強制類型轉換,這樣可以使代碼更加可讀,並減少出錯的機會。
第四是向後兼容。支持泛型的Java編譯器(例如JDK1.5中的Javac)可以用來編譯經過泛型擴充的Java程序(Generics Java程序),但是現有的沒有使用泛型擴充的Java程序仍然可以用這些編譯器來編譯。
⑤ java源代碼如何用
java源代碼是用來關聯jar中的編譯代碼的。
應用場景:通常在打開eclipse中的jar的時候,發現版class文件不能被打開,權此時出現下面的界面,此時就需要通過「Attach Source」,之後找到對應的java源代碼來實現代碼關聯,即可正常的顯示class類中的內容。
備註:如果此處ava源代碼指的是源代碼文件(「.java」),是用來進行代碼維護和二次開發的必備東西。
⑥ java 類載入機制有什麼用
AVA類載入機制詳解
「代碼編譯的結果從本地機器碼轉變為位元組碼,是存儲格式發展的一小步,卻是變成語言發展的一大步」,這句話出自《深入理解JAVA虛擬機》一書,後面關於jvm的系列文章主要都是參考這本書。
JAVA源碼編譯由三個過程組成:
1、源碼編譯機制。
2、類載入機制
3、類執行機制
我們這里主要介紹編譯和類載入這兩種機制。
一、源碼編譯
代碼編譯由JAVA源碼編譯器來完成。主要是將源碼編譯成位元組碼文件(class文件)。位元組碼文件格式主要分為兩部分:常量池和方法位元組碼。
二、類載入
類的生命周期是從被載入到虛擬機內存中開始,到卸載出內存結束。過程共有七個階段,其中到初始化之前的都是屬於類載入的部分
載入----驗證----准備----解析-----初始化----使用-----卸載
系統可能在第一次使用某個類時載入該類,也可能採用預載入機制來載入某個類,當運行某個java程序時,會啟動一個java虛擬機進程,兩次運行的java程序處於兩個不同的JVM進程中,兩個jvm之間並不會共享數據。
1、載入階段
這個流程中的載入是類載入機制中的一個階段,這兩個概念不要混淆,這個階段需要完成的事情有:
1)通過一個類的全限定名來獲取定義此類的二進制位元組流。
2)將這個位元組流所代表的靜態存儲結構轉化為方法區的運行時數據結構。
3)在java堆中生成一個代表這個類的Class對象,作為訪問方法區中這些數據的入口。
由於第一點沒有指明從哪裡獲取以及怎樣獲取類的二進制位元組流,所以這一塊區域留給我開發者很大的發揮空間。這個我在後面的類載入器中在進行介紹。
2、准備階段
這個階段正式為類變數(被static修飾的變數)分配內存並設置類變數初始值,這個內存分配是發生在方法區中。
1、注意這里並沒有對實例變數進行內存分配,實例變數將會在對象實例化時隨著對象一起分配在JAVA堆中。
2、這里設置的初始值,通常是指數據類型的零值。
private static int a = 3;
這個類變數a在准備階段後的值是0,將3賦值給變數a是發生在初始化階段。
3、初始化階段
初始化是類載入機制的最後一步,這個時候才正真開始執行類中定義的JAVA程序代碼。在前面准備階段,類變數已經賦過一次系統要求的初始值,在初始化階段最重要的事情就是對類變數進行初始化,關注的重點是父子類之間各類資源初始化的順序。
java類中對類變數指定初始值有兩種方式:1、聲明類變數時指定初始值;2、使用靜態初始化塊為類變數指定初始值。
初始化的時機
1)創建類實例的時候,分別有:1、使用new關鍵字創建實例;2、通過反射創建實例;3、通過反序列化方式創建實例。
new Test();
Class.forName(「com.mengdd.Test」);
2)調用某個類的類方法(靜態方法)
Test.doSomething();
3)訪問某個類或介面的類變數,或為該類變數賦值。
int b=Test.a;
Test.a=b;
4)初始化某個類的子類。當初始化子類的時候,該子類的所有父類都會被初始化。
5)直接使用java.exe命令來運行某個主類。
除了上面幾種方式會自動初始化一個類,其他訪問類的方式都稱不會觸發類的初始化,稱為被動引用。
1、子類引用父類的靜態變數,不會導致子類初始化。
執行結果:
MIGU
用final修飾某個類變數時,它的值在編譯時就已經確定好放入常量池了,所以在訪問該類變數時,等於直接從常量池中獲取,並沒有初始化該類。
初始化的步驟
1、如果該類還沒有載入和連接,則程序先載入該類並連接。
2、如果該類的直接父類沒有載入,則先初始化其直接父類。
3、如果類中有初始化語句,則系統依次執行這些初始化語句。
在第二個步驟中,如果直接父類又有直接父類,則系統會再次重復這三個步驟來初始化這個父類,依次類推,JVM最先初始化的總是java.lang.Object類。當程序主動使用任何一個類時,系統會保證該類以及所有的父類都會被初始化。