把金錢視爲工具,而不是財富java
人與人最美好的關係,是彼此成就程序員
關於 Java 線程,下面說法錯誤的是()。
正確答案: C異步
建立線程的方法有兩種:實現Runnable接口和繼承Thread類函數
java利用線程使整個系統成爲異步工具
新線程一旦被建立,它將自動開始運行線程
建立線程的方法有三種: (1)繼承Thread類,重寫run方法; (2)實現Runnable接口,並將對象實例做爲參數傳遞給Thread類的構造方法; (3)實現callable接口,並實現call方法,而且線程執行完畢後會有返回值。 注意:(1)和(2)都是調用start()方法啓動線程的,而後JVM虛擬機將此線程放到就緒隊列中,有處理機可用時,則執行run方法。這兩種方法都重寫了run方法,可是沒有返回值。
關於抽象類敘述正確的是? ( )code
正確答案: B對象
抽象類不能實現接口繼承
抽象類必須有「abstract class」修飾接口
抽象類必須包含抽象方法
抽象類也有類的特性,能夠被實例化
A.抽象類是能夠實現接口的,並且抽象類也能夠繼承自抽象類 B.對 C.抽象類指有abstract修飾的class,其能夠包含抽象方法,也能夠不包含 D.抽象類和接口都是不能被實例化的,只有具體的類才能夠被實例化
下列哪些語句關於 java 內存回收的說明是正確的?
正確答案: B
程序員必須建立一個線程來釋放內存
內存回收程序負責釋放無用內存
內存回收程序容許程序員直接釋放內存
內存回收程序能夠在指定的時間釋放內存對象
A:垃圾回收程序是通常是在堆上分配空間不夠的時候會本身進行一次GC,程序員不須要也不能主動釋放內存。 B:Java的內存釋放由垃圾回收程序來進行釋放 C:在Java裏,內存的釋放由垃圾回收程序進行管理,程序員不能直接進行釋放。 D:程序員能夠調用System.gc()運行垃圾回收器,可是不能指定時間。
如下代碼的輸出結果是?
public class B
{
public static B t1 = new B(); public static B t2 = new B(); { System.out.println("構造塊"); } static { System.out.println("靜態塊"); } public static void main(String[] args) { B t = new B(); }
}
正確答案: C
靜態塊 構造塊 構造塊 構造塊
構造塊 靜態塊 構造塊 構造塊
構造塊 構造塊 靜態塊 構造塊
構造塊 構造塊 構造塊 靜態塊
開始時JVM加載B.class,對全部的靜態成員進行聲明,t1 t2被初始化爲默認值,爲null,又由於t1 t2須要被顯式初始化,因此對t1進行顯式初始化,初始化代碼塊→構造函數(沒有就是調用默認的構造函數),咦!靜態代碼塊咋不初始化?由於在開始時已經對static部分進行了初始化,雖然只對static變量進行了初始化,但在初始化t1時也不會再執行static塊了,由於JVM認爲這是第二次加載類B了,因此static會在t1初始化時被忽略掉,因此直接初始化非static部分,也就是構造塊部分(輸出''構造塊'')接着構造函數(無輸出)。接着對t2進行初始化過程同t1相同(輸出'構造塊'),此時就對全部的static變量都完成了初始化,接着就執行static塊部分(輸出'靜態塊'),接着執行,main方法,一樣也,new了對象,調用構造函數輸出('構造塊')
以前我一直有一個誤區!就是認爲靜態塊必定是最早初始化的!可是,阿里爸爸今天又用一記重拳猛擊個人臉,額,好疼....當時的狀況是這樣的: 我在牛客網找虐中,碰到了這樣的一道題,心中充滿了鄙夷,心想"這tm還用看嗎,確定先是靜態塊,再接着三個構造塊,弱雞題",可是 = = ,答案倒是"構造塊 構造塊 靜態塊 構造塊". ......[黑線|||||||||] 因而總結了一下,以警後世 - - 正確的理解是這樣的: 並非靜態塊最早初始化,而是靜態域.(BM:啊!多麼痛的領悟!) 而靜態域中包含靜態變量、靜態塊和靜態方法,其中須要初始化的是靜態變量和靜態塊.而他們兩個的初始化順序是靠他們倆的位置決定的! So! 初始化順序是 t1 t2 靜態塊