課程名稱:程式設計II(472205)
指導老師:蔡佳麟
學生:吳佳恩
學號: 40207096
組別:4
週次:第10-14週 [回首頁]
Part I指定作業:
作業題目 |
3.JAVA參數傳遞有幾種方式?試舉例說明其差異? |
4.何謂執行緒(Thread)?試舉例說明兩個Java執行緒常用的方法。 |
回答內容 |
JAVA參數傳遞有幾種方式? 根據參考來源1:「 (一)概念:傳遞方式種類(非限定Java) ( I )參數種類:(parameter/argument) (1) 形式參數(formal parameter) 假參數在程序或函數之定義區塊中參數列之參數(副程式頭-HEADing). (2) 實際參數(actual parameter) 呼叫副程式時,在副程式名稱中的參數,參數之實際值在此時決定,呼叫時傳遞給副程式. ( II )參數傳遞之方式: (1) call by value:傳值叫用的方式(傳值呼叫) (pass) 1. 此種方法會把“實質參數“(可能表示式的值)先計算出來(即右值)在傳給被叫用的程序之形式參數 → 形式參數是拷貝實際參數之值而來 2. 被呼叫程序將“形式參數“當做“區域變數“而使用於程序中。 3. 運轉後之結果並不會經由形式參數傳回實際參數。 4. 叫用之程序把實質參數的值算出來,把它的右值放至形式參數所在之記憶位址(即被叫用程序之ACTION
RECORD之field) 5. 若欲影響到叫用之程序:需透過非局部性變數或pointer.以swap為例。 (2) call-by-address,
call by Location, call by Reference, call-by-variable:傳位址叫用的方式 1. 叫用程序傳給被叫用程序的內容,是一個指向“實際參數“所在的記憶體位址之指標, 呼叫與被呼叫二程式間透過一些己知位置(pointer)從事參數/資料之傳送。 2. 二種情況: (1) 若實際參數為一變數,則傳遞左值(位址)本身。(將左值置入指標之中) (2) 若實際參數為一expression(無左值),則此表示式將被計值(evaluated)而置於新位址中,然後將此位址再傳給被呼叫之程序。 被叫用程序存取該位址所存放內容,加以運算 array (3) copy-restore,
value-result, copy-in, copy out, call by result:拷貝儲存連儲連繫方式 呼叫前所有實際參數之位址已被決定 傳遞方式:真正參數之值算出來(右值)拷貝給實際參數,而返回呼叫程時,“形式參數之值“將拷貝回真正參數之位址中。 (4) call
by name: 規則:以實際參數名稱替換形式參數名稱 把程序當作集體指令處理,把程序主體代到叫用程序中叫用所在的地方,且把實際參數全部以字面上的意義代入形式參數(MARCO/in-Line
Expansion) Lisp,
c,某此ALGOL, PASCAL:call by
value PASCAL,
FORTRAN77, PL/I:call by address 某些FORTRAN:call by
result ALGOL:call by name」 試舉例說明其差異? 根據參考來源2:「 數傳遞之比較範例: procuder sub(var A, B, C, D:integer); begin B:=A+A; D:=A+C End; : : x:=1; y:=2; z:=7; sub(X, X, X+Y, Z) ; write(Z)←?? : : (1) call by value:7(若無var) B=2, D=4, Z=7 (NOT CHANGE) (2) call by reference:5 (3) call by
result:4 (a) SUB(1 , 1 , 3 ,
7) A B
C D (b) B=1+1=2 D=1+3=4 Java參數傳遞方式 1. call
by value: 一般primitive type之變數或某一陣列之元素(primitive type)皆使用call by value
2. call
by reference: 凡是object(含array of Object之某一元素)皆以call by
reference傳遞,因此物件若被呼叫之method改變將不是暫態的。 」 |
何謂執行緒(Thread)? 根據參考來源3:「 Program,Process,Thread 在介紹Thread之前,我們必須先把Program和Process這兩個觀念作一個釐清。
由上面的描述中,我們在歸納Thread的重點如下
試舉例說明兩個Java執行緒常用的方法。 Java以java.lang.Thread這個類別來表示Thread。Class Thread有兩個Constructor: 1. Thread() 2. Thread(Runnable) 第一個Constrctor沒有參數,第二個需要一個Runnable物件當參數。 Runnable是一個interface,定義於java.lang內,其宣告為 public interface Runnable { public void run(); } 使用Thread()產生的Thread,其進入點為Thread裡的run();使用Thread(Runnable)產生的Thread,其進入點為Runnable物件裡的run()。 當run()結束時,這個Thread也就結束了;這和main()結束有相同的效果。其用法以下面範例說明: public class
ThreadExample1 extends Thread { public void run() { // override Thread's run() System.out.println("Here is
the starting point of Thread."); for (;;) { // infinite loop to print message System.out.println("User Created Thread"); } } public static void main(String[]
argv) { Thread
t = new ThreadExample1(); // 產生Thread物件 t.start(); // 開始執行t.run() for (;;) { System.out.println("Main Thread"); } } } 以上程式執行後,螢幕上會持續印出"User Created Thread"或"Main Thread"的字樣。 利用Runnable的寫法如下 public class
ThreadExample2 implements Runnable { public void run() { // implements Runnable run() System.out.println("Here is
the starting point of Thread."); for (;;) { // infinite
loop to print message System.out.println("User Created Thread"); } } public static void main(String[]
argv) { Thread
t = new Thread(new ThreadExample2()); // 產生Thread物件 t.start(); // 開始執行Runnable.run(); for (;;) { System.out.println("Main Thread"); } } } 」 |
參考來源 |
根據參考來源1&2:參數 |
根據參考來源3&4:Thread(執行緒) |
Part II 10-14週學習心得彙整:
週別 |
10 |
11 |
12 |
13 |
14 |
截圖 |
Ex.1
期中考第3題(應用程式) Ex.2
寫入檔案 Ex.3 讀取檔案 |
Ex.1
11_ex1 Ex.2 2.3.套件製作-打包-使用 Ex.3執行緒 |
Ex.1
多執行緒 Ex.2
實作2多執行緒 Ex.3 實作3多執行緒 |
Ex.1集合(呼叫類別:mySet) Ex.2介面Set (13-Ex2) Ex.3介面Set (13-Ex3) Ex.4介面List
(13-Ex4) |
Ex.2 集合3(呼叫類別:集合3) Ex.3集合4 (呼叫類別:集合4") |
課後心得 |
聽得懂 |
還算簡單 |
很有趣 |
有點難 |
比上禮拜難一點 |
週別 |
15 |
16 |
截圖 |
||
課後心得 |