Nhờ giải thích dòng code java

chương trình của em như sau:

package JavaApp1;

/**@author Truong An**/
public class java05bai1 {

    private static Object ja;
    /** một class public chỉ có duy nhất 1 object, object chứa toàn bộ dữ liệu của class đó **/
    private final String name = "Ta Bao Phuc";
            private final int age = 20;
            /** Khi một phương thức hoặc biến được khai báo là private
nó sẽ không thể truy cập từ class khác, mà chỉ truy cập được trong class đó
            kể cả các class cùng source file hay các class con(hay còn gọi là class kế thừa)
**/
            public void showjava05bai1(){
                System.out.println("Ten: " + name);
                System.out.println("Tuoi: " + age);
 /** void là từ khóa chỉ giá trị trả về của 1 phương thức  **/               
                
            
            }
    public int addNumbers(int a, int b){
        int sum = a + b;
        return sum;
  /** int là từ khóa dạng dữ liệu là số nguyên **/      
    }
    public static void main(String[] args) {
 /** vì có thêm static ở phần này tức là có thêm Object của class "java05bai1" là "ja" **/
               java05bai1 ja = new java05bai1();

                       
        ja.showjava05bai1();
        
        System.out.println("Tong cac so la: " + ja.addNumbers(4, 9));
        
    }

}

và em không hiểu ở đoạn này:

 public static void main(String[] args) {
 /* vì có thêm static ở phần này tức là có thêm Object của class "java05bai1" là "ja" */
               java05bai1 ja = new java05bai1();

                       
        ja.showjava05bai1();
        
        System.out.println("Tong cac so la: " + ja.addNumbers(4, 9));

Chương trình vẫn thì chạy đúng nhưng mọi người cho em hỏi vì sao lại viết như đoạn trên không ạ? Vì em học theo study and share thấy người ta viết nên em viết vào, hiện tạm hiểu 1 phần thôi. Nhân tiện thì mấy dòng cmt em ghi chức năng của 1 số đoạn code có đúng không ạ? Nếu sai thì mọi người có thể chỉnh lại chỗ cmt được không ạ?

public static void main(String[] args) {
    java05bai1 ja = new java05bai1(); // 1   
    ja.showjava05bai1();// 2
    System.out.println("Tong cac so la: " + ja.addNumbers(4, 9));// 3
} 

Mình đang ko hiểu bạn thắc mắc chỗ nào? giờ giải thích theo thứ tự đánh số nha:
1/ Tạo 1 object kiểu java05bai1 tên ja
2/ Gọi đến method showjava05bai1() của ja
3/ In ra giá trị của method addNumbers sau khi thực thi.

3 Likes
  • Code của bạn indent lung tung quá. Bạn đã học Python - 1 ngôn ngữ rất quan trọng việc indent mà sang Java lại chỗ thò chỗ thụt.

  • Tên class nên để theo kiểu PascalCase, ví dụ như Java05Bai1.

  • Object ja bạn định nghĩa private static không phải mang ý nghĩa thế này

Thử tạo 2 object ja, jb hay xoá hẳn dòng đó đi cũng không có tác dụng gì. Khai báo xong phải sử dụng thì mới có ý nghĩa.

Muốn sử dụng ja làm object chứa toàn bộ dữ liệu thì người ta khai báo khác.

Một chút phức tạp
// Đoạn code chỉ sử dụng với mục đích minh hoạ một cách tối giản
// Tham khảo: Singleton pattern
public class DNH {
	private static DNH a_instance = null;
	private String admin;

	public DNH() {
		this.admin = "ltd";

		a_instance = this; // lúc này a_instance mới "chứa" dữ liệu của object hiện tại -- là this
	}

	public void print() {
		System.out.println(this.admin);
		System.out.println(a_instance.admin);
	}

	public static void main(String[] args) {
		DNH d = new DNH();
		d.print();
	}
}

Output

ltd
ltd
  • Thêm nữa

Object ja trong main này và object ja là property của class java05bai1 này chẳng liên quan gì đến nhau cả. Chúng thuộc 2 vị trí khác nhau.

Muốn gán 1 object java05bai1 mới vào thuộc tính ja của class java05bai1 thì gọi

java05bai1.ja = new java05bai1();

tuy nhiên việc này không được khuyến khích lắm vì nó làm xấu code. Nếu muốn gán ja cho 1 object của class java05bai1 thì nên làm ở ngay trong constructor như trên.

Dòng comment của bạn thì thật sự mình không hiểu là để làm gì, vì mục đích tạo thêm 1 ja ở dưới và ja ở trên không liên quan đến nhau.


Vấn đề của bạn là cần tìm 1 course Java + OOP để học cho cẩn thận.

2 Likes

À dạ vâng ạ, do em mới học thôi nên nhiều thứ còn chưa biết, mong mọi người thông cảm ạ. Chắc em phải mua sách học thôi :worried:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?