一文搞清楚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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java常量和變數Java變數
- java變數及常量Java變數
- Java的方法可變長引數Java
- 四:java常量和變數Java變數
- Java方法05:可變引數Java
- Java方法04:命令列傳遞引數、可變引數Java命令列
- 二,Java中常量與變數的理解Java變數
- JAVA基礎04——變數與常量Java變數
- 常量與變數變數
- 【Java】可變引數Java
- Java基礎06:變數、常量、作用域Java變數
- Java培訓教程分享:變數與常量Java變數
- Java - 可變引數的使用Java
- 六、常量與變數變數
- Java培訓基礎知識-Java的常量與變數Java變數
- Java中main方法引數String[ ] args的使用JavaAI
- java方法引數中萬用字元的使用Java字元
- JAVA基礎6-變數、常量、作用域Java變數
- java基礎06-變數、常量、作用域Java變數
- Day01-Java簡介、環境、常量、變數Java變數
- Java基礎-基礎語法-變數與常量Java變數
- 【重學Java】可變引數Java
- Java中的類(好似結構體) 物件(好似指標變數)變數 方法Java結構體物件指標變數
- Java中變數之區域性變數、本類成員變數、父類成員變數的訪問方法Java變數
- Java 的可變引數與 Collections 類Java
- PHP變數與常量學習PHP變數
- Java第三天【變數、常量、資料型別】Java變數資料型別
- 變數常量類的命名格式以及用法變數
- 教你認識Java 可變引數Java
- C++入門教程(20):變數、不變數和常量C++變數
- 一文看懂 Python 中的函式引數Python函式
- java中變數的作用域Java變數
- 如何使方法行數達到最優、常量與變數如何優雅的定義?變數
- Bash變數和引數變數
- python變數和引數Python變數
- 使用javap深入理解Java整型常量和整型變數的區別Java變數
- Java 反射修改類的常量值、靜態變數值、屬性值Java反射變數
- Go基礎系列:常量和變數Go變數