2018-12-15 面向?qū)ο蠡A(chǔ)

面向過(guò)程編程思想

傳統(tǒng)的C語(yǔ)言屬于面向過(guò)程編程語(yǔ)言喇喉。
面向過(guò)程解決問(wèn)題的思路:

??????面向過(guò)程的抽象是將實(shí)現(xiàn)一個(gè)功能的一組命令組合成為一個(gè)函數(shù)剪芍,這個(gè)函數(shù)就能實(shí)現(xiàn)這一個(gè)功能撩穿,是對(duì)功能實(shí)現(xiàn)的一種抽象界阁,有了函數(shù)令漂,我們就沒(méi)有必要重復(fù)寫很多的代碼(特殊地譬如遞歸,可通過(guò)循環(huán)替代)组贺,僅僅一個(gè)代碼集合名稱以及參數(shù)就能調(diào)用抽象的命令集合凸舵。

問(wèn)題

??????命名沖突:對(duì)功能擴(kuò)充,或者是對(duì)同一功能的不同實(shí)現(xiàn)失尖,需要重新寫一個(gè)函數(shù)啊奄,這就導(dǎo)致在功能層面是同類函數(shù),卻在語(yǔ)言層面是完全不同的兩個(gè)函數(shù)雹仿,英文單詞也就那么幾個(gè)增热,沒(méi)合適的短詞為函數(shù)命名,為了避免沖突胧辽,只能把函數(shù)名取得越來(lái)越長(zhǎng)

Java語(yǔ)言屬于面向?qū)ο缶幊陶Z(yǔ)言

面向?qū)ο蠼鉀Q問(wèn)題的思路:
??????從現(xiàn)實(shí)世界中客觀存在的事物出發(fā)來(lái)構(gòu)造軟件系統(tǒng)峻仇,并在系統(tǒng)構(gòu)造中盡可能運(yùn)用人類的自然思維方式,強(qiáng)調(diào)直接以問(wèn)題域中的事物為中心來(lái)思考問(wèn)題邑商,認(rèn)識(shí)問(wèn)題摄咆,并根據(jù)這些事物的本質(zhì)特點(diǎn),把它們抽象地表示為系統(tǒng)中的對(duì)象人断,作為系統(tǒng)的基本構(gòu)成單位吭从。

面向?qū)ο缶幊贪?/h6>

面向?qū)ο蟮姆治觯∣OA,Object Oriented Analysis)
面向?qū)ο蟮脑O(shè)計(jì)(OOD恶迈,Object Oriented Design)
面向?qū)ο蟮木幊虒?shí)現(xiàn)(OOP涩金,Object Oriented Programming)

面向?qū)ο笏枷胝f(shuō)明
OOA:通常是把構(gòu)成問(wèn)題域的事務(wù)分解成各個(gè)對(duì)象,給對(duì)象賦予相應(yīng)的屬性和行為暇仲,通過(guò)多個(gè)對(duì)象的相互協(xié)調(diào)來(lái)解決問(wèn)題步做。

??????建立對(duì)象的目的不是為了完成一個(gè)步驟,而是為了描敘某個(gè)事物在整個(gè)解決問(wèn)題的步驟中的行為 奈附。支持面向?qū)ο缶幊淌荍ava 語(yǔ)言的重要特點(diǎn)全度。

OOD:這些對(duì)象沒(méi)有先后順序,共同作用才構(gòu)成了整個(gè)系統(tǒng)斥滤。我們只要用代碼設(shè)計(jì)出這幾個(gè)類型的對(duì)象将鸵,然后讓他們互相通信、傳遞消息就可以完成系統(tǒng)功能佑颇。

面向?qū)ο缶幊趟枷雽?shí)際上就是一種運(yùn)用對(duì)象顶掉、類、繼承挑胸、封裝一喘、聚合、關(guān)聯(lián)嗜暴、消息凸克、多態(tài)性等概念來(lái)構(gòu)造系統(tǒng)的軟件開發(fā)方法。

OOP:編寫代碼

分析系統(tǒng)中涉及的事務(wù)闷沥,根據(jù)“對(duì)象”抽象出“類”萎战;
找出對(duì)象共有的特點(diǎn),并且在類中定義為屬性舆逃;
找出對(duì)象共有的行為蚂维,并且定義為類的方法。


image.png

image.png
抽象(abstract):

