-
java中==和equals和hashCode的區(qū)別
基本數(shù)據(jù)類型:“==”比較的是其值
類:“==”比較數(shù)據(jù)內(nèi)存地址是否相同-
“equals”是Object方法,在子類未重寫方法時
public boolean equals(Object obj) { return (this == obj); }
而多數(shù)常用類對equals進(jìn)行了重寫,比較的是類中的內(nèi)容。
3.hasCode返回的是對象在內(nèi)存中地址轉(zhuǎn)換成的一個int值,所以如果沒有重寫 hashCode()方法,任何對象的hashCode()方法都是不相等的。 int、char、long各占多少字節(jié)數(shù)
1字節(jié): byte , boolean
2字節(jié): short , char
4字節(jié): int , float
8字節(jié): long , double
注:1字節(jié)(byte)=8位(bits)int與integer的區(qū)別
1、Integer是int的包裝類,int則是java的一種基本數(shù)據(jù)類型
2、Integer變量必須實(shí)例化后才能使用,而int變量不需要
3、Integer實(shí)際是對象的引用,當(dāng)new一個Integer時,實(shí)際上是生成一個指針指向此對象;而int則是直接存儲數(shù)據(jù)值
4、Integer的默認(rèn)值是null,int的默認(rèn)值是0-
java多態(tài)的理解
1、多態(tài):同一操作作用于不同的對象,可以有不同的解釋,產(chǎn)生不同的執(zhí)·
行結(jié)果。
2、 多態(tài)的三個條件:封裝,重寫,向上轉(zhuǎn)型
3、重載(overload)和重寫(override)是實(shí)現(xiàn)多態(tài)的兩種主要方式。關(guān)于相關(guān)詳細(xì)內(nèi)容
java 面向?qū)ο笕筇匦裕ǚ庋b,繼承,多態(tài))以及抽象、接口的介紹 String、StringBuffer、StringBuilder區(qū)別
String:字符串常量,與其他兩個最大區(qū)別在于不可變,每次對String的操作都是new新的String對象,并指向他。
StringBuffer:字符串變量,長度可變改變其內(nèi)容不會重復(fù)創(chuàng)建新的對象,線程安全。
StringBuilder:與StringBuffer最大的區(qū)別是線程非安全什么是內(nèi)部類?內(nèi)部類的作用
內(nèi)部類可分為靜態(tài)內(nèi)部類,動態(tài)內(nèi)部類(成員/局部內(nèi)部類),匿名類
1、靜態(tài)內(nèi)部類類似于一個普通的類,只是存在的形式和訪問形式不太一樣
2、動態(tài)內(nèi)部類實(shí)例化之后會保留它所在類的實(shí)例,所以內(nèi)部類可以訪問它所在類的動態(tài)屬性。動態(tài)內(nèi)部類可以模擬多繼承(內(nèi)部類的繼承對外部類相互 獨(dú)立)。局部內(nèi)部類再作用域內(nèi)有效。
3、匿名內(nèi)部類是沒名字的動態(tài)內(nèi)部類,一般只使用一次,常用于方法參數(shù)中抽象類和接口區(qū)別等抽象類與接口有關(guān)問題
見“java多態(tài)的理解”泛型中extends和super的區(qū)別
<? extends T>:是指 “上界通配符(Upper Bounds Wildcards)”
<? super T>:是指 “下界通配符(Lower Bounds Wildcards)”
extends通配符不能往里存,只能往外取,取出類型可為T子類(無明確子類)
super通配符可以存放T及其子類對象(解釋見連接),但往外取只能放在Object對象(無統(tǒng)一父類,只能取為Object)
PECS(Producer Extends Consumer Super)原則:
1、頻繁往外讀取內(nèi)容的,適合用上界Extends。
2、經(jīng)常往里插入的,適合用下界Super。
更多為什么、用法等:通配符詳細(xì)解讀父類的靜態(tài)方法能否被子類重寫
不可以被重寫可以繼承
從JVM角度看為什么子類不能重寫父類靜態(tài)方法進(jìn)程和線程的區(qū)別
進(jìn)程和線程都是一個時間段的描述,是CPU工作時間段的描述,不過是顆粒大小不同。進(jìn)程包含一個或多個線程。final,finally,finalize的區(qū)別
Final用于修飾類、成員變量和成員方法。final修飾的類,不能被繼承,其中所有的方法都不能被重寫
Finally通常和try catch搭配使用,保證不管有沒有發(fā)生異常,資源都能夠被釋放
Finalize是object類中的一個方法,子類可以重寫finalize()方法實(shí)現(xiàn)對資源的回收。在垃圾回收前會調(diào)用。序列化的方式
1,相應(yīng)的對象實(shí)現(xiàn)了序列化接口Serializable,這個使用的比較多,對于序列化接口Serializable接口是一個空的接口,它的主要作用就是:標(biāo)識這個對象時可序列化的,jre對象在傳輸對象的時候會進(jìn)行相關(guān)的封裝。
2, 實(shí)現(xiàn)序列化的第二種方式為實(shí)現(xiàn)接口Externalizable。Externalizable實(shí)現(xiàn)了Serializable接口。需要我們實(shí)現(xiàn):
void writeExternal(ObjectOutput out) throws IOException;
void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
里面放入需要序列化的字段,注意取順序要與存一致。
TIPS:
1、java中的序列化時transient變量(這個關(guān)鍵字的作用就是告知JAVA我不可以被序列化)和靜態(tài)變量不會被序列化。
2、也是最應(yīng)該注意的,如果你先序列化對象A后序列化B,那么在反序列化的時候一定記著JAVA規(guī)定先讀到的對象是先被序列化的對象,不要先接收對象B,那樣會報錯.尤其在使用上面的Externalizable的時候一定要注意讀取的先后順序。
3、實(shí)現(xiàn)序列化接口的對象并不強(qiáng)制聲明唯一的serialVersionUID,是否聲明serialVersionUID對于對象序列化的向上向下的兼容性有很大的影響。(賦予serialVersionUID的類序列化后,修改文件中字段不影響反序列化,反之報錯)
4、 ProtoBuff序列化,JSON序列化
Java序列化的幾種方式以及序列化的作用Serializable 和Parcelable 的區(qū)別
1、Serializable,JAVA序列化接口,用于序列化類實(shí)現(xiàn)對象的本地存儲和網(wǎng)絡(luò)、進(jìn)程傳輸。使用反射,效率相對低,會產(chǎn)生很多臨時數(shù)據(jù)。
2、 Parcelable,Android序列化接口,主要用于將對象分解成Intent可傳輸數(shù)據(jù)。效率遠(yuǎn)高于Serializable。靜態(tài)屬性和靜態(tài)方法是否可以被繼承?是否可以被重寫?以及原因?
java中非靜態(tài)/靜態(tài)屬性和和靜態(tài)方法可以被繼承,但是沒有被重寫(overwrite)而是被隱藏,不能實(shí)現(xiàn)多態(tài)。只有非靜態(tài)方法能被繼承和重寫,實(shí)現(xiàn)多態(tài)。靜態(tài)內(nèi)部類的設(shè)計(jì)意圖
1、 只有將某個內(nèi)部類修飾為靜態(tài)類,然后才能夠在這個類中定義靜態(tài)的成員變量與成員方法。
2、 創(chuàng)建靜態(tài)內(nèi)部類時不需要將靜態(tài)內(nèi)部類的實(shí)例綁定在外部類的實(shí)例上成員內(nèi)部類、靜態(tài)內(nèi)部類、局部內(nèi)部類和匿名內(nèi)部類的理解,以及項(xiàng)目中的應(yīng)用
見上“什么是內(nèi)部類?內(nèi)部類的作用”
成員內(nèi)部類、靜態(tài)內(nèi)部類、局部內(nèi)部類和匿名內(nèi)部類的理解談?wù)剬otlin的理解
2分鐘了解kotlin:優(yōu)點(diǎn),缺點(diǎn),設(shè)計(jì)原則閉包和局部內(nèi)部類的區(qū)別
閉包(Closure)是一種能被調(diào)用的對象,它保存了創(chuàng)建它的作用域的信息。JAVA并不能顯式地支持閉包,但是在JAVA中,閉包可以通過“接口+內(nèi)部類”來實(shí)現(xiàn)。
例如:一個接口程序員和一個基類作家都有一個相同的方法work,相同的方法名,但是其含義完全不同,這
時候就需要閉包。
class Writer {//作家基類
void work(){};
}
interface programmer{//程序員接口
void work();
}
閉包實(shí)現(xiàn)代碼如下:
public class WriterProgrammer extends Writer {
@Override
public void work(){
//寫作
}
public void code(){
//寫代碼
}
class ProgrammerInner implements programmer{
@Override
public void work(){
code();
}
}
在子類中定義了遵循程序員接口規(guī)則的內(nèi)部類,然后使用內(nèi)部類實(shí)現(xiàn)程序員的work()方法回調(diào)code()方法,在子類中直接實(shí)現(xiàn)父類作家的work()方法。
- string 轉(zhuǎn)換成 integer的方式及原理
一言難盡
轉(zhuǎn)換源碼分析
問題來自:AWeiLoveAndroid的博客
如果對你有那么一些幫助,請給個贊吧~