Java學習經驗與總結(06)——面向對象

一 面向對象的思想

1 面向對象思想概述

面向對象是一種符合人類思維習慣的編程思想。現實生活中存在各種形態不同的事物,這些事物之間存在着各種各樣的聯繫。在程序中使用對象來映射現實中的事物使用對象的關係來描述事物之間的聯繫,這種思想就是面向對象。
提到面向對象,自然會想到面向過程,面向過程就是分析解決問題所需要的步驟,然後用函數把這些步驟一一實現,使用的時候一個一個依次調用就可以了。面向對象則是把解決的問題按照一定規則劃分爲多個獨立的對象,然後通過調用對象的方法來解決問題。當然,一個應用程序會包含多個對象,通過多個對象的相互配合來實現應用程序的功能,這樣當應用程序功能發生變動時,只需要修改個別的對象就可以了,從而使代碼更容易得到維護。

2 面向對象思想舉例

(1)舉例

做作業: 閱讀作業題—分析作業題需要求什麼—推導套用公式—算出結果----驗證一下是否正確—將過程和結果寫到作業上
如果我們用面向對象思想
借一份作業 ----一鍵複製粘貼

(2) 面向對象的特徵

封裝(encapsulation)
繼承(inheritance)
多態(polymorphism)

(3)面向對象開發

就是不斷的創建對象,使用對象,指揮對象做事情。

二 面向對象類與對象的概述

我們學習編程語言,就是爲了模擬現實中的事物,我們學習的Java語言最基本單位是類,所以,我們就應該把事物用一個類來體現。
由此我們就得到了現實中的事物和類的對應關係
事物 類
屬性 ----------------- 成員變量
行爲 ----------------- 成員方法
定義類其實就是定義類的成員(成員變量和成員方法)
成員變量 和以前定義變量是一樣的,只不過位置發生了改變。在類中,方法外。
成員方法 和以前定義方法是一樣的,只不過把static去掉,後面在詳細講解static的作用。

1 類和對象是什麼

類是構造對象的模板或藍圖。我們可以將類想象成製作麪包的切割機,將對象想象爲麪包。由類構造對象的過程稱爲創建類的實例。簡單來說,類是一組相關屬性和行爲的集合,而對象就是該類事物的具體體現。比如定義一個聊天工具的類,微信就是一個對象。

2 如何由類構成對象

我們首先使用關鍵字class定義一個類
然後我們想使用類中的屬性和功能,就需要創建一個實例,這個實例,就是該類的對象,我們一般通過一個關鍵字new來創建對象
創建完對象後我們就可以通過這個對象去調用類中的屬性和功能
一個類中可以創建多個對象
實例演示如下

package org.westos.zz;

import java.util.Scanner;

public class Mydemo1 {
    public static void main(String[] args) {
        Person p = new Person();
        String name = p.username;
        int nianling = p.age;
        char ch = p.sex;
        System.out.println(name);
        System.out.println(nianling);
        System.out.println(ch);
        p.eat();
        p.sleep();
        p.playGame();
    }
}


3 如何構造類的功能

首先我們先定義一個類
然後再類中定義成員屬性/成員變量
然後再定義成員方法
實例演示如下

package org.westos.zz;

public class Person {
    String username = "王麻子";
    int age = 20;
    char sex = '男';
    public void eat()      { System.out.println("吃飯");   }
    public void sleep()    { System.out.println("睡覺");   }
    public void playGame() {
        System.out.println("玩遊戲");
    }
}

4 創建對象的內存圖演示

對象創建的內存圖

三 成員變量和局部變量的區別

  • 局部變量:定義在方法中或方法聲明上(形參)的變量
    局部變量存在棧內存
    局部變量屬於方法
    局部變量隨着方法的調用而產生,隨着方法的調用完畢而消失
    局部變量沒有默認值,必須賦值才能使用

      成員變量:定義在類中方法外的變量
      成員變量存儲在堆內存
      成員變量屬於對象,隨着對象的創建而產生,隨着對象被回收而消失。
      成員變量有默認值
    

四 方法的形式參數是類名的時候如何調用

Java中參數傳遞的問題
形式參數
基本類型:形式參數的改變不影響實際參數
引用類型:形式參數的改變直接影響形式參數
如果你看到一個方法的像是參數是一個類類型,這裏其實需要的是該類的對象
實例演示如下

package org.westos.zz;

import java.util.Scanner;

