一年又一年,字節(jié)跳動(dòng) Lark(飛書) 研發(fā)團(tuán)隊(duì)又雙叒叕開始招新生啦!
【內(nèi)推碼】:GTPUVBA
【內(nèi)推鏈接】:https://job.toutiao.com/s/JRupWVj
【招生對象】:20年9月后~21年8月前 畢業(yè)的同學(xué)
【報(bào)名時(shí)間】:6.16-7.16(提前批簡歷投遞只有一個(gè)月抓住機(jī)會(huì)哦!)
【畫重點(diǎn)】:提前批和正式秋招不矛盾双戳!面試成功殖演,提前鎖定Offer;若有失利寻行,額外獲得一次面試機(jī)會(huì),正式秋招開啟后還可再次投遞匾荆。
點(diǎn)擊進(jìn)入我的博客
2.1 用引用操縱對象
盡管一切都看作對象拌蜘,但操縱的標(biāo)識(shí)符實(shí)際上是對象的一個(gè)“引用”。
String s;
// s是一個(gè)String類型的引用牙丽, 并沒有任何對象與其關(guān)聯(lián)
String str = "imbug";
// 創(chuàng)建str引用的時(shí)候同時(shí)進(jìn)行初始化
2.2 必須由你創(chuàng)建所有對象
使用new
操作符來創(chuàng)建新對象并與引用關(guān)聯(lián)简卧。
String str = new String("imbug");
2.2.1 存儲(chǔ)到什么地方
- 寄存器(不管你的事)——最快的存儲(chǔ)區(qū)、位于處理器內(nèi)部烤芦、空間極小举娩、不能直接控制
- 堆棧(棧)——位于RAM、堆棧指針向下移動(dòng)分配新內(nèi)存构罗、堆棧指針向上釋放內(nèi)存铜涉、存儲(chǔ)對象的引用
- 堆——位于RAM、存放Java對象遂唧、耗時(shí)比堆棧長
- 常量存儲(chǔ)——程序代碼內(nèi)部
- 非RAM存儲(chǔ)——如磁盤
2.2.2 特殊:基本類型
問題:用new
創(chuàng)建的對象在堆里芙代,對訪問頻繁而且簡單的對象代價(jià)太大。
方法:不用new
創(chuàng)建變量盖彭,而是創(chuàng)建一個(gè)不是引用的變量纹烹,直接存儲(chǔ)“值”在棧中页滚。
基本類型 | 大小 | 最小值 | 最大值 | 包裝器類型 |
---|---|---|---|---|
boolean | - | - | - | Boolean |
char | 16bits | 0 | 2^16-1 | Character |
byte | 8bits | -128 | 127 | Byte |
short | 16bits | -2^15 | 2^15-1 | Short |
int | 32bits | -2^31 | 2^31-1 | Integer |
long | 64bits | -2^63 | 2^63-1 | Long |
float | 32bits | - | - | Float |
double | 64bits | - | - | Double |
void | - | - | - | Void |
關(guān)于存儲(chǔ)空間
Java確定每種基本數(shù)據(jù)類型所占空間的大小,跟硬件平臺(tái)無關(guān)铺呵。
關(guān)于boolean類型
- boolean類型所占類型的大小沒用明確指定裹驰,今定義為能夠取字面值true、false
- 在《Java虛擬機(jī)規(guī)范》一書的描述陪蜻,“雖然定義了boolean這種數(shù)據(jù)類型邦马,但是只對它提供了非常有限的支持。在Java虛擬機(jī)中沒有任何供boolean值專用的字節(jié)碼指令宴卖,Java語言表達(dá)式所操作的boolean值滋将,在編譯之后都使用Java虛擬機(jī)中的int數(shù)據(jù)類型來代替,而boolean數(shù)組將會(huì)被編碼成Java虛擬機(jī)的byte數(shù)組症昏,每個(gè)元素boolean元素占8位”随闽。
- 這樣我們可以得出boolean類型占了單獨(dú)使用是4個(gè)字節(jié),在數(shù)組中又是1個(gè)字節(jié)肝谭。
- 根據(jù)http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html官方文檔的描述:The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn't something that's precisely defined.
關(guān)于高精度數(shù)字
Java提供了BigInteger和BitDecimal兩個(gè)高精度計(jì)算的類掘宪,但是沒有對應(yīng)的基本類型。
2.2.3 數(shù)組
Java確保數(shù)組會(huì)被初始化攘烛,而且不能在它的范圍之外被訪問魏滚;這種范圍檢查的原理是每個(gè)數(shù)組上的少量內(nèi)存開銷和運(yùn)行時(shí)的下標(biāo)檢查。
創(chuàng)建一個(gè)數(shù)組對象Object[] arr = new Object[10];
時(shí)坟漱,實(shí)際上是創(chuàng)建了一個(gè)引用的數(shù)組鼠次,數(shù)組中的每個(gè)引用都自動(dòng)被初始化為null
;如果是創(chuàng)建的是基本數(shù)據(jù)類型數(shù)組芋齿,則會(huì)講該數(shù)組所占的棧內(nèi)存全部置為0腥寇。
2.3 永遠(yuǎn)不需要銷毀對象
2.3.1 變量以及基本類型的作用域
Java語言中,作用域由花括號(hào){}
位置決定觅捆,在作用域中定義的變量只可作用于作用域結(jié)束之前赦役。
2.3.2 對象的作用域
Java對象和基本類型的生命周期不一致。
{
String str = new String("imbug");
}
上述代碼中當(dāng)超出}
的范圍之后栅炒,引用str
已經(jīng)消失了掂摔,但它指向的String
對象仍然存在在堆內(nèi)存中,但我們無法訪問該對象赢赊,因?yàn)樗囊靡呀?jīng)消失棒呛。
Java使用垃圾回收器來管理new
創(chuàng)建的對象,并辨別那些不會(huì)再被使用的對象域携,然后釋放其占據(jù)的內(nèi)存空間。
2.4 創(chuàng)建新的數(shù)據(jù)類型:類
使用class
關(guān)鍵字來表示“一種新的類型”鱼喉。
在Java中秀鞭,你的工作就是定義類趋观,產(chǎn)生這些類的對象,以及發(fā)送消息給這些對象锋边。
class ClassName {
}
字段(數(shù)據(jù)成員):可以是任何的對象和基本數(shù)據(jù)類型
- Java會(huì)對全部字段進(jìn)行初始化
- 基本數(shù)據(jù)類型初始值為0(false皱坛、\u0000等…)
- 對象的引用初始值
null
- 當(dāng)變量作為類的成員時(shí)才會(huì)被初始化,局部變量不會(huì)被初始化
方法(成員函數(shù)):詳見2.5節(jié)
2.5 方法豆巨、參數(shù)和返回值
ReturnType methonName( /* Arguement list */ ) {
/* Method body */
}
- Java方法決定了一個(gè)對象能夠接收什么樣的消息剩辟。
- 方法的基本組成包括:名稱、參數(shù)往扔、返回值贩猎、方法體
- 方法名和參數(shù)列表唯一的標(biāo)識(shí)出某個(gè)方法。
- Java中的方法只能作為類的一部分來創(chuàng)建萍膛。
參數(shù)列表
- 方法的參數(shù)列表指定要傳遞給方法什么樣的信息吭服。
- 參數(shù)列表中必須指定每個(gè)所傳遞對象的類型及名字。
- 傳遞的實(shí)際上是引用蝗罗。
- 如果返回的類型是
void
艇棕,則return的作用僅是退出方法;否則必須返回正確的返回值
2.6 包名串塑、import沼琉、static
名字可見性
Java約定以域名反轉(zhuǎn)作為包名,用.
來劃分子目錄桩匪,并且全部小寫打瘪。
import關(guān)鍵字
使用import關(guān)鍵字引用其他定義好的類
static關(guān)鍵字
現(xiàn)象:創(chuàng)建一個(gè)class
的時(shí)候,只是描述一個(gè)類的對象的外觀與行為吸祟。在new
創(chuàng)建該類的對象之后瑟慈,才會(huì)分配數(shù)據(jù)存儲(chǔ)空間,其方法才可以被外界調(diào)用屋匕。
問題:只想為特定域分配單一存儲(chǔ)空間而不想去分配多少對象葛碧;希望某個(gè)方法不與包含它的類的任何對象關(guān)聯(lián)在一起。
方法:static關(guān)鍵字
- 當(dāng)聲明一個(gè)事物是static時(shí)过吻,就意味著這個(gè)字段或者方法不與任何對象綁定在一起
- 不需要?jiǎng)?chuàng)建對象也可以訪問該類的任何static域和static方法
- 即使沒有顯示地聲明為static进泼,類的構(gòu)造器實(shí)際上也是靜態(tài)方法
- 和其他任何方法一樣,static方法可以創(chuàng)建或使用與其類型相同的被命名對象纤虽,因此乳绕,static方法常常拿來做“牧羊人”的角色,負(fù)責(zé)看護(hù)與其隸屬同一類型的實(shí)例群逼纸。如果你的類代表羊洋措,那么創(chuàng)建的若干的該類的對象,就好像建了一個(gè)羊群杰刽,然而菠发,類中的static方法就好比牧羊人一樣王滤,無論你的羊群中有多少只羊,而牧羊人只有一個(gè)滓鸠。也就是說雁乡, static方法或?qū)傩耘c對象的創(chuàng)建無關(guān),只和類有關(guān)糜俗。
2.7 main方法踱稍、編譯、運(yùn)行
import java.util.Date;
public class Test {
public static void main(String[] args) {
// main方法args用于接收命令行參數(shù)
System.out.println(new Date());
}
}
2.8 注釋和文檔
2.8.1 java的注釋
/* 多行注釋 */
// 單行注釋
2.8.2 javadoc
javadoc是用于提取注釋的工具悠抹,他可以找出程序內(nèi)的特殊注釋標(biāo)簽并解析珠月。
javadoc輸出的是一個(gè)HTML文件。
所有javadoc命令都只能在/* */
注釋中出現(xiàn)锌钮。
使用javadoc有兩種方式:嵌入HTML或使用文檔標(biāo)簽
獨(dú)立文檔標(biāo)簽:以@
字符開頭桥温,且要置于注釋行的最前面
行內(nèi)文檔標(biāo)簽:出現(xiàn)在任何地方,以@
開頭梁丘,但要放在{}
內(nèi)
javadoc只能為public和protect成員進(jìn)行文檔注釋侵浸,private和包內(nèi)可訪問的注釋會(huì)被忽略,輸出結(jié)果中看不到它們氛谜。使用-private標(biāo)記可以把private注釋也包括進(jìn)去掏觉。
2.8.3 嵌入式HTML
不要在嵌入式HTML標(biāo)簽中使用標(biāo)題如<h1>
、<hr>
值漫,否則會(huì)跟javadoc自己的標(biāo)題沖突澳腹。
2.8.4 文檔標(biāo)簽
-
@see package.class#member
:允許用戶引用其他類的文檔 -
{@link package.class#member}
:跟@see
相似,只是它用于行內(nèi) -
{@docRoot}
:該標(biāo)簽產(chǎn)生到文檔根目錄的相對路徑杨何,用于文檔樹 -
{@inheritDoc}
:從這個(gè)類的基類繼承相關(guān)文檔到當(dāng)前文檔注釋中 -
@version
:版本信息酱塔;-version標(biāo)記可以從生成的HTML中提取出版本信息 -
@author
:作者信息;-author標(biāo)記危虱;可以使用多個(gè)@author
標(biāo)簽但是必須連續(xù)放置 -
@since
:程序代碼最早的版本 -
@param
:方法的參數(shù) -
@return
:方法的返回 -
@throws
:異常拋出 -
@deprecated
:過時(shí)
2.8.5 編碼風(fēng)格
類名:首字母大寫羊娃、多個(gè)字母駝峰法
域名&方法名:首字母小寫、多個(gè)字母駝峰法