- java未指定關(guān)鍵字則默認(rèn)為friendly
- 繼承關(guān)鍵字 extends
- 除了final,static,private和構(gòu)造方法是前期綁定外,其他的方法全部為動(dòng)態(tài)綁定
- 由于垃圾清理器,java存在不連貫的因素
保存位置
- 堆棧
- 特別快,特別有效,創(chuàng)建程序時(shí),Java編譯器必須準(zhǔn)確知道堆棧中內(nèi)存保存的所有數(shù)據(jù)的“長(zhǎng)度”及“存在時(shí)間”。這是由于它必須生成相應(yīng)的代碼,以便向上和向下移動(dòng)指針。
- 堆
- 編譯器不需要知道要從堆里分配多少存儲(chǔ)空間,也不必知道存儲(chǔ)的數(shù)據(jù)要再堆里停留多長(zhǎng)的時(shí)間。<font color=blue>在堆里分配存儲(chǔ)空間會(huì)花費(fèi)更多時(shí)間</font>
數(shù)值類型
- 數(shù)值全都是有符號(hào)的
- 主數(shù)據(jù)類型也擁有自己的“封裝器Wrapper”類
- BigInteger和BigDecimal可用于高精度的計(jì)算,大致可劃分為Wrapper類型,但都沒有對(duì)應(yīng)的“主類型”。對(duì)int和float做的事情對(duì)它們也一樣可以做,但是必須使用方法調(diào)用而不能使用運(yùn)算符。
數(shù)組
- 在創(chuàng)建數(shù)組時(shí)實(shí)際上創(chuàng)建的是一個(gè)句柄數(shù)組,且每個(gè)句柄都會(huì)自動(dòng)化初始化為一個(gè)特殊值,并帶有自己的關(guān)鍵字null
定義一個(gè)類
定義一個(gè)類時(shí),數(shù)據(jù)成員若是指向?qū)ο蟮囊粋€(gè)句柄則必須用“構(gòu)建器”初始化句柄,若是主類型則可以直接在類定義位置直接初始化。
編碼格式
- 類名每個(gè)字母開頭都重要大寫,單詞緊靠在一起,方法、字段、對(duì)象句柄名稱則都開頭小寫,其他單詞大寫開頭
賦值符號(hào)
<font color=red>若為主類型之間的相互賦值則是直接復(fù)制值,A=B,B的值改變后對(duì)A不會(huì)有影響,但如果是對(duì)象之間的賦值,實(shí)質(zhì)上是句柄的賦值,A=B,若B的值改變則A的值也會(huì)改變,因?yàn)閷?shí)際上是句柄指向的對(duì)象的值改變了。</font>
- ==和!=對(duì)對(duì)象來說比較的是句柄
轉(zhuǎn)型
- 數(shù)值計(jì)算時(shí),只要它們比"int"小,就會(huì)都轉(zhuǎn)為int。通常表達(dá)式中最大的數(shù)據(jù)類型決定了表達(dá)式最終結(jié)果大小的那個(gè)類型。
所有數(shù)據(jù)類型在所有機(jī)器上的大小都是相通的。
<font color=red>Java不允許將數(shù)字作為一個(gè)boolean值使用</font>
<font color=red>for里面可以定義多個(gè)變量,但是它們的類型必須相同</font>
標(biāo)簽
label1:
{//外循環(huán)
{//...內(nèi)循環(huán)
break;
//...
continue;
//...
continue label1;//3
//...
break label1;//4
}
}
/**
*3是同時(shí)中斷內(nèi)外部循環(huán),跳轉(zhuǎn)到label1處從外循環(huán)繼續(xù)循環(huán);4 是同時(shí)中斷內(nèi)外部循環(huán),跳轉(zhuǎn)到label1處直接跳過循環(huán)往下。
*這個(gè)對(duì)while也同樣適用
*/
- switch語句的選擇因子必須是int或char這樣的整數(shù)值
- 局部變量不會(huì)被自動(dòng)初始化,但是類變量的基本類型會(huì)有默認(rèn)初始值。
- static field 初始化
- object第一次被創(chuàng)建
- 直接使用class中的static method或直接訪問static member
函數(shù)重載
- 如果Java基礎(chǔ)類有一個(gè)方法名被“過載”過很多次,在衍生類里對(duì)那個(gè)方法名的重新定義就不會(huì)隱藏任何基礎(chǔ)類的版本。所以無論這一方法在這一級(jí)還是在一個(gè)基礎(chǔ)類中定義,過載都會(huì)生效;
final修飾符
-
final會(huì)將值直接變?yōu)橐粋€(gè)常數(shù);但對(duì)于對(duì)象句柄,final會(huì)將句柄變?yōu)橐粋€(gè)常數(shù),然而對(duì)象本身是可以修改的。
- 好處
- 為方法上鎖,防止任何即成類改變它的本來含義。
- 提高執(zhí)行效率,講一個(gè)方法設(shè)為final后,編譯器就可以把對(duì)那個(gè)方法的所有調(diào)用都置入“嵌入”調(diào)用里。
- 類內(nèi)所有private方法都自動(dòng)成為final。
- 好處
super和this調(diào)用構(gòu)造函數(shù),都必須寫在第一行,否則會(huì)報(bào)錯(cuò)
初始化順序
- 基類靜態(tài)代碼塊,基類靜態(tài)成員字段(并列優(yōu)先級(jí),按代碼中出現(xiàn)先后順序執(zhí)行)(只有第一次加載類時(shí)執(zhí)行)
- 派生類靜態(tài)代碼塊,派生類靜態(tài)成員字段(并列優(yōu)先級(jí),按代碼中出現(xiàn)先后順序執(zhí)行)(只有第一次加載類時(shí)執(zhí)行)
- 基類普通代碼塊,基類普通成員字段(并列優(yōu)先級(jí),按代碼中出現(xiàn)的先后順序執(zhí)行)
- 基類構(gòu)造函數(shù)
- 派生類普通代碼塊,派生類普通成員字段(并列優(yōu)先級(jí),按代碼中出現(xiàn)的先后順序執(zhí)行)
- 派生類構(gòu)造函數(shù)
- java中綁定的所有方法都采用后期綁定的方式,除非一個(gè)方法已被申明為final
接口
- 接口可看作一個(gè)純抽象類,允許規(guī)定一個(gè)類的基本形式:方法名、自變量列表以及返回類型,但不規(guī)定方法主體。接口也包含了基本數(shù)據(jù)類型的數(shù)據(jù)成員,但它們都默認(rèn)為static和final
- 接口的所有成員變量都是public
內(nèi)部類
為生成一個(gè)內(nèi)部類的對(duì)象,必須利用外部類的一個(gè)對(duì)象來生成一個(gè)內(nèi)部類的對(duì)象
Parcel 11.Contents c=p.new Contents();
- 但如果是生成一個(gè)static內(nèi)部類,就不需要指向外部類對(duì)象的一個(gè)句柄。
- 只繼承外部類的話是不能覆蓋內(nèi)部類的,除非內(nèi)部類也明確進(jìn)行了繼承,則內(nèi)部類的方法也都會(huì)被覆蓋
數(shù)組
創(chuàng)建一個(gè)數(shù)組對(duì)象時(shí),它的大小是固定的,而且不可在那個(gè)數(shù)組對(duì)象的“存在時(shí)間”內(nèi)發(fā)生變化。
數(shù)組能夠容納的是一種類型已知的對(duì)象,能夠容納基本數(shù)據(jù)類型,但一旦創(chuàng)建好以后,大小就不能改變了。
vector容納對(duì)象的句柄,所以不能容納基本數(shù)據(jù)類型,將一個(gè)對(duì)象句柄從集合中取出來的時(shí)候,必須對(duì)結(jié)果進(jìn)行造型處理。
finally
- 若調(diào)用了continue和break,finally語句也會(huì)得以執(zhí)行
克隆
- vector的clone()方法可以制作出一個(gè)副本而不會(huì)改變?cè)瓕?duì)象
散列
- 將鍵保存在某處,以便查詢能夠很快找到。存儲(chǔ)一組元素最快的數(shù)據(jù)結(jié)構(gòu)是數(shù)組,所以用它來表示鍵的信息,數(shù)據(jù)并不保存鍵本身。而是通過鍵對(duì)象生成一個(gè)數(shù)字,將其作為數(shù)組的下標(biāo),這個(gè)數(shù)字就是散列碼。
對(duì)象序列化
- java的對(duì)象序列化講那些實(shí)現(xiàn)了Serializable接口的對(duì)象轉(zhuǎn)換為一個(gè)字節(jié)序列,并能夠在以后將這個(gè)字節(jié)序列完全恢復(fù)為原來的對(duì)象。實(shí)現(xiàn)輕量持久性,“持久性”意味著一個(gè)對(duì)象的生存周期并不取決于程序是否正在執(zhí)行,它可以生存于程序的調(diào)用之間
- 若我們正在操作一個(gè)序列化的對(duì)象,可以用transient關(guān)鍵字逐個(gè)字段的關(guān)閉序列化
注解
- 注解的元素在使用時(shí)表現(xiàn)為名-值對(duì)的形式
反射
- 獲取Class實(shí)例的方式
- 1.通過一個(gè)class的靜態(tài)變量class獲取:Class cls = String.class
- 2.如果有一個(gè)實(shí)例變量,可以通過該實(shí)例變量提供的getClass()方法獲?。篠tring s = "Hello"; Class cls = s.getClass();
- 3.如果知道一個(gè)class的完整類名,可以通過靜態(tài)方法Class.forName()獲?。篊lass cls = Class.forName("java.lang.String");