public class Mydemo1 {
    public static void main(String[] args) {
        int num=18;
        String name="張三";
        Student student = new Student();
        System.out.println(student);
        test(num,name,student);
        System.out.println(student.name);
        System.out.println(student.age);
        student.show();
    }
    public static void test(int a, String b, Student student){
        System.out.println(student);
        student.name=b;
        student.age=a;
    }
}
class Student{
    String name="李四";
    int age=19;
    public void show(){
        System.out.println(name);
        System.out.println(age);
    }
}

五 匿名對象的概述和應用

1 什麼是匿名對象

就是沒有名字的對象

2 匿名對象應用場景

(1)調用方法,僅僅只調用一次的時候。
(2)匿名對象可以作爲實際參數傳遞

3 實例演示

package org.westos.zz;

import java.util.Scanner;

public class Mydemo1 {
    public static void main(String[] args) {
        Dog dog= new Dog();
        dog.show();
        dog.show();
        dog.show();
        new Dog().show();
        new Dog().show();
        new Dog().show();
        int age = dog.age;
        new Dog();
        new Dog().show();
        int age1 = new Dog().age;
        test(dog);
        test(new Dog());
    }
    public static void test(Dog dog){
        dog.show();
    }
}

class Dog{
    int age=100;
    public void show(){
        System.out.println("一隻小狗");
    }
}

六 封裝的概述

1 什麼是封裝

封裝(有時稱爲數據隱藏)是與對象有關的一個重要概念。從形式上來看,封裝不過是將數據和行爲組合在一個包中,並對對象的使用者隱藏了數據的實現方式。對象中的數據稱爲實例域,操縱的過程稱爲方法。對於每個特定的類實例(對象)都有一組特定的實例域值。這些值的集合就是這個對象的當前狀態。無論何時,只要向對象發送一個消息,它的狀態就可能發生改變。

2 封裝的好處

  1. 隱藏實現細節,提供公共的訪問方式
  2. 提高了代碼的複用性 
    
  3. 提高安全性。
    

3 封裝的原則

將不需要對外提供的內容都隱藏起來。
把屬性隱藏,提供公共方法對其訪問。

七 private關鍵字

1 private關鍵字的特點

(1)private是一個權限修飾符
(2)可以修飾成員變量和成員方法
(3)被其修飾的成員只能在本類中訪問

2 private最常見的應用

(1)把成員變量用private修飾
(2)提供對應的getXxx()和setXxx()方法

3 案例演示

package org.westos.zz;

import java.util.Scanner;

public class Mydemo1 {
    public static void main(String[] args) {
            Student student = new Student();
            student.setName("張三");
            student.setAge(40);
            String name = student.getName();
            int age = student.getAge();
            System.out.println(name);
            System.out.println(age);


        }
    }
        class Student {
            private String name;
            private int age;

            public void setAge(int nianling) {
                if (nianling >= 0 && nianling <= 100) {
                    age = nianling;
                } else {
                    System.out.println("年齡不合理");
                }
            }

            public void setName(String mingzi) {
                name = mingzi;
            }

            public String getName() {
                return name;
            }

            public int getAge() {
                return age;
            }

        }

八 this關鍵字的概述和應用

1 爲什麼要有this

當我們的局部變量和成員變量相同的時候,如果我們不使用this關鍵字,那麼會導致一個問題:就是局部變量隱藏了成員變量的問題

2 this關鍵字特點

是當前類的對象引用。
簡單的記,它就代表當前類的一個對象。誰調用這個方法,那麼該方法的內部的this就代表誰

3 this的應用場景

解決局部變量隱藏成員變量

4 案例演示

package org.westos.zz;

import java.util.Scanner;

public class Mydemo1 {
    public static void main(String[] args) {
        Doctor doctor = new Doctor();
        System.out.println("調用者:"+doctor);
        doctor.setName("王醫生");
        doctor.setAge(20);
        System.out.println(doctor.getName());
        System.out.println(doctor.getAge());
        Doctor doctor2 = new Doctor();
        System.out.println("調用者:" + doctor2);
        doctor2.setName("李醫生");
        doctor2.setAge(25);
        System.out.println(doctor2.getName());
        System.out.println(doctor2.getAge());
    }
}
class Doctor {
    private String name;
    private int age;
    public void setName(String name){
        System.out.println("this代表的引用:"+this);
        this.name=name;
    }
    public void setAge(int age) {
        System.out.println("this代表的引用:" + this);
        this.age=age;
    }
    public int getAge(){
        return this.age;
    }
    public String getName(){
        return this.name;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章