顯示具有 java教學 標籤的文章。 顯示所有文章
顯示具有 java教學 標籤的文章。 顯示所有文章

2017年9月21日 星期四

[Java 9] 原始碼模組化

java從1.8.0_144,升級到9

(其他大神,請略過)

把原始碼都全部打包變成jmod

目的在於簡化愈來愈多的原始碼造成不必要的開發困擾,使得jdk變成模組化,這也簡化了rt.jar的大小。
這並不改變jdk結構。

這個版本也讓多線程與作業系統有更好更強大的溝通效能。

這是安裝完成後的目錄,使用者會發現跟1.8.0_144很不同。
畢竟都模組化了。


我花了一些時間在研究新的模組上,發現真的跟以前很不同。

以前的原始碼是沒有jmods這個資料夾的,現在新版卻出現了。

來比較一下兩者相異之處。
這是1.8版原始碼資料夾。


這是java資料夾底下的內容,裡面放著很多可被調用的java原始碼。


這是新的java原始碼資料夾,真的很多。
83個資料夾


如果你到安裝完成的資料夾,把jmods這個資料夾打開,你會發現裡面都是jmod檔案。
還不要急著直接點開,jmod檔案他是用壓縮檔去包裹他,只要在jmod上選擇以7-zip開啟,這樣各位就能順利的打開了。


我們一般初學者調用的原始碼,都是來自java.base這個資料夾。
把java.base打開看看。
發現他有java這個資料夾,依照工程師經驗,我們直接進入。


很輕鬆的發現他跟之前的原始碼有些是一樣的,當然有些也不見了。


這時候,我們就可以從新版的原始碼其他的資料夾去看看。
如果說,其他資料夾下面,只有javax,那麼這個資料夾就與之前的版本不同一處資料夾。
那麼這樣就要繼續找。

來看一下java.rmi這個資料夾。這個資料夾裡面有java資料夾,這樣代表著,他裡面的原始碼跟上個版本是相同的。

點開看一下,可以看出來,是一樣的。


這篇只是在介紹資料夾模組的內容跟上一版的內容比較,與其他程式碼無關係。


有著作權,請勿任意轉載。若要分享,請註明本篇來源。

[java程式語言] 介面

介面這個東西,不寫實作,只能寫定義的函式。

(其他大神,請略過)

我們使用飛行這個來舉例。

先建立介面,定義函式,不能有實作。


建立Airplane這個物件來實作Fly介面。
裡面定義名稱。


建立sky物件 呼叫airplane的實作,建構子也就執行了,成功讓飛機在天上飛。


介面簡單介紹到此。


有著作權,請勿任意轉載。若要分享,請註明本篇來源。

[java程式語言] 繼承

子繼承父,是正常的觀念。
當屬性設為private,那若要使用屬性,必先set,之後get。

(其他大神,請略過)

用實例來說明,各位會比較清楚。

假設在一間學校,我們拿其中兩位老師來做撰寫。
先設定一間學校有兩位老師,因為都是老師,所以設定一下教的書。


設定數學老師繼承了學校的職位。


設定歷史老師繼承了學校的職位。


設定教學開始。


因此這就是學校執行老師義務的狀態。



有著作權,請勿任意轉載。若要分享,請註明本篇來源。



2017年9月17日 星期日

[java程式語言] 封裝

這篇主要在說封裝的東西,封裝的定義其實不難理解。

(其他大神,請略過)

封裝的意思,也就是該類別中的資料。

程式碼需要調用的時候就執行建立物件,直接拿。

這種定義也很像是C/C++裡面的struct部分


當要執行該物件內容的使用的時候,建立物件,在物件建構子中輸入要被排序的資料即可。

這篇程式碼用this做本類別的名稱使用,不會跟外在的名稱搞混。

這邊沒有加入修飾子。

如果加入修飾子,會變成這樣。


設定他的內部變數,然後再回傳取得值。

這是執行結果。




有著作權,請勿任意轉載。若要分享,請註明本篇來源。


2017年9月16日 星期六

[java程式語言] 改變陣列數值

這篇會提到陣列數值的改變

(其他大神,請略過)

這是原始碼與執行的畫面。



因為有static 存在,可直接呼叫fill函式。

把陣列名稱帶入,數字也帶入。最後即可看到成果。


但是我認為要import檔案,太嚴重了,我不寫import好不好?

可以,但是自己需要定義新的類別。
我們來定義一下新增的類別,把這個類別取名,可以隨便取

裡面的函式,要加上static,這樣就不需要建立物件了,即可直接呼叫。
取得名稱的長度,把控制變數設為0,那麼如果i小於總長度,每次迴圈就增加1,順便把數值設定好,等迴圈結束了,答案也跟著顯示出來了。


這就是改變陣列數值


有著作權,請勿任意轉載。若要分享,請註明本篇來源。


[java程式語言] 物件與數值字串的比較

相同的字串做比較之後,會被判斷成不同。

(其他大神,請略過)

感覺像是判斷數字,但是他是在判斷不同一個物件,因此顯示False



如果需要判斷兩者是否相同的數值,那就必須用另一種方式判斷。

如下圖,使用了equals去判斷數值。



這個跟c++滿類似的,但是又不一樣。

下圖是他的判斷流程,不同的物件,判斷裡面的數值
最後回傳判斷的結果。



以上就是不同物件裡面的數值判斷結果。


有著作權,請勿任意轉載。若要分享,請註明本篇來源。


2017年9月15日 星期五

