目錄
1.本文主要內(nèi)容簡介
2.“類”的知識補充
3.總結(jié)
0.前言
本文重點在于講解Java中類的相關(guān)知識的后半部分
若想要了解“類”的知識的前半部分蹂风,可以去看前面的文章
《[Java]開發(fā)安卓,你得掌握的Java知識3》由于最終目的是要開發(fā)安卓app旭从,
因此這里使用的IDE是AS(Android Studio)
(不會使用的可以參考下面這篇文章中的例子)
《[Java]開發(fā)安卓赏殃,你得掌握的Java知識2》
1.本文主要內(nèi)容簡介
類的基礎(chǔ)知識補充
對應知識的相關(guān)細節(jié)
實際例子
2.“類”的基礎(chǔ)知識補充
《[Java]開發(fā)安卓敷待,你得掌握的Java知識3》中,
講解了“類”的基礎(chǔ)概念仁热、屬性榜揖、方法、對象等概念
- 本文我們則補充講解:setter/getter抗蠢、靜態(tài)方法举哟、單例設(shè)計模式、重載
什么是“setter/getter”
當類中的屬性被設(shè)置為私有的(private)時候迅矛,外部無法隨便訪>問該變量
此時妨猩,如果還是想要在外部對對象的屬性進行訪問,使用setter/getter就是方法之一
setter就是一個接收器秽褒,如果拿人作為例子壶硅,
setter相當于是手。
別人給我們食物销斟,一般不會也沒辦法給到我們的嘴里
因為我們的嘴是私有的
我們會用手去接收別人給過來的食物庐椒,然后放到嘴里,這就類似于setter的功能
public Person{
public String name;
private int age;
private int id;
}
如上代碼蚂踊,age和id是不能通過對象直接在外部訪問的
Person p = new Person();
p.name = "小王"; //可以
p.age = 20; //不行约谈,私有變量不能直接外部訪問
p.id = 001;//不行,私有變量不能直接外部訪問
不能直接外部訪問,就得考慮使用setter/getter:
public Person{
public String name;
private int age;
private int id;
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
public void setId(int id){
this.id = id;
}
public int getId(){
return this.id;
}
}
如此就可以在外部調(diào)用對應的函數(shù)來賦值棱诱、獲取值:
Person p =new Person();
p.setAge(20);
System.out.println(p.getAge());//輸出為20
什么是靜態(tài)屬性泼橘、方法
在上一篇文章中,我們已經(jīng)大致講過了靜態(tài)方法的定義與使用
這里我們再次統(tǒng)一講解一下
- (1)從外觀角度來說军俊,
使用static修飾的屬性變量侥加、方法就是靜態(tài)屬性、靜態(tài)方法- (2)從使用的角度來說粪躬,
靜態(tài)屬性、方法是可以直接使用類名.屬性名或類名.方法的形式來調(diào)用的- (3)從內(nèi)存的角度來說昔穴,
靜態(tài)的屬性镰官、方法會在對象創(chuàng)建之前優(yōu)先加載
需要注意:
- 什么時候使用靜態(tài)方法?
一般是不需要對象去完成的方法吗货,會寫成靜態(tài)方法
(不需要對象一般情況意味著不需要實例化對象泳唠,使用對象的屬性來記錄數(shù)據(jù))
- 什么時候使用靜態(tài)屬性?
當需要定義一個不會再改變的常量的時候宙搬,會寫成靜態(tài)屬性
(靜態(tài)的屬性只能賦值一次)
class Subject{
public static String[] name= {"計算機","數(shù)學","英語"};
}
class Person{
public static void sayHello(){
System.out.println("hello");
}
}
什么是單例設(shè)計模式
- 在一些程序中笨腥,會使用到類似管理器的東西,這種管理器如果創(chuàng)建出一個對象勇垛,會出現(xiàn):無法保證程序的任意地方都能訪問到該對象的問題(也不能重新創(chuàng)建一個對象)
為了避免這個問題脖母,同時還要防止全局變量的產(chǎn)生,就需要用到單例設(shè)計模式
public PersonManager{
//1.創(chuàng)建一個靜態(tài)的變量
public static PersonManager manaer = new PersonManager();
//2.構(gòu)造函數(shù)私有化
private PersonManager(){}
public void showPerson(){
//具體函數(shù)定義
}
}
public staitc void main(String[] args){
PersonManager.manager.showPerson();
}
- 單例設(shè)計模式的具體實現(xiàn)步驟就是:
(1)將構(gòu)造方法私有化
(2)創(chuàng)建一個靜態(tài)的變量- 以后要調(diào)用這個類的函數(shù)闲孤,則不要去實例化創(chuàng)建對象谆级,而是用:
類名.manager.方法()的格式
(manager可以改,看你具體定義的時候?qū)懙氖鞘裁矗?/li>
這樣就可以避免類的對象因為作用域問題讼积,
而在一些地方無法被調(diào)用的尷尬問題
什么是重載
所謂重載肥照,簡單來說,就是當函數(shù)a已經(jīng)存在時勤众,通過改變函數(shù)a的返回值舆绎、參數(shù)個數(shù)、參數(shù)類型中的一個或多個们颜,而產(chǎn)生的同名但是返回值吕朵、參數(shù)、函數(shù)具體內(nèi)容有一些不同的函數(shù)b
public void showText(String text){
System.out.println(text);
}
public void showText(int num){
System.out.println("num ="+num);
}
public int showText(int num){
if(num==1){
return 1;
}else{
System.out.println("num ="+num);
return 0;
}
}
- 同樣是叫做showText掌桩,但是這三個函數(shù)卻不盡相同边锁,這就是函數(shù)的重載。
- 在調(diào)用的時候波岛,根據(jù)返回值茅坛、參數(shù)的不同,會自動判斷使用哪個函數(shù)
3.總結(jié)
(1)基本上將類的知識講完了(還有一些日后再補充),有了這些知識基本上就可以正式去寫一些Java代碼了
(2)這里沒有貼出實際例子贡蓖,知識給了一些臨時例子的理由是曹鸠,面向?qū)ο蟮乃季S使得程序中各個部分都盡可能地形成了一個整體,零散的代碼其實意義不大
(3)如果說C語言寫代碼時斥铺,要將問題盡可能往程序上靠攏彻桃,讓問題服務(wù)于代碼,那么Java可以說是反過來晾蜘,讓程序盡可能貼近于現(xiàn)實邻眷,將一切都盡可能地形成一個整體(封裝),而不是只是在堆砌函數(shù)
(4)因此在日后剔交,當某個程序?qū)懙谋容^完整后肆饶,才會考慮將代碼貼出并且進行詳細分析