Java語言——類

weixin_34194087發表於2017-06-05

在Java語言中經常提到類和物件,實質上可以將類看作是物件的載體,它定義了物件所具有的功能。物件導向程式設計具有以下特點:封裝性、繼承性和多型性。


5350030-ed8675676958e184.jpg
Java語言

一、類

1.成員變數

在Java中物件的屬性也稱為成員變數。成員變數宣告在類體中,區域性變數宣告在方法體中。示例程式碼如下:

package com.example;

public class Book {
   private String name;//定義一個String型的成員變數
   public String getName(){//定義一個getName()方法
       int id=0;//區域性變數
       setName("java");//呼叫類中其他方法
       return id+this.name;//設定方法返回值
   }
   private void setName(String name){
       this.name=name;
   }
   public Book getBook(){
       return this;//返回Book類引用
   }
}

2.成員方法

在Java語言中使用成員方法對應於類物件的行為。上述程式碼為例,Book類中包含了getName()和setName()兩個方法。定義成員方法的語法格式如下:

許可權修飾符  返回值型別  方法名(引數型別  引數名){
              ...//方法體
             return  返回值;
}

一個成員方法可以有引數,這個引數可以是物件也可以是基本資料型別的變數,同時成員方法有返回值和不返回任何值的選擇,如果方法需要返回值可以在方法體中使用return關鍵字,使用這個關鍵字後,方法的執行將被終止。在成員方法中可以呼叫其他成員方法和類成員變數。如果一個方法中含有與成員變數同名的區域性變數,則方法中對這個變數的訪問以區域性變數進行。

3.許可權修飾符

Java中的許可權修飾符主要包括private、public和protected,這些修飾符控制著對類和類的成員變數以及成員方法的訪問。如下圖所示:

5350030-29883f5a389341d3.jpg
Java語言中的修飾符許可權

如果一個類的成員變數或成員方法被修飾為private,則該成員變數只能在本類中被使用,在子類中是不可見的,並且對其他包的類也是不可見的。如果將類的成員變數和成員方法的訪問許可權設定為public,那麼除了可以在本類使用這些資料之外,還可以在子類和其他包的類中使用。如果一個類的訪問許可權被設定為private,這個類將隱藏其內的所有資料,以免使用者直接訪問它。

4.區域性變數

如果在成員方法中定義一個變數,那麼這個變數被稱為區域性變數。如下程式碼所示,getName()方法中的id變數即為區域性變數。實際上方法中的形參也可以作為一個區域性變數,如在定義setName(String name)方法時,String name這個形參就被看作是區域性變數。區域性變數是在方法被執行時建立,在方法執行結束時銷燬。區域性變數在使用時必須進行賦值操作或被初始化,否則會出現編譯錯誤。

   public String getName(){//定義一個getName()方法
       int id=0;//區域性變數
       setName("java");//呼叫類中其他方法
       return id+this.name;//設定方法返回值
   }

5.區域性變數的有效範圍

區域性變數的有效範圍又可以稱為變數的作用域,區域性變數的有效範圍從該變數的宣告開始到該變數的結束為止。如下圖所示:

5350030-2dc8321a3bf92e22.jpg
區域性變數的作用範圍

6.this關鍵字

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

在上述程式碼中,成員變數與setName()方法中的形參的名稱相同,都為name。在Java語言中,規定使用this關鍵字來代表本類物件的引用,this關鍵字被隱式的用於引用物件的成員變數和方法。this可以呼叫成員變數和成員方法,但在Java語言中最常規的呼叫方式是使用“物件.成員變數”或“物件.成員方法”進行呼叫。

二、類的構造方法

構造方法是一個與類同名的方法,物件的建立就是通過構造方法完成的。每當類例項化一個物件時,類都會自動呼叫構造方法。構造方法的特點如下:
(1)構造方法沒有返回值。
(2)構造方法的名稱要與本類的名稱相同。
構造方法的定義語法格式如下:

public book(){
  //...構造方法體
}

public:構造方法修飾符。
book:構造方法的名稱。
在構造方法中可以為成員變數賦值,這樣當例項化一個本類物件時,相應的成員變數也將被賦值。如果類中沒有明確定義構造方法,編譯器會自動建立一個不帶引數的預設構造方法。

三、靜態變數、常量和方法

由static修飾的變數、常量和方法被稱作靜態變數、常量和方法。被宣告為static的變數、常量和方法被稱為靜態成員。靜態成員屬於類所有,區別於個別物件,可以在本類或其他類使用類名和“.”運算子呼叫靜態成員。語法如下:

類名.靜態類成員

示例程式碼如下:

package com.example;

public class StaticTest {
 static double PI=3.1415;//在類中定義靜態常量
 static int id;//在類中定義靜態變數
 public static void method1(){//在類中定義靜態方法
     //doSomething
 }
 public void method2(){//在類中定義非靜態方法
     System.out.println(StaticTest.PI);//呼叫靜態常量
     System.out.println(StaticTest.id);//呼叫靜態變數
     StaticTest.method1();//呼叫靜態方法
 }
}

在Java語言中對靜態方法有兩點規定:
(1)在靜態方法中不可以使用this關鍵字。
(2)在靜態方法中不可以直接呼叫非靜態方法。

四、類的主方法

主方法是類的入口點,它定義了程式從何處開始;主方法提供對程式流向的控制,Java編譯器通過主方法來執行程式。主方法的語法如下:

public static void main(String[] args){
//方法體
}

主方法具有以下特性:
(1)主方法是靜態的,所以如要直接在主方法中呼叫其他方法,那該方法必須也是靜態的。
(2)主方法沒有返回值。
(3)主方法的形參為陣列。其中args[0]~args[n]分別代表程式的第一個引數到第n個引數,可以使用args.length獲取引數的個數。

5350030-2602ab9db58e9df1.jpg
學習是一件很快樂的事,這種快樂來自於你的思考。完成一項學習任務固然重要,但更重要的是在完成的過程中學到了什麼,掌握了什麼,遇到一些什麼問題,為什麼會出現這種問題,根源是什麼,都有哪些解決方案,什麼樣的情況適合這個方案。只有在不斷的思考,你的能力才會有所提升!

相關文章