Java-筆記9-復習
阿新 • • 發佈:2019-05-16
on() sum 實參 ets collect 重載 成員變量 color eat
1. 什麽是方法的重載? “兩同一不同”:同一個類、相同方法名;參數列表不同。 如何調用確定的方法:方法名參數列表
2. 說明Java方法中的參數傳遞機制的具體體現? 基本數據類型:數據值 引用數據類型:地址值 (含變量的數據類型) Person p1 = new Person(); eat();age User u1 = p1;//編譯錯誤 (逆向思維、反證法) u1.eat() u1.age
3. 成員變量和局部變量在聲明的位置上、是否有默認初始化值上、
是否能有權限修飾符修飾上、內存分配的位置上有何不同?
4. 談談return關鍵字的使用① 結束方法 ② 針對於有返回值的方法,return + 返回數據
5. 提供如下代碼的內存解析
1. 內存結構:棧(局部變量)、堆(new出來的結構:對象(非static成員變量)、數組)
2. 變量:成員變量 vs 局部變量(方法內、方法形參、構造器內、構造器形參、代碼塊內)
1.方法的重載的概念 定義:在同一個類中,允許存在一個以上的同名方法,只要它們的參數個數或者參數類型不同即可。 * 總結:"兩同一不同":同一個類、相同方法名 參數列表不同:參數個數不同,參數類型不同 2. 構成重載的舉例: 舉例一:Arrays類中重載的sort()/ binarySearch();PrintStream中的println() 舉例二: //如下的4個方法構成了重載 public void getSum(int i,int j){ System.out.println("1"); } public void getSum(double d1,double d2){ System.out.println("2"); } public void getSum(String s ,int i){ System.out.println("3"); } public void getSum(int i,String s){ System.out.println("4"); } 不構成重載的舉例: //如下的3個方法不能與上述4個方法構成重載 // public int getSum(int i,int j){ // return 0; // } // public void getSum(int m,int n){ // // } // private void getSum(int i,int j){ // // } 3. 如何判斷是否構成方法的重載? 嚴格按照定義判斷:兩同一不同。 跟方法的權限修飾符、返回值類型、形參變量名、方法體都沒關系! 4.如何確定類中某一個方法的調用: 方法名 ---> 參數列表 面試題:方法的重載與重寫的區別? throws\throw String\StringBuffer\StringBuilder Collection\Collections final\finally\finalize ... 抽象類、接口 sleep() / wait()
1.使用說明: * 1.jdk 5.0新增的內容 * 2.具體使用: * 2.1 可變個數形參的格式:數據類型 ... 變量名 * 2.2 當調用可變個數形參的方法時,傳入的參數個數可以是:0個,1個,2個,。。。 * 2.3 可變個數形參的方法與本類中方法名相同,形參不同的方法之間構成重載 * 2.4 可變個數形參的方法與本類中方法名相同,形參類型也相同的數組之間不構成重載。換句話說,二者不能共存。 * 2.5 可變個數形參在方法的形參中,必須聲明在末尾 * 2.6 可變個數形參在方法的形參中,最多只能聲明一個可變形參。 2.舉例說明: public void show(int i){ } public void show(String s){ System.out.println("show(String)"); } public void show(String ... strs){ System.out.println("show(String ... strs)"); for(int i = 0;i < strs.length;i++){ System.out.println(strs[i]); } } //不能與上一個方法同時存在 // public void show(String[] strs){ // // } 調用時: test.show("hello"); test.show("hello","world"); test.show(); test.show(new String[]{"AA","BB","CC"});
1.針對於方法內變量的賦值舉例: System.out.println("***********基本數據類型:****************"); int m = 10; int n = m; System.out.println("m = " + m + ", n = " + n); n = 20; System.out.println("m = " + m + ", n = " + n); System.out.println("***********引用數據類型:****************"); Order o1 = new Order(); o1.orderId = 1001; Order o2 = o1;//賦值以後,o1和o2的地址值相同,都指向了堆空間中同一個對象實體。 System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId); o2.orderId = 1002; System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId); 規則: 如果變量是基本數據類型,此時賦值的是變量所保存的數據值。 如果變量是引用數據類型,此時賦值的是變量所保存的數據的地址值。 2.針對於方法的參數概念 形參:方法定義時,聲明的小括號內的參數 實參:方法調用時,實際傳遞給形參的數據 3.java中參數傳遞機制:值傳遞 規則: * 如果參數是基本數據類型,此時實參賦給形參的是實參真實存儲的數據值。 * 如果參數是引用數據類型,此時實參賦給形參的是實參存儲數據的地址值。 推廣: 如果變量是基本數據類型,此時賦值的是變量所保存的數據值。 如果變量是引用數據類型,此時賦值的是變量所保存的數據的地址值。 4.典型例題與內存解析: 【例題1】 【例題2】
1.定義: 遞歸方法:一個方法體內調用它自身。 2.如何理解遞歸方法? > 方法遞歸包含了一種隱式的循環,它會重復執行某段代碼,但這種重復執行無須循環控制。 > 遞歸一定要向已知方向遞歸,否則這種遞歸就變成了無窮遞歸,類似於死循環。 3.舉例: // 例1:計算1-n之間所自然數的和 public int getSum(int n) {// 3 if (n == 1) { return 1; } else { return n + getSum(n - 1); } } // 例2:計算1-n之間所自然數的乘積:n! public int getSum1(int n) { if (n == 1) { return 1; } else { return n * getSum1(n - 1); } } //例3:已知一個數列:f(0) = 1,f(1) = 4,f(n+2)=2*f(n+1) + f(n), //其中n是大於0的整數,求f(10)的值。 public int f(int n){ if(n == 0){ return 1; }else if(n == 1){ return 4; }else{ // return f(n + 2) - 2 * f(n + 1); return 2*f(n - 1) + f(n - 2); } } //例4:斐波那契數列 //例5:漢諾塔問題 //例6:快排
Java-筆記9-復習