[java程式語言] 用BigDecimal做簡單四則運算

這篇是利用BigDecimal的模組,幫我們做加減乘除,四則運算。

(其他大神,請略過)

原始碼



建立bigdecimal物件,把字串帶入到建構子。
建立同樣的物件,也同樣把字串帶入到建構子。
可建立多個同樣物件,互不影響。

b.add(b2),把b跟b2兩個相加,並且放到addresult變數內。

下圖就是bigdecimal檔案內的add函式。


BigDecimal就先介紹到這邊,這也都還算是基礎。

有著作權,請勿任意轉載。若要分享,請註明本篇來源。


[java程式語言] java程式碼基本輸入輸出

這篇可能比C語言更多行,但是也很簡單,基本的輸入輸出是工程師必學的。

(其他大神,請略過)

這篇我就簡單的寫一些就好,根本沒必要把這篇寫的太雜。

這是運行狀態。

import該行,調用了util這個資料夾,也調用了Scanner這個Java檔案。


建立Scanner物件後,呼叫物件裡面的nextInt,進行輸入偵測



輸入輸出說到這邊為止,這篇沒有什麼好談的,只是一般的常識而已。


有著作權,請勿任意轉載。若要分享,請註明本篇來源。



2017年9月14日 星期四

[java教學] java物件的建立與呼叫

在座是資工系背景的各位沒有人不熟"物件導向"這個名詞的

他牽著很多人完成了各項的事業。

(其他大神,請略過)

簡單介紹java的物件

一個類別在建立之前,我們稱他為藍圖,如果這時候有呼叫內部的屬性或是其他方法,編譯器就會拋出錯誤。
類別建立之後,他就是一個物件,他帶有建構子,就算你沒有把建構子寫出來,編譯器在編譯程式碼之後,會自動把建構子加上去。

畫紅線的地方就是建立物件的程式碼。



這是經過專門的軟體反編譯之後出來的原始碼。
從圖片上,很容易可以看出來,編譯器運作後,把建構子加了上去。



我們可以自行加入建構子,編譯器看到了我們有自己加了,他就不會再幫忙了。



這是反編譯後的結果,很清楚的可以觀察到我們自己加的建構子。


一般的沒有建立物件,會導致編譯器拋出錯誤。
下圖就是缺少了Demo d = new Demo(); 這行
事實上,這行的d,可以被改成其他的英文,完全不會影響整個程式碼,因為這個是讓物件命名成我們想要的名字。



物件建立之後,我們就可以利用他的物件名稱來對物件內部的屬性及其他方法進行呼叫。
利用物件的代稱d,來存取整個Demo這個物件裡面的屬性。
d.a 中間這個點,即是存取的意思。



假設,我們根本不想要建立物件這行程式碼,但是我們想存取他裡面的屬性,可不可以?
當然可以,但是要怎麼做?

我們在屬性那行前面增加static即可。再把d.a改成Demo.a,直接呼叫類別的名字來存取,就好了。

如下圖。



這是類別裡面的方法,建立物件即可呼叫method。



不加上建立物件的該行程式碼,但只要把類別寫上去,把方法前面加上static,即可大功告成。



接著,就是帶參數的建構子。
如圖所示。
建立物件之後,把1與2數字分別帶入。



帶參數的方法。




現在來說明一下多類別的物件。
建立第二個物件,編譯器也會自動加入建構子。



跟前面的相同,加上static後,就可以直接呼叫。



物件導向的東西就說到這邊為止,有興趣的讀者,可繼續到其他地方慢慢深入了解。


有著作權,請勿任意轉載。若要分享,請註明本篇來源。


[java程式語言] 分析輸出字串的調用

各位對Java程式語言不陌生,資工系的相關同學也應該都寫過,但是至於字串的調用,不知道各位知道嗎?

本篇要講解一個算是深度文。
(其他大神,請略過)

這是原始碼


這是編譯後的class檔案內部


我們把這16進位轉換成字串,方便觀察。

下圖是轉碼後的資訊。

有些字串很明顯,調用了四大基本檔案

Object.java
System.java
PrintStream
String.java

這四大檔案來說,其實以這篇文章的原始碼來說,String.java只是輔助而已,不算在內。

我們來看一下這四大檔案的過程。

因為Object只是讓Demo這個類別名稱可以釋放出檔案。
所以本檔案就不太需要詳細說明。



首先,先看System.java    他調用了PrintStream  out這個


再來,我們可以追查到這行。下圖。


checkIO()函數先出現,setOut0(out)後出現

下圖就是checkIO()的方法method
至於裡面是什麼現在對java的新手還並不是太重要。
知道是逆向觀察調用的東西就好。

再來,private static mative void setOut0那行也就是他的方法。


System.out 探討到這邊先結束,繼續向println前進。
觀察一下另外一個檔案。
下圖很明顯,PrintStream.java   裡面調用了println(String x)
參數


至於String.java
這邊的valueOf只是輔助而已,對於本篇的程式碼,沒有太大影響。


Java的字串調用,就講解到這邊為止。

有興趣,請自己慢慢分析。



有著作權,請勿任意轉載。若要分享,請註明本篇來源。


Ollydbg 2.01 繁體中文版

Ollydbg 2.01 繁體中文版 Ollydbg 2.01 繁體中文版下載: Mega:   https://mega.nz/#!I2Qy1aQD!-T5zO3PaANjBHU73I4NlkY8SHMxRptbBV8TpmeFt1fo GD: h...