javacv源代碼分析,c語言源程序開發

本文目錄一覽:

如何讀JAVA源碼

本來不想回答,翻到下面那些答覆實在看不過去,就花點功夫整理下吧,希望對有人心能有幫助。

閱讀分析源代碼,一些有效的方法是:

1、閱讀源代碼的說明文檔和API文檔。

2、如果源代碼有用法示例或嚮導,先閱讀這個。

3、了解整個項目的模塊結構,可以按模塊進行閱讀。

4、隨時使用查找功能(或超鏈接)閱讀關聯類或關聯方法。

5、對於有疑問的地方,不妨寫幾行單元測試。

6、由淺入深,由易到難,多閱讀優秀的開源項目,代碼閱讀水平會突飛猛進。

我是java初學者,拿到一個做好的java項目代碼,我該如何分析這個代碼結構和採用了什麼java框架技術。

1、拿到代碼查看項目當中是否有readme這樣的文件,如果沒有查看是否有文檔之類的

2、代碼當中沒有文檔,那麼就想你的同事或者其他人要這個框架的介紹或者資料

3、先請教別人這個框架的大體思路

4、自己獨立去按照文檔或者其他人說的思路去看代碼

5、不懂的地方全部記錄下面,一次行去問,有的時候很多問題在你看到後面的東西的時候就自然明白了

6、看懂了代碼之後自己嘗試著寫一個,看自己的理解是否正確就這麼多了。

java代碼解析

一樓的說的夠全面了,不過稍有誤解.

再來表示抱歉,我對編程語言中的中文名詞非常不了解,所以如果以下的回復對你的閱讀或者理解造成困難,請見諒.

1.首先,要明白這個問題的答案,需要了解call (pass) by value 和 call (pass) by reference 的區別.簡單來說:

call by value通常是複製這個parameter的值去另外一塊內存里,然後傳給function, 所以在method/function裡邊對這個變數的所有變更,實際上都是對複製過來的鏡像進行操作,不會對原本的variable有任何影響.

call by reference是將parameter的reference傳給function,簡單點理解就是直接把variable傳給function.所以說這個variable的值是可以被function改變的.這個用法在c/c++中非常常見,用法是variable_name.

2.再來,在Java裡邊,你可以很簡單的理解為: Java中只有call by value, 也就是說,所以所有傳給function的parameter本身都不會被改變. (這是最簡單直白的理解,當然也有另一種常從sun的人那邊聽到的說法:Java是call by value + call by reference by value)

3.那麼現在的問題就是為什麼第二個結果是2了. 首先說一下sun官方的解釋: 對於reference type在作為parameter/argument的時候,也是call by value, 但是在你擁有足夠許可權時(比方說那個變數是public的, 不是final的等等各種符合的情況),可以修改這個object中fields的值(也就是屬於這個object(嚴謹點講是an instance of the object) 內部的變數, 在你的例子中, ko 裡邊的 a 就是一個field, 所以update(ko)會使ko.a變成2).

4.如果你是一個有過c/c++學習經驗的人或者你以上的解釋很難理解,以下這種說法或許更適合你 (當然了,這只是大多包括我在內有c經驗的人的一種理解方式)

這裡可以引入一個新的概念,pointer. 這是一種比較特殊的變數,它內部所儲存的東西,其實只是另外一個變數的內存地址. 如果對內存沒有概念,你可以把它簡單理解為是風箏的線軸,雖然看它本身看不出什麼端倪,但是順著摸過去總會找到風箏,看到它是什麼樣子. 以pointer方式理解Java的人,通常會說: Type variable = new Type(); 這個過程中,最後生成的這個variable其實就是一個pointer,而不是instance本身.

在Java中, 有c/c++經驗的人通常認為Java是call by value.同時,當一個變數用在儲存reference type的時候,實際上儲存的是它的pointer,這也一樣可以解釋為什麼ko.a會有2這個結果,因為雖然pointer被傳到function裡邊時,本身是call by value,無法被改變.但這並不影響function本身對這個pointer指向的object的內容做任何改變. 當然,再次聲明,這只是一種幫助有c/c++經驗的人理解的方法. Sun本身嚴正聲明Java裡邊沒有pointer這個東西的存在.

