ความหมายของ“ สิ่งนี้” ใน Java คืออะไร?


140

โดยปกติฉันใช้thisในตัวสร้างเท่านั้น

ฉันเข้าใจว่าจะใช้เพื่อระบุตัวแปรพารามิเตอร์ (โดยใช้this.something) หากมีชื่อเดียวกันกับตัวแปรทั่วโลก

อย่างไรก็ตามฉันไม่ทราบว่าความหมายที่แท้จริงของthisภาษาจาวาคืออะไรและจะเกิดอะไรขึ้นหากฉันใช้thisโดยไม่มีจุด ( .)


7
ถึงผู้ตอบแบบสอบถาม
BalusC

2
Yakshemash! เพื่อน ๆ คุณอาจต้องการอ้างถึงคำถามของฉันที่นี่เช่นกัน - stackoverflow.com/questions/23334336/… Chenqui
Erran Morad

คำตอบ:


157

this อ้างถึงวัตถุปัจจุบัน

แต่ละวิธีที่ไม่คงที่ทำงานในบริบทของวัตถุ ดังนั้นถ้าคุณมีชั้นเรียนเช่นนี้:

public class MyThisTest {
  private int a;

  public MyThisTest() {
    this(42); // calls the other constructor
  }

  public MyThisTest(int a) {
    this.a = a; // assigns the value of the parameter a to the field of the same name
  }

  public void frobnicate() {
    int a = 1;

    System.out.println(a); // refers to the local variable a
    System.out.println(this.a); // refers to the field a
    System.out.println(this); // refers to this entire object
  }

  public String toString() {
    return "MyThisTest a=" + a; // refers to the field a
  }
}

แล้วโทรfrobnicate()ได้ที่new MyThisTest()จะพิมพ์

1
42
MyThisTest a = 42

อย่างมีประสิทธิภาพดังนั้นคุณใช้มันสำหรับหลายสิ่ง:

  • ชี้แจงว่าคุณกำลังพูดถึงฟิลด์เมื่อยังมีสิ่งอื่นที่มีชื่อเหมือนกับฟิลด์
  • อ้างถึงวัตถุปัจจุบันโดยรวม
  • เรียกใช้ Constructor อื่นของคลาสปัจจุบันใน Constructor ของคุณ

มันไม่ทำงาน ฉันได้รับข้อผิดพลาดที่บอกว่าmainจำเป็นต้องใช้วิธีการ ถ้าฉันเพิ่มวิธีหลักแล้วฉันต้องโทรจากที่นั่น และความพยายามใด ๆ ที่จะเรียก frobnicate () ภายใน main บอกว่าคุณไม่สามารถเรียกการอ้างอิงแบบ non-static จากภายใน static ได้ และการลบสแตติกออกจากการmainส่งคืนข้อผิดพลาดอีกครั้งซึ่งไม่พบวิธีการหลัก กรุณาอธิบาย.
dbconfession

7
@ dbconfession: รหัสที่นี่ไม่ได้หมายถึงเป็นโปรแกรมที่ทำงานด้วยตนเองแบบสแตนด์อะโลน คุณกำลังหมายถึงการอ่านรหัส และข้อความที่ไม่ทำงานมัน! มันเป็นรหัสที่ถูกต้อง แต่มันมีไว้สำหรับวัตถุประสงค์ในการสาธิตเท่านั้น (นั่นเป็นสาเหตุที่มันไม่มีหลักที่เหมาะสม) สำหรับความช่วยเหลือเกี่ยวกับวิธีการหลักโปรดดูstackoverflow.com/questions/146576/...
Joachim Sauer

@ โจอาคิมขอบคุณ! ฉันขาดอะไรบางอย่างพื้นฐานเกี่ยวกับความหมายของการทำให้วิธีการแบบคงที่และวิธีการthis.ทำงาน ความเข้าใจของฉันคือการที่this.ช่วยให้คุณสามารถเรียกวิธีการหรือตัวแปรที่เป็นเอกลักษณ์ของรุ่น instantiated ของชั้นที่ช่วยให้สำหรับรุ่นของวิธีการหรือตัวแปรที่จะมีชีวิตอยู่ซึ่งเรียกว่าโดยไม่ต้องเรียกใช้อีกthis. ในง่ายๆที่เรียกว่าTest.classฉันมีสองวิธี: public static void main()และpublic Test() ผม ไม่สามารถส่งผ่านข้อมูลระหว่างวิธีการได้เนื่องจากmainเป็นแบบคงที่และไม่สามารถสร้างแบบคงที่ได้ ฉันควรโพสต์เป็นคำถามใหม่หรือไม่
dbconfession

