Java面向?qū)ο蟪绦蛟O(shè)計(jì):類(lèi)的定義,靜態(tài)變量,成員變量,構(gòu)造函數(shù),封裝與私有,this概念與用法詳解
本文實(shí)例講述了Java面向?qū)ο蟪绦蛟O(shè)計(jì):類(lèi)的定義,靜態(tài)變量,成員變量,構(gòu)造函數(shù),封裝與私有,this概念與用法。分享給大家供大家參考,具體如下:
本文內(nèi)容:
- 什么是面對(duì)對(duì)象
- 類(lèi)的定義與對(duì)象實(shí)例化
- 成員變量
- 成員變量的有效范圍
- 成員變量的賦值
- 靜態(tài)變量、方法與實(shí)例變量、方法
- 構(gòu)造函數(shù)
- 封裝與私有
- this關(guān)鍵字
注:函數(shù)和方法是一樣?xùn)|西?!居捎谖抑皩W(xué)習(xí)的時(shí)候有些書(shū)籍不是同樣的說(shuō)法,書(shū)看多了,我就習(xí)慣了不同情況下用不同的說(shuō)法】
首發(fā)時(shí)間:2018-03-22
什么是面對(duì)對(duì)象:
- 面向?qū)ο髲?qiáng)調(diào)行為處于對(duì)象之中,并不直接執(zhí)行行為,而是通過(guò)對(duì)象執(zhí)行行為
- 類(lèi)是對(duì)象的抽象,對(duì)象是類(lèi)的具體實(shí)例。 【可以說(shuō),人是一個(gè)類(lèi),而不同身份的你我他是一個(gè)具體實(shí)例。人這個(gè)類(lèi)抽象出了我們?nèi)祟?lèi)共有的屬性,而我們?nèi)耸侨祟?lèi)的各種屬性的具體實(shí)例結(jié)果?!?/li>
- 面向?qū)ο蟮幕咎卣鳎悍庋b,繼承,多態(tài)
- 封裝:比如一個(gè)對(duì)象把它的屬性和方法都封裝起來(lái)的話(huà),它執(zhí)行的屬性和方法都是這個(gè)對(duì)象的,而不是其他對(duì)象的。
- 繼承:子類(lèi)可以繼承父類(lèi)的屬性和方法。比如“人類(lèi)”繼承了“哺乳類(lèi)”的屬性和方法,又增添人類(lèi)獨(dú)有的屬性和方法。
- 多態(tài):一種多態(tài)是指同一個(gè)操作被不同對(duì)象執(zhí)行時(shí)有不同的結(jié)果(比如:狗的say是“汪汪汪”,而貓的是"喵喵喵");另一種多態(tài)是根據(jù)對(duì)象的傳入而決定執(zhí)行不同的方法。【本質(zhì)上這兩個(gè)是一樣的】
類(lèi)的定義與對(duì)象實(shí)例化:
類(lèi)的定義:
- 類(lèi)的定義包括兩部分:類(lèi)聲明和類(lèi)體
- 類(lèi)是java程序的基本要素
- 定義類(lèi)的格式:
- 修飾符可以是public 或空: public代表即使不同包也能訪(fǎng)問(wèn)該類(lèi);而空代表只能該類(lèi)只能在同一個(gè)包內(nèi)訪(fǎng)問(wèn)。
- 類(lèi)體的內(nèi)容包括變量的生命和方法的定義?!舅詥为?dú)的定義是錯(cuò)誤的,只能聲明并同時(shí)定義】
對(duì)象實(shí)例化
- 類(lèi)的實(shí)例化就是創(chuàng)建一個(gè)對(duì)象:
- 創(chuàng)建對(duì)象:類(lèi)名 變量名 =new 類(lèi)名()【類(lèi)名()可以傳入一些參數(shù)來(lái)初始化對(duì)象,由類(lèi)的同名方法(構(gòu)造方法,下面講)定義能傳入什么參數(shù)】

