1. 程式人生 > 其它 >【設計模式學習筆記】工廠模式

【設計模式學習筆記】工廠模式

資料型別:

Java有哪些資料型別

定義:Java語言是強型別語言,對於每一種資料都定義了明確的具體的資料類 型,在記憶體中分配了不同大小的記憶體空間。
基本資料型別

  • 數值型
     整數型別(byte,short,int,long)
     浮點型別(float,double)
  • 字元型(char)
  • 布林型(boolean)

引用資料型別

  • 類(class)
  • 介面(interface)
  • 陣列([])

Java基本資料型別圖

switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?

在 Java 5 以前,switch(expr)中,expr 只能是 byte、short、char、int。從 Java5 開始,Java 中引入了列舉型別,expr 也可以是 enum 型別,從 Java 7 開始,expr 還可以是字串(String),但是長整型(long)在目前所有的版 本中都是不可以的。

用最有效率的方法計算 2 乘以 8

用最有效率的方法計算 2 乘以 8。

Math.round(11.5) 等於多少?Math.round(-11.5) 等於多少

Math.round(11.5)的返回值是 12,Math.round(-11.5)的返回值是-11。四舍 五入的原理是在引數上加0.5 然後進行下取整。

loat f=3.4;是否正確

不正確。3.4 是雙精度數,將雙精度型(double)賦值給浮點型(float)屬於 下轉型(down-casting,也稱為窄化)會造成精度損失,因此需要強制型別轉 換float f =(float)3.4; 或者寫成 float f =3.4F。

short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1;有錯