@ dbconfession: ฉันรู้สึกว่าคำถามของคุณได้รับคำตอบแล้ว แต่ฉันไม่เข้าใจว่าคำถามของคุณคืออะไรดังนั้นคุณอาจโพสต์คำถามนั้น (แต่เตรียมที่จะให้มันปิดซ้ำ) อย่างไรก็ตามในระดับพื้นฐานที่สุดการสร้างวิธีการstaticโดยทั่วไปหมายความว่าคุณไม่จำเป็นต้องมีอินสแตนซ์ของคลาสที่จะเรียกมันและคุณจะไม่สามารถเข้าถึงthisภายในได้
Joachim Sauer

@JoachimSauer ถ้าฉันต้องการเรียกใช้ฉันจะได้อย่างไร ฉันมีปัญหาเดียวกันกับ dbconfession
FudgeMuffins

52

ต่อไปนี้เป็นสำเนา & วางจากที่นี่แต่อธิบายการใช้thisคำหลักที่แตกต่างกันเป็นอย่างดี:

คำจำกัดความ: คำหลักของ Java thisใช้เพื่ออ้างถึงอินสแตนซ์ปัจจุบันของวิธีการที่ใช้

ต่อไปนี้เป็นวิธีการใช้สิ่งนี้:

  1. เพื่อแสดงว่าตัวแปรอินสแตนซ์ถูกนำมาใช้แทนตัวแปรสแตติกหรือโลคัล นั่นคือ,

    private String javaFAQ;
    void methodName(String javaFAQ) {
        this.javaFAQ = javaFAQ;
    }
    

    นี่หมายถึงตัวแปรอินสแตนซ์ ที่นี่ลำดับความสำคัญสูงสำหรับตัวแปรโลคัล ดังนั้นการไม่มีการthisแสดงถึงตัวแปรท้องถิ่น หากตัวแปรโลคัลที่เป็นชื่อของพารามิเตอร์ไม่เหมือนกับตัวแปรอินสแตนซ์ดังนั้นไม่ว่าthisจะใช้หรือไม่ก็ตามก็จะแสดงถึงตัวแปรอินสแตนซ์

  2. This ใช้เพื่ออ้างถึงการก่อสร้าง

     public JavaQuestions(String javapapers) {
         this(javapapers, true);
     }
    

    สิ่งนี้เรียกใช้ตัวสร้างของคลาส java เดียวกันซึ่งมีสองพารามิเตอร์

  3. This ถูกใช้เพื่อส่งผ่านอินสแตนซ์ java ปัจจุบันเป็นพารามิเตอร์

    obj.itIsMe(this);
  4. คล้ายกับด้านบนนี้สามารถใช้เพื่อส่งคืนอินสแตนซ์ปัจจุบัน

    CurrentClassName startMethod() {
         return this;
    }
    

    หมายเหตุ: สิ่งนี้อาจนำไปสู่ผลลัพธ์ที่ไม่พึงประสงค์ในขณะที่ใช้ในคลาสภายในในสองจุดด้านบน เนื่องจากสิ่งนี้จะอ้างถึงคลาสภายในไม่ใช่อินสแตนซ์ภายนอก

  5. This สามารถใช้เพื่อรับหมายเลขอ้างอิงของคลาสปัจจุบัน

    Class className = this.getClass(); // this methodology is preferable in java

    แม้ว่าสิ่งนี้สามารถทำได้โดย

    Class className = ABC.class; // here ABC refers to the class name and you need to know that!

เช่นเคยthisมีการเชื่อมโยงกับอินสแตนซ์ของมันและสิ่งนี้จะไม่ทำงานในวิธีการคงที่


44

เพื่อความสมบูรณ์thisนอกจากนี้ยังสามารถใช้เพื่ออ้างถึงวัตถุด้านนอก

