Java基礎知識備忘

  • 對象在創建的時候會初始化,初始化時Java會調用構造器,若沒有自定義構造器則會調用默認的構造器,若沒有數據成員賦予初始值(顯示初始化),則根據其類型采用默認初始值。 一般來說,我們會使用構造器來初始化對象。初始化方法的優先級:構建方法 > 顯式初始值 > 默認初始值

  • 構造器基本特征:

    • 構造器的名字和類的名字相同
    • 構造器沒有返回值
  • Java會同時根據方法名和參數列表來決定所要調用的方法,這叫做方法重載,構建方法可以重載,普通方法也可以重載

  • 封裝:保留有限的外部接口,隱藏具體實施細節,用戶處在封裝的外部,只能通過接口,進行所需的操作,封裝提高了產品的易用性,安全性

  • Java通過三個關鍵字來控制對象的成員的外部可見性

    • public
    • private
    • protected
  • 在Java的通常規范中,表達狀態的數據成員要設置成private,對數據成員的修改要通過接口提供的方法進行。用戶不能直接修改數據,必須通過相應的方法才能讀取和寫入數據。

  • interface

    • 不需要定義方法的主體
    • 不需要說明方法的可見性
      • interface中的方法默認為public
      • 一個類的public方法構成了接口,所有出現在interface中的方法都默認為public
  • 我們可以在一個類的定義中實施接口(implements),一旦類中實施了某個interface,必須在該類中定義interface的所有方法,類中的方法需要與interface中的方法原型相符

  • 在一個新類的定義中使用其他對象,這就是組合,增加代碼的復用性

  • 基本類型(int,float……)一旦聲明就會被分配內存空間,而普通類型需要使用new關鍵字來分配內存空間。

  • Java為每個基本類型提供了相應的普通類型,如int基本類型對應Integer類型,如果將基本類型的對象轉成相應的普通類型變量,所謂的基本類型也就成為了一般意義上的類型(不再有內存管理上的不同)

  • package

例:
package com.defineof.society
- 表示該程序在com.vamei.society包中,com.defineof表示包作者的域名。Jaav要求包要有域名前綴,以便區分不同的作者,society為進一步的本地路徑名
- Java程序提供了一個命名空間,一個Java類的完整路徑由它的包和類名共同構成

例:
com.defineof.society.Human

  • 一個Java文件中只能有一個public的類,該類要與.java文件同名。一個類可以沒有public關鍵字,實際上也表示一種權限:該類在它所在的包可見,包中的其他Java程序可以訪問該類,這是Java中的默認訪問權限。

  • import用于識別路徑,利用import語句,我們可以引入相應路徑下的類

  • 如果包沒有在當前工作路徑下,我們在使用包時,需要通知Java

$javac -classpath /home/defineof/javapackage:Test.java
$java -classpath /home/defineof/javapackage:Test
- 另外,可以設置系統的CLASSPATH環境變量,將上述路徑加入到該變量中,而不用每次都鍵入-classpass選項

  • 包管理的是.class文件,Java號稱“一次編譯,處處運行”。.class文件可以在任意裝有Java虛擬機(JVM)的平臺上運行,實現了良好的可移植性

-繼承是除組合之外,提高代碼重復可用性的另一種重要方式

  • 組合:重復調用對象的功能接口

  • 繼承:重復利用已有的類的定義

  • 使用extends關鍵字表示繼承

class Woman extends Human {……}

  • 通過繼承,創建了一個新類,叫做衍生類,被繼承的類成為基類,衍生類以基類作為自己定義的基礎,并補充基類中沒有定義的方法

  • 通過繼承,創建了Woman類,整個過程可以分為三個層次

    • 基類定義
    • 衍生類定義
    • 外部使用
  • 在衍生類中,不能訪問基類的private成員

  • 用關鍵字來指代基類對象,使用super.member的方式來表示基層的(public)成員

  • 標為protected的成員在該類及其衍生類中可見,基類的protected成員可以被衍生層訪問,但不能被外部訪問

  • 當基類和衍生類中的方法名和參數列表都相同時,在外部使用時,Java會曾賢衍生層的方法,而不是基類方法,這種機制叫做方法覆蓋,通常用于修改基類成員的方法

  • 衍生類的構造方法

    • 要在衍生類的定義中定義與類同名的構造方法,在該構造方法中
      • 由于在創建衍生對象的時候,基類對象先被創建和初始化,所以,基類的構造方法應該先被調用,使用super(argument list)的語句,來調用基類的構造方法。
      • 基類對象創建之后,開始構建衍生層(初始化衍生層對象),與一般的構建方法相同
  • 類數據

class Human(){
……
private static int population;
}

  • 類成員

class Human(){
……
public static int getPopulation()
{……}
}

  • 調用該方法時,可以通過class.method()方式調用,也可以通過object.method()方式調用

  • 對象方法可以訪問修改數據

  • final關鍵字用來表示這個數據/方法/類不能被改變了

    • final基本類型的數據:定值,只能賦值一次,不能再被修改,適合存儲一些常量
    • final方法:該方法不能被覆蓋,private的方法默認為final的方法
    • final類:該類不能被繼承
    • final普通類型的對象,表示對象引用只能指向一個對象,但對象的內容可以改變
  • 接口繼承與類繼承很類似,以繼承的interface為基礎,增添新的接口方法原型

  • 在Java類的繼承中,一個衍生類只能有一個基類,一個類不能同時繼承多余一個的類

  • 在Java中,interface可以同時繼承多余一個interface,這叫做多重繼承

  • 抽象類

abstract class Food {
public abstract void eat();
public void happyFood(){
……
}
}
- 類中的方法可以聲明為abstract,不需要具體定義該方法的原型(與接口類似),當有衍生類繼承該類,需要提供該抽象方法的的具體定義
- 當一個類中出現abstract方法時,這個類的聲明必須加上abstract關鍵字
- 一個abstract類不能用于創建對象

  • 抽象類的繼承:可以像繼承類那樣繼承一個抽象類,但必須用完整的方法定義,來覆蓋抽象類中的抽象方法,否則,衍生類依舊是一個抽象類

  • 抽象類的定義中可以有數據成員,數據成員的繼承和正常類的繼承相同

- 從一個高精度類型轉換到低精度類型,有可能會損失信息,這種轉換叫做收縮變換(narrowing conversion)

  • 從一個低精度類型轉換成高精度類型,則不存在信息損失,這種轉換叫做寬松變換(widening conversion)
  • 將一個衍生類引用轉換成其基類引用,叫做向上轉換(upcast)
public class Test
{
    public static void main(String[] args){
        Cup aCup;
        BrokenCup aBrokenCup = new BrokenCup();
        aCup = aBrokenCup;
    }
 }
class Cup{
  ……
}
class BrokenCup extends Cup{
  ……
}
  • 將一個基類引用轉換成為衍生類的引用,叫做向下轉換(downcast)
public class Test
{
    public static void main(String[] args){
        BrokenCup aBrokenCup = new Cup();
    }
 }
class Cup{
  ……
}
class BrokenCup extends Cup{
  ……
}
  • Java可以根據當前狀況,識別對象的真實類型,叫做多態
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,772評論 3 422
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,947評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,960評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,350評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,549評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,104評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,914評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,089評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,340評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,834評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,106評論 2 375

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,726評論 18 399
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,130評論 0 62
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,802評論 18 139
  • 一:java概述:1,JDK:Java Development Kit,java的開發和運行環境,java的開發工...
    ZaneInTheSun閱讀 2,680評論 0 11
  • 601071閱讀 348評論 0 2