W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
● 多態(tài)
● 繼承
● 封裝
● 抽象
● 類(lèi)
● 對(duì)象
● 實(shí)例
● 方法
● 重載
什么是面向?qū)ο螅?/strong>:
面向?qū)ο笫且环N編程思想
通俗的說(shuō):面向?qū)ο笫且环N思考問(wèn)題的思維方式
為什么使用面向?qū)ο笠约八淖饔?/strong>
計(jì)算機(jī)語(yǔ)言為了更好的去描述現(xiàn)實(shí)生活中的事物,按照生活中的思考方式來(lái)定義,這樣我們使用起來(lái)會(huì)更加方便
作用:將功能封裝到對(duì)象里,強(qiáng)調(diào)的是具備某功能的對(duì)象;
面向?qū)ο蟮娜齻€(gè)特征:
1.封裝(Encapsulation)
2.繼承(Inheritance)
3.多態(tài)(Polymorphism)
類(lèi)與對(duì)象的概念
● 類(lèi):類(lèi)是一個(gè)模板,它描述一類(lèi)對(duì)象的行為和狀態(tài)。
(1).什么是類(lèi)?類(lèi)是分類(lèi)和類(lèi)別的意思
通過(guò)分類(lèi),可以區(qū)別不同的事物種類(lèi),
類(lèi)是一組具有共同特性(屬性)與行為(方法)的事物集合
(2).類(lèi)與對(duì)象之間的關(guān)系
● 對(duì)象:對(duì)象是類(lèi)的一個(gè)實(shí)例(對(duì)象不是找個(gè)男/女朋友),而是有狀態(tài)和行為
例如,一只貓咪是一個(gè)對(duì)象,它的狀態(tài)有:顏色、名字、品種;行為有:搖尾巴、叫、吃等
類(lèi)表示一個(gè)共性的產(chǎn)物,是一個(gè)綜合的特征,是一個(gè)個(gè)性的產(chǎn)物,也是一個(gè)個(gè)體的特征
類(lèi)由屬性和方法組成
屬性:相當(dāng)于一個(gè)個(gè)的特征
方法:相當(dāng)于人的一個(gè)個(gè)的行為,如,說(shuō)話(huà),吃飯...
類(lèi)的定義格式
/**
*類(lèi)的定義格式代碼
**/
[修飾符] class 類(lèi)名{
1~n個(gè)構(gòu)造方法;
0~n個(gè)字段;
0~n個(gè)方法;
}
/**
*定義一個(gè)Demo類(lèi)
*類(lèi)名和方法名:類(lèi)名 首字母大寫(xiě) 方法名首字母小寫(xiě)
**/
class Demo{
String str = "Good"; //成員變量,也成為字段,類(lèi)或?qū)ο笏臄?shù)據(jù),對(duì)類(lèi)狀態(tài)的一種描述
//方法,相當(dāng)于類(lèi)或?qū)ο蟮奶卣骰蛐袨?
public void show(){
System.out.println("輸出"+str); //執(zhí)行輸出語(yǔ)句
}
}
一個(gè)類(lèi)可以包含以下類(lèi)型變量:
● 局部變量:在方法、構(gòu)造方法或者語(yǔ)句塊中定義的變量被稱(chēng)為局部變量
變量聲明和初始化都是在方法中,方法結(jié)束后,變量就會(huì)自動(dòng)銷(xiāo)毀。
● 成員變量:成員變量是定義在類(lèi)中,方法體之外的變量。這種變量在創(chuàng)建對(duì)象的時(shí)候?qū)嵗?
成員變量可以被類(lèi)中方法、構(gòu)造方法和特定類(lèi)的語(yǔ)句塊訪(fǎng)問(wèn)。
● 類(lèi)變量:類(lèi)變量也聲明在類(lèi)中,方法體之外,但必須聲明為static類(lèi)型
對(duì)象的定義、創(chuàng)建以及使用格式
對(duì)象是根據(jù)類(lèi)創(chuàng)建的,在Java中,使用關(guān)鍵字new來(lái)創(chuàng)建一個(gè)新的對(duì)象,創(chuàng)建對(duì)象需要以下三步:
● 聲明:聲明一個(gè)對(duì)象,包括對(duì)象名稱(chēng)和對(duì)象類(lèi)型。
● 實(shí)例化:使用關(guān)鍵字new來(lái)創(chuàng)建一個(gè)對(duì)象。
● 初始化:使用new創(chuàng)建對(duì)象時(shí),會(huì)調(diào)用構(gòu)造方法初始化對(duì)象。
一個(gè)類(lèi)要想真正的進(jìn)行操作,則必須依靠對(duì)象,對(duì)象的定義如下:
類(lèi)名稱(chēng) 對(duì)象名稱(chēng) = new 類(lèi)名稱(chēng)(); 這樣的格式就產(chǎn)生了對(duì)象
如果想要訪(fǎng)問(wèn)類(lèi)中的屬性和方法(方法的定義),,則可以依靠以下語(yǔ)法:
1.訪(fǎng)問(wèn)類(lèi)中的屬性:對(duì)象.屬性; 2.調(diào)用類(lèi)中的方法: 對(duì)象.方法();
在JAVA中對(duì)象聲明有兩個(gè)含義:
1.聲明對(duì)象:personper = null; //表示聲明了一個(gè)對(duì)象,但是此對(duì)象無(wú)法使用,per沒(méi)有具體的內(nèi)存指向
2.實(shí)例化對(duì)象:per = new pcrson();//表示實(shí)例化了對(duì)象,可以使用
類(lèi)名 對(duì)象名稱(chēng) = new 類(lèi)名(); //兩步操作
類(lèi)名 對(duì)象名稱(chēng) ; //聲明對(duì)象
對(duì)象名稱(chēng) = new 類(lèi)名(); //實(shí)例化對(duì)象
例:Demo demo = new Demo();
通過(guò)"對(duì)象名.對(duì)象成員"的方式來(lái)操作對(duì)象中的內(nèi)容
1.static關(guān)鍵字
使用static關(guān)鍵字修飾一個(gè)屬性,聲明為static變量實(shí)質(zhì)上就是全局變量
使用static關(guān)鍵字修飾一個(gè)方法,在一個(gè)類(lèi)中定義一個(gè)方法為static
無(wú)需本類(lèi)的對(duì)象即可調(diào)用此方法
使用static關(guān)鍵字修飾一個(gè)類(lèi)
2.內(nèi)存結(jié)構(gòu)分析
存在方法區(qū),靜態(tài)數(shù)據(jù)不屬于對(duì)象,屬于類(lèi),直接用類(lèi)名調(diào)用屬性,而不是用對(duì)象調(diào)用屬性
無(wú)法從靜態(tài)上下文中引用非靜態(tài):
靜態(tài)屬性和方法在類(lèi)加載后就存到方法區(qū)內(nèi)存中,此時(shí),還沒(méi)有產(chǎn)生對(duì)象,而普通方法和屬性
屬于對(duì)象,所以不能調(diào)用
3.聲明static的方法限制
僅能調(diào)用其他的static方法
只能訪(fǎng)問(wèn)static數(shù)據(jù)
不能以任何方式引用this或super
static關(guān)鍵字特點(diǎn):
隨著類(lèi)的加載而加載,優(yōu)先于對(duì)象存在,被所有對(duì)象所共享,可以直接被類(lèi)名調(diào)用
static關(guān)鍵字使用注意:
靜態(tài)方法只能訪(fǎng)問(wèn)靜態(tài)成員,但是非靜態(tài)成員可以訪(fǎng)問(wèn)靜態(tài)成員;
靜態(tài)方法中不可以使用this,super關(guān)鍵字
主方法(main)是靜態(tài)的
public static void main(String[] agrs){}
static關(guān)鍵字的使用:
用static 修飾的成員表示它屬于這個(gè)類(lèi)共有,而不是屬于該類(lèi)的單個(gè)實(shí)例
static 修飾的字段 == 類(lèi)字段
static 修飾的方法 == 類(lèi)方法
new 表示創(chuàng)建一個(gè)對(duì)象,表示實(shí)例化對(duì)象,表示申請(qǐng)內(nèi)存空間
什么是實(shí)例化:
代碼在類(lèi)中,類(lèi)是抽象的,不是具體的,代碼都是針對(duì)抽象來(lái)編寫(xiě)的,但是程序運(yùn)行起來(lái)就需要用到具體的對(duì)象去執(zhí)行
在編寫(xiě)完類(lèi)以后,具體化成為實(shí)實(shí)在在的對(duì)象,實(shí)例化對(duì)象就是把類(lèi)具體化為一個(gè)對(duì)象的過(guò)程
匿名對(duì)象就是定義一個(gè)沒(méi)有名稱(chēng)的對(duì)象
該對(duì)象特點(diǎn)是只能使用一次,該對(duì)象會(huì)直接在堆中開(kāi)辟內(nèi)存空間
該對(duì)象使用后會(huì)成為垃圾對(duì)象,被GC回收
new 類(lèi)名("").方法名(); //生成匿名對(duì)象,只能使用一次
匿名對(duì)象特點(diǎn):
對(duì)方法或字段只進(jìn)行一次調(diào)用;
new Car().show();
new Car().run();
可作為實(shí)際參數(shù)進(jìn)行傳遞,只在堆內(nèi)存中開(kāi)辟空間,而沒(méi)有在棧內(nèi)存的引用
public void show(Car c){ }
new Car().show(new Car());
<br>//1. 創(chuàng)建了一個(gè)Demo1 的實(shí)例(對(duì)象) <br>Demo1 demo = new Demo1();//2. 把這個(gè)Demo 實(shí)例賦給 demo 變量 <br>demo.brand="HelloWorld"; //引用變量指向?qū)ο?,也就是說(shuō)引用型變量存放的僅僅是一個(gè)引用 <br> ```
this關(guān)鍵字特點(diǎn):this表示當(dāng)前對(duì)象。
調(diào)用類(lèi)中的屬性、調(diào)用類(lèi)中的方法或構(gòu)造方法、表示當(dāng)前對(duì)象
當(dāng)前對(duì)象 ←→ 當(dāng)前正在調(diào)用實(shí)例成員的對(duì)象
換言之:誰(shuí)調(diào)用了方法,誰(shuí)就是當(dāng)前對(duì)象。
什么時(shí)候使用this關(guān)鍵字呢?
1.方法間的相互調(diào)用; 2.this.字段;
3.構(gòu)造器中相互調(diào)用,但是此時(shí)this([參數(shù)])必須寫(xiě)在構(gòu)造方法第一行。
4.this不能用在static修飾的方法里和static修飾的代碼塊里;
JAVA包主要用來(lái)對(duì)類(lèi)和接口進(jìn)行分類(lèi)
當(dāng)開(kāi)發(fā)Java程序時(shí),可能編寫(xiě)成百上千的類(lèi),因此很有必要對(duì)類(lèi)和接口進(jìn)行分類(lèi)
Import語(yǔ)句通俗的說(shuō)就是引入或?qū)氲囊馑?
例如,下面的命令行將會(huì)命令編譯器載入java_installation/java/io路徑下的所有類(lèi)
import java.io.*; //*星號(hào)表示尋找某個(gè)包下被使用到的全部類(lèi)
<br>java.lang : 語(yǔ)言核心類(lèi),系統(tǒng)自動(dòng)導(dǎo)入 <br>java.util : java 工具類(lèi)、集合框架類(lèi)和接口 <br>java.net : 網(wǎng)絡(luò)編程接口和類(lèi) <br>java.io : 流的接口和類(lèi) <br>java.text : java格式化相關(guān)類(lèi) <br>java.sql : jdbc相關(guān)接口和類(lèi) <br>java.awt : 抽象窗口工具集相關(guān)接口和類(lèi) <br>java.swing :圖形用戶(hù)界面相關(guān)接口和類(lèi)(可跨平臺(tái)) <br> ```
| 修飾符 | 類(lèi)內(nèi)部 | 同一個(gè)包| 子類(lèi) | 任何地方 |
| :-------- | --------: | :------: | :------: | :------: |
| private | ? | | | |
| default | ? | ? | | |
| protected | ? | ? | ? | |
| public | ? | ? | ? | ? |
private(私有的):類(lèi)訪(fǎng)問(wèn)權(quán)限:本類(lèi)內(nèi)部可以訪(fǎng)問(wèn),不能繼承到子類(lèi)
default(默認(rèn)的):什么都不寫(xiě),包訪(fǎng)問(wèn)權(quán)限:本類(lèi)內(nèi)部可以訪(fǎng)問(wèn),同包其他類(lèi)也可以訪(fǎng)問(wèn),同包可繼承
protected(保護(hù)的):子類(lèi)訪(fǎng)問(wèn)權(quán)限:本類(lèi)內(nèi)部可以訪(fǎng)問(wèn),不同包的子類(lèi)也可以訪(fǎng)問(wèn),同包其他類(lèi)也可以訪(fǎng)問(wèn),能繼承到子類(lèi)
public(公共的):公共訪(fǎng)問(wèn)權(quán)限:任何地方都可以訪(fǎng)問(wèn),能繼承到子類(lèi)
什么是構(gòu)造方法?構(gòu)造方法就是類(lèi)構(gòu)造對(duì)象時(shí)調(diào)用的方法,用于對(duì)象的初始化工作
構(gòu)造方法是實(shí)例化一個(gè)類(lèi)的對(duì)象時(shí),也就是new的時(shí)候,最先調(diào)用的方法
構(gòu)造方法的定義:是在類(lèi)中定義,定義格式,方法名稱(chēng)與類(lèi)名相同,無(wú)返回值類(lèi)型聲明
對(duì)象實(shí)例化語(yǔ)法:
Demo2 de = new Demo2(); //new Demo2后面有括號(hào),帶括號(hào)表示調(diào)用了方法,此時(shí)調(diào)用的方法就是構(gòu)造方法
每個(gè)類(lèi)都有構(gòu)造方法,如果沒(méi)有顯式地為類(lèi)定義構(gòu)造方法,Java編譯器將會(huì)為該類(lèi)提供一個(gè)默認(rèn)構(gòu)造方法
在創(chuàng)建一個(gè)對(duì)象的時(shí)候,至少要調(diào)用一個(gè)構(gòu)造方法,構(gòu)造方法的名稱(chēng)必須與類(lèi)同名,一個(gè)類(lèi)可以有多個(gè)構(gòu)造方法
對(duì)象的產(chǎn)生格式:
類(lèi)名稱(chēng) 對(duì)象名 = new 類(lèi)名稱(chēng)();
因?yàn)橛?),所以是方法,實(shí)際上它就是構(gòu)造方法,并且是非私有的構(gòu)造方法。
如:Demo3 de = new Demo3();
構(gòu)造方法特點(diǎn):
方法名與類(lèi)名相同,不用定義返回值類(lèi)型 ,不需要寫(xiě)return語(yǔ)句
構(gòu)造方法作用:給類(lèi)中的字段進(jìn)行初始化,可以用來(lái)創(chuàng)建對(duì)象。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: