Java的this症結字的應用與辦法的重載相干常識。本站提示廣大學習愛好者:(Java的this症結字的應用與辦法的重載相干常識)文章只能為提供參考,不一定能成為您想要的結果。以下是Java的this症結字的應用與辦法的重載相干常識正文
Java this症結字詳解
this 症結字用來表現以後對象自己,或以後類的一個實例,經由過程 this 可以挪用本對象的一切辦法和屬性。例如:
public class Demo{
public int x = 10;
public int y = 15;
public void sum(){
// 經由過程 this 點取成員變量
int z = this.x + this.y;
System.out.println("x + y = " + z);
}
public static void main(String[] args) {
Demo obj = new Demo();
obj.sum();
}
}
運轉成果:
x + y = 25
下面的法式中,obj 是 Demo 類的一個實例,this 與 obj 等價,履行 int z = this.x + this.y;,就相當於履行 int z = obj.x + obj.y;。
留意:this 只要在類實例化後才成心義。
應用this辨別同名變量
成員變量與辦法外部的變量重名時,願望在辦法外部挪用成員變量,怎樣辦呢?這時候候只能應用this,例如:
public class Demo{
public String name;
public int age;
public Demo(String name, int age){
this.name = name;
this.age = age;
}
public void say(){
System.out.println("網站的名字是" + name + ",曾經成立了" + age + "年");
}
public static void main(String[] args) {
Demo obj = new Demo("微學苑", 3);
obj.say();
}
}
運轉成果:
網站的名字是微學苑,曾經成立了3年
形參的感化域是全部辦法體,是部分變量。在Demo()中,形參和成員變量重名,假如不應用this,拜訪到的就是部分變量name和age,而不是成員變量。在 say() 中,我們沒有應用 this,由於成員變量的感化域是全部實例,固然也能夠加上 this:
public void say(){
System.out.println("網站的名字是" + this.name + ",曾經成立了" + this.age + "年");
}
Java 默許將一切成員變量和成員辦法與 this 聯系關系在一路,是以應用 this 在某些情形下是過剩的。
作為辦法名來初始化對象
也就是相當於挪用本類的其它結構辦法,它必需作為結構辦法的第一句。示例以下:
public class Demo{
public String name;
public int age;
public Demo(){
this("微學苑", 3);
}
public Demo(String name, int age){
this.name = name;
this.age = age;
}
public void say(){
System.out.println("網站的名字是" + name + ",曾經成立了" + age + "年");
}
public static void main(String[] args) {
Demo obj = new Demo();
obj.say();
}
}
運轉成果:
網站的名字是微學苑,曾經成立了3年
值得留意的是:
在結構辦法中挪用另外一個結構辦法,挪用舉措必需置於最肇端的地位。
不克不及在結構辦法之外的任何辦法內挪用結構辦法。
在一個結構辦法內只能挪用一個結構辦法。
上述代碼觸及到辦法重載,即Java許可湧現多個同名辦法,只需參數分歧便可以。後續章節會講授。
作為參數傳遞
須要在某些完整分別的類中挪用一個辦法,並將以後對象的一個援用作為參數傳遞時。例如:
public class Demo{
public static void main(String[] args){
B b = new B(new A());
}
}
class A{
public A(){
new B(this).print(); // 匿名對象
}
public void print(){
System.out.println("Hello from A!");
}
}
class B{
A a;
public B(A a){
this.a = a;
}
public void print() {
a.print();
System.out.println("Hello from B!");
}
}
運轉成果:
Hello from A! Hello from B!
匿名對象就是沒著名字的對象。假如對象只應用一次,便可以作為匿名對象,代碼中 new B(this).print(); 等價於 ( new B(this) ).print();,先經由過程 new B(this) 創立一個沒著名字的對象,再挪用它的辦法。
Java辦法重載
在Java中,統一個類中的多個辦法可以有雷同的名字,只需它們的參數列表分歧便可以,這被稱為辦法重載(method overloading)。
參數列表又叫參數簽名,包含參數的類型、參數的個數和參數的次序,只需有一個分歧就叫做參數列表分歧。
重載是面向對象的一個根本特征。
上面看一個具體的實例。
public class Demo{
// 一個通俗的辦法,不帶參數
void test(){
System.out.println("No parameters");
}
// 重載下面的辦法,而且帶了一個整型參數
void test(int a){
System.out.println("a: " + a);
}
// 重載下面的辦法,而且帶了兩個參數
void test(int a,int b){
System.out.println("a and b: " + a + " " + b);
}
// 重載下面的辦法,而且帶了一個雙精度參數
double test(double a){
System.out.println("double a: " + a);
return a*a;
}
public static void main(String args[]){
Demo obj= new Demo();
obj.test();
obj.test(2);
obj.test(2,3);
obj.test(2.0);
}
}
運轉成果:
No parameters a: 2 a and b: 2 3 double a: 2.0
經由過程下面的實例,讀者可以看出,重載就是在一個類中,有雷同的函數稱號,但形參分歧的函數。重載的成果,可讓一個法式段盡可能削減代碼和辦法的品種。
解釋:
辦法的重載的規矩:
辦法重載的完成:
辦法稱號雷同時,編譯器會依據挪用辦法的參數個數、參數類型等去逐一婚配,以選擇對應的辦法,假如婚配掉敗,則編譯器報錯,這叫做重載分辯。