class Outer {
    class Inner {
        void foo() {
            Outer o = Outer.this;
    }
  }
}

5
thisคือสิ่งที่ฉันกำลังมองหา! ;)
forresthopkinsa

3
นั่นเป็นเพียงsuper
killjoy

18

มันหมายถึงอินสแตนซ์ปัจจุบันของวัตถุเฉพาะดังนั้นคุณสามารถเขียนสิ่งที่ชอบ

public Object getMe() {
    return this;
}

กรณีใช้งานทั่วไปthisคือป้องกันการเกิดเงา นำตัวอย่างต่อไปนี้:

public class Person {
    private final String name;

    public Person(String name) {
        // how would we initialize the field using parameter?
        // we can't do: name = name;
    }
}

ในตัวอย่างข้างต้นเราต้องการกำหนดให้สมาชิกภาคสนามใช้ค่าของพารามิเตอร์ เนื่องจากพวกเขาใช้ชื่อเดียวกันเราจึงจำเป็นต้องมีวิธีแยกแยะระหว่างฟิลด์และพารามิเตอร์ thisอนุญาตให้เราเข้าถึงสมาชิกของอินสแตนซ์นี้รวมถึงฟิลด์

public class Person {
    private final String name;

    public Person(String name) {
        this.name = name;
    }
}

4
ระวังการใช้สไตล์ที่เหมาะสมเมื่อโทร: o.getMe (). getMe (). outOfHere ()
Justin K

8

ใน Swing มันค่อนข้างธรรมดาในการเขียนคลาสที่ใช้ActionListenerและเพิ่มอินสแตนซ์ปัจจุบัน (เช่น 'this') เป็น ActionListener สำหรับส่วนประกอบ

public class MyDialog extends JDialog implements ActionListener
{
    public MyDialog()
    {
        JButton myButton = new JButton("Hello");
        myButton.addActionListener(this);
    }

    public void actionPerformed(ActionEvent evt)
    {
        System.out.println("Hurdy Gurdy!");
    }

}

7

มันคือ "การอ้างอิงถึงวัตถุในบริบทปัจจุบัน" อย่างมีประสิทธิภาพ ตัวอย่างเช่นหากต้องการพิมพ์ "วัตถุนี้" คุณอาจเขียน:

System.out.println(this);

โปรดทราบว่าการใช้ "ตัวแปรทั่วโลก" ของคุณค่อนข้างจะปิด ... หากคุณใช้this.variableNameโดยคำจำกัดความแล้วมันไม่ใช่ตัวแปรทั่วโลก - เป็นตัวแปรเฉพาะสำหรับอินสแตนซ์นี้โดยเฉพาะ


7

อ้างถึงบทความที่ programming.guide:


thisมีสองใช้ในโปรแกรม Java

1. เป็นการอ้างอิงถึงวัตถุปัจจุบัน

ไวยากรณ์ในกรณีนี้มักจะดูเหมือน

this.someVariable = someVariable;

การใช้งานประเภทนี้มีการอธิบายไว้ที่นี่: การอ้างอิง 'this' (พร้อมตัวอย่าง)

2. การเรียกคอนสตรัคเตอร์อื่น

ไวยากรณ์ในกรณีนี้โดยทั่วไปดูเหมือนว่า

MyClass() {
    this(DEFAULT_VALUE); // delegate to other constructor
}

MyClass(int value) {
    // ...
}

การใช้งานประเภทนี้มีการอธิบายไว้ที่นี่: การเรียก constructor นี้ (…) (พร้อมตัวอย่าง)


4

มันหมายถึงอินสแตนซ์ที่เรียกว่าวิธีการ

class A {

  public boolean is(Object o) {
    return o == this;
  }

}

A someA = new A();
A anotherA = new A();
someA.is(someA); // returns true
someA.is(anotherA); // returns false

4

นี้คำสำคัญที่ใช้ในการอ้างอิงตัวแปรปัจจุบันของบล็อกเช่นพิจารณาด้านล่างรหัส (เพียง exampple ดังนั้นอย่าคาดหวังมาตรฐาน JAVA Code):

