java類中局部變量和成員變量有啥區別?
舉個例子,我們可以定義一個Person類,其中有兩個成員變量name和age,以及一個構造方法和一個show方法。在構造方法中,我們可以使用this關鍵字來引用成員變量,以區分同名的形式參數;在show方法中,我們可以定義一個局部變量message,用來存儲要輸出的信息。代碼如下:
public class Person {//成員變量String name; //默認值為nullint age; //默認值為0//構造方法public Person(String name, int age) {//使用this關鍵字來引用成員變量this.name = name;this.age = age;}//show方法public void show() {//局部變量,必須先賦值才能使用String message = "我叫" + name + ",今年" + age + "歲。";System.out.println(message);}
}
我們可以創建一個Person對象,并調用其show方法,看看輸出結果:
public class Test {public static void main(String[] args) {//創建一個Person對象Person p = new Person("張三", 18);//調用show方法p.show();}
}
輸出結果為:
我叫張三,今年18歲。
為什么"“我叫” + name + “,今年” + age + “歲。”;" 可以使用成員變量name和age?不需要加上this.name和this.age?
這是一個很好的問題。在Java中,如果在方法中使用成員變量的名字,而沒有和局部變量或形式參數重名,那么就可以直接使用成員變量的值,不需要加上this關鍵字。這是因為Java會自動在方法中尋找與成員變量同名的變量,如果沒有找到,就會默認使用this關鍵字來引用成員變量。這樣可以簡化代碼的編寫,也可以避免一些錯誤。
例如,在show方法中,我們使用了name和age兩個成員變量的名字,而沒有在方法中定義同名的局部變量或形式參數,所以Java會自動認為我們是要使用this.name和this.age的值,所以可以直接寫成"“我叫” + name + “,今年” + age + “歲。”;"。
但是,如果在方法中有和成員變量同名的局部變量或形式參數,那么就必須使用this關鍵字來區分,否則Java會優先使用局部變量或形式參數的值,而忽略成員變量的值。這樣可能會導致一些邏輯錯誤或意外的結果。
例如,如果我們在show方法中定義了一個局部變量name,如下:
public void show() {//局部變量,和成員變量同名String name = "李四";String message = "我叫" + name + ",今年" + age + "歲。";System.out.println(message);
}
那么,當我們調用show方法時,輸出結果就會變成:
我叫李四,今年18歲。
public void show() {//局部變量,和成員變量同名String name = "李四";//使用this關鍵字來引用成員變量String message = "我叫" + this.name + ",今年" + age + "歲。";System.out.println(message);
}
這樣,當我們調用show方法時,輸出結果就會恢復正常:
我叫張三,今年18歲。