從事物中舍棄個(gè)別的非本質(zhì)特征路狮,抽取共同的本質(zhì)特征
只考慮與問(wèn)題域相關(guān)的信息虫啥,而忽略與問(wèn)題域不相關(guān)的部分

對(duì)象(object):是系統(tǒng)中用來(lái)描述客觀事物的一個(gè)實(shí)體。

可以是有形的奄妨,也可以是無(wú)形的(如一個(gè)客戶涂籽,一張銀行卡,窗體中的一個(gè)按鈕等等)
對(duì)象是構(gòu)成世界的一個(gè)獨(dú)立單位
具有自己的靜態(tài)結(jié)構(gòu)(屬性)和動(dòng)態(tài)行為(方法)
每個(gè)對(duì)象有自己的唯一標(biāo)識(shí)

類(class):

類是一組具有相同屬性和行為的對(duì)象的抽象砸抛,類的作用是用來(lái)創(chuàng)建對(duì)象评雌,對(duì)象是類的一個(gè)實(shí)例

類和對(duì)象的關(guān)系

抽象和具體的關(guān)系。
每一個(gè)類在某一時(shí)刻都有零個(gè)或更多的實(shí)例直焙, 類是生成對(duì)象的模板
一個(gè)類定義了使用哪些數(shù)據(jù)來(lái)描述屬性景东,每一個(gè)對(duì)象都有相應(yīng)的屬性值數(shù)據(jù),一個(gè)類通過(guò)一系列方法來(lái)定義行為奔誓,這些方法能在每個(gè)對(duì)象中被激活

類的定義

什么是類

把相似的對(duì)象規(guī)劃成一個(gè)類斤吐。
在軟件設(shè)計(jì)中,類就是一個(gè)模板厨喂,他定義了 通用于一個(gè)特定種類的所和措。有對(duì)象的屬性(變量)和行為(方法)。

類的格式

[類的修飾]class 列名{
類的成員
...
}

public class Demo{
  public int a ;
  public void show(){

  }
  class Inner{
  }
{
System.out.println();
}
}
//編碼規(guī)范: 
//類名單詞首字母大寫 
//屬性和方法第一個(gè)單詞小寫杯聚,其他單詞首字母大寫

屬性何方法

屬性有默認(rèn)值如下:

屬性有默認(rèn)值臼婆,因此可以不用賦值就可以使用。


image.png

方法中可以直接使用屬性名幌绍,對(duì)該屬性進(jìn)行操作
例如:

public class Employee{
public int age;
public void show(){
System.out.println(age);//輸出0
age = 20;
System.out.print(age);//輸出20
}
}

局部變量

方法體中聲明的變量颁褂、方法中的參數(shù)或者代碼塊中聲明的變量,都是局部變量

public class Employee{
public void show(String name){
int age = 20;
System.out.println(name+age);
}
}

屬性可以和局部變量同名傀广,使用關(guān)鍵字this進(jìn)行區(qū)分
(局部變量只在對(duì)應(yīng)的大括號(hào)內(nèi)起作用)

public class Employee{
public void show(){
int age = 20;//局部變量
System.out.println(this.age);//this.age輸出0
System.out.println(age);//輸出20
}
public int age;//屬性
}

屬性在整個(gè)類中生效颁独,無(wú)論在什么地方聲明
例如:

public class Employee{
public void show(){
System.out.println(age);
}
public int age;
}

局部變量必須先聲明才能使用
例如:

public class Employee{
public void show(){
System.out.println(age);
int age = 20
}
}
//程序會(huì)報(bào)錯(cuò)無(wú)法運(yùn)行;

演示:


image.png
class Employee {
String name;
int age;
double salary;
public String showName(){
System.out.println(name);
return name;
}
public int showAge(){
System.out.println(age);
return age;
}
public void updateName(String name2){
name = name2;
}
public void getSalary(){
System.out.println("The salary of this month is 2000");
}
}

類和對(duì)象的關(guān)系

類是創(chuàng)建對(duì)象的模板伪冰,對(duì)象是類的實(shí)例誓酒。
例如:


image.png

對(duì)象的創(chuàng)建

什么是對(duì)象

類(class)---是對(duì)某一類事物的的描述
對(duì)象(object)---是實(shí)際存在的某類事物的個(gè)體
?????也稱為實(shí)例(instance)
[圖片上傳中...(image.png-333195-1544857807797-0)]

