Time of Update: 2017-01-19
運行時類型識別(RTTI, Run-Time Type Identification)是Java中非常有用的機制,在Java運行時,RTTI維護類的相關資訊。多態(polymorphism)是基於RTTI實現的。RTTI的功能主要是由Class類實現的。Class類Class類是"類的類"(class of classes)。如果說類是對象的抽象和集合的話,那麼Class類就是對類的抽象和集合。每一個Class類的對象代表一個其他的類。比如下面的程式中,Class類的對象c1代表了Human類,
Time of Update: 2017-01-19
電腦最重要的功能是處理資料。一個有用的電腦語言需要擁有良好的IO功能,以便讓未處理的資料流入程式,讓已處理的資料流出。與其他語言相比,Java的IO功能顯得複雜。在其他語言中,許多IO功能(比如讀取檔案),是被封裝好的,可以用一兩行程式實現。在Java中,程式員往往需要多個層次的裝飾(decoration),才能實現檔案讀取。相對的複雜性帶來的好處是IO的靈活性。在Java中,程式員可以控制IO的整個流程,從而設計出最好的IO方式。我們將在下文看到更多。 IO樣本 下面是我用
Time of Update: 2017-01-19
程式很難做到完美,不免有各種各樣的異常。比如程式本身有bug,比如程式列印時印表機沒有紙了,比如記憶體不足。為瞭解決這些異常,我們需要知道異常發生的原因。對於一些常見的異常,我們還可以提供一定的應對預案。C語言中的異常處理是簡單的通過函數傳回值來實現的,但傳回值代表的含義往往是由慣例決定的。程式員需要查詢大量的資料,才可能找到一個模糊的原因。物件導向語言,比如C++, Java,
Time of Update: 2017-01-19
之前的Java基礎系列中討論了Java最核心的概念,特別是物件導向的基礎。在Java進階中,我將對Java基礎進行補充,並轉嚮應用層面。大部分程式設計語言都能夠處理字串(String)。字串是有序的字元集合,比如"Hello World!"。在Java中,字串被儲存為String類對象。調用字串對象的方法,可以實現字串相關的操作。String類包含在java.lang包中。這個包會在Java啟動的時候自動import,所以可以當做一個內建類(built-in
Time of Update: 2017-01-19
我們之前使用類創造新的類型(type),並使用繼承來便利我們建立類的過程。我將在這一講中深入類型,並介紹多態(polymorphism)的概念。 類型檢查Java的任意變數和引用經過型別宣告(type declaration),才能使用。我們之前見過對象資料、類資料、方法參數、方法傳回值以及方法內部的自動變數,它們都需要聲明其類型。Java是一種強型別(strongly
Time of Update: 2017-01-19
我們之前一直在使用“對象”這個概念,但沒有探討對象在記憶體中的具體儲存方式。這方面的討論將引出“對象引用”(object reference)這一重要概念。對象引用我們沿用之前定義的Human類,並有一個Test類:複製代碼 代碼如下:public class Test{ public static void main(String[] args) { &
Time of Update: 2017-01-19
我們一直是為了產生對象而定義類(class)的。對象是具有功能的實體,而類是對象的類型分類。這是物件導向的一個基本概念。在繼承(inheritance)中,我們將類當做可以拓展的主體,這提高了我們對“類”的認識。類本身還有許多值得討論的地方。我們將繼續深入static資料成員有一些資料用於表述類的狀態。比如Human類,我們可以用“人口”來表示Human類的對象的總數。“人口”直接描述類的狀態,而不是某個對象。Human類的人口為8類的所有對象共用“人口”資料。這樣的資料被稱為類資料成員(cla
Time of Update: 2017-01-19
繼承(inheritance)是物件導向的重要概念。繼承是除組合(composition)之外,提高代碼重複可用性(reusibility)的另一種重要方式。我們在組合(composition)中看到,組合是重複調用對象的功能介面。我們將看到,繼承可以重複利用已有的類的定義。類的繼承我們之前定義類的時候,都是從頭開始,詳細的定義該類的每一個成員。比如下面的Human類:複製代碼 代碼如下:class Human{ /** &
Time of Update: 2017-01-19
我們已經寫了一些Java程式。之前的每個Java程式都被儲存為一個檔案,比如Test.java。隨後,該程式被編譯為Test.class。我們最終使用$java
Time of Update: 2017-01-19
我們已經嘗試去定義類。定義類,就是建立了一種類型(type)。有了類,我們接著構造相應類型的對象。更進一步,每個類型還應該有一個清晰的介面(interface),供使用者使用。我們可以在一個新類的定義中使用其他對象。這就是組合(composition)。組合是在Java中實現程式複用(reusibility)的基本手段之一。組合與"has-a"一個對象是另一個對象的資料成員。比如我們看之前提到的充電電筒的例子:一個充電電筒中的電池、LED燈、按鈕……
Time of Update: 2017-01-19
在封裝與介面中,private關鍵字封裝了對象的內部成員。經過封裝,產品隱藏了內部細節,只提供給使用者介面(interface)。介面是非常有用的概念,可以輔助我們的抽象思考。在現實生活中,當我們想起某個用具的時候,往往想到的是該用具的功能性介面。比如杯子,我們想到加水和喝水的可能性,高於想到杯子的材質和價格。也就是說,一定程度上,用具的介面等同於用具本身。內部細節則在思考過程中被摒棄。a cup in
Time of Update: 2017-01-19
總結之前的內容,對象(object)指代某一事物,類(class)指代象的類型。對象可以有狀態和動作,即資料成員和方法。到現在為止,資料成員和方法都是同時開放給內部和外部的。在對象內部,我們利用this來調用對象的資料成員和方法。在對象外部,比如當我們在另一個類中調用對象的時,可以使用 對象.資料成員 和 對象.方法()
Time of Update: 2017-01-19
在方法與資料成員中,我們提到,Java中的對象在建立的時候會初始化(initialization)。初始化時,對象的資料成員被賦予初始值。我們可以顯式初始化。如果我們沒有給資料成員賦予初始值,資料成員會根據其類型採用預設初始值。顯式初始化要求我們在寫程式時就確定初始值,這有時很不方便。我們可以使用構造器(constructor)來初始化對象。構造器可以初始化資料成員,還可以規定特定的操作。這些操作會在建立對象時自動執行。定義構造器構造器是一個方法。像普通方法一樣,我們在類中定義構造器。構造器有如
Time of Update: 2017-01-19
在Java基礎教程之從Hello
Time of Update: 2017-01-19
Java是完全物件導向的語言。Java通過虛擬機器的運行機制,實現“跨平台”的理念。我在這裡想要呈現一個適合初學者的教程,希望對大家有用。"Hello World!"先來看一個HelloWorld.java程式。這個程式在螢幕上列印出一串字元"Hello World!":複製代碼 代碼如下:public class HelloWorld{ public static void main(String[] args)
Time of Update: 2017-01-19
線程是Java程式設計裡非常重要的概念,本文就以執行個體形式對此加以詳細解讀。具體分析如下:首先,線程加鎖有什麼用處呢?舉個例子:比如你現在有30000塊大洋在銀行存著,現在你到銀行取錢,當你輸入密碼完成後,已經輸入取款金額,比如你輸入的是20000,就是在銀行給你拿錢這個時刻,你老婆也去銀行取這筆錢,你老婆同樣取20000,因為此時你的賬上仍然是30000,所以銀行同樣的操作在你老婆那端又進行了一遍,這樣當你們兩個完成各自操作後,銀行記錄的你賬上還應該有10000塊存款,這樣是不是很爽。解決這
Time of Update: 2017-01-19
1. 一維數組1.1 一維數組的定義type arrayName[];type[]
Time of Update: 2017-01-19
本文執行個體簡述了Java List雙擊事件實現方法,有著不錯的借鑒價值。分享給大家供大家參考之用。具體方法如下:1. 定義一個MouseListener;2. 在mouseListener中增加mouseClicked事件;3. 由MouseEvent的getSource()獲得List對象;4. 由List的getSelectedIndex()事件獲得點擊項的Index;5. 根據Index,用List的getItem()方法獲得點擊項;6.
Time of Update: 2017-01-19
Java多線程面試問題 1. 進程和線程之間有什麼不同? 一個進程是一個獨立(self contained)的運行環境,它可以被看作一個程式或者一個應用。而線程是在進程中執行的一個任務。Java運行環境是一個包含了不同的類和程式的單一進程。線程可以被稱為輕量級進程。線程需要較少的資源來建立和駐留在進程中,並且可以共用進程中的資源。 2.
Time of Update: 2017-01-19
今天我們要來分享一些關於Java的反編譯工具,反編譯聽起來是一個非常高上大的技術詞彙,通俗的說,反編譯是一個對目標可執行程式進行逆向分析,從而得到原始代碼的過程。尤其是像.NET、Java這樣的運行在虛擬機器上的程式設計語言,更容易進行反編譯得到原始碼。當然,也有一些商業軟體,對其程式進行了混淆加密,這樣我們就很難用工具反編譯了。 1、Java反編譯外掛程式