stackby
觀念整理
變數的八種基本型別?答案: byte short int long float double Boolean char
甚麼是 變數三要素?答案: 型別 名字 值一組
甚麼是 變數三部曲?答案:宣告,取值,拿來用
甚麼是 宣告?答案: 宣告變數的型別和名字
甚麼是 取值?答案:把等號右邊的值 指派給等號左邊的變數
甚麼是 拿來用?答案: 變數有了值就可以在函式的本體中拿來用
甚麼是運算子%?答案:對誰取餘數
甚麼是運算子==?答案:是否等於
甚麼是 i +=1?答案:把i 加一再指派給本身
甚麼是i -=1?答案: 把i 減一再指派給本身
甚麼是 i *=5?答案:把i 乘五再指派給本身
甚麼是 i /=2?答案:把i 除二再指派給本身
甚麼是 i %=3?答案:把i 除3取餘數 再指派給本身
甚麼是 i++?答案: 先取值拿來用,再加一
甚麼是 ++i?答案: 先加一,再取值拿來用
甚麼是 i—?答案: 先取值拿來用,再減一
甚麼是 —i?答案: 先減一,再取值拿來用
甚麼是x%=y?答案: 把x對y取餘數,再指派給本身
甚麼是運算子 邏輯and?答案: 合再一起,有一個錯就錯
甚麼是運算子 邏輯or?答案: 合再一起,有一個對就對
"%d"是甚麼意思?答案: 字串中預留一個十進位的整數空間
字元(char)用單引,字串(String)用雙引
字串中的\是甚麼意思?答案:跳脫字元
字串中的\n是甚麼意思?答案:換行
字串中的\t是甚麼意思?答案:插入tab
字串怎麼串接?答案:字串用+號做串接
甚麼是if-else? 答案:二擇一
甚麼是if-else if-else?答案: 多擇一
Switch-case-break-default的概念及注意事項?答案: 多擇一,遇到break就中斷,沒找到就用預設值 。沒有寫break,會造成瀑布式;沒有寫default,就沒有預設值
自動轉型舉例?答案: 把整數存到浮點數中,整數部分直接複製,小數點後補零,系統自動幫你轉換,一定會成功。
強轉型舉例?答案:把浮點數存到整數中,整數部分直接複製,小數點後無條件捨去,必須強迫系統幫你轉換。
甚麼是 迴圈三要素?答案:初值,條件,步進
甚麼是 迴圈三部曲?答案: 第一次進去I是多少,最後一次進去I是多少,跳出迴圈I是多少
甚麼是for-in-loop?答案: 從集合中迭代取出每個元素,對迭代取出的每個元素做動作
甚麼是break?答案:跳出迴圈
甚麼是return?答案: 跳出函式
甚麼是continue?答案:跳過迴圈目前這一輪,繼續執行迴圈的下一輪
九九乘法表口訣?答案:外層迴圈走九次每走一次換一行;內層迴圈走九次,每走一次列印出一個值
甚麼是集合?答案:可以儲存多個物件的容器叫集合,常見的集合有Array(陣列) 、List(串列)、Set等
甚麼是物件參考變數?答案:物件的名字內存著物件在記憶體中的位址,藉由這個位址就可以找到這個物件,就可以取用這個物件的屬性和方法
陣列宣告:: int[] arr= new int[5] 在heap中創造一個長度為5的整數陣列
陣列的名字代表甚麼意義:: 陣列的名字存陣列頭在記憶體中的位址,藉由這個位址,找到這個物件,就可以取用它的屬性和方法
陣列的index有甚麼特徵?答案:陣列的index都從0開始,從0到length-1
陣列的名字存"甚麼?答案:陣列頭在記憶體中的位址 "
陣列是連續的記憶體空間,所以搜尋的時間複雜度是O(1)
arr[3]代表?答案:陣列是物件型別,陣列的名字(內的值)存陣列頭在記憶體中的位址,藉由這個位址,找到這個陣列(頭的位址),加3個offset(偏移量)再取值。
arr[5][4][3]翻譯?答案: arr是三維陣列頭在記憶體中的位址,裡面指向5個二維陣列,每個二維陣列裡面有4個一維陣列,每個一維陣列裡面有3個值
陣列的殺手級功能?答案: 隨機存取,搜尋時間複雜度O(1)
陣列的最大缺點?答案: 新增或刪除元素比較困難,時間複雜度O(n)
如何找出陣列中的最大值??答案: 從陣列中迭代取出每個元素, 把每個元素跟暫時的最大做比較,如果比較大就取代它,整個陣列走完,暫時的最大就是真正的最大
如何知到陣列中是否存在某個元素並找到它的index??答案: 先把答案卡index設為-1, 再從陣列中迭代取出每個元素, 把每個迭代出的元素跟要找的元素值做比較,如果一樣就把這個index存到答案卡中然後跳出
如何得到陣列中元素值的總和??答案: 先把答案卡sum設為0, 再從陣列中迭代取出每個元素, 把每個元素加到sum中,整個陣列走完,sum就是答案
甚麼是iterable物件,常見的iterable有哪些??答案:可以迭代取出的叫iterable,常見的iterable有 String , 還有Array、List 、Set等集合
甚麼是函數(函式)?答案:輸入一個x得到對應的y
Java的函式宣告有哪些組成?答案:函式名稱,參數,回傳型別,存取修飾子,大括弧內的方法本體
回傳型別 void 代表沒有回傳值
甚麼是參數?方法宣告小括弧內宣告的是參數
甚麼是引數 ?方法呼叫 小括弧內的是引數 :引數我只要他的值(不需要型別和名字)
參數是區域變數,所以也會需要宣告取值拿來用
參數三部曲:宣告,取值,拿來用
參數在哪裡宣告?參數在方法宣告小括弧內宣告
參數在哪裡取值?參數在方法呼叫時取值,把引數的值指派給參數
參數在哪裡拿來用?參數有了值就可以在方法的本體中拿來用
main函式是程式的進入點,所有的函式都是由使用者呼叫,但只有main函式是由系統幫你呼叫
main函式是方法宣告還是呼叫?答案:main方法是方法呼叫,因為有大括弧是方法呼叫
方法呼叫就會在stack(堆疊)中長出一個區塊,每個區塊都會有自己的區域變數
存取修飾子有哪幾種??答案: public protected private
函式宣告規定了函式輸入還有輸出的格式
函式宣告跟函式呼叫的差別?答案:函式宣告有大括弧本體,函式呼叫沒有大括弧本體
參數(parameter)與引數(argument)的差別?答案: 函式宣告大括弧內的叫參數,函式呼叫大括弧內的叫引數
參數跟引數的別名?答案: 參數又稱為型參 ,引數又稱為實參
區域變數的定義?答案:函式宣告中的參數或是函式本體中宣告的變數或是實體方法中的this
區域變數有三種
this
方法宣告小括弧內的參數
方法宣告大括弧內宣告的變數
區域變數的可視範圍只有在函式(frame)內,方法結束就不復存在
甚麼是this?答案:this是一個區域變數,誰呼叫這個方法,this就指向誰
基本型別存純值,物件型別存位址
記憶體有兩個區塊,一個叫stack,一個叫heap,物件一定放在heap中
物件導向的階層關係
1.甚麼是類別藍圖?答案:類別就是類別藍圖 ,類別藍圖規定了實體物件具有的屬性和方法。類別藍圖無法直接取用方法,要產生實體物件才能取用屬性和方法。
2.甚麼是實體物件?答案:物件就是實體物件,根據類別藍圖創造出來的物件叫實體物件,每個實體物就都有相同的屬性和方法,但屬性的值會不同
3.甚麼是實體變數?答案:實體變數是實體物件的屬性
實體變數有預設初始值,物件型別預設是null,基本型別數字預設是0,布林預設是false
變數裡面存位址的就叫物件參考變數
誰可以呼叫這個類別的方法?答案:這個類別的實體物件,this就會指向這個類別的實體物件
建構式的特徵?答案: 首字大寫與類別同名,沒有回傳值
建構式用途?答案: 會在heap中創造這個類別的實體物件,回傳這個物件在記憶體中的位址
實體變數要如何初始化?答案:
建構式的依賴注入
先把引數的值指派給參數,再把區域變數的值指派給實體變數
setXXX的依賴注入
Java會提供一個預設沒有參數的建構式,如果你自己寫有參數的建構式,預設建構式就不復存在
方法中預設會先找區域變數,如果找不到會(透過this)去找實體變數
如果區域變數和實體變數同名,只能透過this取用實體變數
方法呼叫注意哪兩件事?答案:
需不需要參數
有沒有回傳型別
實體變數的取值和設值
取值用getXXX:: 不需要參數,有回傳型別
設值用setXXX:: 需要參數,沒有回傳型別
物件導向三大支柱,目的為了實踐抽象化
封裝-把屬性設成私有,利用公開的getter setter來取用私有的屬性
封裝可以藉由setter避免掉錯誤的商業邏輯
繼承-子類別可以取用父類別的屬性和方法
多型-父類別的型別,指向子類別的物件,借過父類別的方法,取用子類別覆寫過的方法
介面的功用
實踐多重繼承
開規格書給子類別實做
貼標籤 型別轉換 降低相依性
甚麼是遞迴(recursion):: 函式自己呼叫自己叫遞迴
遞迴的使用時機:: 問題具有最佳化結構
甚麼是最佳化結構:: 原問題是由子問題所組成,子問題的結構與原問題完全一樣
遞迴四部曲:: 分割,取樣本、取和、取base case
遞迴的結構
base case
terminal base case
early base case
recursive case