1. 程式人生 > >第1章 面向對象概述

第1章 面向對象概述

java

1.1 面向對象思想
1.1.1 面向過程思想與面向對象思想
A:什麽是面向過程
面向過程,其實就是面向著具體的每一個步驟和過程,把每一個步驟和過程完成,然後由這些功能方法相互調用,完成需求。
例如:吃煎餅果子利用面向過程的思想:
1.學習攤煎餅的技術
2.買材料雞蛋,油,蔥等等
3.開始攤
4.吃
5.收拾
B:什麽是面向對象
面向對象思想就是不斷的創建對象,使用對象,指揮對象做事情。(如果有對象,直接用對象,對我們直接提供服務)
例如:吃煎餅果子利用面向對象的思想

  1. 找會攤煎餅的大媽(創建一個攤煎餅大媽的對象)
  2. 調用其攤煎餅的技能(功能),傳遞進去錢參數
  3. 返回給我們一個煎餅

  4. 1.1.2 面向過程特點與面向對象特點
    A:面向過程:
    強調的是過程,所有事情都需要自己完成
    B:面向對象:
    是一種更符合我們思想習慣的思想(懶人思想,我把事情自己不做,交給別人去做)
    可以將復雜的事情簡單化(對使用者來說簡單了,對象裏面還是很復雜的)
    將我們從執行者變成了指揮者角色發生了轉換
    1.1.2.1 案例代碼一:
package com.itheima_01;
/*
 * 面向對象思想:
 * 面向對象是基於面向過程的編程思想。
 *
 * 面向過程:強調的是每一個功能的步驟
 * 面向對象:強調的是對象,然後由對象去調用功能
 *
 * 面向對象的思想特點:
 * A:是一種更符合我們思考習慣的思想
 * B:可以將復雜的事情簡單化
 * C:將我們從執行者變成了指揮者
 *
 * 舉例:
 * 買電腦:
 * 面向過程:我要買電腦--我要明確買電腦的意義--上網查對應的參數信息--去中關村買電腦--討價還價--買回電腦
 * 面向對象:我要買電腦--班長去給我買電腦--買回電腦
 * 洗衣服:
 * 面向過程:把衣服脫下來--找一個盆--放點洗衣粉--加點水--浸泡10分鐘--揉一揉--清洗衣服--擰幹--晾起來
 * 面向對象:把衣服脫下來--打開全自動洗衣機--扔衣服--按鈕--晾起來
 */
public class Demo {

}

1.2 類與對象及其使用:
1.2.1 類與對象概述:
A:我們學習編程是為了什麽
為了把我們日常生活中實物用學習語言描述出來
B:我們如何描述現實世界事物
屬性 就是該事物的描述信息(事物身上的名詞)
行為 就是該事物能夠做什麽(事物身上的動詞)
C:Java中最基本的單位是類,Java中用class描述事物也是如此
成員變量 就是事物的屬性
成員方法 就是事物的行為
D:定義類其實就是定義類的成員(成員變量和成員方法)
a:成員變量 和以前定義變量是一樣的,只不過位置發生了改變。在類中,方法外。
b:成員方法 和以前定義方法是一樣的,只不過把static去掉,後面在詳細講解static的作用。

E:類和對象的概念
a:類:是一組相關的屬性和行為的集合(我們班所有的同學都具備相同的屬性和行為,比如:姓名,年齡,學習,這樣就把所有的學生成為學生類)
b:對象:是該類事物的具體體現(說某個同學時,他都具備自己特有的屬性和行為)
c:舉例:
類 學生
對象 具體的某個學生就是一個對象
比如:車是一個類,具體的開的奔馳、寶馬,就是對象
1.2.1.1 案例代碼二:

package com.itheima_01;
/*
 * 我們學習編程語言,其實就是為了把現實世界的事物模擬出來,實現信息化。
 *
 * 我們是如何表示現實世界的事物的呢?
 * A:屬性        就是事物的描述信息
 * B:行為        就是事物能夠做什麽
 * 舉例:學生
 *
 * Java語言最基本的單位是類,所以,我們在後面的學習過程中,是通過類來體現現實世界事物的。
 *
 * 類:是一組相關的屬性和行為的集合
 * 對象:就是該事物的具體體現
 * 舉例:
 * 類        學生
 * 對象        班長
 */
public class Demo2 {

}

1.2.2 類與對象案例:
1.2.2.1 學生類案例
1.2.2.1.1 案例代碼三:

package com.itheima_02;
/*
 * 類的定義:
 * 類是用來描述現實世界的事物的
 *
 * 事物:
 * 屬性        事物的描述信息
 * 行為        事物能夠做什麽
 *
 * 類是如何和事物進行對應的呢?
 * 類:
 * 成員變量
 * 成員方法
 *
 * 需求:寫一個學生類
 *
 * 學生事物:
 * 屬性:姓名,年齡...
 * 行為:學習,吃飯...
 *
 * 學生類:
 * 成員變量:姓名,年齡
 * 成員方法:學習,吃飯
 *
 * 成員變量:和我們前面學習過的變量的定義是一樣的。
 * 位置不同:類中,方法外
 * 初始化值:不需要給初始化值
 * 成員方法:和我們前面學習過的方法的定義是一樣的。
 * 去掉static關鍵字
 */
