Java中的方法、常量、變量、參數(shù)用例詳解
在上一篇文章:一文搞清楚Java中的包、類、接口中我們講了Java中的包、類和接口,今天繼續(xù)將剩下的方法、常量、變量以及參數(shù)梳理完。
Java中的變量與常量
在JVM的運轉(zhuǎn)中,承載的是數(shù)據(jù),而數(shù)據(jù)的一種變現(xiàn)形式就是“量”,量分為:常量與變量,我們在數(shù)學和物理學中已經(jīng)接觸過變量的概念了,在Java中的變量就是在程序運行過程中可以改變其值的量。
常量
與變量相對應的是常量,所謂常量,即在作用域內(nèi)保持不變的值,一般用final關(guān)鍵字進行修飾,通常分為全局常量、類內(nèi)常量、局部常量。
【程序用例】
public class Person { //全局常量 public static final String SEX = "男"; //類內(nèi)常量 private static final String BIRTHPLACE ="安徽"; public void method1(String str){ //局部常量-方法常量 final String LANGUAGE = "漢語"; } public void method2(final int age){ //局部常量-參數(shù)常量,不可改,這段代碼會編譯報錯 age = 20; } }
變量
變量同樣分為局部變量、成員變量和靜態(tài)變量
【程序用例】
public class Person { //成員變量 //在類內(nèi)部但在方法體外聲明的變量稱為成員變量,或者實例變量,或者字段。 //之所以稱為實例變量,是因為該變量只能通過類的實例(對象)來訪問。 int data1 = 3; //靜態(tài)變量 //通過 static 關(guān)鍵字聲明的變量被稱為靜態(tài)變量(類變量), //它可以直接被類訪問 static int data2 = 4; public int sum(){ //局部變量 //在方法體內(nèi)聲明的變量被稱為局部變量,該變量只能在該方法內(nèi)使用, //類中的其他方法并不知道該變量。 int a = 1; int b = 2; return a+b; } public static void main(String[] args) { Person person = new Person(); System.out.println(person.data1 == person.sum()); System.out.println(Person.data2 == person.sum()); } }
【變量使用時注意事項】
局部變量
局部變量聲明在方法、構(gòu)造方法或者語句塊中。
局部變量在方法、構(gòu)造方法、或者語句塊被執(zhí)行的時候創(chuàng)建,當它們執(zhí)行完成后,將會被銷毀。
訪問修飾符不能用于局部變量。
局部變量只在聲明它的方法、構(gòu)造方法或者語句塊中可見。
局部變量是在棧上分配的。
局部變量沒有默認值,所以局部變量被聲明后,必須經(jīng)過初始化,才可以使用。
成員變量
成員變量聲明在一個類中,但在方法、構(gòu)造方法和語句塊之外。 當一個對象被實例化之后,每個成員變量的值就跟著確定。
成員變量在對象創(chuàng)建的時候創(chuàng)建,在對象被銷毀的時候銷毀。
成員變量的值應該至少被一個方法、構(gòu)造方法或者語句塊引用,使得外部能夠通過這些方式獲取實例變量信息。 成員變量可以聲明在使用前或者使用后。
訪問修飾符可以修飾成員變量。
成員變量對于類中的方法、構(gòu)造方法或者語句塊是可見的。一般情況下應該把成員變量設為私有。通過使用訪問修飾符可以使成員變量對子類可見;成員變量具有默認值。數(shù)值型變量的默認值是
0,布爾型變量的默認值是 false,引用類型變量的默認值是 null。變量的值可以在聲明時指定,也可以在構(gòu)造方法中指定。
靜態(tài)變量
靜態(tài)變量在類中以 static 關(guān)鍵字聲明,須在方法、構(gòu)造方法和語句塊之外。
無論一個類創(chuàng)建了多少個對象,類只擁有靜態(tài)變量的一份拷貝。 靜態(tài)變量除了被聲明為常量外很少使用。 靜態(tài)變量儲存在靜態(tài)存儲區(qū)。
靜態(tài)變量在程序開始時創(chuàng)建,在程序結(jié)束時銷毀。 與成員變量具有相似的可見性。但為了對類的使用者可見,大多數(shù)靜態(tài)變量聲明為 public 類型。
靜態(tài)變量的默認值和實例變量相似。 靜態(tài)變量還可以在靜態(tài)語句塊中初始化
Java中的方法
何為方法?我的理解是:方法是Java中對邏輯行為的一種程序?qū)崿F(xiàn),通過方法的調(diào)用去實現(xiàn)我們想讓對象所擁有的行為,比如一個對象的增刪改查,只需要創(chuàng)建相應的方法即可!
方法的聲明
在方法聲明中,最重要的就是方法名(采用小駝峰命名法)與參數(shù),這兩者構(gòu)成的方法的簽名,是方法重載的判斷依舊,除此之外,在聲明方法的時候,還會設置訪問權(quán)限、是否靜態(tài)、返回值類型等。結(jié)構(gòu)如下圖:
實例方法
在類中聲明,無需static、abstract等關(guān)鍵字修飾,創(chuàng)建類對象,通過對象的引用所調(diào)用的方法為實例方法,類中最為常見的一種方法類型。上代碼!
public class Test { public static void main(String[] args) { Test sum = new Test(); System.out.println(sum.add(1,2)); } //實例方法,求兩數(shù)之和 public int add(int a, int b) { return a + b; } }
靜態(tài)方法
若方法的聲明中加上了static關(guān)鍵字,靜態(tài)方法是屬于類的,而不是屬于類創(chuàng)建的對象或?qū)嵗模试谡{(diào)用時無需通過對象實例。
public class Test { public static void main(String[] args) { System.out.println(sub(2,1)); } public static int sub(int a,int b){ return a - b; } }
【注意事項】
1、靜態(tài)方法只能訪問靜態(tài)成員 2、調(diào)用靜態(tài)方法時可能對象并沒有被初始化,此時非靜態(tài)變量還未初始化 3、非靜態(tài)方法的調(diào)用和非靜態(tài)成員變量的訪問要先創(chuàng)建對象
抽象方法
當一個方法被關(guān)鍵字abstract修飾后,且沒有方法體,那它就成為了一個抽象方法,抽象方法往往出現(xiàn)在抽象類和接口中。
/** * @author JavaBUild */ abstract class AbstractDemo { abstract void display(); }
【注意事項】
1、抽象類中不一定必須要有抽象方法,但是有抽象方法的類必須是抽象類 2、若一個類繼承了抽象類,則必須實現(xiàn)抽象類中的抽象方法! 3、抽象類不能被實例化 4、抽象方法不能被聲明為靜態(tài) 5、抽象方法不能用 private 修飾 6、抽象方法不能用 final 修飾
native方法
我們在講Java的Object類時,已經(jīng)接觸過Java中的native方法了,它們用native關(guān)鍵字修飾,用C/C++語言實現(xiàn),聲明時native關(guān)鍵字必須在返回值前,不能用abstract修飾、沒有方法體,甚至沒有大括號!
public final native Class<?> getClass(); public native int hashCode(); protected native Object clone() throws CloneNotSupportedException;
這類方法存在的意義是作為Java標準類庫的一種擴展,或者兼容其他語言寫好的且更好用的類庫,或者提升程序執(zhí)行效率。
構(gòu)造方法
除了以上那些方法外,Java中還有一種特殊的方法,名為構(gòu)造方法,用以在對象初始化工作,Java 有兩種類型的構(gòu)造方法:無參構(gòu)造方法和有參構(gòu)造方法。
當我們在一個類中不寫任何構(gòu)造方法時,編譯器會默認一個無參構(gòu)造方法,只不過這個方法是缺省的,顯示不可見。
構(gòu)造方法的聲明規(guī)范
構(gòu)造方法的名字必須和類名一樣;
構(gòu)造方法沒有返回類型,包括 void;
構(gòu)造方法不能是抽象的(abstract)、靜態(tài)的(static)、最終的(final)、同步的(synchronized)。
代碼示例
public class Test { private String name; private int age; //默認構(gòu)造方法,無參構(gòu)造 public Test() { } //有參構(gòu)造方法 public Test(String name, int age) { this.name = name; this.age = age; } public static void main(String[] args) { //通過無參構(gòu)造創(chuàng)建的對象,會有默認值 Test test1 = new Test(); //通過有參構(gòu)造方法構(gòu)造的對象,在初始化時便進行了賦值 Test test2 = new Test("JavaBuild", 18); System.out.println(test1.name+":"+test1.age); System.out.println(test2.name+":"+test2.age); } }
輸出:
null:0
JavaBuild:18
Java中參數(shù)
上面構(gòu)造方法中提及了有參構(gòu)造和無參構(gòu)造,那么現(xiàn)在就好好聊一聊這個參數(shù),參數(shù)應用于方法之中,作為方法運轉(zhuǎn)的條件和參考,當然這僅限于有參數(shù)的方法,方法中的參數(shù)分形參和實參,形參是在方法的定義階段,而實參則是在方法的調(diào)用階段,參數(shù)個數(shù)不限,類型不限,可以是基本數(shù)據(jù)類型,也可以是引用類型。
可變參數(shù)在jdk5中為了解決反射機制和printf中的問題引入了可變參數(shù)概念,顧名思義就是參數(shù)個數(shù)不確定的場景。定義方式:"參數(shù)類型...";
代碼示例
public class Test { public static void main(String[] args) { countLength("a"); countLength("a","b"); countLength("a","b","c"); } public static void countLength(String... args){ System.out.println(args.length); } }
【注意事項】
1、每個方法最多只有一個可變參數(shù) 2、可變參數(shù)必須是方法的最后一個參數(shù) 3、無法僅通過改變可變參數(shù)的類型,來重載方法 4、通過對 class 文件反編譯可以發(fā)現(xiàn),可變參數(shù)被編譯器處理成了數(shù)組
到此這篇關(guān)于Java中的方法、常量、變量、參數(shù)的文章就介紹到這了,更多相關(guān)Java中的方法、常量、變量、參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用分布式實現(xiàn)數(shù)據(jù)庫讀寫分離的示例代碼
在MySQL中可以通過配置主從復制來實現(xiàn)數(shù)據(jù)同步,本文主要介紹了Java使用分布式實現(xiàn)數(shù)據(jù)庫讀寫分離,具有一定的參考價值,感興趣的可以了解一下2024-07-07mybatis-plus分頁查詢?nèi)N方法小結(jié)
本文主要介紹了mybatis-plus分頁查詢?nèi)N方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-05-05Spring Boot整合MyBatis連接Oracle數(shù)據(jù)庫的步驟全紀錄
這篇文章主要給大家介紹了關(guān)于Spring Boot整合MyBatis連接Oracle數(shù)據(jù)庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-07-07查看SpringBoot和JDK版本對應關(guān)系的方法
在進行一些自主學習的時候,發(fā)現(xiàn)使用maven方式創(chuàng)建的SpringBoot項目啟動失敗,最終發(fā)現(xiàn)是SpringBoot版本和JDK版本不對應導致的,所以本文就給大家介紹了如何查看SpringBoot和JDK版本的對應關(guān)系,需要的朋友可以參考下2024-03-03使用springboot activiti關(guān)閉驗證自動部署方式
這篇文章主要介紹了使用springboot activiti關(guān)閉驗證自動部署方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09