5. 再來解釋一下為什麼說樓上所說的(或者說樓上引用的)理解略有偏差.

引用”我們上面剛學習了JAVA的數據類型,則有:值類型就是按值傳遞的,而引用類型是按引用傳遞的” 這句話很明顯的有兩點錯誤. 第一點,如果我上面所說的,Java是沒有call by reference的.

第二點,暫且假設Java裡邊是有call by reference的, 這句話依然不成立.

Java中的變數有兩種類型: primitive types 和 reference type.

primitive type包括byte, short, int, long, char, boolean, float和double.

而這8種之外的所有的,都是reference type.

下面是一段對你的貼上來的code的一點延伸,希望可以幫助你更好的理解Java中的argument / parameter到底是如何運作的.

public class Test {

public static void main(String[] args) {

int a = 1;

Koo koo = new Koo();

Object o = new Integer(1);

Koo newKoo = new Koo();

update(a);

update(koo);

update(o);

update(newKoo);

newUpdate(newKoo);

System.out.println(a);

System.out.println(koo.a);

System.out.println(o);

System.out.println(newKoo.a);

}

static void update(int a) {

a++;

}

static void update(Koo koo) {

koo.a++;

}

static void update(Object o) {

o = (int) (Integer.parseInt(o.toString()) + 1);

}

static void newUpdate(Koo koo) {

koo = new Koo();

}

}

class Koo {

int a = 1;

}

/*

o = (int) (Integer.parseInt(o.toString()) + 1); 這一行中的(int)純粹是多餘的,是否有這個casting對code本身沒有任何影響. 如果你高興也可以用

o = new Integer(Integer.parseInt(o.toString()) + 1);

或者乾脆

o = Integer.parseInt(o.toString()) + 1;

*/

以上這些code運行之後會得到1 2 1 2的結果. 後面兩個結果可以很好的說明, 即使對objects (reference type variables) 來看, Java所應用的也並不是call by reference. 否則的話,以上code運行結果應該是1 2 2 1

希望你可以真正理解這個新的例子中,產生1212這個結果的原因,從而對Java中的arguments有一個系統全面的認識.

圖片是相關資料的鏈接,知道里貌似不能加網址

java源碼分析,最好的解答,應該最好逐句解答,這句什麼要這樣寫,為什麼不哪樣寫,看的人一樣就看懂了。

但是如果連程序最基本的元素——標識符、關鍵字、……等等的都沒有了解的話,那麼最先開始看實例是比較困難的,哪怕是逐句解釋。當然了,可以把概念放到實例中講解,但是這樣一來大量概念和其它信息的相互關聯,未必能讓初學者在一開始就理解實常式序。

我也覺得結合實例的基礎講解比價好,只是不能一味全部是實例,當然也不能全部是概念,要相互結合,適當地概括和總結。

什麼是java源代碼 怎麼查看

你說的java源代碼是指編譯成的class文件前的java文件。

當我們運行.java文件時,它會被系統編譯成.class文件,例如Test.java編譯之後就是Test.class,

源文件就是指Test.java文件,

一般部署項目時,有.class文件就可以發布運行了,但是如果想修改這個系統,.class是不能修改的,要有.java文件才能修改

也可以上網去下反編譯軟體,就是能把.class文件大部分還原成.java文件的工具,但不是100%還原,而且如果不是正版的,小心有毒啊,什麼的。

原創文章,作者:AJGM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/149398.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
AJGM的頭像AJGM
上一篇 2024-11-04 17:51
下一篇 2024-11-04 17:51

相關推薦

  • g3log源代碼學習

    g3log是一個高性能C++日誌庫,其代碼十分精簡和可讀性強,本文將從3個方面詳細介紹g3log源代碼學習。 一、g3log源代碼整體架構 g3log的整體架構十分清晰,其中有3個…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28

發表回復

登錄後才能評論