public class Student {
//成員變量
//姓名
String name;
//年齡
int age;
//成員方法
//學習的方法
public void study() {
System.out.println("好好學習,天天向上");
}
//吃飯的方法
public void eat() {
System.out.println("學習餓了要吃飯");
}
}
package com.itheima_02;[/align]/*
 * Student是一個學生事物描述類,main方法不適合放在它裏面。
 *
 * 使用一個類,其實就是使用該類的成員。(成員變量和成員方法)
 * 而我們要想使用一個類的成員,就必須首先擁有該類的對象。
 * 我們如何擁有一個類的對象呢?
 * 創建對象就可以了?
 * 我們如何創建對象呢?
 * 格式:類名 對象名 = new 類名();
 * 對象如何訪問成員呢?
 * 成員變量:對象名.變量名
 * 成員方法:對象名.方法名(...)
 */
public class StudentDemo {
public static void main(String[] args) {
//格式:類名 對象名 = new 類名();
Student s = new Student();
//System.out.println("s:"+s); //com.itheima_02.Student@193c0cf
//直接輸出成員變量值
System.out.println("姓名:"+s.name); //null
System.out.println("年齡:"+s.age); //0
System.out.println("----------");
//給成員變量賦值
s.name = "林青霞";
s.age = 28;
//再次輸出成員變量的值
System.out.println("姓名:"+s.name); //林青霞
System.out.println("年齡:"+s.age); //28
System.out.println("----------");
//調用成員方法
s.study();
s.eat();
}
}

1.2.2.2 手機類案例
1.2.2.2.1 案例代碼四:

package com.itheima_02;
/*
 * 手機類:
 * 成員變量:品牌,價格,顏色...
 * 成員方法:打電話,發短信...
 */
public class Phone {
//品牌
String brand;
//價格
int price;
//顏色
String color;
//打電話
public void call(String name) {
System.out.println("給"+name+"打電話");
}
//發短信
public void sendMessage() {
System.out.println("群發短信");
}
}

package com.itheima_02;
/*
 * 手機類的測試類
 */
public class PhoneDemo {
public static void main(String[] args) {
//創建對象
Phone p = new Phone();
//輸出成員變量值
System.out.println("品牌:"+p.brand);//null
System.out.println("價格:"+p.price);//0
System.out.println("顏色:"+p.color);//null
System.out.println("------------");
//給成員變量賦值
p.brand = "錘子";
p.price = 2999;
p.color = "棕色";
//再次輸出成員變量值
System.out.println("品牌:"+p.brand);//錘子
System.out.println("價格:"+p.price);//2999
System.out.println("顏色:"+p.color);//棕色
System.out.println("------------");
//調用成員方法
p.call("林青霞");
p.sendMessage();
}
}

1.3 對象的內存圖
1.3.1 一個對象的內存圖:

1.3.2 方法公用內存圖:
1.3.2.1 案例代碼五:

package com.itheima_03;
/*
 * 手機類的測試類
 */
public class PhoneDemo2 {
public static void main(String[] args) {
Phone p = new Phone();
p.brand = "小米5s";
p.price = 1999;
p.color = "銀色";
System.out.println(p.brand+"---"+p.price+"---"+p.color);
p.call("林青霞");
p.sendMessage();
Phone p2 = new Phone();
p2.brand = "IPhone7S";
p2.price = 7999;
p2.color = "土豪金";
System.out.println(p2.brand+"---"+p2.price+"---"+p2.color);
p2.call("張曼玉");
p2.sendMessage();
}
}

1.3.3 兩個引用指向同一個對象內存圖:

1.3.3.1 案例代碼六:

package com.itheima_03;
/*
 * 手機類的測試類
 */
public class PhoneDemo3 {
public static void main(String[] args) {
Phone p = new Phone();
p.brand = "OPPO";
p.price = 2999;
p.color = "白色";
System.out.println(p.brand+"---"+p.price+"---"+p.color);
Phone p2 = p;
p2.brand = "魅族";
p2.price = 1999;
p2.color = "藍色";
System.out.println(p.brand+"---"+p.price+"---"+p.color);
System.out.println(p2.brand+"---"+p2.price+"---"+p2.color);
}
}

1.4 成員變量和局部變量區別:
1.4.1 案例代碼七:

package com.itheima_04;
/*
 * 成員變量和局部變量的區別:
 * A:在類中的位置不同
 * 成員變量:類中,方法外
 * 局部變量:方法中或者方法聲明上(形式參數)
 * B:在內存中的位置不同
 * 成員變量:堆內存
 * 局部變量:棧內存
 * C:生命周期不同
 * 成員變量:隨著對象的創建而存在,隨著對象的消失而消失
 * 局部變量:隨著方法的調用而存在,隨著方法的調用完畢而消失
 * D:初始化值的問題
 * 成員變量:有默認值
 * 局部變量:沒有默認值。必須先定義,賦值,最後使用
 */
public class Variable {
int x;
public void show() {
int y = 0;

System.out.println(x);
System.out.println(y);
}
}

第1章 面向對象概述