創(chuàng)建語(yǔ)法語(yǔ)句

類名 對(duì)象名 = new 類名();
Employee zhang = new Employee();


image.png

對(duì)象的使用

在其他類中,適用對(duì)象名點(diǎn)運(yùn)算符調(diào)用屬性和方法

引用類的屬性:對(duì)象名.屬性
引用類的方法:對(duì)象名.方法名(實(shí)參)

在類內(nèi)的方法中,訪問(wèn)本類的屬性和方法可以直接訪問(wèn)靠柑。

image.png

創(chuàng)建對(duì)象原理

Java程序是交由JVM執(zhí)行的,根據(jù)《Java虛擬機(jī)規(guī)范》的規(guī)定寨辩,運(yùn)行時(shí)數(shù)據(jù)區(qū)通常包括這幾個(gè)部分:程序計(jì)數(shù)器(Program Counter Register)、Java棧(VM Stack)歼冰、本地方法棧(Native Method Stack)靡狞、方法區(qū)(Method Area)、堆(Heap)隔嫡。

我們?cè)趯?shí)例化一個(gè)對(duì)象時(shí)甸怕,同時(shí)操作了棧內(nèi)存和堆內(nèi)存。

在棧內(nèi)保存對(duì)象的首地址腮恩,即引用梢杭;
在堆內(nèi)存中保存了對(duì)象的屬性。
對(duì)對(duì)象的所有操作只能通過(guò)引用完成秸滴,一旦引用出棧釋放沒(méi)有任何引用指向該對(duì)象武契,對(duì)象就變成垃圾失效。


image.png

對(duì)象的創(chuàng)建

編寫一個(gè)類

編寫一個(gè)類不會(huì)占用內(nèi)存

在主函數(shù)中創(chuàng)建對(duì)象

運(yùn)行有主函數(shù)的類

只有主函數(shù)的類才能運(yùn)行缸榛。
無(wú)論有多少個(gè)類吝羞,只有主函數(shù)中創(chuàng)建的對(duì)象,才會(huì)占用內(nèi)存内颗。

對(duì)象的創(chuàng)建和使用

對(duì)象的屬性分配在堆內(nèi)存中钧排,但是對(duì)象分配在棧內(nèi)存中。

對(duì)象名(變量名)也稱為對(duì)象的引用(reference)均澳,引用在java中是地址的同義詞恨溜。

除了8種基本數(shù)據(jù)類型的變量,其他變量都是引用類型變量

類(class)

Employee emp找前;

數(shù)組

int[] c糟袁;


image.png

image.png

匿名對(duì)象的創(chuàng)建

創(chuàng)建完對(duì)象,在調(diào)用該對(duì)象的屬性或方法時(shí)躺盛,也可以不定義對(duì)象的句柄项戴,而直接調(diào)用這個(gè)對(duì)象的方法。這樣的對(duì)象叫匿名對(duì)象槽惫。

如果只使用該對(duì)象進(jìn)行一次方法或?qū)傩哉{(diào)用周叮,可以創(chuàng)建匿名對(duì)象。


image.png

垃圾回收機(jī)制

垃圾回收(Garbage Collection界斜,GC)仿耽,JDK7以后使用G1(Garbage First)機(jī)制:

當(dāng)沒(méi)有對(duì)象引用指向原先分配給某個(gè)對(duì)象的內(nèi)存時(shí),該內(nèi)存便成為垃圾各薇。JVM的一個(gè)系統(tǒng)級(jí)線程會(huì)自動(dòng)釋放該內(nèi)存塊项贺。
垃圾回收機(jī)制作用于堆內(nèi)存,與棧內(nèi)存無(wú)關(guān)。
垃圾回收機(jī)制是JVM內(nèi)部運(yùn)行的一個(gè)優(yōu)先級(jí)比較低的后臺(tái)線程开缎,自動(dòng)進(jìn)行垃圾回收棕叫。它是保證程序健壯的主要手段,不用程序員參與啥箭,避免了由于程序員忘記回收內(nèi)存而引起的內(nèi)存泄漏谍珊,同時(shí)也避免了回收內(nèi)存帶來(lái)的代碼繁瑣。

對(duì)象會(huì)被回收情況:

1急侥、對(duì)象的引用被賦值為null

Person p = new Person( ); p = null;

2、使用的匿名對(duì)象:

new Person( ).sayHello( );

3侮邀、超出生命周期的坏怪,如:

for( int i = 0; i< 100; i++){
Person p = new Person( );
}

這里,創(chuàng)建了100個(gè)對(duì)象绊茧,循環(huán)賦值給變量p铝宵,每結(jié)束一次循環(huán),變量p就超出生命周期华畏,對(duì)象變?yōu)槔?/p>

