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