Public class test{

test(int a) {
this.a=a;
}

Void print(){
System.out.println(a);
}

   Public static void main(String args[]){
    test s=new test(2);
    s.print();
 }
}

แค่นั้นแหละ. ผลลัพธ์จะเป็น "2" หากเราไม่ได้ใช้คำสำคัญนี้ผลลัพธ์จะเป็น: 0


3

วัตถุมีวิธีการและคุณลักษณะ (ตัวแปร) ซึ่งได้มาจากคลาสเพื่อระบุวิธีการและตัวแปรที่เป็นของวัตถุthisเฉพาะคำที่สงวนไว้จะใช้ ในกรณีของตัวแปรอินสแตนซ์มันเป็นสิ่งสำคัญที่จะเข้าใจความแตกต่างระหว่างพารามิเตอร์โดยนัยและชัดเจน ลองดูที่การfillTankโทรหาaudiวัตถุ

Car audi= new Car();

audi.fillTank(5); // 5 is the explicit parameter and the car object is the implicit parameter 

ค่าในวงเล็บคือพารามิเตอร์ implicit และวัตถุนั้นเป็นพารามิเตอร์ที่ชัดเจนวิธีการที่ไม่มีพารามิเตอร์ที่ชัดเจนใช้พารามิเตอร์ implicit fillTankวิธีมีทั้งพารามิเตอร์ที่ชัดเจนและ implicit

ให้ดูfillTankวิธีการอย่างใกล้ชิดในCarชั้นเรียน

public class Car()
{
   private double tank;

   public Car()
   {
      tank = 0;
   }

   public void fillTank(double gallons)
   {
      tank = tank + gallons;
   }

}

ในคลาสนี้เรามีตัวแปร "รถถัง" อาจมีวัตถุจำนวนมากที่ใช้ตัวแปรอินสแตนซ์รถถังเพื่อระบุว่าตัวแปรอินสแตนซ์ "รถถัง" ใช้สำหรับวัตถุเฉพาะในกรณีของเราคือ "ออดี้" วัตถุที่เราสร้างไว้ก่อนหน้านี้เราใช้thisคำหลักที่สงวนไว้ สำหรับตัวแปรอินสแตนซ์การใช้ 'this' ในเมธอดบ่งชี้ว่าตัวแปร instance ในกรณีของเรา "tank" เป็นตัวแปรอินสแตนซ์ของพารามิเตอร์ implicit

คอมไพเลอร์ java จะเพิ่มthisคำที่สงวนไว้โดยอัตโนมัติดังนั้นคุณไม่จำเป็นต้องเพิ่มมันเป็นเรื่องของการตั้งค่า คุณไม่สามารถใช้งานได้thisหากไม่มีจุด (.) เนื่องจากเป็นกฎของ java (ไวยากรณ์)

สรุป.

  • วัตถุถูกกำหนดโดยคลาสและมีเมธอดและตัวแปร
  • การใช้thisบนตัวแปรเช่นในวิธีการที่แสดงให้เห็นว่าตัวแปรเช่นเป็นพารามิเตอร์นัยหรือว่ามันเป็นตัวแปรเช่นของพารามิเตอร์โดยปริยาย
  • พารามิเตอร์ implicit เป็นวัตถุที่เรียกวิธีการจากในกรณีนี้คือ "audi"
  • คอมไพเลอร์ java จะเพิ่มคำสงวนนี้โดยอัตโนมัติการเพิ่มเป็นเรื่องของการตั้งค่า
  • this ไม่สามารถใช้งานได้หากไม่มีจุด (.) สิ่งนี้ไม่ถูกต้องทางวากยสัมพันธ์
  • this ยังสามารถใช้เพื่อแยกความแตกต่างระหว่างตัวแปรท้องถิ่นและตัวแปรทั่วโลกที่มีชื่อเดียวกัน
  • thisคำสงวนยังใช้กับวิธีการที่จะแสดงให้เห็นวิธีการที่เป็นวัตถุโดยเฉพาะ

2

ตัวแปรอินสแตนซ์เป็นเรื่องธรรมดาสำหรับทุกวัตถุที่คุณสร้าง พูดว่ามีตัวแปรอินสแตนซ์ที่สอง

