1. 程式人生 > >封裝、構造方法、private、Static與this關鍵字、main()_Day07

封裝、構造方法、private、Static與this關鍵字、main()_Day07

形參 調用構造 查找 logs code 屬性 too person 步驟

1:成員變量和局部變量的區別(理解)

   (1)定義位置區別:

     成員變量:定義在類中,方法外。

     局部變量:定義在方法中,或者方法聲明上。

   (2)初始化值的區別:

     成員變量:都有默認初始化值。

     局部變量:沒有默認初始化值。要想使用,必須先賦值。

   (3)存儲位置區別:

     成員變量:存儲在堆中。

     局部變量:存儲在棧中。

  (4)生命周期區別:

     成員變量:隨著對象的創建而存在。隨著對象的消失而消失。

    局部變量:隨著方法的調用而存在,隨著方法調用完畢而消失。更嚴謹地說當局部變量的作用域結束時,即被銷毀。

  (5)就近原則:局部變量有,就用局部變量,局部變量沒有,就找成員變量。如果成員變量也沒有就報錯

  (6)成員變量與局部變量的區別:有所屬關系,使用成員變量,否則使用局部變量,詳細見下面的例子:

技術分享
  /*

    成員變量與局部變量的使用區別,有所屬關系,使用成員變量,否則使用局部變量

*/

class Demo3

{

    public static void main(String[] args)

    {

       GetSumTool gst = new GetSumTool();

       System.out.println(gst.getSum(
2,3)); Rec rec = new Rec(); rec.height = 10; rec.width = 20; System.out.println("周長為:"+rec.getZhouChang()); System.out.println("面積為:"+rec.getMianJi()); } } //求兩個數的和的工具,第二種好,因為a與b不是這個工具必須有的屬性!沒有所屬關系! class GetSumTool { //方式一 //int a; //int b;
//public int getSum(){ // return a+b; //} //方式二 public int getSum(int a,int b) { return a+b; } } //定義長方形類,求周長與面積 class Rec { //方式一 int height; int width; public int getZhouChang(){ return 2*(height+width); } public int getMianJi(){ return height*width; } //方式二 //public int getZhouChang(int height,int width){ // return 2*(height+width); //} //public int getMianJi(int height,int width){ // return height*width; //} }
View Code

2、匿名對象

   (1)匿名對象是對象的簡化形式,即沒有名字直接創建的對象。

     Person p=new Person; //有名字的對象,對象為p

     new Person(); //沒有名字的對象

   (2)匿名對象的使用:

     對象方法只調用一次時。

    作為實際參數傳遞時。

    作為返回值返回時。

3:封裝(理解)

     (1)隱藏實現的細節,提供公共的訪問方式。 類,方法等其實都是封裝的具體體現。

    (2)private關鍵字

       A:用於修飾成員變量和成員方法。

      B:被修飾的內容在其他類中是不可以被訪問的。

     (3)常見的應用:(掌握)

       類中的所有成員變量私有,給出對應的get/set方法。其他的方法用Public修飾。代碼體現:

技術分享
  class Student

       {

           private String name;

           private int age;

 

           public Student(){}

 

           public Student(String name,int age)

           {

              this.name = name;

              this.age = age;

           }

 

           public void setName(String name)

           {

              this.name = name;

           }

 

           public String getName()

           {

              return name;

           }

 

           public void setAge(int age)

           {

              this.age = age;

           }

 

           public int getAge()

           {

              return age;

           }

       }
View Code

    (4)定義一個封裝類的步驟:

     a. 私有成員屬性

     b. 至少一個空參的構造方法

     c. 普通方法

     d. 公共的get/set方法通常手動放在最後

  (5)創建對象使用對象的步驟:

     a. 定義引用類型變量用來引用對象

     b.使用new關鍵字與構造方法完成對象創建

     c. 在構造方法的同時對成員變量賦值

     d. 使用get/set方法操作成員變量

     e. 使用對象名.方法名(參數)調用對象函數

  (6)創建對象時JVM所作動作:

     A:棧內存開辟空間存儲引用變量

     B:使用new創建內存空間

     C:調用構造方法

     D:成員變量默認初始化

     E:成員變量顯示初始化

     F:構造函數初始化

    H:對象創建結束,將地址賦值給引用變量

