30/09/2018, 18:20

Không hiểu về ý nghĩa và cách hoạt động của con trỏ this trong java

Em mới bắt đầu học Java không hiểu con trỏ this cho lắm. Cụ thể là trong code

public class GiaoDien {
      public GiaoDien() {
           download = new Download(this);    
}
}

hay là

 private JButton createJButton(String buttonName) {
    JButton btn = new JButton(buttonName);
    btn.addActionListener(this);
    return btn;
}

em không hiểu nó có ý nghĩa gì và cách nó hoạt động ra sau mong các anh chị chỉ giúp ?

Le Tran Phuong viết 20:25 ngày 30/09/2018

Bạn đưa ví dụ không đầy đủ lắm nên khó nói cụ thể cho bạn. Nhưng theo mình biết, this là từ dùng để đại diện cho một cái gì đó, có thể là một class, object v.v
Trong ví dụ 1 của bạn: this này mình không dám chắc.
ví dụ 2 thì this nó thay cho một ActionListener nào đó. Vì trong trường hợp của bạn, người ta lấy luôn class hiện tại có implements ActionListener interface, nên để tiện lợi họ viết this thay vì viết tên class.

Thêm một ví dụ khác cho bạn:

class thisDemo{
   private String name;

  public void setName(String name){
        this.name = name;
  }

}

Ở ví dụ trên, bạn thấy là có 2 name:

  • name thứ nhất là thuộc tính của class
  • name thứ hai là tham số truyền vào phương thức setter.
    This ở đây nhằm phân biệt name nào. This đại diện cho class thisDemo. => nghĩa là, lấy name tham số, gán cho name thuộc tính của class.

Hic, hi vọng bạn hiểu được phần nào

This là thứ khóa để chỉ tham chiếu đến đối tượng đang chứa nó như vậy thì:

public class ClassA {
    public void methodA() {
        Download download = new Download(this); 
    }
}

This đại diện cho đối tượng ClassA

public class ClassA {
    public class ClassB {
        Download download = new Download(this); 
    }
}

This đại diện cho đối tượng ClassB nằm trong ClassA

public class ClassA {
    public static void methodA() {
        Download download = new Download(this); 
    }
}

Báo lỗi vì methodA là static nghĩa là nó không phải là phương thức của một object nên không có object nào chứa nó nên this không tham chiếu đền cái gì cả.

public class ClassA {
    private int a;
    public void methodA(int a) {
        this.a = a;
    }
}

This dùng để phân biệt giữa thuộc tính a (property) của đối tượng ClassA và tham số a (parameter) của phương thức methodA.

public class ClassA {
    private static int a;
    public void methodA(int a) {
        this.a = a;
    }
}

Có một vài IDE sẽ không báo lỗi nhưng this đang được dùng sai với nguyên tắc của OOP. Sở dĩ được cho phép là vì viết như thế này không bị conflict về mặt cú pháp mà thôi.

public class ClassA implement IInterfaceB {
    private static int a;
    @Override
    public void methodB() {
        ClassC classC = new ClassC(this);
    }

    public interface IInterfaceB {
         public void methodB();
    }

    public class ClassC {
        public ClassC(IInterfaceB b) {
            int i = 1;
            if(b instanceof ClassA) {
                i = 2;
            }
        }
    }
}

This chính là ClassA và ClassA do triển khai (implement) IInterfaceB nên this có thể truyền vào ClassC. Tham số truyền vào là this vẫn đảm bảo nó là ClassA nên instanceof trả về true nên i sẽ bằng 2.

Còn thiếu cái gì nữa không nhỉ?

P/s: Bạn viết method sai rồi nhé. Nên chú ý những cái căn bản cho thành thói quen…

This không thể đại diện cho class và interface nhé. Lí do có giải thích ở trên comment trên. This dùng để đại diện cho thực thể (thể hiện/instance) hay nói cách khác là đối tượng(object) cụ thể.

Le Tran Phuong viết 20:32 ngày 30/09/2018

Thanks bạn@GDGHN_AndroidTeam nhé

Huỳnh Thiện viết 20:21 ngày 30/09/2018

ag em hiểu rồi. Loay hoay mãi mới xong được. Cảm ơn các anh

Bài liên quan
0