【建議收藏】關於面向對象、封裝,尚未見過總結的這麼詳細的!

類和對象

什麼是類

類是一組相關屬性和行爲的集合,能夠看做是一類事物的模板,好比說:不管中年人、老年人仍是小孩,都有身高、體重(這是屬性),都會吃飯、睡覺(這是行爲),那麼咱們就能夠抽取出這些共有的屬性和行爲,封裝爲一個類。類由兩部分組成:java

  • 屬性:事物的狀態信息
  • 行爲:事物可以作啥

什麼是對象

對象是某類事物的具體體現,對象是類的一個實例,好比說:一株蒲公英是植物類的具體實例。this

對象和類的關係

  • 類是對象的抽象
  • 對象是類的具體

類的定義

格式

修飾符 class關鍵字 類名{
    //成員變量(屬性)
    //成員方法(行爲)
}

定義類

public class Student{
    String name;//姓名
    int age;//年齡

    //吃飯
    public void eat(){
        System.out.println("吃飯");
    }
}

Student是類名,name和age是成員變量(屬性),定義的方式和聲明普通變量同樣;eat是成員方法(行爲)。spa

建立和使用對象

格式

類名 對象名=new 類名();
public static void main(String[] args){
    //建立Student類實例
    Student s=new Student();
    //使用成員變量
    System.out.println(s.name);//null
    System.out.println(s.age);//0
    //調用eat方法
    s.eat();
}

成員變量的默認值

若是沒有對成員變量進行賦值的話,那麼將會使用它們的默認值code

public class Student {
    int age;
    float weight;
    char sex;
    boolean isMan;
    String name;

    public void eat(){
        System.out.println("吃飯");
    }

    public static void main(String[] args) {
        Student s=new Student();
        System.out.println(s.age);//0
        System.out.println(s.weight);//0.0
        System.out.println(s.isMan);//false
        System.out.println(s.name);//null
        System.out.println(s.sex=='\u0000');//true
    }
}

局部變量

局部變量在方法內部定義對象

public class Student {
    int age;

    public void say(){
          //定義局部變量a
        int a=1;
        System.out.println(a);
    }
      //形參也是局部變量
      public void hel(int a){
      System.out.println(a);
    }
}

成員變量和局部變量的區別

  • 在類中的位置不一樣

    成員變量定義在類中、方法外blog

    局部變量定義在方法中或方法聲明上(形參)接口

  • 做用範圍不一樣生命週期

    成員變量做用範圍是整個類內存

    局部變量的做用範圍是它所在的方法rem

    public class Student {
        int age;
    
        public void say(){
              //定義局部變量a
            int a=1;
            System.out.println(age);
            System.out.println(a);
        }
    
        public void hel(){
            System.out.println(age);
            //System.out.println(a);  沒法訪問到a
        }
    
    }
  • 是否有默認值

    成員變量有默認值

    局部變量沒有默認值,必須定義賦值,而後使用

    public void say(){
            int a;
            //System.out.println(a);  未賦值沒法使用
        }
  • 在內存的位置

    成員變量在堆內存

    局部變量在棧內存

  • 生命週期不一樣

    成員變量隨着對象的建立而存在,隨着對象的消失而消失

    局部變量隨着方法的調用而存在,方法調用完畢它便消失

封裝概述

封裝是指將數據和操做數據的方法綁定起來,對數據的訪問只能經過定義的接口。咱們在類中編寫的方法就是對實現細節的一種封裝;咱們編寫的類就是對數據和數據操做的封裝。

封裝步驟

  • 使用private修飾符將變量修飾爲私有變量(只有本類中能夠訪問)
  • 對外提供公有的能夠訪問私有變量的方法,如getXXX()方法和setXXX()方法

    public class Test1 {
        public static void main(String[] args) {
            Person p=new Person();
            //System.out.println(p.name);  沒法直接訪問
            System.out.println(p.getName());//null 只能經過對外提供的接口進行訪問
        }
    }
    
    class Person{
        private String name;
        private int age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }

    注意

    一個.java文件中能夠定義多個類,可是隻能有一個類使用public修飾符

    this關鍵字表明正在操做的那個對象,this.name表示該對象的成員變量name,區別於局部變量name

構造方法

咱們知道,想要使用對象內的東西,必需要先使用new關鍵字建立對象,那麼它是怎麼建立出來的呢?答案就是構造方法,但是咱們的類中沒有定義構造方法啊?雖然沒有定義,可是咱們每一個類都有一個默認值的無參構造方法,咱們在new對象的時候就會調用構造方法。那麼咱們該如何定義本身的構造方法呢?

#### 格式

【修飾符】 類名(【參數列表】){
    //代碼
  }

#### 注意點

    • 構造方法的名字必須和類名一致
    • 構造方法沒有返回值(實際上是省略了,由於構造方法只能返回本類的類型)
    • 一旦本身DIY了構造方法,那麼默認的無參構造方法就無效了
    • 沒有參數列表的是無參構造方法,有參數列表的是有參構造方法
    • 咱們能夠在一個類中定義多個構造方法

      public class Test1 {
             public static void main(String[] args) {
                //使用無參構造建立對象
                 Person p1=new Person();
                 //使用有參構造建立對象
                 Person p2=new Person("張三");
             }
         }
      
         class Person{
             private String name;
             private int age;
      
             //無參構造方法
             public Person(){
                 System.out.println("我是無參構造方法");
             }
      
             //我是有參構造方法
             public Person(String name){
                 System.out.println(name);
                 System.out.println("我是有參構造方法");
             }
      
         }
    執行結果:

    我是無參構造方法
    張三
    我是有參構造方法

    #### 使用構造實現封裝

    前面經過編寫setXXX方法和getXXX方法以及私有化成員變量實現封裝,這裏咱們經過構造方法實現封裝

    class Person{
           private String name;
           private int age;
    
           //無參構造方法
           public Person(){
               System.out.println("我是無參構造方法");
           }
    
           //我是有參構造方法
           public Person(String name,int age){
               System.out.println("我是有參構造");
               this.name=name;
               this.age=age;
           }
       }
       public class Test1 {
           public static void main(String[] args) {
              //使用無參構造建立對象
               Person p1=new Person();
               //使用有參構造建立對象
               Person p2=new Person("張三",23);
           }
       }

    咱們沒法訪問對象的成員變量(屬性),只能經過構造進行訪問

    JavaBean

    JavaBean是java語言編寫類的一種標準規範,符合JavaBean`的類必需要知足如下條件:

    • 類必須是具體和公開的(使用public修飾)

      • 類必須有無參構造方法(有參構造建議加上)
    • 必需要有操做成員變量的setXXX方法和getXXX方法

      class Person{
             private String name;
             private int age;
      
             //無參構造方法
             public Person(){
                 System.out.println("我是無參構造方法");
             }
      
             //我是有參構造方法
             public Person(String name,int age){
                 System.out.println("我是有參構造");
                 this.name=name;
                 this.age=age;
             }
      
             public String getName() {
                 return name;
             }
      
             public void setName(String name) {
                 this.name = name;
             }
      
             public int getAge() {
                 return age;
             }
      
             public void setAge(int age) {
                 this.age = age;
             }
         }

    最後

    感謝你看到這裏,文章有什麼不足還請指正,以爲文章對你有幫助的話記得給我點個贊,天天都會分享java相關技術文章或行業資訊,歡迎你們關注和轉發文章!

    相關文章
    相關標籤/搜索