具體過程:對象內存圖技術分享

  (7)為成員變量賦值的方式:

     A:使用構造方法

     B:使用set方法

  註意:

     構造方法與set方法均能為成員變量賦值,並不沖突。

     構造方法只在創建對象時進行成員變量初始化。

     對象創建後由set方法依據需求修改成員變量值。

4:構造方法(掌握)

   定義: 用來創建實例對象時調用的方法。

   作用之一: 創建同時可以給屬性賦值

  (1)格式及特點

     格式:

    訪問權限修飾符 類名(參數...){}

    訪問權限修飾符:

       public,private,一般用public

     特點:

     A:方法名和類名相同

     B:沒有返回值類型

    C:沒有具體的返回值

  (2)註意事項:

    A:如果你不給構造方法,jvm會自動給你一個無參構造方法。多個構造方法使用重載的方式給出。

     B:如果你給出了構造方法,那麽,jvm將不再提供無參構造方法。

    這個時候,你如果要使用無參構造方法:只能自己提供

    推薦:永遠手動給出無參構造方法。

5:this關鍵字(掌握)

  (1)是一個關鍵字。代表當前對象的引用。

    //簡單記:在方法中,哪個對象調用方法,this就代表誰。

   (2)應用場景:

     a.解決局部變量隱藏成員變量問題,this關鍵字調用成員變量。

  例子:

技術分享
 class Person(){

            private name;   //成員變量

            

            public void eat(String name){  //局部變量

            this.name=name;

            }

       }

      

       b.在構造方法中調用其他的構造方法(必須寫在第一行)  this();

       例子:

           //定義了一個空參的構造方法

    public Person(){

       System.out.println("我是空參的構造方法!");

    }

 

    //定義了一個有參的構造方法

    public Person(String name){

       this.name = name;

       System.out.println("我是有一個參數的構造方法!");

    }

 

    //定義了兩個參數的構造方法

    public Person(String name,int age) {

       this(name);     //必須放在第一行

       //this.name = name;

       this.age = age;

       System.out.println("我是有兩個參數的構造方法!");

 

    }

      

       c.在其他方法中可以使用this.普通方法名()調用普通方法

       public void showMe(){

           System.out.println("name:"+this.getName()+" age:"+this.getAge());

    }

 
View Code

6:static關鍵字(理解)

   (1)是一個關鍵字。可以修飾成員變量和成員方法。

   (2)靜態的特點:

     A:隨著類的加載而加載

     B:優先於對象存在

    C:被類的所有對象共享

     D:可以通過類名調用

   (3)靜態的註意事項:

     A:在靜態方法中是沒有this關鍵字的。因為this關鍵字是對象的引用,隨對象的創建而生,而靜態方法隨著類的加載而加載,早於對象的創建。

     B:靜態方法只能訪問靜態的成員變量和靜態的成員方法。因為非靜態的可能還沒有創建。

   (4)靜態內容的調用:

     A:被對象調用

     B:被類名調用

     推薦被類名調用。

   (5)什麽時候該用static呢?

    如果某個內容是所有對象共享的,就用靜態修飾。

  (6)靜態關鍵字的內存圖:

技術分享

8:主函數main()

  主函數是靜態的 public static void main(String[] args){}

   A.static為固定修飾,與對象無關是JVM的入口

   B.public公共訪問權限允許外界調用

   C.無返回值,定義返回值類型沒有意義

   D.參數為String數組類型,用來接收字符串參數

   E.函數名main()為JVM固定查找的字符串不能修改

   F.形參名可以修改並使用

封裝、構造方法、private、Static與this關鍵字、main()_Day07