Java基礎篇:什麼是面向對象?(詳解)

一.面向對象思想

萬物皆對象
計算機中的對象是對現實中的對象個體的一個徹底的模擬
1 軟件開發目的
利用計算機的高效運算來改造世界,爲生活中的問題提供解決方案,提升工做效率java

2 分析與設計軟件的思惟方式
分析問題----設計程序
1)面向過程 (c語言)
2)面向對象 (c++,C#, java語言)c++

3 面向過程(OPP) vs 面向對象(OOP)
裝配電腦過程 - 事事親力親爲 (面向過程)
買組裝機,或者叫朋友幫忙組裝 --> 調用(面向對象)程序員

ps: 面向過程一開始就考慮實現的流程和細節,面向對象一開始考慮的是有哪些類型和對象在相互協做
面向對象的思惟是最接近人類天然的思惟方式算法

二.面向對象抽象步驟

(1)找出類數組

1 何爲類
類型的類,歸類的類
就是人在認識分析世界中對具備相同特色的事物一個總稱,它就是一個概念來的
就是存在於人腦中的一個概念,在分析過程當中,常常叫它爲概念模型
類:就是某類對象的抽象,是某類對象的集合。jvm

2 分析獲得類的過程函數

3 類的示例優化

<pre style="margin: 0px; padding: 0px;
 overflow-wrap: break-word; font-family: &quot;Kite One&quot;, sans-serif; font-size: 12px !important;">
class Person{ 
int eyes = 2;//2個眼睛
int hands = 2;//2隻手
int legs = 2;//2條腿 //直立行走()
void walk(){
System.out.println("直立行走");
} //吃()
void eat(){
System.out.println("吃");
} //睡()
void sleep(){
System.out.println("睡");
} //思考()
void think(){
System.out.println("思考");
}
}</pre>

(2)找出屬性this

1 何爲屬性
一類事物都有相同的一些靜態特徵(狀態),例如人都有年齡,咱們將這個靜態特徵(狀態)寫到類裏,這個特徵(狀態)就叫作類的屬性,或者叫成員變量,也叫實例(對象)變量,字段等等。
雖然人都有年齡這個屬性,它的取值是能夠不同,每一個個體(對象)的年齡能夠賦一個不一樣值spa

2 實例變量的默認值
實例(成員)變量,編譯器在編譯的時後會給它賦默認值
不一樣的類型,編譯器會賦上不一樣類型的默認值


引用類型 --> null
byte -->0
short -->0
int --> 0
long -->0
float -->0.0
double -->0.0
char -->'\u0000'
boolean --> false


3 全局變量 vs 局部變量
1)位置不一樣
實例變量是在類裏面、方法外面
局部變量定義在方法內或者局部代碼塊內
2)是否須要顯式初始化
局部變量沒有初始化以前是不能使用的(編譯器),先賦值後使用
實例變量能夠直接使用,不賦值時會有賦以相應類型的默認值
3)生命週期及做用域
局部變量:只在方法體或者語句塊中
實例變量:與對象的生命週期相同
4)在內存的位置
局部變量在方法棧中
實例變量在對象堆中

(3)找出方法

1 何爲方法
方法就是某類事物共同的行爲,功能,也就是動態特徵。

2 方法的基本格式
[修飾符…] 返回類型 方法名([形參列表...]){語句塊;}
用helloworld程序的main方法幫助記憶。
void : 表示不須要返回值
1)無參方法
有返回值的無參方法
無返回值的無參方法。
2)有參方法
有返回值的有參方法
無返回值的有參方法。
方法的參數列表能夠有多個,能夠是基本數據類和引用類型

3 形參和實參
聲明的時候叫形參,就是一個佔位符
發生調用的時候,傳入的實際叫是實參

4 注意
形參是局部變量
形參做爲局部變量,是不須要賦值就可使用

(4)優化設計   

繼承的使用。

三.對象

1 何爲對象
計算機程序類,是建立計算機中對象的模板或者說藍本
類 -->設計圖紙
對象就是實際存在的個體,也叫實體。能夠是看獲得,也能夠是看不到(好比一個創意)
萬物皆對象
計算機中的對象是對現實中的對象個體的一個徹底的模擬

2 建立對象
使得new關鍵來建立


Person p = new Person();
p.walk();//.調用運算符s
p.sleep();
p.eat();


四.引用變量

1 何爲引用變量
除去基本數據類型的變量,剩下的都引用變量
int a;//基本數據類型變量
String s;//引用變量
Person p;//引用變量
引用變量問題試圖去牽引着另外一個存在的對象個體。

2 注意事項
引用變量牽引一個對象,並非裝着一個對象
基本數據類型的變量裝的是值自己,引用類型變量裝的是對象的起始地址
一個對象就像一個氣球,氣球能夠用多根繩子牽引着,同理一個對象也能夠被多個變量引用
Person p2 = p;

ps:
1 一個對象能夠被多個引用變量引用,若是沒有任何變量引用該對象時,該對象會被垃圾回收器回收
2 在一個空引用上訪問屬性或調用方法,會拋出空指針異常(NullPointException)
Exception in thread "main" java.lang.NullPointerException

五.方法棧與對象堆

1 jvm的內存分佈

2 各部分介紹
1)棧
方法棧,程序在運行會將全部調用的方法都壓入棧。

保存局部變量的值,包括:

1.用來保存基本數據類型的值;

