JAVA基礎再回首(四)——面向對象思想、類與對象、成員/局部變量、匿名對象、封裝、private、this、構造方法
好久沒更了,畢業季的離别總令人傷感,我相信再見是為了我們更好的遇見。好了,來繼續學習吧!
一、面向對象思想
- 概述: 面向對象是基于面向過程的程式設計思想
- 特點:
- 更符合我們思想習慣的思想
- 可以将複雜的事情簡單化
- 将我們從執行者變成了指揮者(角色發生了轉換)
- 說了上面的概念,有的人肯定沒有明白和了解
- 那麼,我們就針對面向對象思想舉幾個例子吧。
1.買電腦:
面向過程:我要了解電腦–了解我自己的需求–找對應的參數資訊–去中關村買電腦–讨價還價–買回電腦
面向對象:我知道我要買電腦 – 計算機老師去給我買 – 老師就買回來了
2.洗衣服:
面向過程:把衣服脫下–找一個盆–放點洗衣粉–加點水–把衣服扔進去–搓一搓–清洗衣服–擰幹–晾起來
面向對象:把衣服脫下–打開全自動洗衣機–扔進去–一鍵即可–晾起來
- 列舉了上面兩個例子,我們可以看出,運用面向對象的思想可以很友善的解決我們的問題,同時我們也可以把面向對象思想的使用規則做以總結,讓我們更符合面向對象思想
- A:首先分析有那些類
- B:接着分析每個類應該有什麼
- C:最後分析類與類的關系
我們知道了面向對象的使用規則,就來做一道練習吧!
練習:把大象裝進冰箱。
- 分析:
- 面向過程:
-
動作有哪些呢?
A:打開冰箱門
B:裝進大象
C:關閉冰箱門
-
- 代碼展現:
- 面向過程:
class Demo {
public static void main(String[] args) {
//調用方法
open();
in();
close();
}
public static void open() {
System.out.println("打開冰箱門");
}
public static void in() {
System.out.println("裝進大象");
}
public static void close() {
System.out.println("關閉冰箱門");
}
}
運作結果:
- 我們從面向對象的思想來分析,并實作代碼:
- A:有哪些類呢?
- 大象、冰箱、Demo
- B:每個類有哪些東西呢?
- 大象:
- 進去
- 冰箱:
- 開門、關門
- Demo:
- main方法
- 大象:
- C:類與類直接的關系是什麼呢?
- Demo中使用大象和冰箱類的功能。
- A:有哪些類呢?
代碼實作:
class DaXiang {
public static void in() {
System.out.println("裝進大象");
}
}
class BingXiang {
public static void open() {
System.out.println("打開冰箱門");
}
public static void close() {
System.out.println("關閉冰箱門");
}
}
class Demo {
public static void main(String[] args) {
//冰箱調用開門
BingXiang.open();
//大象調用進去
DaXiang.in();
//冰箱調用關門
BingXiang.close();
}
}
運作結果: 是不是發現運作結果都是一樣的呀,但是對于運用面向對象思想實作的代碼,在以後的開發中是很好維護的,是以我們要運用面向對象的思想去程式設計。
- 面向對象開發
- 就是不斷的建立對象,使用對象,指揮對象做事情。
- 面向對象設計
- 其實就是在管理和維護對象之間的關系。
- 面向對象特征
- 封裝(encapsulation)
- 繼承(inheritance)
- 多态(polymorphism)
二、類與對象的關系
- 類:是一組相關的屬性和行為的集合
- 屬性——事物的基本描述,行為——事物的功能
- Java語言中最基本的機關是類。是以,我們要用類來展現事物
- 對象:是該類事物的具體展現
- 舉例:
- 類 ——學生就是類
- 對象 ——班長就是一個對象
三、成員變量和局部變量的差別
- 在類中的位置不同
- 成員變量——類中方法外
- 局部變量——方法内或者方法聲明上
- 在記憶體中的位置不同
- 成員變量——堆記憶體
- 局部變量——棧記憶體
- 生命周期不同
- 成員變量——随着對象的存在而存在,随着對象的消失而消失
- 局部變量——随着方法的調用而存在,随着方法的調用完畢而消失
- 初始化值不同
- 成員變量——有預設的初始化值
- 局部變量——沒有預設的初始化值,必須先定義,指派,才能使用。
注意:成員變量和名稱可以不可和局部變量一樣呢?
答案當然是可以的,但是使用的時候要注意,先找小範圍,再找大範圍。
四、匿名對象
匿名對象:就是沒有名字的對象。
是對象的一種簡化表示形式
- 匿名對象的兩種使用情況
- 對象調用方法僅僅一次的時候
- 作為實際參數傳遞
我們來舉例說明:
//正常寫法
Student s = new Student();
s.age=;
//匿名寫法
new Student().age = ;
//我們可以看到,用匿名寫法時不用起名字就可以直接修改age的值了。
// 輸出學生的數量
System.out.println("一共有"+new Student().num + "個學生");
//這種方法就是作為實際參數傳遞
五、封裝(Encapsulation)
封裝屬于面向對象的三大特征之一。我們來一起學習它。
- 封裝的概述:是指隐藏對象的屬性和實作細節,僅對外提供公共通路方式。
- 好處:
- 隐藏實作細節,提供公共的通路方式
- 提高了代碼的複用性
- 提高安全性
- 原則:
- 将不需要對外提供的内容都隐藏起來
- 把屬性隐藏,提供公共方法對其通路
我們來寫一個Demo
public class StudentDemo {
public static void main(String[] args) {
Student s = new Student();
s.age=; //給成員變量指派
s.study(); //調用方法
}
}
class Student{
String name;//姓名
int age; //年齡
//定義學習的方法
public void study(){
System.out.println("學生愛學習");
}
}
輸出結果:學生愛學習
六、private
- private 關鍵字(意思是私有的)
- 是一個權限修飾符。
- 可以修飾成員(成員變量和成員方法)
- 被private修飾的成員隻在本類中才能通路。
- private最常見的應用:
- 把成員變量用private修飾
- 提供對應的getXxx()/setXxx()方法
- 一個标準的案例的使用
我們一起寫一個Demo來學習private關鍵字
在上面這個Demo中,我們可以發現,當我們用private修飾Student類中的成員變量時,在StudentDemo類中我們就不能調用它的成員變量age了。
上面我們也講到了, 被private修飾的成員隻在本類中才能通路。
那麼我們要怎麼去通路呢?這個時候java就給我們提供了一個方法,我們一起來看
public class StudentDemo {
public static void main(String[] args) {
Student s = new Student();
// s.age=5; //給成員變量指派
s.setAge(); //給成員變量指派
s.study(); //調用方法
}
}
class Student{
private String name;//姓名
private int age; //年齡
//定義學習的方法
public void study(){
System.out.println("學生愛學習");
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
七、this
this關鍵字:代表所在類的對象引用。簡單的說,它就代表目前類的一個對象。
- 注意:
- 方法被哪個對象調用,在該方法内部的this就代表那個對象
- 用法:
- 解決局部變量隐藏成員變量
如果你們細心點就會發現,在上面我們寫的Demo中set方法中是有this的
- 解決局部變量隐藏成員變量
public void setAge(int age) {
this.age = age;
}
八、構造方法
- 作用概述:
- 給對象的資料進行初始化
- 格式:
- 方法名與類名相同
- 沒有傳回值類型,連void都沒有
- 沒有具體的傳回值
我們來寫一個簡單的Demo
class Student {
private String name; //null
private int age; //0
public Student() {
System.out.println("這是構造方法");
}
}
class StudentDemo {
public static void main(String[] args) {
//建立對象
Student s = new Student();
}
}
輸出結果: 隻要我們建立了對象就是new了,就執行了構造方法
- 注意:
- 如果你不提供構造方法,系統會給出預設構造方法
- 如果你提供了構造方法,系統将不再提供
- 構造方法也是可以重載的
我們來完成一個重載的Demo
public class StudentDemo {
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student("阿杜");
Student s3 = new Student("阿杜",);
}
}
class Student{
private int age; //年齡
public Student(){
System.out.println("這是構造");
}
public Student(String name){
System.out.println(name);
}
public Student(String name,int age){
System.out.println("這是構造"+age);
}
}
輸出結果:
好了,面向對象這一張的内容很多,但是很重要,是以我們一定要學會他,部落格會陸續更新的,謝謝