全部章節 >>>>
本章目錄
1.1 類和對象
- 類和對象是面向對象編程最重要、最核心的兩個基本概念
- 類是對一類事物描述,是抽象的、概念上的定義
- 對象是實際存在的該類事物的每個個體,因而也稱實例(instance)
1.1.1 類和對象的概念
- 對象表示現實世界中某個具體的事物
- 抽象是從特定的實例中抽取共同的性質以形成一般化概念的過程
- 類是具有共同屬性和行爲的對象的抽象
- 類也稱爲模板,因爲它們提供了對象的基本框架
- 類可以定義爲數據和方法的集合
類和對象的示例
類
- 類以共同特性和操作定義實體
- 類是用於組合各個對象所共有操作和屬性的一種機制
對象的示例
屬性
- 事物的特性在類中表示爲變量
- 每個對象的每個屬性都擁有其特有的值
- 屬性名稱由類的所有實例共享
方法
- 對象執行的操作稱爲方法
- 操作的具體實現
- 方法指定操作對象數據的方式
- 在得到操作請求時指定如何做的算法
方法的實例
1.1.2 類的語法結構
語法:
[修飾符]class類名
{
定義構造方法;
定義屬性;
定義方法;
}
- 修飾符可以是public、final、abstract或完全省略這三個修飾符
- 類名必須是一個合法的標識符
- 類中各成員之間的定義順序對類的定義沒有任何影響
1.1.3 對象的創建和使用
聲明對象
格式:類名 對象名,例如:Hero hero;
實例化對象
格式:對象名 = new 構造方法(),例如:hero = new 構造方法();
屬性的調用
格式:對象名.屬性,例如:hero.name=“zhang san”;
方法的調用
格式:對象名.方法名([參數列表]),例如:hero.run(30)”;
示例:創建一個英雄對象並測試該對象屬性的賦值和方法調用
public class Hero {
String name; //名字
//奔跑方法
public void run(int speed){
System.out.println(speed+"m/s的速度飛速狂奔");
}
public static void main(String[] args) {
//創建英雄對象
Hero hero = new Hero();
//通過對象實例調用name屬性併爲該屬性賦值
hero.name="黑暗遊俠";
System.out.println("英雄的名字:"+hero.name);
hero1.run(60);//調用hero對象run(speed)方法
}
}
1.1.4 對象和引用
- 對象內容放在堆內存
- 類是一種引用數據類型
- 對象名是一個引用名
- 對象名存放着棧內存I棧內存
- 想比堆內存空間小但讀取速度快
1.1.5 實踐練習
1.2 方法的詳解
- 方法是類或對象的行爲特徵的抽象
- 通過方法可以實現對類的屬性的操作
- 功能封裝
- 實現代碼模塊化重用
1.2.1 方法的聲明
語法:
[<修飾符>] 返回類型 方法名([參數列表])
{
方法體
}
- 修飾符表示方法的訪問權限。修飾符有private、缺省訪問修飾符、protected和public
- 返回類型爲方法返回值的類型(方法沒有返回值,則方法的返回類型爲void)
- 參數列表表示方法調用時應該傳遞的參數個數和類型。
- 定義時爲形參,它沒有分配內存,運行時才分配內存
- 如果有多個參數,相鄰的參數之間用逗號隔開
- 對於有返回值的方法,方法體中至少有一條return語句
- 方法不能嵌套定義
示例:在英雄類中設計一個戰鬥方法
class Hero {
// 定義戰鬥方法
void battle(){
/*實現具體的英雄戰鬥的業務邏輯*/
}
}
1.2.2 方法調用
在main方法中調用對象的實例方法步驟:
- 在類的main0方法中創建可以調用方法的實例
- 將實例賦值給指定的引用變量,通過引用“變量.方法名”的形式調用方法
說明:如果方法的返回類型爲void,說明方法沒有返回值,所以在main0方法中調用時,可以將此方法作爲一條語句直接在程序中使用
示例:在英雄類中定義戰鬥方法並測試該方法的調用
public class Hero{
String name;
int age;
public void battle(){
System.out.println(name+"在肆無忌憚的戰鬥他的年齡才只有"+age+"可
他的血量只有1%了...");
}
public static void main(String[] args) {
Hero hero = new Hero();//創建英雄對象
hero.name="暗夜魔王";//爲name屬性賦值
hero.age = 15;//爲age屬性賦值
hero.battle();//使用該對象的battle()方法
}
}
1.2.3 方法參數傳遞
參數的傳遞是指實際參數向形參值的傳遞的過程。
Java中方法參數的傳遞方式爲值傳遞。
將實參的副本(複製品)傳入給形參
實參本身不會受到任何影響
解釋:
Java中的參教傳遞類似於Dota遊戲中英雄使用的幻象
當英雄使用幻象時就會產生一個與該英雄相同的複製品
幻象與英雄本身有相同的能力
但無論該幻象受到任何攻擊和傷害都不會影響英雄本身
傳入方法的是實參值的複製品,無論方法中對該複製品進行何種操作,實際參數值均不會受到任何影響
示例:方法參數傳遞過程結果示例
public class Parameter {
//該方法用於在方法中互換形參值
public void change(String x,String y){
String temp;//定義一個臨時變量
System.out.println("***形參改變之前***");
System.out.println("x="+x+"\t"+"y="+y);
//形參值互換
temp=x;//將x值賦值給變量temp
x=y;//將變量y值賦值給變量x
y=temp;//將temp值賦值給變量y
System.out.println("***形參值互換後***");
System.out.println("x="+x+"\t"+"y="+y);
}
public static void main(String[] args){
Parameter param=new Parameter();//創建Parameter實例
String a="10",b="20";
System.out.println("---調用change()方法前---");
System.out.println("a="+a+"\t"+"b="+b);
param.change(a, b);//調用方法
System.out.println("---調用change()方法後---");
System.out.println("a="+a+"\t"+"b="+b);
}
}
分析:
在調用方法之後,a、b的值仍然爲10和20
即使形式參數的值改變了,但實際參數的值不會改變
1.2.4 實踐練習
1.3 可變形參方法
從JDK1.5之後,Java允許定義形參個數可變的參數,從而允許爲方法指定數量不確定的形參。如果在定義防法時,在最後一個形參的類型後增加三點“…”,則表明該形參可以接受多個參數值,多個參數值被當成數組傳入。
可變形參方法類似於爲方法傳了一個數組,且在使用方法上也和數組相同
1.3.1 可變方法聲明
語法:
[<修飾符>] 返回類型 方法名 (變量類型..變量名)
{
方法體
}
可變參數只能出現在參數列表的最後
“...” 位於變量類型和變量名之間,前後有無空格都可以
調用可變參數的方法時,編譯器爲該可變參數隱含創建一個數組,在方法體中以數組的形式訪問可變參數
1.3.2 可變方法調用
示例:可變形參方法調用
public class VarargsTest {
//定義形參個數可變的方法
public static void testVarargs(int x, String...users) {
for (String user: users) {
System.out.println(user);
}
}
public static void main(String[] args) {
//採用可變個數形參的方法調用
testVarargs(3,"張小文", "王藝儒", "李晨生");
}
}
示例:採用數組形參定義方法
public class ArrayTest {
//採用數組形參來定義方法
public static void testArray(String[] users) {
//users當成數組處理
for (String user : users) {
System.out.println(user);
}
}
public static void main(String[] args) {
//採用數組形參的方法調用
testArray(new String[]{"張小文", "王藝儒", "李晨生"});
}
}
1.3.3 可變參數與數組參數的比較
1、定義方式不一樣
public static void testVarargs(String…users);//可變形參
public static void testArray(Stringll users);//數組形參
2、調用方式不一樣
testVarargs(“張小文”,”王藝儒”,“李晨生”;//可變形參
testArray(new String[] {“張小文”,“王藝儒”,“李晨生”});//數組形參
3、參數位置不一樣
數組形式的參數可以處於形參列表的任意位置
個數可變的形參處於形參列表的最後,即一個方法中最多只能有一個個數可變的形參
1.3.4 實踐練習
1.4 構造方法
1.4.1 構造方法的定義
- 構造方法是一種特殊的方法
- 它是一個與類同名且返回值類型爲同名類類型的方法
- 對象的創建就是通過構造方法來完成,其功能主要是完成對象的初始化當類實例化一個對象時會自動調用構造方法
- 構造方法和其他方法一樣也可以重載。
1.4.2 構造方法的特點
- 構造方法的功能主要用於在類的對象創建定義時進行狀態的初始化
- 構造方法的命名必須和類名完全相同。構造方法沒有返回值,也不能用void來修飾在Java中普通方法可以和構造方法同名,但是必須帶返回值
- 構造方法不能直接調用,必須通過new運算符在創建對象時纔會自動調用
- 當定義一個類的時候,通常情況下都會顯示該類的構造方法,並且在方法中指定初始化的工作也可以省略,不過Java編譯器會提供一個默認的構造方法,此默認構造函數是不帶參數的,而一般方法不存在這一特點
1.4.3 實踐練習
總結:
- 類是具有共同屬性和行爲的對象的抽象,對象是類的具體實例
- 類是一個具有自身屬性和行爲的獨立單位。方法的四個要素是:方法名、參數列表、返回類型和訪問修飾符
- 構造方法是一類名稱與類同名,且沒有返回類型的特殊方法
- 對象的創建就是通過構造方法來完成,其功能主要是完成對象的初始化
- 使用“對象名.屬性”引用屬性,以及“對象名.方法(參數列表)”調用方法
- 如果在定義方法時,在最後一個形參的類型後增加三點“...”,則表明該形參
- 可以接受多個參數值,多個參數值被當成數組傳入