一文搞清楚Java中的方法、常量、變數、引數
Java中的變數與常量
在JVM的運轉中,承載的是資料,而資料的一種變現形式就是“量”,量分為: 常量與變數,我們在數學和物理學中已經接觸過變數的概念了,在Java中的變數就是在程式執行過程中可以改變其值的量。
常量
與變數相對應的是常量,所謂常量,即在作用域內保持不變的值,一般用final關鍵字進行修飾,通常分為全域性常量、類內常量、區域性常量。
【程式用例】
public class Person { //全域性常量 public static final String SEX = "男"; //類內常量 private static final String BIRTHPLACE ="安徽"; public void method1(String str){ //區域性常量-方法常量 final String LANGUAGE = "漢語"; } public void method2(final int age){ //區域性常量-引數常量,不可改,這段程式碼會編譯報錯 age = 20; } }
變數
變數同樣分為區域性變數、成員變數和靜態變數
【程式用例】
public class Person { //成員變數 //在類內部但在方法體外宣告的變數稱為成員變數,或者例項變數,或者欄位。 //之所以稱為例項變數,是因為該變數只能透過類的例項(物件)來訪問。 int data1 = 3; //靜態變數 //透過 static 關鍵字宣告的變數被稱為靜態變數(類變數), //它可以直接被類訪問 static int data2 = 4; public int sum(){ //區域性變數 //在方法體內宣告的變數被稱為區域性變數,該變數只能在該方法內使用, //類中的其他方法並不知道該變數。 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()); } }
【變數使用時注意事項】
區域性變數
區域性變數宣告在方法、構造方法或者語句塊中。
區域性變數在方法、構造方法、或者語句塊被執行的時候建立,當它們執行完成後,將會被銷燬。
訪問修飾符不能用於區域性變數。
區域性變數只在宣告它的方法、構造方法或者語句塊中可見。
區域性變數是在棧上分配的。
區域性變數沒有預設值,所以區域性變數被宣告後,必須經過初始化,才可以使用。
成員變數
成員變數宣告在一個類中,但在方法、構造方法和語句塊之外。 當一個物件被例項化之後,每個成員變數的值就跟著確定。
成員變數在物件建立的時候建立,在物件被銷燬的時候銷燬。
成員變數的值應該至少被一個方法、構造方法或者語句塊引用,使得外部能夠透過這些方式獲取例項變數資訊。 成員變數可以宣告在使用前或者使用後。
訪問修飾符可以修飾成員變數。
成員變數對於類中的方法、構造方法或者語句塊是可見的。一般情況下應該把成員變數設為私有。透過使用訪問修飾符可以使成員變數對子類可見;成員變數具有預設值。數值型變數的預設值是
0,布林型變數的預設值是 false,引用型別變數的預設值是 null。變數的值可以在宣告時指定,也可以在構造方法中指定。
靜態變數
靜態變數在類中以 static 關鍵字宣告,須在方法、構造方法和語句塊之外。
無論一個類建立了多少個物件,類只擁有靜態變數的一份複製。 靜態變數除了被宣告為常量外很少使用。 靜態變數儲存在靜態儲存區。
靜態變數在程式開始時建立,在程式結束時銷燬。 與成員變數具有相似的可見性。但為了對類的使用者可見,大多數靜態變數宣告為 public 型別。
靜態變數的預設值和例項變數相似。 靜態變數還可以在靜態語句塊中初始化
Java中的方法
何為方法?我的理解是:方法是Java中對邏輯行為的一種程式實現,透過方法的呼叫去實現我們想讓物件所擁有的行為,比如一個物件的增刪改查,只需要建立相應的方法即可!
方法的宣告
在方法宣告中,最重要的就是方法名(採用小駝峰命名法)與引數,這兩者構成的方法的簽名,是方法過載的判斷依舊,除此之外,在宣告方法的時候,還會設定訪問許可權、是否靜態、返回值型別等。結構如下圖:
例項方法
在類中宣告,無需static、abstract等關鍵字修飾,建立類物件,透過物件的引用所呼叫的方法為例項方法,類中最為常見的一種方法型別。上程式碼!
public class Test { public static void main(String[] args) { Test sum = new Test(); System.out.println(sum.add(1,2)); } //例項方法,求兩數之和 public int add(int a, int b) { return a + b; } }
靜態方法
若方法的宣告中加上了static關鍵字,靜態方法是屬於類的,而不是屬於類建立的物件或例項的,故在呼叫時無需透過物件例項。
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、靜態方法只能訪問靜態成員2、呼叫靜態方法時可能物件並沒有被初始化,此時非靜態變數還未初始化3、非靜態方法的呼叫和非靜態成員變數的訪問要先建立物件
抽象方法
當一個方法被關鍵字abstract修飾後,且沒有方法體,那它就成為了一個抽象方法,抽象方法往往出現在抽象類和介面中。
/** * @author JavaBUild */abstract class AbstractDemo { abstract void display(); }
【注意事項】
1、抽象類中不一定必須要有抽象方法,但是有抽象方法的類必須是抽象類 2、若一個類繼承了抽象類,則必須實現抽象類中的抽象方法! 3、抽象類不能被例項化 4、抽象方法不能被宣告為靜態 5、抽象方法不能用 private 修飾 6、抽象方法不能用 final 修飾
native方法
我們在講Java的Object類時,已經接觸過Java中的native方法了,它們用native關鍵字修飾,用C/C++語言實現,宣告時native關鍵字必須在返回值前,不能用abstract修飾、沒有方法體,甚至沒有大括號!
public final native Class<?> getClass();public native int hashCode();protected native Object clone() throws CloneNotSupportedException;
這類方法存在的意義是作為Java標準類庫的一種擴充套件,或者相容其他語言寫好的且更好用的類庫,或者提升程式執行效率。
構造方法
除了以上那些方法外,Java中還有一種特殊的方法,名為構造方法,用以在物件初始化工作,Java 有兩種型別的構造方法:無參構造方法和有參構造方法。
當我們在一個類中不寫任何構造方法時,編譯器會預設一個無參構造方法,只不過這個方法是預設的,顯示不可見。
構造方法的宣告規範
構造方法的名字必須和類名一樣;
構造方法沒有返回型別,包括 void;
構造方法不能是抽象的(abstract)、靜態的(static)、最終的(final)、同步的(synchronized)。
程式碼示例
public class Test { private String name; private int age; //預設構造方法,無參構造 public Test() { } //有參構造方法 public Test(String name, int age) { this.name = name; this.age = age; } public static void main(String[] args) { //透過無參構造建立的物件,會有預設值 Test test1 = new Test(); //透過有參構造方法構造的物件,在初始化時便進行了賦值 Test test2 = new Test("JavaBuild", 18); System.out.println(test1.name+":"+test1.age); System.out.println(test2.name+":"+test2.age); } }
輸出:
null:0JavaBuild:18
Java中引數
上面構造方法中提及了有參構造和無參構造,那麼現在就好好聊一聊這個引數,引數應用於方法之中,作為方法運轉的條件和參考,當然這僅限於有引數的方法,方法中的引數分形參和實參,形參是在方法的定義階段,而實參則是在方法的呼叫階段,引數個數不限,型別不限,可以是基本資料型別,也可以是引用型別。
可變引數
在jdk5中為了解決反射機制和printf中的問題引入了可變引數概念,顧名思義就是引數個數不確定的場景。定義方式:"引數型別...";
程式碼示例
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、每個方法最多隻有一個可變引數 2、可變引數必須是方法的最後一個引數 3、無法僅透過改變可變引數的型別,來過載方法 4、透過對 class 檔案反編譯可以發現,可變引數被編譯器處理成了陣列
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70036623/viewspace-3004685/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- kettle 引數——變數引數和常量引數變數
- java變數及常量Java變數
- java常量和變數Java變數
- 四:java常量和變數Java變數
- Java的方法可變長引數Java
- Swift學習筆記(三十三)——常量引數,變數引數和inout引數Swift筆記變數
- Java方法05:可變引數Java
- Swift語言中為外部引數設定預設值可變引數常量引數變數引數輸入輸出引數Swift變數
- Java方法04:命令列傳遞引數、可變引數Java命令列
- 二,Java中常量與變數的理解Java變數
- JAVA基礎04——變數與常量Java變數
- 常量與變數變數
- smarty 雙引號中嵌入變數的方法變數
- 【Java】可變引數Java
- Java可變引數Java
- Java 可變引數Java
- Java培訓教程分享:變數與常量Java變數
- Java基礎06:變數、常量、作用域Java變數
- 六、常量與變數變數
- PHP 常量與變數PHP變數
- Java - 可變引數的使用Java
- java方法引數中萬用字元的使用Java字元
- Java培訓基礎知識-Java的常量與變數Java變數
- java基礎06-變數、常量、作用域Java變數
- JAVA基礎6-變數、常量、作用域Java變數
- Swift(一)常量和變數Swift變數
- PHP基礎__變數、常量PHP變數
- Java中main方法引數String[ ] args的使用JavaAI
- Java中變數之區域性變數、本類成員變數、父類成員變數的訪問方法Java變數
- Java中的類(好似結構體) 物件(好似指標變數)變數 方法Java結構體物件指標變數
- JAVA介面中的變數Java變數
- Day01-Java簡介、環境、常量、變數Java變數
- Java基礎-基礎語法-變數與常量Java變數
- 【重學Java】可變引數Java
- java 中引數的傳遞Java
- Java 的可變引數與 Collections 類Java
- 引數和變數變數
- destoon 系統常量與變數變數