1. 程式人生 > >Java筆記5——面向物件,類,成員變數,成員方法

Java筆記5——面向物件,類,成員變數,成員方法

接下來進入Java語言中的重要的部分:面向物件 首先講解一下類的概念: 類:是一組相關的屬性和行為的集合體; 物件:是該類事物的具體體現; 類是java中最小的單位,體現了封裝的思想,封裝了成員變數和方法; 類是一個抽象的概念,不能直接進行呼叫,我們需要建立物件,對其進行例項化後,通過物件呼叫該類的方法和屬性,物件才是該類的具體體現; 面向物件的例子:洗衣服 泡衣服——洗衣粉搓衣服——漂洗衣服——晾衣服 這一系列的動作是面向過程的洗衣服,如果是面向物件洗衣服,我們只需要用一個全自動洗衣機即可,只關注洗衣機,不用關注洗衣機到底是怎樣洗衣服的; 面向物件的特點:封裝,繼承,多型; 學生事物與學生類的對應關係: 學生事物--------------------學生類 屬性--------------------------成員變數 行為--------------------------成員方法

例子1:定義一個學生類 成員變數:姓名,年齡,學號 成員方法:睡覺,吃飯,上課

public class Student{
        String  name"小明";;
        int age=12;
       String  number="130212";

       public void eat(){
           System.out.println("吃飯");
      }
      public  void sleep(){
          System.out.println("睡覺");
    }
      public  void study(){
          System.out.println("上課");
    }   
}

既然定義了類,我們需要再定義一個測試類來呼叫此類: 建立物件格式:類名 物件名=new 類名 成員變數呼叫格式:物件名.變數名 方法呼叫格式:物件名.方法名(…)

public  class StudentTest{
   public static void main(String[] args){
      Student student=new Student();//建立物件
      System.out.println("姓名:"+student.name+",年齡:"+student.age+",學號:"+student.number);
      student.sleep();
      student.eat();
  }
}

2.一般成員變數進行私有化,採用 set ,get 方法設定初值,得到初值。 private 私有的,用它來修飾成員變數,學生類和測試類的程式碼改為如下格式:

public class Student{
       private  String  name;
       private  int age;
       private  String  number;

       public void setName(String name){
          this.name=name;
      }
      public  void setAge(int age){
          this.age=age;
    }
      public  void setNumber(String number){
          this.number=number;
    }   
     public String getName(){
         return name;
    }
    public int  getAge(){
      return age;
   }
    public String getNumber(){
        return number;
    }
}

在測試類中採用set設定初值,get 得到初值

public  class StudentTest{
   public static void main(String[] args){
      Student student=new Student();//建立物件
     student.setName("小明");
     student.setAge(12);
     student.setNumber("130212");
     System.out.println(student.getName());//小明
     System.out.println(student.getAge());//12
    System.out.println(student.getNumber());//130212
   }
}

3.一個類要包含:成員變數,構造方法,成員方法;上面我們介紹了成員變數與成員方法,接下來要說的就是構造方法了 ; 構造方法:名字與類名相同,沒有void ,也沒有return; 可以有引數,稱之為有參構造,也可無引數,稱之為無參構造;在沒有定義構造方法時,系統預設為無參構造;當有確定的有參構造時,系統將不再預設為有無參構造了,如果此時需要用無參構造,需要定義出來; 採用有參構造可以直接在呼叫成員變數時給賦初值; 例如對學生類使用構造方法:

public class Student{
       private  String  name;
       private  int age;
       private  String  number;

      public Student(String name,int age,String number){
                    this.name=name;
                    this.age=age;
                    this.number=number;
    }
       public void setName(String name){
          this.name=name;
      }
      public  void setAge(int age){
          this.age=age;
    }
      public  void setNumber(String number){
          this.number=number;
    }   
     public String getName(){
         return name;
    }
    public int  getAge(){
      return age;
   }
    public String getNumber(){
        return number;
    }
}

測試類如下:

public  class StudentTest{
   public static void main(String[] args){
      Student student=new Student("小明",12,"130212");
     System.out.println(student.getName());//小明
     System.out.println(student.getAge());//12
    System.out.println(student.getNumber());//130212
   }
}

構造方法可以過載,方法名一致,引數不同,呼叫方法時根據引數不同,確定呼叫哪個方法; 4.接下來說下static關鍵字,其意思是靜態的; 在其他的一些成員方法中我們也可以定義為靜態的。但是有幾點需要注意:1.靜態方法中只能訪問靜態成員變數或者靜態成員方法,非靜態方法可以呼叫靜態的,也可以呼叫非靜態的。2.在靜態方法中沒有this關鍵字; static關鍵字的特點:隨著類的載入而載入;優於物件先存在;被類的所有物件所共享。 一般在呼叫static修飾的變數或者方法時,採用類名進行呼叫。 例子2:定義一個國籍為static成員變數,所有人共享這個國籍;

public class GuojiDemo {
    private  String  name;
     static  String guoJi;//國籍是共用的,所以定義為static

    public void setName(String name){
        this.name=name;
    }

    public void setGuoJi(String guoJi){
        this.guoJi=guoJi;
    }

    public String getName(){
        return name;
    }

    public static String getGuoJi(){
        return guoJi;
    }
}

測試類:

public class TestGuoJi {
    public static void main(String[] args) {
        GuojiDemo guoJi1=new GuojiDemo();
        guoJi1.setName("張三");
        guoJi1.setGuoJi("中國");

        System.out.println(guoJi1.getName());
        System.out.println(GuojiDemo.getGuoJi());//被靜態所修飾的成員,推薦使用類名呼叫

        GuojiDemo guoJi2=new GuojiDemo();
        guoJi2.setName("李四");
        guoJi2.setGuoJi("美國");

        System.out.println(guoJi1.getName());
        System.out.println(GuojiDemo.getGuoJi());//靜態記憶體中的中國被美國覆蓋,故輸出不一致

        System.out.println(guoJi2.getName());
        System.out.println(GuojiDemo.getGuoJi());
    }
}

以上是我學習過程中的一些知識點的總結,如果有錯誤的地方,歡迎大家指正評論,希望我們一起學習,一起進步!