For investors
股價(jià):
5.36 美元 %For investors
股價(jià):
5.36 美元 %認(rèn)真做教育 專心促就業(yè)
java的類型自動(dòng)提升規(guī)則
1、所有byte,short,char型的值將被提升到int型;
2、如果一個(gè)操作數(shù)為long型,計(jì)算結(jié)果就是long型;
3、如果一個(gè)操作數(shù)是float型,計(jì)算結(jié)果就是float型;
4、如果一個(gè)操作數(shù)是double型,計(jì)算結(jié)果就是double型。
我們不能把任何方法體內(nèi)的變量聲明為靜態(tài),例如下面這樣是不行的
fun{
static int i = 0;
}
1、在靜態(tài)的方法里只能直接調(diào)用同類中其他靜態(tài)成員(包括變量和方法),而不能直接訪問類中的非靜態(tài)成員,這是因?yàn)?,對于非靜態(tài)成員,先要?jiǎng)?chuàng)建類的實(shí)例對象后才可使用,而靜態(tài)成員在使用前是不需要實(shí)例化的;
2、靜態(tài)方法不能以任何形式引用this或super關(guān)鍵字;
3、main()方法是靜態(tài)的,因此jvm在執(zhí)行main方法時(shí),不創(chuàng)建main方法所在的類的實(shí)例對象,因此在main方法中,不能直接訪問該類中的非靜態(tài)成員。
1.final標(biāo)記的類不能被繼承;
2.其標(biāo)記的方法不能被子類重寫;
3.其標(biāo)記的變量即變成常量,只能賦值一次,但這個(gè)常量也只能在這個(gè)類內(nèi)部使用,不能在類的外部使用,且賦值只能在聲明的時(shí)候顯式賦值或在構(gòu)造方法中賦值,構(gòu)造方法里不含返回值的概念是不同于“void”的,對于"public void example()"這樣的寫法就不再是構(gòu)造方法了,而變成了普通方法,很多人都會(huì)犯這種錯(cuò),在定義構(gòu)造方法時(shí)加了void,結(jié)果這個(gè)方法就不再自動(dòng)調(diào)用了。
1.java只支持單繼承,不允許單繼承,但一個(gè)類可以被多個(gè)類繼承;
2.可以有多重繼承,即一個(gè)類可以繼承某個(gè)類的的子類,如B繼承了A,C又可以繼承B,那么C也間接繼承了A;
3.子類繼承父類所有的成員變量和成員方法,但不繼承父類的的構(gòu)造方法,在子類的構(gòu)造方法中,可以使用語句super調(diào)用父類的構(gòu)造方法;
4.如果子類的構(gòu)造方法中沒有顯式地調(diào)用父類構(gòu)造方法,也沒有使用this關(guān)鍵字調(diào)用重 載的其他構(gòu)造方法,則在產(chǎn)生子類的實(shí)例對象時(shí),系統(tǒng)默認(rèn)調(diào)用父類無參數(shù)的構(gòu)造方法,如果父類沒有無參數(shù)的構(gòu)造方法,則編譯出錯(cuò)。
在子類中可以根據(jù)需要對從父類中繼承來的方法進(jìn)行改造——方法的覆蓋(也叫重寫)。覆蓋方法必須和被覆蓋方法具有相同的方法名稱、參數(shù)列表和返回值類型 子類想調(diào)用父類的被覆蓋的方法,可以用super.方法()的格式。
注意:
覆蓋方法時(shí),不能使用比父類中被覆蓋的方法更嚴(yán)格的訪問權(quán)限,如:父類中的方法是public的,子類的方法就不能是private的,如果子類轉(zhuǎn)換成父類,那么子類中新定義的方法不可用(編譯不通過)。如果子類重寫了父類的方法,那么子類方法可用。如果父類方法沒有被重 寫,則可用 。
Object類
Java中有一個(gè)比較特殊的類,就是Object類,它是所有類的父類,如果一個(gè)類沒有使用Extends關(guān)鍵字明確標(biāo)識(shí)繼承另外一個(gè)類,那么這個(gè)類就 默認(rèn)繼承Object類。所以、Object類是所有類的父類, Object類的方法適用于所有類。
兩種多態(tài)方式一般來說,多態(tài)主要是存在兩種類型:編譯時(shí)的多態(tài)和運(yùn)行時(shí)的多態(tài)。
1、編譯時(shí)的多態(tài)主要是通過函數(shù)重載來實(shí)現(xiàn)的。所謂函數(shù)重載是指保持函數(shù)名不變,主要通過更改函數(shù)形參的個(gè)數(shù)以及形參的類型來定義出多個(gè)同名函數(shù)來實(shí)現(xiàn)對多種類型數(shù)據(jù)的邏輯處理。這種類型的多態(tài)關(guān)系是編譯器在編譯階段就已經(jīng)在函數(shù)調(diào)用的地方確定的,因而運(yùn)行過程中速度較快,但功能比較局限。
2、運(yùn)行時(shí)的多態(tài)在不同的語言中擁有不同的實(shí)現(xiàn)方案。C++通過虛函數(shù)的晚捆綁來實(shí)現(xiàn),而Java通過面向接口編程和面向抽象編程來實(shí)現(xiàn)動(dòng)態(tài)調(diào)用相應(yīng)的函數(shù)實(shí)現(xiàn)。但歸根結(jié)點(diǎn),這些語言都是通過將多種特殊實(shí)現(xiàn)的類抽象為一個(gè)泛化類來實(shí)現(xiàn)運(yùn)行多態(tài)。
例如:
A是B的父類 A S=NEW B(); 如果父類有個(gè)方法叫Amethod(),子類也有一個(gè),那么如果S.amethod的話,就會(huì)調(diào)用子 類的Amethod(),而不是父類的,父類有若干個(gè)子類的,而A S=NEW B(); A S=NEW C(); A
S=NEW D(); 等等就實(shí)現(xiàn)了多態(tài)!
抽象方法必須用abstract關(guān)鍵字修飾,任何帶有抽象方法的類都必須聲明為抽象類。
抽象類的定義規(guī)則:
1.抽象類必須用abstract關(guān)鍵字來定義,抽象方法也必須用abstract關(guān)鍵字來定義
2.抽象類不能被實(shí)例化,也就是說不能用關(guān)鍵字new去產(chǎn)生對象
3.抽象方法只需聲明無需實(shí)現(xiàn)
4.含有抽象方法的類必須被聲明為抽象類,抽象類的子類必須覆蓋所有的抽象方法后才能被實(shí)例化,否則,這個(gè)子類還是抽象類。
注意:含有抽象方法的類一定是抽象類,抽象類中的某個(gè)方法不一定是抽象方法。
1、在接口中,成員只能是public類型。當(dāng)沒有public修飾時(shí),依然是public訪問范圍
2、接口中的變量默認(rèn)是用public static final 標(biāo)識(shí)的,所以,接口中定義的變量都是全局靜態(tài)變量
3、我們可以定義一個(gè)新的接口,用extends關(guān)鍵字去繼承一個(gè)已有的接口;也可以定義一個(gè)類,用implements去實(shí)現(xiàn)一個(gè)接口中的所有方法;還可以去定義一個(gè)抽象類用implements關(guān)鍵字去實(shí)現(xiàn)接口中的部分方法。
接口的定義特點(diǎn):
1. 實(shí)現(xiàn)一個(gè)接口就是要實(shí)現(xiàn)接口的所有方法(抽象類除外)
2. 接口中的方法都是抽象的
3. 多個(gè)無關(guān)的類可以實(shí)現(xiàn)同一個(gè)接口,一個(gè)類可以實(shí)現(xiàn)多個(gè)無關(guān)的接口
注意:
import語句必須先于所有類聲明。在調(diào)用類時(shí),使用類的全名,即包+類的形式,可以不用import引入。在同一包中的類可以互相引用,無需import語句。java.lang包是自動(dòng)導(dǎo)入的。父包與子包之間,能從語意上表示某種血緣關(guān)系,如p1.p2.*和p1.p2.p3.*,但在使用上,即使父包調(diào)用子包中的類,也得使用子包的全名,也就是說我們import包中的類,卻不能把子包的類也引入。
我們處理異常時(shí),常用的三個(gè)方法是:
System.out.println(e);
System.out.println(e.getMessage());
e.printStackTrace();
【免責(zé)聲明】本文部分系轉(zhuǎn)載,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問題,請?jiān)?0日內(nèi)與聯(lián)系我們,我們會(huì)予以更改或刪除相關(guān)文章,以保證您的權(quán)益!