2.保存類的實例即堆區對象的引用(指針)。也能夠用來保存加載方法時的幀,FILO(first in last out 先進後出)

2)堆
對象堆(垃圾堆),用來存放動態產生的數據,好比new出來的對象。注意建立出來的對象只包含屬於各自的成員變量,並不包括成員方法。由於同一個類的對象擁有各自的成員變量,存儲在各自的堆中,可是他們共享該類的方法,並非每建立一個對象就把成員方法複製一次
3) 常量池
JVM爲每一個已加載的類型維護一個常量池,常量池就是這個類型用到的常量的一個有序集合。包括直接常量(基本類型,String)和對其餘類型、方法、字段的符號引用(1)。池中的數據和數組同樣經過索引訪問。因爲常量池包含了一個類型全部的對其餘類型、方法、字段的符號引用,因此常量池在Java的動態連接中起了核心做用。常量池存在於堆中
4) 代碼段
用來存放從硬盤上讀取的二進制字節碼
5)數據段
用來存放static定義的靜態成員

六.傳參方式

1 java的傳參方式
1)值傳遞 - 基本數據類型傳遞數據值自己
2)引用傳遞 - 傳遞對象地址值

ps:嚴格意義上來講,都是值傳遞

2 引用傳遞注意事項
引用a的值傳遞給引用b,此時經過b去改變對象的內容,經過a訪問到的內容是b改變後的內容

七.構造方法

1 何爲構造方法
構造方法是一種特殊方法,也叫構造函數,或構造器
名字必須和類名相同,而且沒有返回類型
2 構造方法做什麼用
用來初始化成員變量
提供了一個機會給開發者,讓開發者有一個時機介入到對象的構建過程當中

3 構造方法的語法
1)若是一個類沒有定義構造方法,編譯器會提供一個默認的構造方法(無參)
2)構造方法能夠有多個,構成重載
3)若是類已經提供了一個構造方法,編譯器不會提供默認的構造方法
4)好的建議:若是咱們定義了有參數的構造方法,通常狀況下會同時提供一個無參的構造方法

4 構造方法在何時調用
Cat c = new Cat();
1)在棧中建立c變量
2)在堆中分分配對象內存
3)調用該對象的構造方法
4)默認初始該對象成員變量,對象建立成功。
5)把對象地址賦值給c變量

八.this引用

(1)解決命名衝突

當成員變量(實例變量)和局部變量重名時,局部變量優先,成員變量會被局部變量覆蓋,此時用this來解決

//有參的構造方法


public Cat(String name,int age,String color){
this.name = name;
this.age = age;
this.color = color;
}


(2)調用重載的構造方法

九.垃圾回收

1 什麼是垃圾回收器(Garbage collection)
jvm運行的時候會在後臺運行一個低優先級線程,它會不間斷的去掃描內存的使用狀況,當發現堆中對象沒任何一個引用變量牽引時,就把這個對象視爲垃圾,該線程就會回收這個對象,而後釋放這個對象佔用的內存。

2 爲何須要垃圾回收器
C++的程序員使用內存都是本身分配的,使用完後也是由本身回收。這樣子很容易形成疏忽,忘記釋放。當內存不斷的分配使用,就會消耗掉全部內存,這時就會出現內存溢出或者其它的問題。
java爲了防止因爲開發者疏忽形成的內存溢出的這種現象,提供了垃圾回收器來自動的回收不用對象釋放佔用的內存。
即便有垃圾回收器,jvm內存仍然能夠耗盡。

3 垃圾回收器的回收時機
回收的時機是不肯定,跟實現它的算法有關係,垃圾回收的算法有不少,不一樣的jdk可能採用的算法不同。
開發者能夠調用如下方法來建議垃圾回收器回收,但不能保證回收器會當即回收(像麥當勞的服務員)


System.gc();
Runtime.getRuntime().gc()


開發者能夠主動將引用變量置null,垃圾回收器就能夠掃描並回收它
Person p = new Person();
//調用p作事
p = null;

十.方法重載

1 何爲方法重載(Overload)
定義:在同一個類中,方法名相同,參數列表不一樣, 與返回類型和修飾符無關的方法,叫方法重載,是一種靜態多態性的表現。
2 重載的三個要素
1)在同一個類中
2)方法名相同,與返回類型和修飾符無關
3)參數列表不一樣(個數,順序,類型)

3 重載調用
首先會找參數類型最接近的方法去執行

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: &quot;Kite One&quot;, sans-serif; font-size: 12px !important;">
package com.tocean.ch06;
 public class TestOverload2{ 
public static void main(String[] args){
A a = new A();
a.add(2,3);//編譯出錯 //a.add(2,3.0);
}
} class A{ /* public double add(int a ,int b){
System.out.println("----------add(int a ,int b)------------");
return a+b;
}*/
public double add(double a ,int b){
System.out.println("----------add(double a ,int b)------------"); return a+b;
} public double add(int a ,double b){
System.out.println("----------(int a ,double b)------------"); return a+b;
}
}</pre>

十一.返回值 

1 返回值
返回值是一個方法執行後須要返回的結果,
若是一個方法須要返回給調用者執行結果,就必須先在聲明該方法時要聲明返回該結果類型
若是不須要返回,返回類型用void表示

2 注意返回值能夠是返回類型(大類型)兼容的小類型參數也是同樣,能夠傳遞參數類型(大類型)兼容的小類型

相關文章
相關標籤/搜索