java基礎(chǔ)回顧(三)

1.內(nèi)部類(lèi)

1.聲明非靜態(tài)內(nèi)部類(lèi)對(duì)象的方法: 外部類(lèi)名.內(nèi)部類(lèi)名 對(duì)象名=new 外部類(lèi)名().new 內(nèi)部類(lèi)名();
2.聲明靜態(tài)內(nèi)部類(lèi)對(duì)象的方法: 外部類(lèi)名.內(nèi)部類(lèi)名 對(duì)象名=new 外部類(lèi).內(nèi)部類(lèi)名();
3.在匿名類(lèi)中使用外部的局部變量,外部的局部變量必須修飾為final
4.外部類(lèi)訪問(wèn)內(nèi)部類(lèi):必須建立內(nèi)部類(lèi)的對(duì)象
內(nèi)部類(lèi)訪問(wèn)外部類(lèi):內(nèi)部類(lèi)可以直接訪問(wèn)外部類(lèi)的成員包括私有成員,因?yàn)橥獠款?lèi)持有內(nèi)部類(lèi)的引用(外部類(lèi).this.變量)

2.if語(yǔ)句與布爾一起使用

Boolean修飾的變量為包裝類(lèi)型,初始化值為false,進(jìn)行賦值時(shí)會(huì)調(diào)用Boolean.valueOf(boolean b)方法自動(dòng)拆箱為基本數(shù)據(jù)類(lèi)型,因此賦值后旗值為真,輸出文本true。如果使用==比較,則輸出文本false.if的語(yǔ)句比較,除布爾值外的其他類(lèi)型都不能使用賦值語(yǔ)句,否則會(huì)提示無(wú)法轉(zhuǎn)成布爾值。

3.join方法

程序在main線程中調(diào)用t1線程的join方法,則main線程放棄cpu控制權(quán),并返回t1線程繼續(xù)執(zhí)行直到線程t1執(zhí)行完畢
所以結(jié)果是t1線程執(zhí)行完后,才到主線程執(zhí)行,相當(dāng)于在main線程中同步t1線程,t1執(zhí)行完了,main線程才有執(zhí)行的機(jī)會(huì)。
join方法中如果傳入?yún)?shù),則表示這樣的意思:如果A線程中掉用B線程的join(10),則表示A線程會(huì)等待B線程執(zhí)行10毫秒,10毫秒過(guò)后,A、B線程并行執(zhí)行。需要注意的是,jdk規(guī)定,join(0)的意思不是A線程等待B線程0秒,而是A線程等待B線程無(wú)限時(shí)間,直到B線程執(zhí)行完畢,即join(0)等價(jià)于join()。

4.List的刪除

對(duì)于List而言,想要移除元素,要不然就用迭代器。要不然就從后往前刪除。
萬(wàn)萬(wàn)不可從前往后刪,會(huì)出現(xiàn)角標(biāo)越界。

5.關(guān)于抽象類(lèi)和接口

1.抽象類(lèi)可以在不提供接口方法實(shí)現(xiàn)的情況下實(shí)現(xiàn)接口。
2.子類(lèi)繼承抽象類(lèi)父類(lèi)必須重寫(xiě)父類(lèi)中的抽象方法,如果子類(lèi)也為抽象類(lèi)則不用重寫(xiě)父類(lèi)中的抽象方法。

6.值傳遞和引用傳遞

值傳遞是對(duì)基本型變量而言的,傳遞的是該變量的一個(gè)副本,改變副本不影響原變量.
引用傳遞一般是對(duì)于對(duì)象型變量而言的,傳遞的是該對(duì)象地址的一個(gè)副本, 并不是原對(duì)象本身 。
一般認(rèn)為,java內(nèi)的基礎(chǔ)類(lèi)型數(shù)據(jù)傳遞都是值傳遞. java中實(shí)例對(duì)象的傳遞是引用傳遞

7.解釋HashMap的容量為什么是2的n次冪?

  1. 提高操作運(yùn)算效率(位運(yùn)算效率 > 取模運(yùn)算效率)
  2. 減少碰撞,數(shù)據(jù)均勻分布,提高HashMap查詢效率

8.MyBatis中大于和小于號(hào)的轉(zhuǎn)義寫(xiě)法

https://blog.csdn.net/zhou520yue520/article/details/82586665

9.mybatis中$和#的區(qū)別

1.#{}會(huì)將傳進(jìn)來(lái)的參數(shù)轉(zhuǎn)換成單引號(hào)的形式,如:select * from user where name = 'csdn';因此#{}可以防止sql注入。
2.{}會(huì)直接將數(shù)據(jù)寫(xiě)上去,因此不能防止sql注入。 3.MyBatis排序時(shí)使用order by 動(dòng)態(tài)參數(shù)時(shí)需要注意,用而不是#

10.intValue(),Valueof(),parseInt()

