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