Tham chiếu giữa các class - Reference Between Classes

Discussion in 'Hướng dẫn người mới bắt đầu' started by JackV, 3/5/13.

  1. JackV

    JackV Administrator Staff Member

    Sau đây JackV sẽ hướng dẫn các bạn mới lập trình 2 cách sử dụng tham chiếu giữa các class
    1. Truyền tham chiếu qua constructor
    2. Biến static trỏ đến đối tượng
    JackV sẽ demo bằng ứng dụng đơn giản đó là từ MainFrame mở InputDialog để nhập dữ liệu rồi set cho dữ liệu hiện thị ở MainFrame
    demo.png
    ===
    1. Truyền tham chiếu qua constructor
    Đây là cách truyền tham chiếu của đối tượng cha vào dialog thông qua tham biến khi khởi tạo dialog khi gọi construtor
    Constructor mặc định khi tạo dialog ta khong sử dụng, ta tạo một constructor cho phép nhận vào một đối tượng MainFrame, một biến toàn cục MainFrame trong class InputDialog để giữ tham chiếu đến đối tượng được truyền vào thông qua constructor
    PHP:
        public InputDialog(MainFrame parentboolean modal) {
            
    super(parentmodal);
            
    initComponents();
            
    parentFrame parent//tham chiếu đến đối tượng được truyền vào
        
    }
        
    MainFrame parentFrame;
    trong MainFrame ta khai báo phương thức nhận vào một string và set nó cho label
    PHP:
        public void showValue(String value){
            
    lbShowValue.setText(value);
        }
    ở InputDialog khi button set value được nhấn ta gọi
    PHP:
            parentFrame.showValue(txtValue.getText());
    ====
    2. Sử dụng đối tượng static trỏ đến đối tượng của MainFrame
    Đây là cách làm có tính linh động, nó phù hợp với việc MainFrame chỉ được tạo ra một đối tượng duy nhất.
    Trong MainFrame khai báo
    PHP:
    public static MainFrame it;
    trong constructor của MainFrame khai báo thêm dòng
    PHP:
    it this// trỏ đến đối tượng của lớp này
    trong MainFrame ta khai báo phương thức nhận vào một string và set nó cho label
    PHP:
        public void showValue(String value){
            
    lbShowValue.setText(value);
        }
    ở InputDialog khi button set value được nhấn ta gọi
    PHP:
            MainFrame.it.showValue(txtValue.getText());

    Attached Files:

  2. LTV

    LTV Active Member

    Mình thì thường hay dùng truyền qua constructor :D
  3. JackV

    JackV Administrator Staff Member

    Đó là cách hàn lâm nhất, lúc trước mình đi hỏi thầy giáo thì được chỉ cách dùng static thấy nó tiện lợi, gọi lúc nào mình cần mà không phải sửa, không phải sử dụng biến tham chiếu cho mỗi class mình muốn dùng.

    LTV có cách nào khác nữa không?
  4. đó giờ em toàn dùng truyền 1 Object thôi, các cách của anh hay thật, em thấy cách dùng static là tiện nhất!
  5. haonguyen282

    haonguyen282 Member

    anh JackV làm luôn 1 cái tut về truyền Data qua lại giữa các Frame luôn đi anh heeee
  6. JackV

    JackV Administrator Staff Member

  7. LTV

    LTV Active Member

    Dùng public static cũng được nhưng cứ phải nhớ vị trí ở Frame nào nên ngại lắm :)) có medthod thì lười nên dùng static thôi à. Gặp nhiều bạn dùng file để lưu giá trị của biến nữa...cách này có tính không ;))
  8. JackV

    JackV Administrator Staff Member

    Muốn lấy tham chiếu của MainFrame thì MainFrame.it, muốn lấy tham chiếu của InputDialog thì InputDialog.it, muốn lấy tham chiếu của DatabaseMaster thì DatabaseMaster.it, ..., chấm ít là ra, sao phải nhớ chứ ;;)
    Đó là việc lưu giá trị sử dụng chung tức là dùng chung dữ liệu chứ không phải tham chiếu rồi.
  9. Lê Lộc

    Lê Lộc Member

    Dùng static khi nào là tiện nhất nhĩ?
    Cái static này nó khởi tạo luôn khi chương trình chạy mà không cần new đối tượng.
    Giả sử mình chưa cần dùng mà nó đã khởi tạo thì có tốn tài nguyên không nhĩ :)

    ps: em toàn dùng contructor, static em dùng cho cái class gồm những phương thức mà dùng chung nhiều nhất.
  10. JackV

    JackV Administrator Staff Member

    Static chỉ được dùng là biến trỏ đến đối tượng chứ nó không phải một đối tượng nên nói về hao tốn thì không có.
  11. Lê Lộc

    Lê Lộc Member

    Vậy không new một đối tượng mà chỉ dùng static thì vùng nhớ của nó được tạo ra như thế nào?
  12. thì nó bằng null
  13. Nancru

    Nancru CongDongJava Project Leader Staff Member

    static có nghĩa là ko cần khởi tạo đối tượng chứa nó mà vẫn có thể dùng đc, dĩ nhiên bản thân static vẫn cần được khởi tạo.
  14. Joe

    Joe Moderator

    Nonsense! Static variables, objects and static methods are NOT object oriented. An object has a state or associates with a state and can be only accessed or manipulated via methods that implement the object's state and behavior. Static object or variable does NOT allow to operate on its state, hence it is NOT object oriented but procedural.
  15. Lê Lộc

    Lê Lộc Member

    Em hiểu static là nó tự khởi tạo rồi, vậy khởi tạo là nó sẽ tốn tài nguyên chứ?
  16. Joe

    Joe Moderator

    Following problems can be hard to debug or to keep track:
    - static objects, variables and methods are global
    - global objects can be manipulated from outside
    - the Page-in/Page-out process will be elongated and causes an overloaded system
    - the life-cycle of static objects is equal the life-cycle of their application even they aren't in use.
    In short: It's a bad behavior to use static when there's no unavoidable reasons.
    Lê Lộc likes this.
  17. duythanhcn

    duythanhcn Member

    thầy mình dạy dùng biến static
    chưa thử dùng contructor lần nào :D
    một kiến thức cũ vs mọi người nhưng mới vs mình
    tks
  18. Joe

    Joe Moderator

    Are you newbie ? A static constructor ? Just make a try...But I tell you:
    - If the constructor is static then constructors with parameters will become useless.
    - Constructor is not a normal method so making it static will not bind it to the class.
    - Static methods are not inherited. If a constructor becomes static it will lose all inheritance.

    By the way, Java garbage collector won't collect unused static objects and frees the memory for other use.
    duythanhcn and SITUVN like this.
  19. Joe

    Joe Moderator

    duythanhcn likes this.
  20. quangbeo216

    quangbeo216 Member

    có hẳn 1 thư mục demo rồi mà bạn, bạn tải về là xem thoải mái.
  21. manhlh231

    manhlh231 Member

    Mình xem qua nhưng cũng chưa hiểu lắm, bạn có demo nào không ?

Chia sẻ trang này