1. 程式人生 > >java初識第六天

java初識第六天

1:成員變數和區域性變數的區別(理解)
    (1)在類中的位置不同
        成員變數:類中方法外
        區域性變數:方法定義中或者方法宣告上
    (2)在記憶體中的位置不同
        成員變數:在堆中
        區域性變數:在棧中
    (3)生命週期不同
        成員變數:有預設值
        區域性變數:沒有預設值,必須定義,賦值,然後才能使用
2:類作為形式引數的問題(理解)?
    (1)如果你看到一個方法需要的引數是另一個類名,就應該知道實際需要的是一個具體的物件。

3:匿名物件(理解)
    (1)沒有名字的物件
    (2)應用場景
        (A)呼叫方法,僅僅只呼叫一次的時候。
        (B)可以作為實際引數傳遞。
4:封裝
    (1)隱藏實現細節,提供公共的訪問方式
    (2)好處:
        A:隱藏實現細節,提供公共的訪問方式
        B:提高程式碼的複用性
        C:提高程式碼的安全性
    (3)設計原則
        把不想讓外界知道的實現細節給隱藏起來,提供公共的訪問方式
    (4)private是封裝的一種體現
        封裝:類,方法,private修飾成員變數
5:private關鍵字
    (1)私有的意義,可以修飾成員變數和成員方法
    (2)特點:
        被private修飾後的長遠只能在本類中訪問
    (3)private的用用:
        以後再寫一個類的時候:
            把所有的成員變數給private了
            提供對應的getXxx()/setXxx()
6:this關鍵字
    (1)代表當前類的引用物件
        記住:哪個物件呼叫方法,該方法內部的this就代表哪個物件
    (2)this的應用場景
        A:解決區域性變數隱藏成員變數的問題
        B:其實this還有其他的應用,明天再講。
7:構造方法
    (1)作用:用於對物件的資料進行初始化
    (2)格式:
        A:方法名和類同名
        B:沒有返回值型別,連void都沒有
        C:沒有返回值

        思考題:構造方法中可不可以有return呢?
        可以。而是我們寫成這個樣子就ok了:return;
        其實,在任何的void型別的方法的最後你都可以寫上:return;
    (3)構造方法的注意事項
        A:如果我們沒有寫構造方法,系統將提供一個預設的無參構造方法
        B:如果我們給出了構造方法,系統將不再提供預設的構造方法
          如果這個時候,我沒讓你要是用無參構造方法,就必須自己給出
          推薦:永遠手動給出無參構造方法。
    (4)給成員變數賦值的方式
        A:setXxx()
        B:帶參構造方法
    (5)標準案例
        class Student(){
            private String name;
            private int age;
            
            public Student(){}
            public Student(String name,int age){
                this.name=name;
                this.age=age;
            }
            
            public String getName(){
                return name;
            }
            public void setName(String name){
                this.name=name;
            }
            
            public int getAge(){
                this.age=age;
            }
            public void setAge(int age){
                this.age=age;
            }
        }
        
        測試:
        class StudentDemo{
            public static void main(String args[]){
                //方式1
                Student s1=new Student();
                s1.setName("林青霞");
                s1.setAge(27);
                System.out.println(s1.getName()+"---"+s1.getAge());
                
                //方式2
                Student s2=new Student("吳彥祖",30);
                System.out.println(s2.getName()+"---"+s2.getAge());
                }
        }
        
8:程式碼 Student s1=new Student();做了那些事?
        (1)把Student.class檔案載入到記憶體
        (2)在棧內為s1開闢空間
        (3)在堆內為學生物件申請空間
        (4)給學生的成員變數進行預設初始化。null,0
        (5)給學生的成員變數進行顯示初始化。林青霞,27
        (6)通過構造方法給成員變數進行初始化。吳彥祖,30
        (7)物件構造完畢,把地址賦值給s1變數
    
9:面向物件的練習題
    (1)標準的手機類的定義和測試
    (2)Demo類有求和方法,Test類進行測試。
        什麼時候定義成員變數?
        當變數是用來描述一個類的時候
    (3)長方形案例
    (4)員工案例
    (5)MyMath案例(自己提供加減乘除並測試)
10:static關鍵字
    (1)靜態的意思。可以修飾成員變數和成員方法
    (2)靜態的特點:
        A:隨著類的載入而載入
        B:優先於物件存在
        C:被類的所有物件共享
            這其實也是我們判斷該不該使用靜態的一句。
            舉例:飲水機和水杯的思考問題
        D:可以通過類名呼叫
            既可以通過物件名呼叫,也可以通過類名呼叫,建議通過類名呼叫
    (3)靜態的記憶體圖
        靜態的內容在方法區的靜態區
    (4)靜態的注意事項:
        A:在靜態方法中沒有this物件
        B:靜態只能訪問靜態
    (5)靜態變數與成員變數的區別
        A:所屬不同
            靜態變數:屬於類,類變數
            成員變數:屬於物件,物件變數,例項變數
        B:記憶體位置不同:
            靜態變數:方法區的靜態區
            成員變數:堆記憶體
        C:生命週期不同
            靜態變數:靜態變數是隨著類的載入而載入,隨著累的消失而消失
            成員變數:成員變數是隨著物件的建立而存在,隨著物件的消失而消失
        D:呼叫不同
            靜態變數:可以通過物件名呼叫,也可以通過類名呼叫
            成員變數:只能通過物件名呼叫
    (6)main方法是靜態的
        public:許可權最大
        static:不用建立物件呼叫
        void:返回值給jvm沒有意義
        main:就是一個常見的名稱
        String args[]:可以接受資料,提供程式的靈活性