Java知識點-基礎(chǔ)篇-基礎(chǔ)知識(一)

關(guān)注公眾號【愛做夢的錘子】后臺回復(fù)【java知識點】可下載整理好的xmind思維導(dǎo)圖

基礎(chǔ)知識

基本數(shù)據(jù)類型

8種基本數(shù)據(jù)類型

  • 字符型

    • char-1
  • 布爾型

    • boolean-1
  • 數(shù)值(符號位迈着,一個字節(jié)=8位)

    • byte-1

    • short-2

    • int-4

    • long-8

    • float-4

    • double-8

浮點型

  • 一種對實數(shù)的近似值的表現(xiàn)法,由一個有效數(shù)字加上冪數(shù)來表示郭怪,

自動拆裝箱

自帶拆裝箱

  • 基本數(shù)據(jù)類型

    • 不需要new卿闹,在棧內(nèi)存存儲丢间,比較高效
  • 包裝類型

    • 基本數(shù)據(jù)類型不是面向?qū)ο蟮模琂ava語言在設(shè)計時,添加基本數(shù)據(jù)類型對應(yīng)的包裝類型
  • 裝箱

    • 基本數(shù)據(jù)類型->包裝類型【通過Integer.valueOf() 以int為例】
  • 拆箱

    • 包裝類型->基本數(shù)據(jù)類型 【通過integer.intValue 以Integer為例】
  • Java5開始提供自動拆裝箱

  • 缺點

    • 包裝對象的數(shù)值比較不能簡單的使用==

    • 自動拆箱時會可能引發(fā)NPE

    • for循環(huán)中如果存在大量的拆裝箱锭吨,會浪費資源

緩存機制

  • Integer的緩存機制

    • Java5新增功能痕寓,節(jié)省內(nèi)存傲醉,提高性能

    • 整型對象通過使用相同的對象引用實現(xiàn)了緩存和重用

整數(shù)區(qū)間在-128-127之間數(shù)值適用,最大值127可以通過-XX:AutoBoxCacheMax=size修改
自動裝箱適用

  • 其他緩存(通過包裝成a呻率,b兩個對象時硬毕,可以使用a==b判斷其是否相等)

    • -128至127之間的整數(shù)(§3.10.1)

    • true 和 false的布爾值 (§3.10.3)

    • ‘\u0000’至 ‘\u007f’之間的字符(§3.10.4)

    • Byte, Short, Long有固定范圍: -128 到 127。對于Character, 范圍是 0 到 127礼仗。除了Integer以外吐咳,這個范圍都不能改變逻悠。

String

不可變性

  • 一個String對象在內(nèi)存堆中被創(chuàng)建出來,他就無法被修改

Java6與Java7的substring

  • java6韭脊,導(dǎo)致問題:在一個很長的字符串中截取較短的一部分童谒,會導(dǎo)致這個較長的字符串不能被回收,致使內(nèi)存泄露沪羔,已被官方標(biāo)記為JDK6的BUG
 //JDK 6
String(int offset, int count, char value[]) {
    this.value = value;
    this.offset = offset;
    this.count = count;
}

public String substring(int beginIndex, int endIndex) {
    //check boundary
    return  new String(offset + beginIndex, endIndex - beginIndex, value);
}

  • java7

 //JDK 7
public String(char value[], int offset, int count) {
    //check boundary
    this.value = Arrays.copyOfRange(value, offset, offset + count);
}

public String substring(int beginIndex, int endIndex) {
    //check boundary
    int subLen = endIndex - beginIndex;
    return new String(value, beginIndex, subLen);
}

replaceFirst饥伊、replaceAll、replace區(qū)別

  • replaceFirst:基于正則表達(dá)式的匹配替換蔫饰,只替換匹配到的第一個

  • replaceAll:基于正則表達(dá)式的匹配替換撵渡,替換全部符合規(guī)則的字符和字符串

  • replace:可以支持字符的替換,也支持字符串的替換死嗦,替換全部匹配的字符和字符串

