Java 面向對象(一)面向對象思想


一、面向對象思想

  1、概述

    Java語言是一種面向對象的程序設計語言,而面向對象思想是一種程序設計思想,我們在面向對象思想的指引下,使用Java語言去設計、開發計算機程序。

    這里的對象泛指現實中一切事物,每種事物都具備自己的屬性行為

    面向對象思想就是在計算機程序設計過程中,參照現實中事物,將事物的屬性特征、行為特征抽象出來,描述成計算機事件的設計思想。 它區別於面向過程思想,強調的是通過調用對象的行為來實現功能,而不是自己一步一步的去操作實現。

  2、舉例

    洗衣服:

      •  面向過程:把衣服脫下來-->找一個盆-->放點洗衣粉-->加點水-->浸泡10分鍾-->揉一揉-->清洗衣服-->擰干-->晾起來
      •     面向對象:把衣服脫下來-->打開全自動洗衣機-->扔衣服-->按鈕-->晾起來

    區別:

      •  面向過程:強調步驟如何執行,注重細節。
      •     面向對象:強調對象,(即洗衣機)忽略細節。

  3、特點

    面向對象思想是一種更符合我們思考習慣的思想,它可以將復雜的事情簡單化,並將我們從執行者變成了指揮者 。

    面向對象的語言中,包含了三大基本特征,即 封裝、繼承 和 多態。 

二、類和對象

  1、什么是類

    •     :是一組相關 屬性 行為 的集合。可以看成一類事物的模板,使用事物的屬性特征和行為特征來描述該類事物。
    •    屬性:就是該事物的狀態信息。
    •    行為:就是該事物能夠做什么。

   Demo:

    類:小狗。

    屬性:名字、雌雄、體重、顏色、年齡;

       行為:走、跑、叫、吃、看門

  2、什么是對象

    •  對象是一類事物的具體體現。 對象是類的一個 實例,必然具備該類事物的屬性和行為。

    Demo:

    對象:一個小狗。

    屬性:Tom、公、6kg、黑色、3歲;

    行為:翹着尾巴走,歡快的跑、汪汪的叫、吃骨頭;

  3、類與對象的關系

    •       是對一類事物的描述,是 抽象 的。
    •     對象 是一類事物的實例,是 具體 的。
    •     類是對象的模板,對象是類的實體。 

三、類的定義

  1、事物與類的對比

    現實世界的一類事物:

     屬性:事物的狀態信息。             行為:事物能夠做什么。

    Java 中用 class 描述事物也是如此:

     成員變量:對象事物的 屬性。    成員方法:對應事物的 行為

  2、類的定義格式

    語法格式

[修飾符] class ClassName {
  //成員變量
  //成員方法
  //構造器
  //代碼塊
  //內部類 }
    •   定義類:    就是定義類的成員,包括 成員變量,成員方法,構造器,代碼塊和內部類;
    •       成員變量: 同普通的定義變量一樣,只是位置發生了變化。在類中,方法外面;
    •       成員方法: 同普通的定義方法一樣,(方法前面不需要加 static 關鍵字);
    •       構造器:創建對象時使用;
    •       代碼塊:在類初始化和對象初始化時使用;
    •       內部類:在某個大的事物中,包含一個獨立的小事物;

     Demo:定義一個學生類

 1  public class Student {  2     //成員變量
 3     String  name; // 姓名
 4     int age;      // 年齡
 5    char sex = '男';  //性別   顯示設置屬性的值  6  
 7     // 成員方法
 8      public void study() {  9         System.out.println("我愛學 Java。"); 10  } 11  
12  }

 

     注意

      •   成員變量是直接定義在類當中的,在方法外邊。
      •     成員方法不要寫static關鍵字。  

四、對象的使用

  1、導包

    其實就是指出需要使用的類,在什么位置,在哪個包里面。

    語法格式:

import 包名稱.類名稱;

     注意:如果要使用的類和當前類屬於同一個包的情況下,可以省略導包語句不寫。

  2、創建對象

     語法格式:

類名 對象名 = new 類名();

  3、使用對象

    使用對象訪問類中的成員:

使用成員變量:  對象名.成員變量;
使用成員方法:  對象名.成員方法();

    Demo:

 1 public class Test01_Student {  2   public static void main(String[] args) {  3   //創建對象格式:類名 對象名 = new 類名();
 4   Student s = new Student();  5   System.out.println("s:"+s);  // Student@100363 地址值  6 
 7   //直接輸出成員變量值
 8   System.out.println("姓名:"+s.name); //null
 9   System.out.println("年齡:"+s.age); //0 10 
11   //給成員變量賦值
12   s.name = "趙麗穎"; 13   s.age = 18; 14   //再次輸出成員變量的值
15   System.out.println("姓名:"+s.name); //趙麗穎
16   System.out.println("年齡:"+s.age); //18 17 
18   //調用成員方法
19   s.study(); // "我愛學 Java"
20   
21 }

   注意

    (1)可以在類中給成員變量賦值,稱為顯示賦值,這樣新建對象后,類中的值就是該對象屬性的初始值。

    (2)如果成員變量沒有進行賦值,那么將會有一個默認值,規則如下:

    

  數據類型 默認值
基本類型 整數(byte,short,int,long) 0
浮點數(float,double) 0.0
字符(char) '\u0000'
布爾(boolean) false
引用類型 數組,類,接口,字符串 null

五、對象內存圖

  1、一個對象,調用一個方法內存圖

    

    分析:通過上圖,可以得知在 棧 內存中運行的方法,遵循“先進后出,后進先出” 的原則。

    在 main 方法中,變量 one 指向的是 堆中對象的地址,而堆中的對象的成員方法指向的又是方法區中 .class  文件的成員方法的地址。

 

  2、兩個對象,調用同一方法內存圖

     

     分析:多個對象調用方法時,根據對象中方法標記(地址值),去類中尋找方法信息。這樣哪怕是多個對象,方法信息只保存一份,節約內存空間。

 

  3、兩個引用指向同一對象的中內存圖

     

   分析:通過上圖可知,雖然創建了兩個引用變量,但實際在堆中只創建了一個對象,兩個引用變量都指向這個對象,而且都能夠修改此對象的成員變量和調用成員方法。

 

六、對象作為參數和返回值

  1、作為參數

    

 

  2、作為返回值

    

    總結:對象類型作為方法的參數與返回值的時候,傳遞的其實都是 地址值

七、成員變量和局部變量區別

  1、圖解

    變量根據定義 位置的不同,給變量起了不同的名字。

   

  2、區別

    •  定義的位置不一樣 【重點】

      •  成員變量:在類中,方法外部

      •     局部變量:方法中或者方法聲明上(形式參數)或者代碼塊中
    •  作用范圍不一樣 【重點】

      •  成員變量:整個類中都可以使用
      •     局部變量:只有在聲明的方法中才可以使用,
    •  默認值不一樣 【重點】

      •  成員變量:如果沒有賦值,會有默認值,規則如上;
      •     局部變量:沒有默認值,必須先定義,賦值,才能使用
    •  內存中的位置不一樣 【了解】

      •  成員變量:位於堆內存
      •     局部變量:位於棧內存
    •  生命周期不一樣 【了解】

      •  成員變量:隨着對象創建而誕生,隨着對象被垃圾回收而消失
      •     局部變量:隨着方法進棧而誕生,隨着方法出棧而消失
    •  修飾符
      •  成員變量:有很多修飾符,如:權限修飾符
      •     局部變量:不能加權限修飾符,唯一能加的是 final

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM