Java: 物件導向程式設計

來源:互聯網
上載者:User

標籤:

1. 類

類主要包含3個部分:

  • 類屬性:用來描述類本身所抽象出的事物的屬性
  • 類方法:用來描述這個被抽象出的事物可以做什麼
  • 構造方法:每個類都至少會有一個特殊的方法,該方法提供了建立類對象的初始化機制

 

類的定義:

【修飾符】 class 類名 【extends 父類名】 【implements 介面名】

{

  類成員變數的聲明;

  類方法聲明;

}

 

.java源檔案結構:

Java程式的源檔案是一個以“.java”結尾的檔案,同時該檔案中只能有一個類被聲明為public類,若存在被聲明為public的類時,類的名字必須與“.java”源檔案名稱相同。

在一個源檔案中,可以包含三種頂層元素:package(包聲明)、import(類庫匯入語句)、class(類聲明)。如果同時出現,必須按照package、import、class的順序出現。

 

main()入口方法:

public static void main(String argv[])    {}

main()方法中的字串數組arvg[]是用來從命令列接收使用者參數的。

採用命令列執行Java程式的語句由四個部分組成:命令名,命令參數(是可選的),應用程式的名稱(即源檔案中的主類類名),使用者輸入的參數(多個參數之間用空格分隔)

 

存取修飾詞public、private、protect、default

  • public:可以跨類訪問,而且可以跨包訪問
  • private:存取權限限制最窄的修飾符。只能被該類的對象訪問,其子類不能訪問,更不允許跨包訪問
  • proctet:能被類本身的方法及子類方法訪問,即使子類在不同的包中也可以訪問
  • default:只允許在同一個包中進行訪問

 

構造方法:

構造方法的名字和類的名字是相同的,並且沒有任何類型的傳回值,在構造方法前,只可以使用存取修飾詞public,private及protected。

如果一個類中沒有定義類的構造方法,系統會自動為這個類建立一個預設的預設構造器,該構造器參數及方法均為空白。

 

參數的傳遞:

傳遞的參數共有如下兩種:

  • 基本型別參數所傳遞的都是基礎資料型別 (Elementary Data Type),包括數值型、布爾型等。在這種情況下所有的參數傳遞都採用值傳遞的方式。也就是說,當傳遞一個參數到方法中時,方法獲得的只是該參數值的一個拷貝。因此,方法不會改變參數變數的值,只會使用該變數的值。
    • public class Example1 {        public static void add(int a, int b)    {        int c=a+b;        System.out.println("c="+c);        a=c;    }    public static void main(String[] args) {        int a=10;        int b=20;                add(a,b);        System.out.println("a="+a);    }}

      c=30
      a=10

  • 對象引用型參數,方法中獲得的是該對象的記憶體位址,因此方法可以改變該對象中的屬性,但是不能改變對象本身。
  • public class Example2 {        public static void change(String str, char ch[])    {        str="Changed";        ch[0]=‘C‘;    }    public static void main(String[] args) {        String s=new String("World");        char ch[]={‘H‘,‘e‘,‘l‘,‘l‘,‘o‘};                change(s,ch);        System.out.println(s+ " and "+ String.valueOf(ch));    }}

    World and Cello

 

成員方法重載與過載:

    • 方法重載:是物件導向語言的特性,只存在於父類和子類之間。當父類中的一個方法在繼承它的子類中重新獲得定義時,若該方法的方法名、參數、傳回值類型均不變,只有方法體發生了變化時,就稱子類的方法重載了父類的方法。
    • 方法過載,是程式設計語言均有的特性,與物件導向無關,存在於同一個類中。指的是多個方法擁有同一個名字,每個方法都有一套唯一的、不同於其他同名方法的參數列表。
    • public class Example {    int a=10;    int b=20;    int c=30;        public Example()    {        System.out.println("a+b="+add(a,b)); System.out.println("a+b+c="+add(a,b,c)); } public int add(int x, int y) { return x+y; } public int add(int x, int y, int z) { return x+y+z; } public static void main(String[] args) { new Example(); }}

      a+b=30
      a+b+c=60

 

static靜態成員:

static關鍵字可以用來修飾成員變數、方法以及代碼模組。使用static修飾過的變數、方法都稱之為靜態成員。靜態成員附屬於類本身,而不附屬於類的成員變數。

需要注意的是,靜態方法中不能直接存取非靜態成員變數。

public class StaticExample1 {        static int num=10;    public static void main(String[] args) {        System.out.println(StaticExample1.num);    }}
public class StaticExample2 {        public static void showString()    {        System.out.println("This is a static method.");    }    public static void main(String[] args) {        //不建立類的情況下,直接調用類中的靜態方法        StaticExample2.showString();    }}

 

final關鍵字:

final關鍵字可以用於類、方法、變數前,用來表示該關鍵字所修飾的類、方法、變數具有不可變的特性。