字符串的拼接

  • concat拼接

    • 生成一個新的字符串
  • + 拼接

    • 語法糖趋距,實際上還是使用的時StringBuilder的append方法
  • StringBuffer

    • 線程安全,append方法使用synchronized 修飾
  • StringBuilder

  • Java8中String.join方法

  • 5中方式拼接相同字符串越除,耗時

    • StringBuilder<StringBuffer<concat<+<StringUtils.join

String.valueOf和Integer.toString的區(qū)別

  • 無區(qū)別节腐,String.valueOf是通過調(diào)用Integer.toString實現(xiàn)

switch支持

  • java7開始switch支持String

  • switch支持int,直接通過比較int的值

  • switch支持char摘盆,將char字符轉(zhuǎn)換成對應(yīng)的asii碼的數(shù)值翼雀,再進行比較

  • switch支持String,使用String的hashCode孩擂,以及equals方法來匹配

    String str = "world";
    String s;
    switch((s = str).hashCode())
    {
    default:
        break;
    case 99162322:
        if(s.equals("hello"))
            System.out.println("hello");
        break;
    case 113318802:
        if(s.equals("world"))
            System.out.println("world");
        break;
    }

字符串池

  • 字符串池是由String類私有的維護狼渊,是為了提升性能和減少內(nèi)存開銷,避免字符串的重復(fù)創(chuàng)建

  • 字符串創(chuàng)建方式

    • 直接使用字符串賦值类垦。直接去字符串池中查找當(dāng)前字符串值是否存在狈邑,存在,則直接將池中引用返回蚤认;如果不存在米苹,則在字符串池中創(chuàng)建對象,然后將池中引用返回

    • 顯式new String()砰琢。首先會去字符串池中查找當(dāng)前字符串值是否存在蘸嘶,如果不存在,則在字符串池中創(chuàng)建對象陪汽,存在則不創(chuàng)建训唱。最后還要在堆中額外創(chuàng)建一個字符串對象,最后是將堆中對象的引用返回

  • 回收機制

    • new關(guān)鍵字創(chuàng)建的字符串對象如果不可達(dá)就會被gc回收挚冤。而字符串字面量創(chuàng)建的字符串對象况增,因為常量池中還持有對該字符串的引用,則不會被回收你辣。這并不代表字符串池中的字符串永遠(yuǎn)不被回收巡通,字符串池提供有GC相關(guān)接口尘执,根據(jù)不同的GC策略,會在適當(dāng)?shù)臅r候回收

常量池

  • 運行時常量池

    • 屬于方法區(qū)的一部分

    • Java并不要求常量都必須在編譯期產(chǎn)生宴凉,運行期也可以產(chǎn)生新的常量誊锭,這些新的常量就被放在運行時常量池中

  • class常量池

    • class文件結(jié)構(gòu)

class文件最前的四個字節(jié)立镶,用于存儲Magic Number俭厚,來確定這個class文件是否能夠被這個虛擬機所接受。接下來的4個字節(jié)用來存儲版本號歉秫,前兩個字節(jié)存儲次版本號籽暇,后兩個字節(jié)存儲主版本號温治。在這之后就是常量池的入口,開始的兩個字節(jié)為常量池容量計數(shù)器戒悠,記錄常量池中常量數(shù)量

* class常量池是class文件的資源倉庫

字面量:Java語言層面常量的概念熬荆,如文本字符串,聲明為final的常量值

符號引用量: 類和接口的 全限定 名绸狐、 字段名稱和描述符卤恳、方法名稱和描述符

intern

  • intern() 方法返回字符串對象的規(guī)范化表示形式

  • ”string”.intern()方法的時候會返回”string”,但是這個方法會首先檢查字符串池中是否有”string”這個字符串寒矿,如果存在則返回這個字符串的引用突琳,否則就將這個字符串添加到字符串池中,然會返回這個字符串的引用

Java關(guān)鍵字

