序列化,
把對(duì)象轉(zhuǎn)換成二進(jìn)制(字節(jié)序列)存到文件中就是序列化
反序列化奖恰,
把文件中的二進(jìn)制(字節(jié)序列)對(duì)象恢復(fù)到類中就是反序列化
◆注崭闲;在序列化時(shí)一般需要提供一個(gè)序列化編碼,確保在恢復(fù)是鸠天,仍然是指向同一個(gè)內(nèi)存區(qū)域
序列化的作用
使得對(duì)象永久的存儲(chǔ)在到Disk中。
可變序列化帐姻;
在對(duì)象創(chuàng)建了出來之后稠集,依然可以改變位于對(duì)象中的內(nèi)容,如StringBuffre
不可變序列化饥瓷;
在創(chuàng)建對(duì)象了之后剥纷,內(nèi)存中的內(nèi)容是不可變的,如String
什么是可變類呢铆,和不可變類晦鞋?
可變類;創(chuàng)建出這個(gè)類的實(shí)例時(shí),是可以改變這個(gè)類實(shí)例的內(nèi)容的
不可變類悠垛;創(chuàng)建出這個(gè)類的實(shí)例時(shí)线定,是不可以改變的。
值傳遞确买;(方法形參是斤讥,基本數(shù)據(jù)類型)當(dāng)傳遞一個(gè)實(shí)際的值給這個(gè)形參時(shí),是用來初始化這個(gè)形參的湾趾,
而形參的值發(fā)生改變時(shí)芭商,
? ★是不會(huì)改變傳遞過來的這個(gè)實(shí)際的值★
因?yàn)?個(gè)位于內(nèi)存空間受楼,地址也不一樣峰档,而且當(dāng)調(diào)用這個(gè)
方法時(shí)是不會(huì)影響(改變)實(shí)際的值的渣淳。
值傳遞的類型時(shí)基本數(shù)據(jù)類型劲弦。
是一個(gè)值拷貝的過程。
結(jié)論华畏;沒有改變了傳進(jìn)來的位于內(nèi)存中的值缠借。
引用傳遞柿估;(是對(duì)象歧譬,引用類型)當(dāng)調(diào)用某個(gè)方法是勿侯,參數(shù)是對(duì)象 或者數(shù)組 ,而這個(gè)對(duì)象調(diào)用某個(gè)方法時(shí)實(shí)
際上指向同一個(gè)地址值中的缴罗。而當(dāng)實(shí)際使用這個(gè)方法就是使用
內(nèi)存中的地址值空間實(shí)際的參數(shù)進(jìn)行操作的。
而當(dāng)這個(gè)方法結(jié)束時(shí)祭埂,
★這些操作(修改)了的★
屬性會(huì)被保留下來面氓,并且會(huì)進(jìn)行一個(gè)
對(duì)位于內(nèi)存中的實(shí)例空間的
參數(shù)會(huì)進(jìn)行修改。
引用傳遞蛆橡,是引用類型的舌界,在傳遞時(shí)是傳遞地址值。
結(jié)論泰演;改變了傳過來的位于內(nèi)存中的對(duì)象的值呻拌。
什么是可變字符,和不可變字符睦焕?
字符串的不可變字符序列藐握,和可變字符序列。
不可變字符序列(String);String的值是存到內(nèi)存的方法區(qū)中的常量池垃喊,并且String這個(gè)類是使用
final修飾的猾普,而且這個(gè)類底層存儲(chǔ)是使用數(shù)組的存儲(chǔ),并且其數(shù)組是
使用final修飾的本谜。使得其在內(nèi)存中是不可以改變的初家。
所以創(chuàng)建新的字符串時(shí)是會(huì)在內(nèi)存中創(chuàng)建出新的一個(gè)
新的字符串,即便是使用了 + 連接符,因?yàn)?/p>
final是不可修改的而且每次做完一次
連接在內(nèi)存中都是再次創(chuàng)建溜在。
并且陌知;當(dāng)2個(gè)字符的內(nèi)容是一樣的,會(huì)指向同一塊內(nèi)存空間掖肋,
而不會(huì)在此為此字符串在常量池在再次創(chuàng)建一個(gè)仆葡。
也是一個(gè)節(jié)約內(nèi)存的機(jī)制。
可變字符序列(StringBuilder and StringBuffer)培遵;
當(dāng)使用append()方法時(shí)是將append的值存到數(shù)組中當(dāng)調(diào)用了toStirng時(shí)會(huì)將數(shù)組的
值拷貝到StringBuiler的對(duì)象中(引用傳遞)浙芙,從而實(shí)現(xiàn)一個(gè)追加的功能
◆注;String籽腕,StringBuilder,StringBuffer
?String;是位于常量池
?StringBuilder,在底層存儲(chǔ)時(shí)是使用數(shù)組來存儲(chǔ)的嗡呼,默認(rèn)空參的構(gòu)造器數(shù)組是16。當(dāng)超出數(shù)組長(zhǎng)度
? 時(shí)皇耗,則*2+2.
?StringBuffer,在底層存儲(chǔ)時(shí)是使用數(shù)組來存儲(chǔ)的南窗,默認(rèn)空參的構(gòu)造器數(shù)組是16。當(dāng)超出數(shù)組長(zhǎng)度
? 時(shí)郎楼,則*2+2.
為什么不同包下的類繼承Object的万伤?
因?yàn)镺bject是一個(gè)超類,使得語言更加靈活呜袁,可以在擴(kuò)展類庫是使得其可以兼容所有類庫的類敌买。
接口有沒有父類?
沒有阶界,沒有構(gòu)造器而且是用于頂層設(shè)計(jì)虹钮,````而且也沒有``繼承Object
除非是接口繼承接口
當(dāng)內(nèi)部類重寫了 toString方法了怎么獲取地址
classpath變量在JAVAEE的使用 ?百度
下載Oracle ?sql
重寫hashCode equals comparator toString等方法的作用
hashCode就是一個(gè)散列碼用于幫助快速的查找,hashCode是計(jì)算出每一個(gè)實(shí)例化的對(duì)象實(shí)例的內(nèi)存地址
實(shí)驗(yàn)膘融;〓 當(dāng)做類型自動(dòng)提升是否為-1
◆注芙粱;(String類是使用它的value值作為參數(shù)然后進(jìn)行運(yùn)算得出hashcode的
換句話說, 只要值相同的String不管是不是一個(gè)對(duì)象,hash值全部相等
因?yàn)榈讓哟鎯?chǔ)和指向機(jī)制)。
集合為什么要重寫equals方法
因?yàn)閏ontains是通過equals方法氧映,如果是自定義類是調(diào)用
自定義類的equals方法春畔。
getClass()得到當(dāng)前對(duì)象的類
當(dāng)在做Scanner輸入是,如果是要拋出異常岛都,并且再次輸入要使用while并且在異常處理要在加一個(gè)next()將輸
入的錯(cuò)誤的拋出的異常拋給這個(gè) ?空的 位于異常處理的位置next()
但是律姨;如果是引用類型就不用,因?yàn)橐妙愋蜁?huì)自動(dòng)做equal
而基本數(shù)據(jù)類型不會(huì)臼疫,所以要再次加上空的next()
? ? ? ?意義线召;會(huì)將其發(fā)生異常的值,拋出給這個(gè)空的next();
當(dāng)指定了泛型后多矮,在使用匿名類進(jìn)行重寫還要給匿名類進(jìn)行一個(gè)指定泛型缓淹。
為什么使用Set要同時(shí)重寫HASHCODE和EUQuals方法哈打?
因?yàn)榈讓哟鎯?chǔ)是根據(jù)HASHCODE散列計(jì)算的值來進(jìn)行存儲(chǔ)的,EQUALS就是當(dāng)2個(gè)HASHCODE值一樣是用于判斷
內(nèi)容是否相同讯壶,相同則不加入料仗,不相同則加入。
如果2個(gè)值的HASHCODE值相同伏蚊,EQUALS不相同則會(huì)在其元素位置立轧,后面在開辟一個(gè)空
間出來。用于同時(shí)存儲(chǔ)2個(gè)元素躏吊。
泛型的限定氛改;
(List)<? extends類A> 表示類A是下的子類,而比伏?是List
能存放本類以及本類下的
子類
(Collection)<? super 類A> 表示胜卤?是類A的
父類
只能存放本類以及父類
泛型方法是可以用靜態(tài)的
SERIALIZEBLE
serializeble是一個(gè)序列化接口,實(shí)現(xiàn)這個(gè)接口的是可以序列化的赁项,并且實(shí)現(xiàn)了接口給實(shí)現(xiàn)類添加了一個(gè)序列
號(hào)之后可以保證在將文件讀出時(shí)葛躏,不會(huì)出現(xiàn)丟失等,而且實(shí)現(xiàn)了這個(gè)接口可以存儲(chǔ)
到這個(gè)類對(duì)象的狀態(tài)悠菜。
為什么COMPARATOR不用重寫EQUALS
2個(gè)實(shí)體EQUALS為TRUE那么2個(gè)實(shí)體的HASHCODE必須是相同的(自己寫的那就沒意義了=⒃堋)
而重寫COMPARATOR或者COMPARE時(shí),建議重寫EQUALS方法悔醋,因?yàn)楸苊?個(gè)值一樣則后一個(gè)是無法
加進(jìn)來的摩窃,所以建議同時(shí)重寫EQUALS方法,與HASHCODE方法芬骄,HASHCODE是確定2個(gè)值
在內(nèi)存中的位置猾愿。
二分法的代碼
public static int search(int[]arr, int key) {
? ? //記錄數(shù)組的第一個(gè)位置
int start = 0;
? ? ? ?//記錄數(shù)組的最后一個(gè)位置
int end =arr.length - 1;
while (start<= end) {
? ? ? ? ? ?//從中間開始找
int middle = (start + end) / 2;
? ? ? ? ? ?//如果輸進(jìn)來的元素是小于中間的元素則
if(key < arr[middle]) {
? ? ? ? ? ?//取出以中間元素為開始的前面的元素
end = middle - 1;
? ? ? ? ? ?//如果輸進(jìn)來的元素時(shí)大于中間元素則
}else if (key > arr[middle]) {
? ? ? ? ? ?//取出與中間元素為開始的,最后一個(gè)元素為結(jié)束
start = middle + 1;
}else {
? ? ? ? ? ?//否則返回中間元素
return middle;
}
}
return -1;
}
}
給一個(gè)字符串賦值那么這個(gè)字符也是一個(gè)對(duì)象德玫,因?yàn)檫@個(gè)字符串是存在內(nèi)存方法區(qū)中的常量池的。而這個(gè)
字符串是有一個(gè)地址值的椎麦。
數(shù)組轉(zhuǎn)集合的方法宰僧。 ? ? ? ?
? ? ? ? 集合轉(zhuǎn)數(shù)組
Array.adList(arr); toArray();
遞歸;不斷傳遞观挎,直到末尾
可以使用方法達(dá)到遞歸的效果
\r\n的作用
\r是換行琴儿,一般是空行
\n是回車并且換行,一行是一行的尾部
java中的switch語言支持什么類型的值
byte short int char
·注嘁捷;在JDK7.0之后增加對(duì)字符串的String的支持
寫集合遍歷方法到總結(jié)中
類.class的和this的作用
正在運(yùn)行的類
注意造成;當(dāng)使用Thread而不是使用Runable時(shí)要,并且是使用同步方法的形式時(shí)雄嚣,
如果變量是static 方法也要是static不然synchronized則不起作用
因?yàn)槟J(rèn)同步方法調(diào)用的是this晒屎,而靜態(tài)調(diào)用的是類.class
組播是強(qiáng)制喘蟆,廣播是非強(qiáng)制
declare
i number(30) := 0;
begin
loop
exit when i > 999999
insert into emp(empno,ename)values(i,'XX');
i := i+1;
dbms_output.put_line(i);
end loop;
end;
/
exception