java學習筆記1 基礎

方法(變量)修飾符的使用順序

在這裏插入圖片描述

權限修飾符

在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述

關鍵字

在這裏插入圖片描述

this

this代表其所在函數所屬對象的引用。(本類對象的引用)
用法:當在函數內需要用到調用該函數的對象時,就用this。
this也可以用於在構造函數中調用其他構造函數。
注意:只能定義在構造函數的第一行,因爲初始化動作要先執行。

static

    ·用於修飾成員(成員變量和成員函數)
被修飾後的成員有以下特點:
    ·隨着類的加載而加載
    ·優先於對象存在
    ·被所有對象所共享
    ·可以直接被類名調用
使用注意:
    ·靜態方法只能訪問靜態成員
    ·靜態方法中不可用寫this,super關鍵字
    ·主函數是靜態的

補充:

在這裏插入圖片描述即使子類和父類中都有同樣的static方法和變量,他們是沒有任何關係的,他們是相互獨立的,他們是屬於各自類本身的。因此也是不存在多態特性的。而對於普通方法的調用是存在“重寫”而最終呈現出多態特性的。
同樣的道理:對於static修飾的變量,當子類與父類中存在相同的static變量時,也是根據“靜態引用”而不是根據“動態引用”來調用相應的變量的。
而在父類和子類中對於非static變量和方法,是根據“動態引用”來調用相應的變量和方法。

在這裏插入圖片描述

final

在這裏插入圖片描述

instanceof

Java中instanceof關鍵字的理解
java 中的instanceof 運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回一個布爾值來指出,這個對象是否是這個特定類或者是它的子類的一個實例。
用法:
result = object instanceof class
參數:
Result:布爾類型。
Object:必選項。任意對象表達式。
Class:必選項。任意已定義的對象類。
說明:
如果 object 是 class 的一個實例,則 instanceof 運算符返回 true。如果 object 不是指定類的一個實例,或者 object 是 null,則返回 false。
但是instanceof在Java的編譯狀態和運行狀態是有區別的:
在編譯狀態中,class可以是object對象的父類,自身類,子類。在這三種情況下Java編譯時不會報錯。
在運行轉態中,class可以是object對象的父類,自身類,不能是子類。在前兩種情況下result的結果爲true,最後一種爲false。但是class爲子類時編譯不會報錯。運行結果爲false。

註釋

在這裏插入圖片描述

標識符

標誌符:支持_和$

比較運算符

在這裏插入圖片描述

邏輯運算符

在這裏插入圖片描述

位運算符

在這裏插入圖片描述

函數

定義

在這裏插入圖片描述

特點

在這裏插入圖片描述

主函數

在這裏插入圖片描述

重載

在這裏插入圖片描述

重寫(覆寫)

方法覆寫
a、 在子類中可以根據需要對從基類中繼承來的方法進行重寫。
b、 重寫方法必須和被重寫方法具有相同方法名稱、參數列表和返回類型。
c、 重寫方法不能使用比被重寫方法更嚴格的訪問權限。
嚴格順序private>default>protecte>public ,這個與多態有關,講了多態就會明白得多。
當某個地方由父類修飾了,可以調用父類的某個方法。
若子類對該方法訪問更嚴格,當傳遞子類過來,那麼可能造成不可訪問.

重寫equals和hashCode

在這裏插入圖片描述

覆寫與重載的區別

a、重載(Overloading)
Java中方法的重載,指的是在類中可以創建多個方法,它們具有相同的名字,但具有不同的引數列(參數類型和個數)和不同的定義。
而返回值的類型可以相同也不以不同,但是不能僅僅通過不同的返回值來區分重載函數。
調用方法的時候根據參數列表來判斷調用哪個方法。重載是一個類中的多態性表現。

b、覆寫(Overriding)
Java中,子類默認可以繼承父類中的方法,而不需要重新編寫相同的方法,但是有時候,
子類並不想原封不動的繼承父類中的方法,而是做出一定的修改,這就是採用方法的覆寫(也成爲覆蓋)來實現的。
Java中覆寫指的是,在子類中對父類中同一重名函數實現部分加以改變,但與父類的該方法的方法名、返回類型和參數
列表都保持一致。即子類對父類中的函數進行重新定義,子類中的新方法將覆蓋父類原有的方法。覆寫是父類與子類之間的一種多態表現。

補充:

在這裏插入圖片描述

構造函數

在這裏插入圖片描述

數組

定義

在這裏插入圖片描述

數組中的數組

在這裏插入圖片描述

Java內存分配之堆、棧和常量池

Java內存分配主要包括以下幾個區域:

  • 寄存器:我們在程序中無法控制
  • 棧:存放基本類型的數據和對象的引用,但對象本身不存放在棧中,而是存放在堆中
  • 堆:存放用new產生的數據
  • 靜態域:存放在對象中用static定義的靜態成員
  • 常量池:存放常量
  • 非RAM(隨機存取存儲器)存儲:硬盤等永久存儲空間

Java內存分配中的棧
  在函數中定義的一些 基本類型的變量數據 對象的引用變量 都在函數的棧內存中分配。當在一段代碼塊定義一個變量時,Java就在棧中爲這個變量分配內存空間,當該變量退出該作用域後,Java會自動釋放掉爲該變量所分配的內存空間,該內存空間可以立即被另作他用。