- 匿名對(duì)象:簡(jiǎn)單來(lái)說(shuō)就是沒(méi)有變量名的實(shí)例化,直接使用new 類(lèi)名()來(lái)執(zhí)行操作,由于沒(méi)有變量名來(lái)特異的標(biāo)記一片內(nèi)存空間,所以匿名對(duì)象一般只使用一次,比如new Dog().hello();
- 調(diào)用方法或變量:對(duì)于實(shí)例方法或變量的可以直接使用對(duì)象來(lái)調(diào)用;而對(duì)于靜態(tài)方法或變量,既可以使用對(duì)象,也可以使用類(lèi)來(lái)調(diào)用。
- 創(chuàng)建對(duì)象:類(lèi)名 變量名 =new 類(lèi)名()【類(lèi)名()可以傳入一些參數(shù)來(lái)初始化對(duì)象,由類(lèi)的同名方法(構(gòu)造方法,下面講)定義能傳入什么參數(shù)】
class Dog{
String name;
int foot=4;
Dog(){//這是一個(gè)構(gòu)造函數(shù)
this.name="旺財(cái)";
}
void hello() {
System.out.println("hello,this is a dog");
}
static void static_hello() {
System.out.println("hello,this is a dog too");
}
}
public class Demo {
public static void main(String args[]) {
Dog d=new Dog();
System.out.println(d.foot);//4
d.hello();//hello,this is a dog
d.static_hello();//hello,this is a dog too
Dog.static_hello();//hello,this is a dog too
}
}
成員變量:
成員變量的有效范圍
- 成員變量在整個(gè)類(lèi)范圍內(nèi)有效,與變量聲明的位置無(wú)關(guān)。方法中的局部變量從聲明它的位置開(kāi)始生效,并且只在方法體內(nèi)有效。
- 當(dāng)局部變量跟成員變量同名時(shí),如果想特別的使用成員變量,可以使用“this.變量名”
- 成員變量有默認(rèn)值,而局部變量沒(méi)有默認(rèn)值。
成員變量的賦值:
- 可以使用構(gòu)造函數(shù)來(lái)對(duì)一些成員變量初始化
- 如果成員變量不是私有的,也可以直接取得變量名來(lái)賦值,比如dog.age=18
靜態(tài)變量、方法與實(shí)例變量、方法:
根據(jù)變量、方法是否有static修飾可以分為實(shí)例變量,實(shí)例方法和靜態(tài)變量(類(lèi)變量),靜態(tài)方法(類(lèi)方法)
-
靜態(tài)變量,靜態(tài)方法:
-
被static修飾的成員的特點(diǎn):
-
隨著類(lèi)的加載而加載,優(yōu)先于對(duì)象存在,靜態(tài)成員內(nèi)存位于方法區(qū)
-
被所有對(duì)象所用享【所以可稱(chēng)為類(lèi)變量或類(lèi)方法】
-
可以直接類(lèi)名調(diào)用
-
靜態(tài)方法只能訪(fǎng)問(wèn)靜態(tài)成員
-
靜態(tài)方法中不可以寫(xiě)this,super關(guān)鍵字
-
-
-
實(shí)例變量、實(shí)例方法:
- 實(shí)例變量、實(shí)例方法是對(duì)象的變量和方法,對(duì)象操作變量或方法也只是操作自己的變量或方法,不會(huì)影響其他對(duì)象。
實(shí)例變量\方法跟靜態(tài)變量\方法的區(qū)別好比:“泰迪狗類(lèi)”比如有一個(gè)共有屬性“狗種類(lèi)名”,那么這個(gè)屬性應(yīng)該是所有泰迪狗都有的,并且是泰迪狗共享的,如果某一天人類(lèi)想改泰迪狗的種類(lèi)名稱(chēng),那么應(yīng)該是所有泰迪狗都改的(靜態(tài)的);而每一只泰迪狗都有自己的主人,這是由每一只狗自身決定的,所以這是特有屬性,即使這只狗換了主人,也不會(huì)影響別的狗。(實(shí)例的)
構(gòu)造函數(shù):
- 構(gòu)造函數(shù)是類(lèi)中的一種特殊函數(shù),構(gòu)造函數(shù)的名字與類(lèi)的名字相同,而且沒(méi)有類(lèi)型。
- 構(gòu)造函數(shù)負(fù)責(zé)對(duì)類(lèi)對(duì)象的特定屬性初始化?!颈热缑恳恢还穼?duì)象都有不同的名字,而狗類(lèi)是一個(gè)模板,是沒(méi)有名字的,而構(gòu)造函數(shù)可以做到給狗定義名字?!?/li>
- 類(lèi)中可以有多個(gè)構(gòu)造函數(shù),它們以函數(shù)重載的方式存在。
- 構(gòu)造函數(shù)是沒(méi)有類(lèi)型的,是直接以“ 類(lèi)名(){}” 作為函數(shù)。
- 類(lèi)中會(huì)默認(rèn)有一個(gè)無(wú)參數(shù)的構(gòu)造函數(shù),如果定義了其他構(gòu)造函數(shù),那么這個(gè)默認(rèn)的無(wú)參構(gòu)造函數(shù)就會(huì)不默認(rèn)存在了。
class Dog{
String name;
Dog(){
this.name="旺財(cái)";
}
Dog(String name){
this.name=name;
}
}
public class Init_usage {
public static void main(String args[]) {
Dog d3=new Dog();
Dog d4=new Dog("小菜");
System.out.println(d3.name);
System.out.println(d4.name);
}
}
補(bǔ)充:
- 構(gòu)造函數(shù)之間可以相互調(diào)用,但要防止遞歸調(diào)用。


