一:談談你對MVC的理解
MVC全名是Model View Controller,如圖,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯。
其中M層處理數據,業務邏輯等;V層處理界面的顯示結果;C層起到橋樑的作用,來控制V層和M層通信以此來達到分離視圖顯示和業務邏輯層。
視圖(View):用戶界面。
控制器(Controller):業務邏輯
模型(Model):數據保存
View 傳送指令到 Controller;
Controller 完成業務邏輯後,要求 Model 改變狀態;
Model 將新的數據發送到 View,用戶得到反饋。
2 解釋內存中的棧(stack)、堆(heap)和靜態區(static area)的用法。
通常我們定義一個基本數據類型的變量,一個對象的引用,還有就是函數調用的現場保存都使用內存中的棧空間;而通過new關鍵字和構造器創建的對象放在堆空間;程序中的字面量(literal)如直接書寫的100、”hello”和常量都是放在靜態區中。棧空間操作起來最快但是棧很小,通常大量的對象都是放在堆空間,理論上整個內存沒有被其他進程使用的空間甚至硬盤上的虛擬內存都可以被當成堆空間來使用。
1 | String str = new String("hello"); |
上面的語句中變量str放在棧上,用new創建出來的字符串對象放在堆上,而”hello”這個字面量放在靜態區。
3 指出下面程序的運行結果。
class A {
static {
System.out.print("1");
}
public A() {
System.out.print("2");
}
}
class B extends A{
static {
System.out.print("a");
}
public B() {
System.out.print("b");
}
}
public class Hello {
public static void main(String[] args) {
A ab = new B();
ab = new B();
}
}
執行結果:1a2b2b。創建對象時構造器的調用順序是:先初始化靜態成員,然後調用父類構造器,再初始化非靜態成員,最後調用自身構造器。