1. 程式人生 > 其它 >Java筆試題01

Java筆試題01

重寫 - 執行時多型 keyword ==> 兩同兩小一大

重寫,多型在執行期的表現形式。出現在子父類,實現類與介面中。判定過載有一個規律:“兩同兩小一大”
兩同:方法名和形參列表一致;
兩小:丟擲的異常和返回值相容於被重寫的方法。(一旦返回值是基本資料型別,那重寫的方法返回值必須一致或者是Object)
一大:訪問修飾符大於等於被重寫方法。

異常語法

1. throw、throws
2. try-catch
3. try-finally
4. try-catch-finally
5. try-with-resource

異常處理結構中只有【try塊】是必須的,jdk1.7中增加try-with-resource語法糖
擴充try塊的功能允許在try(//新增資原始碼){}在程式碼執行完畢後自動關閉程式碼,相當於隱藏finally塊同時能夠起到遮蔽異常的作用。

finally塊用於回收無法被JVM處理的物理資源。
eg: 資料庫連線、網路連線

常見關鍵字

* static: 用來建立類方法和類變數。
* final: 用來修飾類、方法和變數,final 修飾的類不能夠被繼承,修飾的方法不能被繼 
               承類重新定義,修飾的變數為常量,是不可修改的。
* abstract: 用來建立抽象類和抽象方法。
* synchronized: 用於多執行緒的同步。用來給物件和方法或者程式碼塊加鎖,各執行緒互斥訪問。
* volatile: 修飾的成員變數在每次被執行緒訪問時,都強制從共享記憶體中重新讀取該成員變數的值。
            而且,當成員變數發生變化時,會強制執行緒將變化值回寫到共享記憶體。這樣在任何時刻,兩個不同的執行緒總是看到某個成員變數的同一個值。
* transient:序列化的物件包含被 transient 修飾的例項變數時,java 虛擬機器(JVM)跳過該特定的變數。

synchronized 和 volatile關鍵字

  • synchronized關鍵字: 用來給物件、方法或程式碼塊加鎖,當它對這些內容進行加鎖時,一次只有一個執行緒可以執行這段程式碼。

  • volatile關鍵字 :修飾變數,會將變數和變數上的新操作通知到其他執行緒,volatile變數在編譯器和執行時中會視為共享變數,變數上的操作不會和其他記憶體操作一起進入記憶體指令重排序。
    volatile不會對修飾的內容加鎖,是相比於synchronized關鍵字更輕量級的同步機制。

前臺執行緒和守護執行緒

  main()函式即主函式,是一個前臺執行緒,前臺程序是程式中必須執行完成的,而後臺執行緒則是java中所有前臺結束後結束,不管有沒有完成,後臺執行緒主要用與記憶體分配等方面。                                                                                          
前臺執行緒和後臺執行緒的區別和聯絡:
1、後臺執行緒不會阻止程序的終止。屬於某個程序的所有前臺執行緒都終止後,該程序就會被終止。所有剩餘的後臺執行緒都會停止且不會完成。
2、可以在任何時候將前臺執行緒修改為後臺執行緒,方式是設定Thread.IsBackground 屬性。
3、不管是前臺執行緒還是後臺執行緒,如果執行緒內出現了異常,都會導致程序的終止。

4、託管執行緒池中的執行緒都是後臺執行緒,使用new Thread方式建立的執行緒預設都是前臺執行緒。
說明:   
應用程式的主執行緒以及使用Thread構造的執行緒都預設為前臺執行緒                      
    使用Thread建立的執行緒預設情況下是前臺執行緒,在程序中,只要有一個前臺執行緒未退出,程序就不會終止。主執行緒就是一個前臺執行緒。而後臺執行緒不管執行緒是否結束,只要所有的前臺執行緒都退出(包括正常退出和異常退出)後,程序就會自動終止。
一般後臺執行緒用於處理時間較短的任務,如在一個Web伺服器中可以利用後臺執行緒來處理客戶端發過來的請求資訊。而前臺執行緒一般用於處理需要長時間等待的任務,如在Web伺服器中的監聽客戶端請求的程式,
或是定時對某些系統資源進行掃描的程式 

構造方法

1. 使用關鍵字new例項化一個新物件的時候預設呼叫的方法。
2. 構造方法完成的主要工作是新建立物件的資料成員賦予初始值。

使用構造方法注意以下幾點: 

1. 構造方法不能被static、final修飾
2. 構造方法沒有返回值也不能使用void
3. 構造方法名稱和所屬類名必須保持一致
4. 構造方法可以像其他普通方法一樣可以被過載
5. 構造方法不能被繼承,子類使用父類構造方法需要使用super關鍵字

static關鍵字

static修飾的類成員和this水火不容。

this關鍵字

this指當前物件只能在實際方法和建構函式中呼叫

super關鍵字 呼叫父類可以訪問的方法和成員變數

子類呼叫父類有參構造方法必須顯式初始化

class Base{
    public Base(String s){
        System.out.print("B");
    }
}
public class Derived extends Base{
    public Derived (String s) {
        System.out.print("D");
    }
    public static void main(String[] args){
        new Derived("C");
    }
}

★★★在呼叫子類構造器之前,會先呼叫父類構造器,當子類構造器中沒有使用"super(引數或無引數)"指定呼叫父類構造器時,是預設呼叫父類的無參構造器,如果父類中包含有參構造器,卻沒有無參構造器,則在子類構造器中一定要使用“super(引數)”指定呼叫父類的有參構造器,不然就會報錯。

子類不能繼承父類中【private、static、final】修飾變數或方法

迴圈體內執行過程

內部類

內部類可以訪問外部類的屬性,而外部類不能訪問內部類的屬性

學而不思則罔,思而不學則殆!