class ExpThisKeyWord{
int x;
int y;

public void setMyInstanceValues(int a, int b) {
    x= a;
    y=b;

    System.out.println("x is ="+x);
    System.out.println("y is ="+y);
}

}




class Demo{
public static void main(String[] args){

ExpThisKeyWord obj1 = new ExpThisKeyWord();
ExpThisKeyWord obj2 = new ExpThisKeyWord();
ExpThisKeyWord obj3 = new ExpThisKeyWord();

obj1.setMyInstanceValues(1, 2);
obj2.setMyInstanceValues(11, 22);
obj3.setMyInstanceValues(111, 222);



}
}

หากคุณสังเกตเห็นรหัสข้างต้นเราได้เริ่มต้นวัตถุสามรายการและวัตถุสามรายการกำลังเรียกใช้เมธอด SetMyInstanceValues คุณคิดว่า JVM กำหนดค่าสำหรับทุกวัตถุได้อย่างไร มีเคล็ดลับ JVM จะไม่เห็นรหัสนี้แสดงให้เห็นข้างต้น แทนที่จะเป็นเช่นนั้นจะเห็นรหัสด้านล่าง

public void setMyInstanceValues(int a, int b) {
    this.x= a; //Answer: this keyword denotes the current object that is handled by JVM.
    this.y=b;

    System.out.println("x is ="+x);
    System.out.println("y is ="+y);
}

2

(ฉันรู้ว่าฉันมาสาย แต่ shh ฉันเป็น boi ส่อเสียดที่คุณไม่เคยเห็นฉัน)

นี้คำหลักในส่วน Object Oriented การเขียนโปรแกรมภาษาหากไม่ได้หมายถึงทุกสิ่งที่มีการอ้างอิงที่มีต่อวัตถุเช่นปัจจุบันของชั้นเรียนที่ โดยพื้นฐานแล้วมันเป็นสิ่งเดียวกับการโทรหาวัตถุนั้นจากด้านนอกของวิธีโดยใช้ชื่อ ที่อาจทำให้รู้สึกไม่ดีอย่างละเอียด:

นอกคลาสเพื่อที่จะโทรหาบางสิ่งภายในอินสแตนซ์ของวัตถุนั้นตัวอย่างเช่นคำว่าคุณมีวัตถุที่เรียกว่าวัตถุและคุณต้องการได้รับฟิลด์คุณจะต้องใช้

object.field

พูดเช่นคุณกำลังพยายามเข้าถึงobject.fieldจากภายในคลาสของคุณในตัวอย่างเช่นตัวสร้างของคุณคุณสามารถใช้

this.field

