已經作業幾年了,java,vue,python,C++各種專案都隨叫隨到,但除了C++其他都沒有系統的學習過,這里僅記錄下從頭學習java基礎的程序,和我認為值得記錄的一些點,權當做一個備份和檔案,
學習參考書:java核心技術 卷1 第九版,家里正好有這本書很多年了,也就看這個了,不是很推薦,原因:1,太厚,內容雖然詳細但也很臃腫,2. 翻譯,有些翻譯不是很好理解,比如類中的資料,C++叫成員變數,這里翻譯成域,
1 類的三種關系:use, has, is
2 封裝:資料域私有,即隱藏資料的實作方式,只提供方法去操作,所有的使用者呼叫即可而不需要關心實作方法的都可以稱為封裝,
3 java的所有變數都是參考,這里的參考更類似于C++的指標,即每個java變數都是指向了一個記憶體中的物件(不深究的話可以簡單的認為就是堆),這里引申出來就很好理解java引數傳遞,java所有的引數都是變數的拷貝,而變數本身并不是物件而是物件的參考,舉栗:
??class A{
????private int b=0;
????pubic void setB(int b){ this.b = b;}?????
??}
??A isA = new A();
?? 無論是isA,或是傳遞給fun(A paramA)后的paramA,只要明白改變的是isA,paramA,還是真正的實體E,這個問題就很簡單了,(這編輯器圖片怎么才能浮動???)

??當我們呼叫isA.setB(1) 或者paramA.setB(2)時,我們呼叫的都是物件提供的修改器方法,改變了物件內部的屬性,而兩個變數仍然指向E,這時很明顯我們修改的是物件,而當我們使用isA = new A(); 或其他回傳A型別的方法時,這時我們改變的是isA,即讓isA指向了其他物件,
(鑒于有人說看不懂??,補充下,果然表達是比較難的,我覺得寫的很清楚明白,但從其他角度看可能很垃圾??)
??
??所謂的java傳參時可變型別/不可變型別,不過是實體物件沒有修改方法,他也改不了,給變數付了另一個值罷了,這種說法很容易給人誤導,也很難理解和記憶,
??例如 String str = "hello world" , str指向一個字串實體物件,這個物件沒有提供修改方法,那想要改變字串的內容只能讓str指向另一個地方,即重新賦值: str = "beautiful world",
??所有的型別,包括不可變型別都可以按照上例A去理解,只不過是實體有沒有提供修改方法罷了,
??總之,變數是物件的參考,區分好變數與物件實體的關系,弄明白修改的是變數還是實體,這些問題都迎刃而解,
4??public:所有類可見,private:本類可見,protected:本包可見,本類可見和本包可見并不是指物件,同一類的兩個物件A和B,A的方法中是可以訪問B的private 資料的,
??例如:
??class A{
????private int b=0;
????pubic void setB(int b){ this.b = b;}??
????public boolean equals(A other){ return this.b ==other.b} //可以直接訪問同型別other的資料?
??}
??同樣的包可見也可以,而且protected是默認的,只要在同一個包下就可以直接訪問所有為protected的資料,
5??當類的資料包含可變物件時,最好不要撰寫可以直接回傳該物件參考的方法,這會破環封裝,可以使用clone()方法,原因跟上面一樣,
6??static 修飾變數->類變數,修飾函式->類函式,static修飾的都屬于類本身,而不是類實體,
7??方法的名稱和引數構成了方法的簽名,我們起名叫多載指的是同名不同引數的方法,但其實對于編譯器來說它們就是兩個不同的函式,方法名和引數型別構成了方法的唯一標識,跟回傳值無關哦,
8??僅當沒有提供任何構造器時,編譯器才會提供默認的構造器,
9??初始化,在固定邏輯的資料進行初始化時,我們可以默認初始化,例如上面的 private int b=0; 同時也可呼叫靜態方法初始化,例如 private int id = assignId(); private static int assignId(){//操作};
??建構式可以在第一句時使用 this(引數)的方式呼叫該類的另一個建構式,?
??初始化塊 :
??class A{
??private b = 1;
??{b = 100;}
??}
??在構造物件的時候會按照在類宣告中出現的順序,依次執行所有初始化陳述句和初始化塊,其實在這之前會賦值默認值,即上面的b會在初始化A類物件時,先b=0,再b=1,再b=100;
??靜態初始化塊:
??同樣可以用以下塊來初始化型別:
??class A{
????static{//這會在類加載時 執行,可用于初始化類變數等}
??}
10 ??類路徑,在配置java環境時可配置CLASSPATH,也可在運行時用 -classpath 引數指明,運行java程式時,虛擬機會首先查找jre/lib, jre/lib/ext 下的檔案和rt.jar等運行時檔案,之后查找類路徑,如果沒有設定類路徑,類路徑默認包含當前目錄,如果設定了類路徑卻沒有包含".", "."代表當前目錄,則不會查找當前目錄,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/502621.html
標籤:其他
上一篇:創建執行緒有幾種方式?
下一篇:Shell 第二章《流控》