在Java中創(chuàng)建對(duì)象占用的空間不需要編寫代碼進(jìn)行空間釋放鹏秋。

image.png

構(gòu)造器

構(gòu)造方法(構(gòu)造器,Constructor)

構(gòu)造方法也是方法亡笑,但是它是特殊的方法而已
所有的對(duì)象都是通過(guò)構(gòu)造器來(lái)創(chuàng)建的

創(chuàng)建對(duì)象:

類名 對(duì)象名 = new 構(gòu)造方法();

構(gòu)造器(構(gòu)造方法/構(gòu)造器侣夷,Constructor)特點(diǎn):

構(gòu)造方法名必須與類同名
不含返回值類型,也沒(méi)有void
不能在方法中用return語(yǔ)句返回一個(gè)值


image.png

構(gòu)造方法作用

構(gòu)造方法用來(lái)完成對(duì)象的創(chuàng)建仑乌,即完成對(duì)象的實(shí)例化

在Java中百拓,每個(gè)類都至少要有一個(gè)構(gòu)造器

一個(gè)類可以不寫出構(gòu)造方法,編譯器會(huì)自動(dòng)的給這個(gè)類增加一個(gè)構(gòu)造器晰甚,該構(gòu)造器沒(méi)有任何參數(shù)衙传,我們稱之為“默認(rèn)的空構(gòu)造器”。


image.png

編程者為該類定義了構(gòu)造器厕九,系統(tǒng)就不再提供默認(rèn)的構(gòu)造器


image.png

構(gòu)造方法的重載

構(gòu)造方法可以像普通方法一樣發(fā)生重載蓖捶,通常一個(gè)類中不止一個(gè)構(gòu)造方法,而是有多個(gè)不同參數(shù)的構(gòu)造器扁远,用戶可以根據(jù)需要選擇不同的構(gòu)造器創(chuàng)建對(duì)象俊鱼。

一般可以使用構(gòu)造器來(lái)完成對(duì)成員變量的初始化。例如:


image.png

有帶參的構(gòu)造器穿香,那么不帶參的空構(gòu)造器不會(huì)自動(dòng)產(chǎn)生亭引。為了防止在某些情況下還想使用這樣的無(wú)參數(shù)默認(rèn)構(gòu)造器,因此最好還是養(yǎng)成寫出這個(gè)無(wú)參數(shù)的構(gòu)造器來(lái)皮获,以備后用焙蚓。 例如:


image.png

構(gòu)造方法的調(diào)用

在其他類只能在創(chuàng)建對(duì)象時(shí)調(diào)用一次構(gòu)造方法。

普通方法可以在創(chuàng)建對(duì)象后,使用點(diǎn)運(yùn)算符調(diào)用多次


image.png

本類中調(diào)用

只能在本類的構(gòu)造方法中购公,調(diào)用其它重載的構(gòu)造方法
使用this關(guān)鍵字萌京,并且代碼只能在構(gòu)造方法的第一行
根據(jù)實(shí)參確定調(diào)用的構(gòu)造方法


image.png

多次調(diào)用構(gòu)造器,一個(gè)類可以實(shí)例化出多個(gè)對(duì)象宏浩。

image.png

java包的概念

在Java中知残,包主要有以下用途:

包允許將類組合成較小的單元
有助于避免命名沖突
包允許在更廣的范圍內(nèi)保護(hù)類,數(shù)據(jù)和方法

將類放入包中比庄,語(yǔ)法為:

package 包名;

使用包注意問(wèn)題:

在Java中位于包中的類求妹,在文件系統(tǒng)中的存放位置,必須有與包名層次相對(duì)應(yīng)的目錄結(jié)構(gòu)
package語(yǔ)句作為Java源文件的第一條語(yǔ)句
每個(gè)源文件只能聲明一個(gè)包
如果沒(méi)有package語(yǔ)句佳窑,則默認(rèn)為無(wú)名包