นี้คำหลักเป็นหลักแทนที่คำหลักชื่อวัตถุเมื่อถูกเรียกว่าภายในของชั้นเรียน มักจะมีเหตุผลไม่มากที่จะทำสิ่งนี้นอกถ้าคุณมีสองตัวแปรที่มีชื่อเดียวกันซึ่งหนึ่งเป็นเขตข้อมูลของชั้นเรียนและอื่น ๆ เพียงแค่เป็นตัวแปรภายในวิธีการมันจะช่วยถอดรหัสระหว่างทั้งสอง . ตัวอย่างเช่นถ้าคุณมีสิ่งนี้: (เอาหล่ะรับนี่เหรอ .... แค่ฉันโอเค :( ฉันจะไปแล้ว)

public String Name;
//Constructor for {object} class
public object(String Name){
    Name = Name;
}

นั่นจะทำให้เกิดปัญหาคอมไพเลอร์จะไม่สามารถทราบความแตกต่างระหว่างตัวแปรชื่อที่กำหนดไว้ในพารามิเตอร์สำหรับตัวสร้างและตัวแปรชื่อภายในการประกาศฟิลด์ของคลาสของคุณดังนั้นจึงควรกำหนดพารามิเตอร์ชื่อให้กับ .. .. ค่าของพารามิเตอร์ชื่อที่ไม่มีประโยชน์อะไรและไม่มีวัตถุประสงค์ นี่เป็นปัญหาทั่วไปที่โปรแกรมรุ่นใหม่ส่วนใหญ่ทำและฉันตกเป็นเหยื่อด้วยเช่นกัน อย่างไรก็ตามวิธีที่ถูกต้องในการกำหนดพารามิเตอร์นี้จะใช้:

public String Name;
//Constructor for {object} class
public object(String Name){
    this.Name = Name;
}

วิธีนี้คอมไพเลอร์ทราบตัวแปร Name ที่คุณพยายามกำหนดเป็นส่วนหนึ่งของคลาสและไม่ได้เป็นส่วนหนึ่งของวิธีการและกำหนดอย่างถูกต้องซึ่งหมายความว่าจะกำหนดฟิลด์ชื่อให้กับสิ่งที่คุณใส่ไว้ในตัวสร้าง

เพื่อสรุปมันขึ้นเป็นหลักอ้างอิงข้อมูลของอินสแตนซ์วัตถุของคลาสที่คุณกำลังทำงานอยู่ด้วยเหตุนี้มันเป็นคำว่า "นี้" ความหมายของมันนี้วัตถุหรือนี้เช่น เป็นวิธีปฏิบัติที่ดีที่จะใช้สิ่งนี้เมื่อเรียกใช้ฟิลด์ของชั้นเรียนของคุณแทนที่จะใช้ชื่อเพื่อหลีกเลี่ยงข้อบกพร่องที่เป็นไปได้ที่หายากเนื่องจากคอมไพเลอร์ทำงานอยู่เหนือพวกเขา




1

สิ่งนี้สามารถนำมาใช้ในวิธีการบางอย่างหรือตัวสร้าง

ส่งคืนการอ้างอิงไปยังวัตถุปัจจุบัน


1

สิ่งนี้อ้างถึงวัตถุที่คุณ“ อยู่” ในขณะนี้ กล่าวอีกนัยหนึ่งนี่หมายถึงวัตถุที่รับ คุณใช้สิ่งนี้เพื่อชี้แจงตัวแปรที่คุณอ้างถึง Java_whitepaper หน้า: 37

class Point extends Object
{
    public double x;
    public double y;

    Point()
    {
        x = 0.0;
        y = 0.0;
    }

    Point(double x, double y)
    {
        this.x = x;
        this.y = y;
    }
}

ในโค้ดตัวอย่างข้างต้น this.x / this.y อ้างถึงคลาสปัจจุบันที่เป็นตัวแปร Point class x และ y โดยที่ (double x, double y) เป็นค่าสองเท่าที่ส่งผ่านจากคลาสอื่นเพื่อกำหนดค่าให้กับคลาสปัจจุบัน


0

ฉันกำลังมองหาคำตอบเดียวกันและไม่เข้าใจแนวคิดอย่างชัดเจน แต่ในที่สุดฉันก็เข้าใจจากลิงค์นี้

นี่คือคำหลักใน Java ซึ่งสามารถใช้ภายในวิธีการหรือตัวสร้างของคลาส มัน (นี้) ทำงานเป็นการอ้างอิงถึงวัตถุปัจจุบันที่มีวิธีการหรือตัวสร้างจะถูกเรียก คำหลักนี้สามารถใช้เพื่ออ้างอิงสมาชิกของวัตถุปัจจุบันใด ๆ จากภายในวิธีการอินสแตนซ์หรือตัวสร้าง

ตรวจสอบตัวอย่างในลิงค์เพื่อความเข้าใจที่ชัดเจน


ตัวอย่างที่สมบูรณ์แบบ
sathya

0

หากตัวแปรอินสแตนซ์เหมือนกับตัวแปรที่ประกาศไว้ในตัวสร้างเราจะใช้ "this" เพื่อกำหนดข้อมูล

class Example{
     int assign;// instance variable

     Example(int assign){ // variable inside constructor
          this.assign=assign;
     }
}

หวังว่านี่จะช่วยได้


0

ใน Java "this" เป็นตัวแปรที่กำหนดไว้ล่วงหน้า ถ้าเราใช้ "นี่" ในวิธีการนั่นหมายความว่าเราได้รับการอ้างอิง (ที่อยู่) ของวัตถุที่กำลังทำงานอยู่ สำหรับตัวอย่าง

this.age ---> อายุของวัตถุที่รันอยู่ในปัจจุบัน


0

ฉันต้องการแบ่งปันสิ่งที่ฉันเข้าใจจากคำหลักนี้ คำหลักนี้มี 6 จาวาในจาวาดังนี้: -

1. สามารถใช้อ้างถึงตัวแปรคลาสปัจจุบัน ให้เราเข้าใจด้วยรหัส *

มาทำความเข้าใจกับปัญหาหากเราไม่ใช้คำค้นหานี้ตามตัวอย่างที่ให้ไว้ด้านล่าง:

class Employee{  
int id_no;  
String name;  
float salary;  
Student(int id_no,String name,float salary){  
id_no = id_no;  
name=name;  
salary = salary;  
}  
void display(){System.out.println(id_no +" "+name+" "+ salary);}  
}  
class TestThis1{  
public static void main(String args[]){  
Employee s1=new Employee(111,"ankit",5000f);  
Employee s2=new Employee(112,"sumit",6000f);  
s1.display();  
s2.display();  
}}  

เอาท์พุท: -

0 null 0.0
0 null 0.0

ในตัวอย่างข้างต้นพารามิเตอร์ (อาร์กิวเมนต์ที่เป็นทางการ) และตัวแปรอินสแตนซ์เหมือนกัน ดังนั้นเราจึงใช้คำหลักนี้เพื่อแยกแยะตัวแปรท้องถิ่นและตัวแปรอินสแตนซ์

class Employee{  
int id_no;  
String name;  
float salary;  
Student(int id_no,String name,float salary){  
this.id_no = id_no;  
this.name=name;  
this.salary = salary;  
}  
void display(){System.out.println(id_no +" "+name+" "+ salary);}  
}  
class TestThis1{  
public static void main(String args[]){  
Employee s1=new Employee(111,"ankit",5000f);  
Employee s2=new Employee(112,"sumit",6000f);  
s1.display();  
s2.display();  
}} 

เอาท์พุท:

111 ankit 5000
112 sumit 6000

2. เพื่อเรียกใช้เมธอดคลาสปัจจุบัน

class A{  
void m(){System.out.println("hello Mandy");}  
void n(){  
System.out.println("hello Natasha");  
//m();//same as this.m()  
this.m();  
}  
}  
class TestThis4{  
public static void main(String args[]){  
A a=new A();  
a.n();  
}}  

เอาท์พุท:

hello Natasha
hello Mandy

3. เพื่อเรียกใช้ตัวสร้างคลาสปัจจุบัน มันถูกใช้เพื่อสร้างการผูกมัด

class A{  
A(){System.out.println("hello ABCD");}  
A(int x){  
this();  
System.out.println(x);  
}  
}  
class TestThis5{  
public static void main(String args[]){  
A a=new A(10);  
}}

เอาท์พุท:

hello ABCD
10

4. ผ่านเป็นอาร์กิวเมนต์ในวิธีการ

class S2{  
  void m(S2 obj){  
  System.out.println("The method is invoked");  
  }  
  void p(){  
  m(this);  
  }  
  public static void main(String args[]){  
  S2 s1 = new S2();  
  s1.p();  
  }  
}  

เอาท์พุท:

The method is invoked

5. ผ่านเป็นอาร์กิวเมนต์ในการเรียกตัวสร้าง

class B{  
  A4 obj;  
  B(A4 obj){  
    this.obj=obj;  
  }  
  void display(){  
    System.out.println(obj.data);//using data member of A4 class  
  }  
}  

class A4{  
  int data=10;  
  A4(){  
   B b=new B(this);  
   b.display();  
  }  
  public static void main(String args[]){  
   A4 a=new A4();  
  }  
} 

เอาท์พุท: -

10

6. เพื่อส่งคืนอินสแตนซ์ของคลาสปัจจุบัน

class A{  
A getA(){  
return this;  
}  
void msg(){System.out.println("Hello");}  
}  
class Test1{  
public static void main(String args[]){  
new A().getA().msg();  
}  
}  

เอาท์พุท: -

Hello

นอกจากนี้คำหลักนี้ไม่สามารถใช้งานได้หากไม่มี (dot) เนื่องจากเป็นไวยากรณ์ที่ไม่ถูกต้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.