【335天】我愛刷題系列094(2018.01.06)

叨叨兩句

  1. ~

牛客網——java專項練習073

1

設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則會出現錯誤

2

如下代碼執行後輸出結果爲( )函數

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

3

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 修飾 
}
相關文章
相關標籤/搜索