Java內存分配中的堆
  堆內存用來存放由 new創建的對象和數組 。 在堆中分配的內存,由Java虛擬機的自動垃圾回收器來管理。
  在堆中產生了一個數組或對象後,還可以 在棧中定義一個特殊的變量,讓棧中這個變量的取值等於數組或對象在堆內存中的首地址,棧中的這個變量就成了數組或對象的引用變量。引用變量就相當於是爲數組或對象起的一個名稱,以後就可以在程序中使用棧中的引用變量來訪問堆中的數組或對象。引用變量就相當於是爲數組或者對象起的一個名稱。
  引用變量是普通的變量,定義時在棧中分配,引用變量在程序運行到其作用域之外後被釋放。而數組和對象本身在堆中分配,即使程序運行到使用 new 產生數組或者對象的語句所在的代碼塊之外,數組和對象本身佔據的內存不會被釋放,數組和對象在沒有引用變量指向它的時候,才變爲垃圾,不能在被使用,但仍 然佔據內存空間不放,在隨後的一個不確定的時間被垃圾回收器收走(釋放掉)。這也是 Java 比較佔內存的原因。
   實際上,棧中的變量指向堆內存中的變量,這就是Java中的指針!

常量池 (constant pool)
  常量池指的是在編譯期被確定,並被保存在已編譯的.class文件中的一些數據。除了包含代碼中所定義的各種 基本類型(如int、long 等等)和 對象型(如String及數組 )的 常量值(final )還包含一些以文本形式出現的符號引用,比如:

  • 類和接口的全限定名;
  • 字段的名稱和描述符;
  • 方法和名稱和描述符。
      虛擬機必須爲每個被裝載的類型維護一個常量池。常量池就是該類型所用到常量的一個有序集和,包括直接常量(string,integer和 floating point常量)和對其他類型,字段和方法的符號引用。
      對於String常量,它的值是在常量池中的。而JVM中的常量池在內存當中是以表的形式存在的, 對於String類型,有一張固定長度的CONSTANT_String_info表用來存儲文字字符串值,注意:該表只存儲文字字符串值,不存儲符號引 用。說到這裏,對常量池中的字符串值的存儲位置應該有一個比較明瞭的理解了。
       在程序執行的時候,常量池會儲存在Method Area,而不是堆中。

堆與棧
  Java的堆是一個運行時數據區,類的(對象從中分配空間。這些對象通過new、newarray、 anewarray和multianewarray等指令建立,它們不需要程序代碼來顯式的釋放。 堆是由垃圾回收來負責的,堆的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器 ,因爲它是在運行時動態分配內存的,Java的垃圾收集器會自動收走這些不再使用的數據。但缺點是,由於要在運行時動態 分配內存, 存取速度較慢
   棧的優勢是,存取速度比堆要快 ,僅次於寄存器,棧 數據可以共享 。但缺點是,存在棧中的 數據大小與生存期必須是確定的 ,缺乏靈活性。棧中主要存放一些基本類型的變量數據(int, short, long, byte, float, double, boolean, char)和對象句柄(引用)。


這裏我們主要關心棧,堆和常量池,對於 棧和常量池中的對象可以共享 ,對於 堆中的對象不可以共享 。棧中的數據大小和生命週期是可以確定的,當沒有引用指向數據時,這個數據就會消失。堆中的對象的由垃圾回收器負責回收,因此大小和生命週期不需要確定,具有很大的靈活性。

字符串內存分配:
  對於字符串,其 對象的引用都是存儲在棧 中的, 如果是編譯期已經創建好(直接用雙引號定義的)的就存儲在常量池中 ,如果是運行期(new出來的)才能確定的就存儲在堆中。對於 equals相等的字符串,在常量池中永遠只有一份,在堆中有多份

其他:
對象內存分佈在堆中,其中的成員變量變量默認值 int—0,double—0.0,char—‘’ 對象(引用)—null,
類中成員方法中的局部變量在棧中,棧中沒找到在堆中找。

匿名對象

在這裏插入圖片描述
在這裏插入圖片描述

封裝

在這裏插入圖片描述

代碼塊

在這裏插入圖片描述

單例設計模式

在這裏插入圖片描述
在這裏插入圖片描述

繼承

繼承的好處:

  1. 提高了代碼的複用性
  2. 讓類與類之間產生了關係,給第三個特徵多態提供了前提

繼承的弊端:

  1. 打破了封裝性

java中只支持單繼承。不支持多繼承,但對於C++中的多繼承機制進行改良

單繼承:一個子類只能有一個直接父類
多繼承:一個子類可以有多個直接父類(java中不允許)
    java不直接支持,因爲多個父類中有相同成員,會產生調用不確定性。
    在java中是通過“多實現”的方式來體現

java支持多層(多重)繼承:
C繼承B,B繼承A。
就會出現繼承體現。

當使用一個繼承體現時:

  1. 查看該體系中的頂層類,瞭解該體系的基本功能。
  2. 重建體系中的最子類對象,完成功能的使用。

什麼時候定義繼承呢?
當類與類之間存在着所屬關係的時候,就定義繼承。xxx是yyyy的一種:xxx extends yyy

所屬關係: is a 關係。

在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述

一個對象的實例化過程

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

抽象類

在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述

接口

接口的特點:

  1. 是對外暴露的規則
  2. 是程序的功能擴展
  3. 接口的出現降低耦合性
  4. 接口可以用來多實現
  5. 類與接口之間是實習關係,而且類可以繼承一個類的同時實現多個接口
  6. 接口與接口之間可以有繼承關係
    在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述

接口與抽象類

在這裏插入圖片描述

多態

在這裏插入圖片描述
函數的重載算是函數的多態

在這裏插入圖片描述
在這裏插入圖片描述

多態時成員的特點

在這裏插入圖片描述

內部類

在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

匿名內部類(匿名子類)

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述

異常

在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述

處理原則

在這裏插入圖片描述在這裏插入圖片描述

注意事項

在這裏插入圖片描述

發佈了16 篇原創文章 · 獲贊 4 · 訪問量 3889
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章