intValue()是把Integer對(duì)象類(lèi)型變成int的基礎(chǔ)數(shù)據(jù)類(lèi)型; parseInt()是把String 變成int的基礎(chǔ)數(shù)據(jù)類(lèi)型; Valueof()是把String 轉(zhuǎn)化成Integer對(duì)象類(lèi)型;

11.同步方法和同步代碼塊的區(qū)別

同步方法默認(rèn)用this或者當(dāng)前類(lèi)class對(duì)象作為鎖;
同步代碼塊可以選擇以什么來(lái)加鎖,比同步方法要更細(xì)顆粒度,我們可以選擇只同步會(huì)發(fā)生同步問(wèn)題的部分代碼而不是整個(gè)方法;
同步方法使用關(guān)鍵字 synchronized修飾方法,而同步代碼塊主要是修飾需要進(jìn)行同步的代碼,用 synchronized(object){代碼內(nèi)容}進(jìn)行修飾;

12.在監(jiān)視器(Monitor)內(nèi)部,是如何做線程同步的

監(jiān)視器和鎖在Java虛擬機(jī)中是一塊使用的。監(jiān)視器監(jiān)視一塊同步代碼塊,確保一次只有一個(gè)線程執(zhí)行同步代碼塊。每一個(gè)監(jiān)視器都和一個(gè)對(duì)象引用相關(guān)聯(lián)。線程在獲取鎖之前不允許執(zhí)行同步代碼。

13.ReenTrantLock 實(shí)現(xiàn)交流

使用 ReenTrantLock.newCondition() 獲取一個(gè) Condition 類(lèi)對(duì)象,然后 Condition 的 await(),signal() 以及 signalAll() 分別對(duì)應(yīng)上面的三個(gè)方法。

14.TreeMap

TreeMap通過(guò)紅黑樹(shù)實(shí)現(xiàn)Map接口的類(lèi),key不可以為null,會(huì)報(bào)NullPointerException異常,value可以為null。

15.Iterator和ListIterator的區(qū)別

Iterator可用來(lái)遍歷Set和List集合,但是ListIterator只能用來(lái)遍歷List。
Iterator對(duì)集合只能是前向遍歷,ListIterator既可以前向也可以后向。
ListIterator實(shí)現(xiàn)了Iterator接口,并包含其他的功能,比如:增加元素,替換元素,獲取前一個(gè)和后一個(gè)元素的索引,等等,Iterator只能用來(lái)刪除元素。

16.hashmap的resize()方法

當(dāng)hashmap中的元素越來(lái)越多的時(shí)候,碰撞的幾率也就越來(lái)越高(因?yàn)閿?shù)組的長(zhǎng)度是固定的),所以為了提高查詢的效率,就要對(duì)hashmap的數(shù)組進(jìn)行擴(kuò)容
hashmap的初始化initailCapacity是16,負(fù)載因子loadFactor的值是0.75,有這樣一個(gè)公式:initailCapacityloadFactor=HashMap的容量,HashMap每次put操作是都會(huì)檢查一遍 size(當(dāng)前容量)>initailCapacityloadFactor 是否成立。如果不成立則HashMap擴(kuò)容為以前的兩倍(數(shù)組擴(kuò)成兩倍),
然后重新計(jì)算每個(gè)元素在數(shù)組中的位置,然后再進(jìn)行存儲(chǔ)。這是一個(gè)十分消耗性能的操作。
所以如果能根據(jù)業(yè)務(wù)預(yù)估出HashMap的容量,應(yīng)該在創(chuàng)建的時(shí)候指定容量,那么可以避免resize().

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 整理來(lái)自互聯(lián)網(wǎng) 1,JDK:Java Development Kit,java的開(kāi)發(fā)和運(yùn)行環(huán)境,java的開(kāi)發(fā)工具...
    Ncompass閱讀 1,617評(píng)論 0 6
  • 一:java概述: 1,JDK:Java Development Kit,java的開(kāi)發(fā)和運(yùn)行環(huán)境,java的開(kāi)發(fā)...
    慕容小偉閱讀 1,942評(píng)論 0 10
  • 一、基礎(chǔ)知識(shí):1、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī)...
    殺小賊閱讀 2,563評(píng)論 0 4
  • 1.import static是Java 5增加的功能,就是將Import類(lèi)中的靜態(tài)方法,可以作為本類(lèi)的靜態(tài)方法來(lái)...
    XLsn0w閱讀 1,425評(píng)論 0 2
  • 寫(xiě)文的第14天,從今天開(kāi)始我將不再每日更新,謝謝朋友圈監(jiān)督我養(yǎng)成每日寫(xiě)作的習(xí)慣,到今天為止,這個(gè)習(xí)慣已經(jīng)順利養(yǎng)成。...
    琴瑟沉香閱讀 374評(píng)論 0 0

友情鏈接更多精彩內(nèi)容