1. 程式人生 > >Java-筆記9-復習

Java-筆記9-復習

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-復習