android 静态方法 构造方法,android基础-Java篇02:类和对象、构造方法、访问权限控制、重载、this关键字、static关键字...
一、類和構造方法
(類和對象在百度百科已經有詳細的介紹,這里只做簡單的描述以及幫助理解;百度百科:類和對象,需要注意的是,百度百科類和對象的舉例中都是C++,書寫格式不要和Java混淆!)
什么是類?什么是對象?對象是對客觀事物的抽象,類是對對象的抽象。類是一種抽象的數據類型。它們之間的關系是,對象是類的實例,類是對象的模板。
舉個例子:老師是對所有老師的總稱,李老師是老師行業里的一個老師。那么老師就可以理解為是類,它是抽象的;而李老師就可以理解為是對象,他是老師這個類的一個實例。
a)類
public class Teacher{
public string name;
public int age;
public static int num
public void TeacherRank(){
intgrade;
}
}
一個類可以包含三種變量:1、局部變量2、成員變量3、類變量(靜態變量)
1、局部變量:顧名思義,局部的變量,在方法或者語句塊中被定義的變量,在方法結束后,變量就會自動銷毀。如上代碼中,TeacherRank方法中的grade變量。
2、成員變量:定義在類中、方法之外的變量,可以被類中的方法和語句塊訪問,在創建對象的時候實例化。如上代碼的name和age。
3、類變量(靜態變量):聲明在類中、方法體之外,用static修飾。如上代碼中的num。
b)構造方法:
在類中,不得不提到構造方法,每個類都有構造方法,構造方法的名稱必須與類同名,一個類可以有多個構造方法,然而在上文例程中并沒有這個方法,并沒有看到和類同名的構造方法,這是因為如果沒有顯式的定義構造方法的話,編譯器將會為該類提供一個默認構造方法:public Teacher (){}。
其次,普通方法是用來定義對象具備的功能,只能被對象調用且可以多次調用;而構造函數是用于對象初始化,所以定義的是對象在建立時應該具備的內容,由Java虛擬機(JVM)調用,且只在創建對象時候調用。
那我們再修改上文代碼,加入構造方法:
public class Teacher{
public string name;
public int age;
public static int num
public Teacher (){}
public Teacher (String name , Int age){
this.name= name;
this.age= age;
}
public void TeacherRank(){
intgrade;
}
}
二、對象
對象是通過new className(類名)產生的,在創建一個對象的時候,至少要調用一個構造方法。
例如:Teacher MrLi = new Teacher();
或者Teacher MrLi = new Teacher(“LiLei”,23);
可以看出創建對象有三步:聲明、實例化、初始化。對應上面代碼,聲明Teacher的一個叫MrLi的對象,用關鍵字new來實例化,再使用構造方法來初始化對象。
三、訪問權限控制
為供類庫開發人員向客戶端程序員指明哪些是可用的、哪些是不可用的,Java提供了訪問權限修飾符,按照權限大到小排序:public、protected、無修飾詞、private。
在說明訪問權限控制之前,簡單說明什么是包,包就是一組類在單一的名字空間之下被組織在一起,就像《Thinking in Java》一書中舉的例子,在Java的標準發布中有一個工具庫,被組織在java.util名字空間之下,里面有很多的工具類,那么java.util就是一個包。需要使用這些工具類的時候(擁有權限的情況下),需要使用import關鍵字將其導入或者直接在創建對象的時候指定包名,如import java.util.ArrayList和java.util.ArrayList list =new java.util.ArrayList()。
1.public:權限最大,允許所有類訪問,但其他包下的類想要訪問,使用import關鍵字將其導入。
2.Protected:不可以被其他包使用,可在本類、同包下以及繼承類允許被訪問。
3.無修飾詞:只可以在本類、同包下允許被訪問。
4.private:只在本類中允許被訪問。
四、重載(overload)
為了方便理解重載,舉個現實交流的例子:你去了你朋友家,你朋友家非常大,你想上廁所,這時候你就會問“我想去方便一下,你方便告訴我廁所在哪嗎”,句子中兩個“方便”卻有不同的意思。那么這兩個“方便”就構成了重載。
重載指的就是在一個類中,除參數以外,其他外部特征都一樣的方法(方法名、返回值聲明、修飾符)。
最典型的例子就是上面提到的構造方法,public Teacher (){}和public Teacher (String name , Intage){…}就構成了重載。
當然,凡是方法都可以構成重載。我們修改上面例程如下:
public class Teacher{
…
public Teacher (){}
public Teacher (String name , Int age){…}
publicTeacherRank(){…}
publicTeacherRank(Int rank){…}
}
方法TeacherRank()和方法TeacherRank(Int rank)也構成重載。
五、this關鍵字
在例程中,
public class Teacher{
public string name;
public int age;
…
public Teacher (String name , Int age){
this.name = name;
this.age = age;
}
…
}
你會發現Teacher類中有name和age兩個成員變量,而Teacher (String name , Int age)方法中,也有兩個名字相同的局部變量,那么問題來了,在Teacher (String name , Int age)中,我們如何區分哪個是成員變量的name和age?哪個是局部變量的name和age呢?為此有一個專門的關鍵字:this。this關鍵字只能在方法內部使用,表示對“調用方法的那個對象”的引用。
那么答案非常明了了,在上面例程中,方法內this.name和this.age指的就是成員變量。因為類是通過對象來實現的,this表示當前對象,那么這里對象的name和age只能指的是那兩個成員變量。
既然this表示當前對象的引用,那么自然就可以用this來實現構造器中調用構造器來達到避免重復代碼。需要注意的是,可以用this調用一個,但是不能調用用兩個,而且this的調用必須寫在第一行,例程修改如下:
public class Teacher{
public string name;
public int age;
…
public TeacherRank(){…}
public TeacherRank(String name){
this.name = name;
}
public Teacher (String name , Int age){
this(name);
this.age =age;
}
…
}
六、static關鍵字
static(靜態)可以修飾變量、方法以及代碼塊,被修飾的變量和方法分別可稱為靜態變量(類變量)和靜態方法。
a)靜態變量(類變量)如:public static int num = 0;
靜態變量會被所有對象共享,同時,局部變量不能被聲明為static變量(這里需要說明的誤區是,static修飾之后不會影響訪問權限。而且Java沒有全局變量一說)。
b)靜態方法如:public static voidnum(){…}
靜態方法不依附于任何對象就可以被訪問,正是因為其不依附于任何對象,所以不能訪問類非靜態方法/變量(因為非靜態的是必須依附在對象上),相反的,類非靜態方法是可以訪問靜態方法/變量的。
c)static修飾代碼塊
修改之前的例程如下:
public class Teacher{
…
static{
int youngage = 30;
…
}
public void AgeGroup(){
if(age < youngage){System.out.println(“年輕教師”);}
}
}
可以看出直接用static修飾{代碼塊}即可,但是這么用有什么區別呢?
那對比一下代碼:
public class Teacher{
…
public void AgeGroup(){
int youngage = 30;
if(age < youngage){System.out.println(“年輕教師”);}
}
}
方法的功能上沒什么區別,但是在每次調用方法AgeGroup ()時,都要創建youngage并賦值,而聲明為static之后,只要創建,就一直存放在內存中。
七、final關鍵字
final,不可改變的,為了更好的設計或效率,常常需要final來聲明。
a)final數據private final int i = 0;
final關鍵字修飾數據時,可以使數據恒定不變,如一個永不改變的編譯時常量、一個運行時初始化之后就不會改變的值。
final定義常量:常量必須是基本數據類型,定義時必須對其進行賦值。
final修飾對象:對象引用初始化時指向一個對象之后,就無法再改變它,令它指向其他對象。
當final修飾參數時候,參數同上一樣,不能被修改,只能被讀取。
空白final:這里需要了解一下空白final,空白final即使聲明為final之后未給初始值的情況,在Java中是允許存在的,如:private final int i。但是final在使用前必須被初始化。
b)final方法private final void i(){ };
final修飾方法的時候主要出于一個作用:把方法鎖定,避免任何繼承類修改其含義。(無法覆蓋)。當然要注意的是,在早期的Java中,可以使用final方法來提高效率,但是在方法內程序代碼很多,方法很大時就看不到任何效果,在Java SE5和6的時候,應該讓編譯器和JVM去處理效率問題。
c)final類
final修飾類的時候作用和方法差不多,就是不可以被繼承,不存在子類。當一個類被定義為final時,其類內的所有方法都默認為final,不管類中的方法是否定義了final。
------------------------------------------------分割線----------------------------------------------------------
上文如有錯誤、寫得不合理以及有疑惑的地方,希望您可以在評論區提出。
在下十分感謝。
如果只是想在評論區吐吐槽、聊聊心得、賣個萌,同樣也十分歡迎。
祝大家生活美好,干杯!~( ゜▽゜)つロ
轉載請注明原作者以及附上原文章地址,謝謝。
總結
以上是生活随笔為你收集整理的android 静态方法 构造方法,android基础-Java篇02:类和对象、构造方法、访问权限控制、重载、this关键字、static关键字...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 废纸打包机多少钱啊?
- 下一篇: 极米z6x怎么连airpods耳机