類庫(kù)中的常用的包

Java.lang
java默認(rèn)包制恍,任何程序中,該包都會(huì)被自動(dòng)導(dǎo)入神凑。
java.io
輸入/輸出操作有用的類組成净神。
訪問(wèn)同包中的類
位于同一包中的類可以直接訪問(wèn)并使用

訪問(wèn)同包中的類

唯一同包中的類可以直接訪問(wèn)并使用

訪問(wèn)不同包中的類

訪問(wèn)不同的包中的類

使用import關(guān)鍵字引入其他包中的類
必須在package聲明后面,類聲明前面
import語(yǔ)句可以出現(xiàn)多次


image.png

package和import說(shuō)明

package說(shuō)明:

package像是我們的姓溉委,而class名稱就像我們的名字鹃唯。
package和package的附屬關(guān)系用”.”來(lái)連接,這就像是復(fù)姓瓣喊。

比如說(shuō) java.lang.String就是復(fù)姓 java.lang坡慌,名字為 String 的類;

com.neuedu.ch06.Employee 則是復(fù)姓 com.neuedu.ch06型宝,名字為 Employee 的類

import說(shuō)明:

import就是在java文件開頭的地方八匠,先說(shuō)明會(huì)用到那些類

接著就能在代碼中只用類名指定某個(gè)類,也就是只稱呼名字趴酣,不稱呼他 的姓

一個(gè)java文件就像一個(gè)大房間梨树,我們?cè)陂T口寫著在房間里面的class的姓 和名字,所以在房間里面提到某個(gè)class就直接用他的名字就可以
image.png

image.png

import使用通配符

import可以使用星號(hào)通配符:

如果一個(gè)java文件里面有多個(gè)同個(gè)“姓”岖寞,即包名相同的類抡四,我們一一 寫出顯得比較繁雜,所以我們可以使用星號(hào)通配符仗谆,例如

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末指巡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子隶垮,更是在濱河造成了極大的恐慌藻雪,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,423評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狸吞,死亡現(xiàn)場(chǎng)離奇詭異勉耀,居然都是意外死亡指煎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門便斥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)至壤,“玉大人,你說(shuō)我怎么就攤上這事枢纠∠窠郑” “怎么了?”我有些...
    開封第一講書人閱讀 157,019評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵晋渺,是天一觀的道長(zhǎng)镰绎。 經(jīng)常有香客問(wèn)我,道長(zhǎng)些举,這世上最難降的妖魔是什么跟狱? 我笑而不...
    開封第一講書人閱讀 56,443評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮户魏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挪挤。我一直安慰自己叼丑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評(píng)論 6 385
  • 文/花漫 我一把揭開白布扛门。 她就那樣靜靜地躺著鸠信,像睡著了一般。 火紅的嫁衣襯著肌膚如雪论寨。 梳的紋絲不亂的頭發(fā)上星立,一...
    開封第一講書人閱讀 49,798評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音葬凳,去河邊找鬼绰垂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛火焰,可吹牛的內(nèi)容都是我干的劲装。 我是一名探鬼主播,決...
    沈念sama閱讀 38,941評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼昌简,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼占业!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起纯赎,我...
    開封第一講書人閱讀 37,704評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谦疾,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后犬金,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體念恍,經(jīng)...
    沈念sama閱讀 44,152評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡六剥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了樊诺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仗考。...
    茶點(diǎn)故事閱讀 38,629評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖词爬,靈堂內(nèi)的尸體忽然破棺而出秃嗜,到底是詐尸還是另有隱情,我是刑警寧澤顿膨,帶...
    沈念sama閱讀 34,295評(píng)論 4 329
  • 正文 年R本政府宣布锅锨,位于F島的核電站,受9級(jí)特大地震影響恋沃,放射性物質(zhì)發(fā)生泄漏必搞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評(píng)論 3 313
  • 文/蒙蒙 一囊咏、第九天 我趴在偏房一處隱蔽的房頂上張望恕洲。 院中可真熱鬧,春花似錦梅割、人聲如沸霜第。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)泌类。三九已至,卻和暖如春底燎,著一層夾襖步出監(jiān)牢的瞬間刃榨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工双仍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留枢希,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,333評(píng)論 2 360
  • 正文 我出身青樓殊校,卻偏偏與公主長(zhǎng)得像晴玖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子为流,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容