  • final關鍵字用於基礎資料型別 (Elementary Data Type)變數前,這時表面該關鍵字修飾的變數是一個常量,在定義後,該變數的值就不能再被改變,同時在定義時必須被初始化
  • final關鍵字用於方法聲明前,被final修飾的方法被稱為最終方法,該方法只能被調用,不能被重載,但是可以被過載
  • final關鍵字用於類名前,final關鍵字修飾的類被稱為最終類,該類不能被其他類繼承
public class FinalExample {    static final double pie=3.14;        public static void circularityArea(String r)    {        double radius=Double.valueOf(r).doubleValue();        System.out.println("The circularity‘s area is: "+ pie*radius*radius);    }        public static void circularityPerimeter(String r)    {        double radius=Double.valueOf(r).doubleValue();        System.out.println("The circularity‘s area is: "+ pie*radius*2);    }    public static void main(String[] args) {        if(args.length!=1)        {            System.out.println("Error!");            System.exit(0);        }                System.out.println("The circularity‘s radius is: "+args[0]);                circularityArea(args[0]);        circularityPerimeter(args[0]);    }}

 

判斷對象所屬類:

  • 擷取對象所屬類的名字:String name = 對象名.getClass().getName();
  • 使用instanceof運算子的文法格式: boolean bool = 對象名 instanceof 類名;

 

實戰練習:

簡單類比一個商店客戶折扣卡的功能,自訂Customer類用來儲存某個商店中的客戶的折扣卡資訊。在主類CustomerDemo中,建立Customer類的一個數組對象,該資料對象中包含了3個Customer對象,用來儲存3個不同的消費者各自持有的折扣卡資訊。通過這3個對象,可以根據使用者消費的金額來改變使用者在本店中所能享受的折扣價格。

public class CustomerDemo {        Customer customer[] = new Customer[3];        public CustomerDemo()    {        customer[0]=new Customer("c001", "wangxyw","BeiJing","[email protected]");        customer[1]=new Customer("c002", "Xu Quan", "ShangHai", "[email protected],com");        customer[2]=new Customer("c003", "Xu Guang Yang", "BeiJing", "[email protected]");                customer[0].buy(2800.00);        customer[0].setDiscount();                customer[1].buy(1688.00);        customer[1].setDiscount();                customer[2].buy(980.00);        customer[2].setDiscount();                for(int i=0; i<customer.length;i++)        {            System.out.println("customer[" + i + "]");            System.out.println("CardID: "+customer[i].getCardID());            System.out.println("name: "+ customer[i].getName());            System.out.println("cost: "+ customer[i].getCost());            System.out.println("discount: "+ customer[i].getDiscount()*10);            System.out.println("address:" + customer[i].getAddress());            System.out.println("email:" + customer[i].getEmail()+ "\n");        }                    }    public static void main(String[] args) {        new CustomerDemo();    }}class Customer{    private String cardID;    private String name;    private double cost=0;    private String address;    private String email;    private double discount = 1;        public Customer(String id, String name, String add, String email)    {        cardID=id;        this.name=name;        address=add;        this.email=email;    }        //用於購買商品後,增加使用者消費值    public void buy(double cost)    {        this.cost+=cost;    }        //根據使用者的消費額度來改變使用者所能享受的折扣    public void setDiscount()    {        if(cost>2000.00)            discount-=0.1;        else if(cost>1000.00)            discount-=0.05;    }        //用於擷取和設定使用者地址的方法    public String getAddress()    {        return address;    }    public void setAddress(String address)    {        this.address=address;    }        //用於擷取和設定使用者卡號的方法    public String getCardID()    {        return cardID;    }    public void setCardID(String cardID)    {        this.cardID=cardID;    }        //用於擷取使用者消費金額的方法    public double getCost()    {        return cost;    }        //用於擷取使用者的折扣值得方法    public double getDiscount()    {        return discount;    }        //用於擷取和設定使用者信箱地址的方法    public String getEmail()    {        return email;    }    public void setEmail(String email)    {        this.email=email;    }        //用於擷取和設定使用者名稱的方法    public String getName()    {        return name;    }    public void setName(String name)    {        this.name=name;    }}

customer[0]
CardID: c001
name: wangxyw
cost: 2800.0
discount: 9.0
address:BeiJing
email:[email protected]

customer[1]
CardID: c002
name: Xu Quan
cost: 1688.0
discount: 9.5
address:ShangHai
email:[email protected],com

customer[2]
CardID: c003
name: Xu Guang Yang
cost: 980.0
discount: 10.0
address:BeiJing
email:[email protected]

 

Java: 物件導向程式設計

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.