- ~
設int x=1,float y=2,則表達式x/y的值是:()
正確答案: D
A 0
B 1
C 2
D 以上都不是java
我在想爲何在float y=2後面沒有加一個f,如今想通了,能夠由低精度向高精度轉換,開始是int,如今轉爲了float全部是能夠的,最後結果如何0.5。去過改爲了y=2.0則會出現錯誤
如下代碼執行後輸出結果爲( )函數
public class Test { public static Test t1 = new Test(); { System.out.println("blockA"); } static { System.out.println("blockB"); } public static void main(String[] args) { Test t2 = new Test(); } }
正確答案: A
A blockAblockBblockA
B blockAblockAblockB
C blockBblockBblockA
D blockBblockAblockBcode
靜態塊:用static申明,JVM加載類時執行,僅執行一次 構造塊:類中直接用{}定義,每一次建立對象時執行 執行順序優先級:靜態塊>main()>構造塊>構造方法 靜態塊按照申明順序執行,先執行Test t1 = new Test(); 全部先輸出blockA,而後執行靜態塊,輸出blockB,最後執行main 方法中的Test t2 = new Test();輸出blockA。
初始化類的時候,首先在其餘任何事物發生以前,將分配給對象的存儲空間初始化爲二進制的0。因此加載時,對t1初始化爲null,對static靜態塊作了初步的初始化,可是還未執行裏面的代碼。而後按照靜態變量的初始化順序,首先對t1進行具體的初始化,因爲static靜態塊已經進行了初步的初始化,因此這時候是直接跳過這裏的,因此首先輸出 blockA,而後初始化t1後,執行到static靜態塊以後,再執行裏面的內容,因此輸出blockB,最後執行普通的初始化塊blockA.
1.首先,須要明白類的加載順序。 (1) 父類靜態對象和靜態代碼塊 (2) 子類靜態對象和靜態代碼塊 (3) 父類非靜態對象和非靜態代碼塊 (4) 父類構造函數 (5) 子類 非靜態對象和非靜態代碼塊 (6) 子類構造函數 其中:類中靜態塊按照聲明順序執行,而且(1)和(2)不須要調用new類實例的時候就執行了(意思就是在類加載到方法區的時候執行的) 2.於是,總體的執行順序爲 public static Test t1 = new Test(); //(1) static { System.out.println("blockB"); //(2) } Test t2 =new Test(); //(3) 在執行(1)時建立了一個Test對象,在這個過程當中會執行非靜態代碼塊和缺省的無參構造函數,在執行非靜態代碼塊時就輸出了blockA;而後執行(2)輸出blockB;執行(3)的過程一樣會執行非靜態代碼塊和缺省的無參構造函數,在執行非靜態代碼塊時輸出blockA。所以,最終的結果爲 blockA blockB blockA
jdk1.8中,下面有關java 抽象類和接口的區別,說法錯誤的是?
正確答案: B D
A 抽象類能夠有構造方法,接口中不能有構造方法
B 抽象類中能夠包含非抽象的普通方法,接口中的方法必須是抽象的,不能有非抽象的普通方法
C 一個類能夠實現多個接口,但只能繼承一個抽象類
D 接口中能夠有普通成員變量,抽象類中沒有普通成員變量對象
抽象類 特色: 1.抽象類中能夠構造方法 2.抽象類中能夠存在普通屬性,方法,靜態屬性和方法。 3.抽象類中能夠存在抽象方法。 4.若是一個類中有一個抽象方法,那麼當前類必定是抽象類;抽象類中不必定有抽象方法。 5.抽象類中的抽象方法,須要有子類實現,若是子類不實現,則子類也須要定義爲抽象的。 接口 1.在接口中只有方法的聲明,沒有方法體。 2.在接口中只有常量,由於定義的變量,在編譯的時候都會默認加上 public static final 3.在接口中的方法,永遠都被public來修飾。 4.接口中沒有構造方法,也不能實例化接口的對象。 5.接口能夠實現多繼承 6.接口中定義的方法都須要有實現類來實現,若是實現類不能實現接口中的全部方法 7.則實現類定義爲抽象類。
接口能夠有default、static方法,因此B是錯的。 interface A { abstract void a(); static void s() { } default void d(){ } void b();//默認用abstract修飾 int a = 0;//默認用static final 修飾 }