Java: 面向對象程序設計(上)

1. 類java

類主要包含3個部分:編程

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

 

類的定義:數組

【修飾符】 class 類名 【extends 父類名】 【implements 接口名】編程語言

{this

  類成員變量的聲明;spa

  類方法聲明;命令行

}code

 

.java源文件結構:對象

Java程序的源文件是一個以「.java」結尾的文件,同時該文件中只能有一個類被聲明爲public類,若存在被聲明爲public的類時,類的名字必須與「.java」源文件名相同。blog

在一個源文件中,能夠包含三種頂層元素: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。

若是一個類中沒有定義類的構造方法,系統會自動爲這個類建立一個缺省的默認構造器,該構造器參數及方法均爲空。

 

參數的傳遞:

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

  • 基本類型參數所傳遞的都是基本數據類型,包括數值型、布爾型等。在這種狀況下全部的參數傳遞都採用值傳遞的方式。也就是說,當傳遞一個參數到方法中時,方法得到的只是該參數值的一個拷貝。所以,方法不會改變參數變量的值,只會使用該變量的值。
    • 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

 

成員方法重載與過載:

    • Overriding:是面嚮對象語言的特性,只存在於父類和子類之間。當父類中的一個方法在繼承它的子類中從新得到定義時,若該方法的方法名、參數、返回值類型均不變,只有方法體發生了變化時,就稱子類的方法重載了父類的方法。
    • Overloading,是編程語言均有的特性,與面向對象無關,存在於同一個類中。指的是多個方法擁有同一個名字,每一個方法都有一套惟一的、不一樣於其餘同名方法的參數列表。
    • 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關鍵字用於基本數據類型變量前,這時表面該關鍵字修飾的變量是一個常量,在定義後,該變量的值就不能再被改變,同時在定義時必須被初始化
  • 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","wangxyue@cn.ibm.com");
        customer[1]=new Customer("c002", "Xu Quan", "ShangHai", "chunticha@yahoo,com");
        customer[2]=new Customer("c003", "Xu Guang Yang", "BeiJing", "xugy@hotmail.com");
        
        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:wangxyue@cn.ibm.com

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

customer[2]CardID: c003name: Xu Guang Yangcost: 980.0discount: 10.0address:BeiJingemail:xugy@hotmail.com

相關文章
相關標籤/搜索