對於 short s1 = 1; s1 = s1 + 1;由於 1 是 int 型別,因此 s1+1 運算結果也是 int型,需要強制轉換型別才能賦值給 short 型。 而 short s1 = 1; s1 += 1;可以正確編譯,因為 s1+= 1;相當於 s1 = (short(s1 + 1);其中有隱含的強制型別轉換。


編碼

Java語言採用何種編碼方案?有何特點?

Java語言採用Unicode編碼標準,Unicode(標準碼),它為每個字元制訂了一個唯一的數值,因此在任何的語言,平臺,程式都可以放心的使用。


註釋

什麼是Java註釋

定義:用於解釋說明程式的文字

分類

  • 單行註釋 格式: // 註釋文字
  • 多行註釋 格式: /* 註釋文字 */
  • 文件註釋 格式:/** 註釋文字 */

作用

在程式中,尤其是複雜的程式中,適當地加入註釋可以增加程式的可讀性,有利於程式的修改、除錯和交流。註釋的內容在程式編譯的時候會被忽視,不會產生目的碼,註釋的部分不會對程式的執行結果產生任何影響。 注意事項:多行和文件註釋都不能巢狀使用。

訪問修飾符 public,private,protected,以及不寫(預設)時的區別

定義:

Java中,可以使用訪問修飾符來保護對類、變數、方法和構造方法的訪 問。Java 支援 4 種不同的訪問許可權。

分類:

  • private : 在同一類內可見。使用物件:變數、方法。 注意:不能修飾類(外部 類)
  • default (即預設,什麼也不寫,不使用任何關鍵字): 在同一包內可見,不使用 任何修飾符。使用物件:類、介面、變數、方法。
  • protected : 對同一包內的類和所有子類可見。使用物件:變數、方法。 注意: 不能修飾類(外部類)。
  • public : 對所有類可見。使用物件:類、介面、變數、方法

訪問修飾符圖


運算子

&和&&的區別

&運算子有兩種用法:(1)按位與;(2)邏輯與。
&&運算子是短路與運算。邏輯與跟短路與的差別是非常巨大的,雖然二者都要 求運算子左右兩端的布林值都是true 整個表示式的值才是 true。&&之所以稱為短路運算,是因為如果&&左邊的表示式的值是 false,右邊的表示式會被直 接短路掉,不會進行運算。
注意:邏輯或運算子(|)和短路或運算子(||)的差別也是如此。


關鍵字

Java 有沒有 goto

goto 是 Java 中的保留字,在目前版本的 Java 中沒有使用。

final 有什麼用?

用於修飾類、屬性和方法;

  • 被final修飾的類不可以被繼承
  • 被final修飾的方法不可以被重寫
  • 被final修飾的變數不可以被改變,被final修飾不可變的是變數的引用,而不是引用指向的內容,引用指向的內容是可以改變的

final finally finalize區別

  • final可以修飾類、變數、方法,修飾類表示該類不能被繼承、修飾方法表示該方法不能被重寫、修飾變量表示該變數是一個常量不能被重新賦值。
  • finally一般作用在try-catch程式碼塊中,在處理異常的時候,通常我們將一定要執行的程式碼方法finally程式碼塊中,表示不管是否出現異常,該程式碼塊都會執行,一般用來存放一些關閉資源的程式碼。
  • finalize是一個方法,屬於Object類的一個方法,而Object類是所有類的父類,該方法一般由垃圾回收器來呼叫,當我們呼叫System.gc() 方法的時候,由垃圾回收器呼叫finalize(),回收垃圾,一個物件是否可回收的最後判斷。

this關鍵字的用法

this是自身的一個物件,代表物件本身,可以理解為:指向物件本身的一個指標。

this的用法在java中大體可以分為3種:

  1. 普通的直接引用,this相當於是指向當前物件本身;
  2. 形參與成員名字重名,用this來區分;
  3. 引用本類的建構函式。

super關鍵字的用法

super可以理解為是指向自己超(父)類物件的一個指標,而這個超類指的是離自己最近的一個父類。

super也有三種用法:

  1. 普通的直接引用與this類似,super相當於是指向當前物件的父類的引用,這樣就可以用super.xxx來引用父類的成員。
  2. 子類中的成員變數或方法與父類中的成員變數或方法同名時,用super進行區分
  3. 引用父類建構函式
    super(引數): 呼叫父類中的某一個建構函式(應該為建構函式中的第一條語句)。
    this(引數): 呼叫本類中另一種形式的建構函式(應該為建構函式中的第一條語句)。

this與super的區別

  • super: 它引用當前物件的直接父類中的成員(用來訪問直接父類中被隱藏的父類中成員資料或函式,基類與派生類中有相同成員定義時如:super.變數名 super.成員函資料名(實參)
  • this:它代表當前物件名(在程式中易產生二義性之處,應使用this來指明當前物件;如果函式的形參與類中的成員資料同名,這時需用this來指明成員變數名)
  • super()和this()類似,區別是,super()在子類中呼叫父類的構造方法,this()在本類內呼叫本類的其它構造方法。
  • super()和this()均需放在構造方法內第一行。
  • 儘管可以用this呼叫一個構造器,但卻不能呼叫兩個。
  • this和super不能同時出現在一個建構函式裡面,因為this必然會呼叫其它的建構函式,其它的建構函式必然也會有super語句的存在,所以在同一個建構函式裡面有相同的語句,就失去了語句的意義,編譯器也不會通過。
  • this()和super()都指的是物件,所以,均不可以在static環境中使用。包括:static變數,static方法,static語句塊。
  • 從本質上講,this是一個指向本物件的指標, 然而super是一個Java關鍵字。

static存在的主要意義

static的主要意義是在於建立獨立於具體物件的域變數或者方法。以致於即使沒有建立物件,也能使用屬性和呼叫方法!
static關鍵字還有一個比較關鍵的作用就是 用來形成靜態程式碼塊以優化程式效能。static塊可以置於類中的任何地方,類中可以有多個static塊。在類初次被載入的時候,會按照static塊的順序來執行每個static塊,並且只會執行一次。為什麼說static塊可以用來優化程式效能,是因為它的特性:只會在類載入的時候
執行一次。因此,很多時候會將一些只需要進行一次的初始化操作都放在static程式碼塊中進行。

static的獨特之處

1、被static修飾的變數或者方法是獨立於該類的任何物件,也就是說,這些變數和方法不屬於任何一個例項物件,而是被類的例項物件所共享。

怎麼理解 “被類的例項物件所共享” 這句話呢?就是說,一個類的靜態成員,它是屬於大夥的【大夥指的是這個類的多個物件例項,我們都知道一個類可以建立多個例項】,所有的類物件共享的,不>像成員變數是自個的【自個指的是這個類的單個例項物件】。

2、在該類被第一次載入的時候,就會去載入被static修飾的部分,而且只在類第一次使用時載入並進行初始化,注意這是第一次用就要初始化,後面根據需要是可以再次賦值的。
3、static變數值在類載入的時候分配空間,以後建立類物件的時候不會重新分配。賦值的話,是可以任意賦值的!
4、被static修飾的變數或者方法是優先於物件存在的,也就是說當一個類載入完畢之後,即便沒有建立物件,也可以去訪問。

static應用場景

因為static是被類的例項物件所共享,因此如果某個成員變數是被所有物件所共享的,那麼這個成員變數就應該定義為靜態變數。

因此比較常見的static應用場景有:

1、修飾成員變數
2、修飾成員方法
3、靜態程式碼塊
4、修飾類【只能修飾內部類也就是靜態內部類】
5、靜態導包

static注意事項

1、靜態只能訪問靜態。
2、非靜態既可以訪問非靜態的,也可以訪問靜態的。


流程控制語句

break ,continue ,return 的區別及作用

break 跳出總上一層迴圈,不再執行迴圈(結束當前的迴圈體)continue 跳出本次迴圈,繼續執行下次迴圈(結束正在執行的迴圈 進入下一個迴圈條件)
return 程式返回,不再執行下面的程式碼(結束當前的方法 直接返回)

在 Java 中,如何跳出當前的多重巢狀迴圈

在Java中,要想跳出多重迴圈,可以在外面的迴圈語句前定義一個標號,然後在裡層迴圈體的程式碼中使用帶有標號的break 語句,即可跳出外層迴圈。例如:

跳出外層迴圈程式碼
public static void main(String[] args) {
    ok:for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            System.out.println("i=" + i + ",j=" + j);
            if (j == 5) {
                break ok;
            }
        }
    }
}