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