transient

  • 表示變量不被序列化處理

  • 序列化

    • 序列化即對一個對象進行持久化處理符相,將對象轉(zhuǎn)換成字節(jié)流進行存儲和傳輸
  • 反序列化

    • 將一個序列化后的對象字節(jié)流轉(zhuǎn)換成其對應(yīng)對象是反序列化

instanceof

  • Java中的一個雙目運算符拆融,用來測試一個對象是否是屬于某一個類的實例

    • 當(dāng)該對象是屬于該類創(chuàng)建的實例時返回 true

    • 當(dāng)該對象不屬于該類所創(chuàng)建的實例時返回 false

volatile

  • 可見性

    • 可見性,是指線程之間的可見性啊终,一個線程修改的狀態(tài)對另一個線程是可見的镜豹。
  • 問題

    • 在多線程操作同一個變量時,實際上是在每個線程中開啟一塊緩存孕索,將該變量的值復(fù)制一份逛艰,緩存在當(dāng)前線程緩存中躏碳,這就無法確保執(zhí)行讀操作的線程能實時地看到其他線程寫入的值
  • 作用

    • 被volatile修飾的變量搞旭,當(dāng)一個線程修改了這個變量的值,volatile 保證了新值能立即同步到主內(nèi)存菇绵,且各個線程每次使用前都立即從主內(nèi)存刷新肄渗,即可實時看到其他線程實時更新值

synchronized

  • 同步方法或同步代碼塊

  • synchronized取得的鎖都是對象鎖,synchronized塊之間具有互斥性咬最,支持重入翎嫡,不保證公平性,等待線程采用競爭方式獲取鎖永乌,發(fā)生異常時會自動釋放鎖

final

  • 修飾類

    • 該類不能被繼承

    • 類中成員變量惑申,可以自行設(shè)置是否為final

    • 類中成員方法隱式為final

  • 修飾方法

    • 該方法不能被重寫
  • 修飾變量

    • 必須初始化

    • 初始化后不可更改

static

  • 修飾內(nèi)部類

    • 內(nèi)部類可直接通過外部類的類名調(diào)用具伍,不用需要創(chuàng)建外部類實例來調(diào)用
  • 修飾方法

    • 該方法從屬于該類,可以使用類名之間調(diào)用
  • 修飾變量

    • 靜態(tài)變量圈驼,屬于該類
  • 修飾代碼塊

    • 類被加載時人芽,該代碼塊會被執(zhí)行一次

const

  • const是java中的預(yù)留關(guān)鍵字
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市绩脆,隨后出現(xiàn)的幾起案子萤厅,更是在濱河造成了極大的恐慌,老刑警劉巖靴迫,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惕味,死亡現(xiàn)場離奇詭異,居然都是意外死亡玉锌,警方通過查閱死者的電腦和手機名挥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來主守,“玉大人躺同,你說我怎么就攤上這事⊥枰荩” “怎么了蹋艺?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長黄刚。 經(jīng)常有香客問我捎谨,道長,這世上最難降的妖魔是什么憔维? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任涛救,我火速辦了婚禮,結(jié)果婚禮上业扒,老公的妹妹穿的比我還像新娘检吆。我一直安慰自己,他們只是感情好程储,可當(dāng)我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布蹭沛。 她就那樣靜靜地躺著,像睡著了一般章鲤。 火紅的嫁衣襯著肌膚如雪摊灭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天败徊,我揣著相機與錄音帚呼,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛煤杀,可吹牛的內(nèi)容都是我干的眷蜈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼沈自,長吁一口氣:“原來是場噩夢啊……” “哼端蛆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起酥泛,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤今豆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后柔袁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呆躲,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年捶索,在試婚紗的時候發(fā)現(xiàn)自己被綠了插掂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡腥例,死狀恐怖辅甥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情燎竖,我是刑警寧澤璃弄,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站构回,受9級特大地震影響夏块,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纤掸,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一脐供、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧借跪,春花似錦政己、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至托猩,卻和暖如春印蓖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背京腥。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留溅蛉,地道東北人公浪。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓他宛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親欠气。 傳聞我的和親對象是個殘疾皇子厅各,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,455評論 2 359