天天看點

*小回顧—類(Class)和對象(Object)Java 對象和類

Java 對象和類

Java 作為作為一種面向對象語言。支援以下基本概念:

@多态

@繼承

@封裝

@抽象

@類

@對象

@執行個體

@方法

@重載

本節我們重點研究對象和類的概念。

對象:對象是類的一個執行個體(對象不是找個女朋友),有狀态和行為。

例如:一條狗是一個對象,它的狀态有:顔色、名字、品種;行為有:搖尾巴、叫、吃

等。

類:類是一個模闆,它描述一類對象的行為和狀态。

下圖中男孩女孩為類,而具體的每個人為該類的對象:

*小回顧—類(Class)和對象(Object)Java 對象和類

一、Java中的類

類的定義:即類可以看成是建立Java對象的模闆,是一個獨立的程式機關,它描述一類對象的行為和狀态。類是具有相同屬性和服務的一組對象的集合。

類名一般首字母大寫,遵循駝峰命名法。即辨別符是由多個單詞組成的,每個單詞的首字母大寫。

例如:MaxValue、AlarmClock都符合駝峰命名法。

類聲明的文法:

[修飾符] class 類名{ }

例如:

public class Student{

String name;

String sex;

int  age;

}

public class Dog{
  // 成員變量
  String breed;
  int age;
  String color;
  
  public Dog() {
  //構造方法
  }

  //成員方法
  void barking(){
  }
 
  void hungry(){
  }
 
  void sleeping(){
  }
}
           

一個類包含三種屬性:成員變量、構造方法、成員方法。

1.類的變量類型:

局部變量:在方法、構造方法或者語句塊中定義的變量被稱為局部變量。變量聲明和初始化都是在方法中,方法結束後,變量就會自動銷毀。

成員變量:成員變量是定義在類中,方法體之外的變量。這種變量在建立對象的時候執行個體化。成員變量可以被類中方法、構造方法和特定類的語句塊通路。

類變量(也叫靜态變量):類變量也聲明在類中,方法體之外,但必須聲明為static類型。

注:一個類可以擁有多個成員方法,在上面的例子中:barking()、hungry()和sleeping()都是Dog類的成員方法。

2.構造方法:

每個類都有構造方法。如果沒有顯式地為類定義構造方法,Java編譯器将會為該類提供一個預設構造方法(預設的構造方法不帶參數)。

在建立一個對象的時候,至少要調用一個構造方法。構造方法的名稱必須與類同名,一個類可以有多個構造方法。

下面是一個構造方法示例:

public class Puppy{

public Puppy(){

    // 預設構造方法無參數

    }

    public Puppy(String name){

        // 重構一個帶參數的構造方法,這個構造器僅有一個參數:name

    }

}

注意:

(1).構造方法名與類名相同。

(2).構造方法沒有傳回類型。

(3).構造方法名的調用必須通過new關鍵字調用。

3.成員方法:

成員方法的定義格式:

void 方法名稱 (){

// 方法内容;

}

需要說明的是成員方法的定義必須在類中。

下面是成員方法的定義執行個體:

class Student{
      String name;
      String sex;
      int age;
      
      void study(){
        System.out.println("studying...");
}

      void display(){
        System.out.println("student name="+name);
        System.out.println("student sex="+sex);
        System.out.println("student age="+age);
   
   }
}
           

以上程式定義了Student類,Student類具有name、age和sex這3個成員表量,還具有study和display兩個成員方法(即Student類具有三個靜态的狀态,兩個動态行為)。

定義成員方法後,調用方法時使用“對象名.方法名()”來調用;比如要調用Student類中定義的study()和display()方法,可以寫成:

public class Test{
      public static void main(String[] args){

        Student stu = new Student();
        
        stu.name = "小明";
        stu.sex = "男";
        stu.age= 18;
        stu.display();  // 方法的調用
        stu.study();  // 方法的調用

  }

}
           

二、Java中的對象

現在讓我們深入了解什麼是對象。看看周圍真實的世界,會發現身邊有很多對象,車,狗,人等等。所有這些對象都有自己的狀态和行為。

拿一條狗來舉例,它的狀态有:名字、品種、顔色,行為有:叫、搖尾巴和跑。

對比現實對象和軟體對象,它們之間十分相似。軟體對象也有狀态和行為。軟體對象的狀态就是屬性,行為通過方法展現。在軟體開發中,方法操作對象内部狀态的改變,對象的互相調用也是通過方法來完成。

1.對象的定義:

對象是系統中用來描述客觀事物的一個實體,是構成系統的基本機關。一個對象由一組屬性和對屬性進行操作的一組方法組成。

2.對象的建立:

對象是根據類建立的。在Java中,使用關鍵字new來建立一個新的對象。建立對象需要以下三步:

<1>.對象的聲明:聲明一個對象,包括對象名稱和對象類型。

<2>.對象的執行個體化:使用關鍵字new來建立一個對象。

<3>.對象的初始化:使用new建立對象時,會調用構造方法初始化對象。

下面是一個建立對象的例子:

public class Puppy{

   public Puppy(String name){

      //這個構造器僅有一個參數:name

      System.out.println("小狗的名字是 : " + name ); 

   }

   public static void main(String []args){

      // 下面的語句将建立一個Puppy對象

      Puppy myPuppy = new Puppy( "tommy" );

   }

}

編譯并運作上面的程式,會列印出下面的結果:

小狗的名字是 : tommy

三、我們做來一個簡單的例子

在該例子中,我們建立兩個類:Employee 和 EmployeeTest。

Employee類有四個成員變量:name、age、designation和salary。該類顯示聲明了一個構造方法,該方法隻有一個參數。

Employee.java 檔案代碼:
import java.io.*;
 
public class Employee{
   String name;
   int age;
   String designation;
   double salary;
   // Employee 類的構造器
   public Employee(String name){
      this.name = name;
   }
   // 設定age的值
   public void empAge(int empAge){
      age =  empAge;
   }
   /* 設定designation的值*/
   public void empDesignation(String empDesig){
      designation = empDesig;
   }
   /* 設定salary的值*/
   public void empSalary(double empSalary){
      salary = empSalary;
   }
   /* 列印資訊 */
   public void printEmployee(){
      System.out.println("名字:"+ name );
      System.out.println("年齡:" + age );
      System.out.println("職位:" + designation );
      System.out.println("薪水:" + salary);
   }
}
           

程式都是從main方法開始執行。為了能運作這個程式,必須包含main方法并且建立一個執行個體對象。

EmployeeTest類,該類執行個體化2個 Employee 類的執行個體,并調用方法設定變量的值。

EmployeeTest.java 檔案代碼:
import java.io.*;
public class EmployeeTest{
 
   public static void main(String args[]){
      /* 使用構造器建立兩個對象 */
      Employee empOne = new Employee("RUNOOB1");
      Employee empTwo = new Employee("RUNOOB2");
 
      // 調用這兩個對象的成員方法
      empOne.empAge(26);
      empOne.empDesignation("進階程式員");
      empOne.empSalary(1000);
      empOne.printEmployee();
 
      empTwo.empAge(21);
      empTwo.empDesignation("菜鳥程式員");
      empTwo.empSalary(500);
      empTwo.printEmployee();
   }
}
           

編譯這兩個檔案并且運作 EmployeeTest 類,可以看到如下結果:

$ javac EmployeeTest.java

$ java EmployeeTest 

名字:RUNOOB1

年齡:26

職位:進階程式員

薪水:1000.0

名字:RUNOOB2

年齡:21

職位:菜鳥程式員

薪水:500.0

*小回顧—類(Class)和對象(Object)Java 對象和類