- 調(diào)用其他構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)初始化在有多個(gè)變量需要初始化的時(shí)候有明顯的代碼節(jié)省。
封裝與私有:
- 類(lèi)的封裝的一個(gè)體現(xiàn)是變量和函數(shù)的私有化
- 封裝的準(zhǔn)則:
- 將不需要對(duì)外提供的內(nèi)容都隱藏起來(lái)。
- 將屬性都隱藏,提供公共方法對(duì)其訪(fǎng)問(wèn)。
- 私有化使類(lèi)的非公共屬性隱藏了起來(lái),比如一個(gè)“人類(lèi)”對(duì)象有自己的資產(chǎn),一般只有自己才能知道自己有多少資產(chǎn),并且不想直接給別人看到,但如果別人問(wèn)題,還是會(huì)告訴別人的(隱藏了自己的資產(chǎn)情況,但是自己能夠使用方法獲得結(jié)果,這個(gè)方法是開(kāi)放的,調(diào)用就是相當(dāng)于別人問(wèn))。
- 可以使用private來(lái)使變量和函數(shù)私有化,這樣之后不能直接使用 對(duì)象.變量 或 對(duì)象.函數(shù) 來(lái)調(diào)用,只有對(duì)象內(nèi)部的方法才能調(diào)用
- 將變量或方法私有化之后,一般對(duì)外提供getXXX,setXXX方法進(jìn)行訪(fǎng)問(wèn),提高數(shù)據(jù)訪(fǎng)問(wèn)的安全性。
class Man{
private int money;
String name;
Man(String name,int money){
this.name=name;
this.money=money;
}
int getmoney(){
return money;
}
void setMoney(int money){
this.money=money;
}
}
public class Private_usage {
public static void main(String[] args) {
Man m=new Man("lilei",2000);
System.out.println(m.name);//lilei
// System.out.println(m.money);//報(bào)錯(cuò)的,因?yàn)樗接辛?,不能訪(fǎng)問(wèn)
// System.out.println(m.wife);//報(bào)錯(cuò)的,因?yàn)樗接辛耍荒茉L(fǎng)問(wèn)
System.out.println(m.getmoney()); //2000
m.setMoney(6000);
System.out.println(m.getmoney());//6000
}
}
this關(guān)鍵字:
- this代表當(dāng)前對(duì)象(調(diào)用函數(shù)時(shí)代表當(dāng)前調(diào)用該函數(shù)的對(duì)象),比如在類(lèi)中可以使用this.XXX來(lái)調(diào)用對(duì)象自己的變量或方法。
- 當(dāng)局部變量和成員變量同名時(shí),可以用this關(guān)鍵字區(qū)分,this.XXX代表使用對(duì)象自身的變量
-
類(lèi)中的成員變量默認(rèn)是帶有this前綴的,但遇到同名時(shí)必須加以區(qū)分。
-
this加上參數(shù)列表(this(參數(shù)))的方式就是訪(fǎng)問(wèn)本類(lèi)中符合該參數(shù)的構(gòu)造函數(shù)
-
用于調(diào)用構(gòu)造函數(shù)的this語(yǔ)句必須放在第一行,因?yàn)槌跏蓟瘎?dòng)作要優(yōu)先執(zhí)行
class Person{
String name;
int age;
Person(String name,int age){
this.name=name;
this.age=age;
}
void hello() {
this.sysprint();
// sysprint();
}
void sysprint() {
System.out.println("hello world!");
}
}
public class This_usage {
public static void main(String args[]) {
Person p1=new Person("lilei",18);
p1.hello();//hello world!
}
}
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
SpringCloud-Gateway網(wǎng)關(guān)的使用實(shí)例教程
Gateway網(wǎng)關(guān)在微服務(wù)架構(gòu)中扮演了不可或缺的角色,通過(guò)集中化管理、智能路由和強(qiáng)大的過(guò)濾器機(jī)制,為構(gòu)建高效、可擴(kuò)展的微服務(wù)系統(tǒng)提供了有力支持,這篇文章主要介紹了SpringCloud-Gateway網(wǎng)關(guān)的使用,需要的朋友可以參考下2024-03-03
詳解Java中的File文件類(lèi)以及FileDescriptor文件描述類(lèi)
在Java中File類(lèi)可以用來(lái)新建文件和目錄對(duì)象,而FileDescriptor類(lèi)則被用來(lái)表示文件或目錄的可操作性,接下來(lái)我們就來(lái)詳解Java中的File文件類(lèi)以及FileDescriptor文件描述類(lèi)2016-06-06
springboot docker jenkins 自動(dòng)化部署并上傳鏡像的步驟詳解
這篇文章主要介紹了springboot docker jenkins 自動(dòng)化部署并上傳鏡像的相關(guān)資料,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
基于MyBatis的關(guān)聯(lián)查詢(xún)優(yōu)化與應(yīng)用實(shí)踐
在實(shí)際項(xiàng)目開(kāi)發(fā)中,關(guān)聯(lián)查詢(xún)是一種常見(jiàn)的需求,尤其是當(dāng)涉及到多個(gè)表之間的數(shù)據(jù)統(tǒng)計(jì)、關(guān)聯(lián)查詢(xún)以及嵌套對(duì)象的構(gòu)建時(shí),如何確保數(shù)據(jù)的準(zhǔn)確性和實(shí)時(shí)性,是開(kāi)發(fā)者必須面對(duì)的挑戰(zhàn),本文將介紹基于MyBatis的關(guān)聯(lián)查詢(xún)優(yōu)化與應(yīng)用實(shí)踐,需要的朋友可以參考下2024-12-12
基于Spring MVC的文件上傳和下載實(shí)現(xiàn)方法
在Web應(yīng)用程序中,文件上傳和下載是常見(jiàn)的功能,Spring MVC框架提供了方便的方式來(lái)實(shí)現(xiàn)這些功能,本文將介紹如何使用Spring MVC實(shí)現(xiàn)文件上傳和下載,需要的朋友可以參考下2023-05-05
SpringBoot中的ApplicationListener事件監(jiān)聽(tīng)器使用詳解
這篇文章主要介紹了SpringBoot中的ApplicationListener事件監(jiān)聽(tīng)器使用詳解,ApplicationListener是應(yīng)用程序的事件監(jiān)聽(tīng)器,繼承自java.util.EventListener標(biāo)準(zhǔn)接口,采用觀(guān)察者設(shè)計(jì)模式,需要的朋友可以參考下2023-11-11
詳解Java Spring各種依賴(lài)注入注解的區(qū)別
這篇文章主要介紹了詳解Java Spring各種依賴(lài)注入注解的區(qū)別的相關(guān)資料,需要的朋友可以參考下2016-03-03





