CodeGym /Blog Java /Ngẫu nhiên /Phương thức Java toString()

Phương thức Java toString()

Xuất bản trong nhóm
Thông thường, khi tạo một chương trình, cần phải tìm hiểu nội dung của một đối tượng. Với những mục đích này, lớp Đối tượng Java , lớp Java cơ bản nhất trong hệ thống phân cấp lớp, định nghĩa một phương thức toString() đặc biệt . Nó trả về một chuỗi ký tự mô tả đối tượng. Việc triển khai mặc định của phương thức toString() trong Java tạo ra kết quả như thế này:
package.class@hashCode
tức là toString , được xác định trong java.lang.Object cung cấp mã băm của đối tượng ở dạng thập lục phân. Điều này thường không rõ ràng và hữu ích. Vì vậy, khi tạo một lớp mới, theo thông lệ, hãy ghi đè toString() để chuỗi trả về chứa tên lớp, tên và giá trị của tất cả các biến. Ghi đè phương thức toString một cách chính xác có thể giúp ghi nhật ký và gỡ lỗi chương trình Java, nó cung cấp thông tin quan trọng và có giá trị. Nói một cách đơn giản, phương thức toString() được sử dụng trong Java để lấy một đối tượng chuỗi biểu thị giá trị của một đối tượng số. Nói cách khác, nó chuyển đổi một số thành một chuỗi. Nếu phương thức lấy một kiểu dữ liệu đơn giản làm đối số thì một đối tượng chuỗi sẽ được trả về đại diện cho giá trị của kiểu dữ liệu đơn giản.

Ví dụ về phương thức Java toString()

Thông thường, nếu bạn tạo một lớp, ngoài phương thức toString() trong Java, bạn cần ghi đè các phương thức bằng , hashCodeso sánh để biết cách làm việc với các đối tượng của nó. Nhưng hiện tại, hãy tập trung vào toString . Trong hầu hết các trường hợp, việc gửi thông tin văn bản về một đối tượng khá đơn giản. Bạn chỉ cần hiểu chính xác những gì người dùng muốn thấy khi đăng nhập. Hãy đưa ra một ví dụ và tạo một Lớp mô tả một điểm trên mặt phẳng. Nó có hai tọa độ: tọa độX, tọa độY. Đương nhiên, chúng sẽ được hiển thị trên màn hình nếu người dùng hỏi “đây là đối tượng gì” giống như tên của lớp đó. Đây là những gì chúng ta sẽ chứng minh trong phương thức toString() được ghi đè . Bây giờ chúng ta tạo chính lớp đó, các trường (tọa độ) của nó, một hàm tạo, các getters để lấy tọa độ (chắc chắn là không thể tạo chúng, nhưng từ quan điểm sử dụng OOP đúng cách, getters là một cách thực hành tốt). Để minh họa, chúng ta cũng hãy tạo một phương thức tạo một điểm mới — tổng của hai điểm còn lại, đồng thời ghi đè các phương thức bằng và hashCode .
public class Point implements Comparable<Point> {
   private final int coordinateX;
   private final int coordinateY;

   public Point(final int coordinateX, final int coordinateY) {
       this.coordinateX = coordinateX;
       this.coordinateY = coordinateY;
   }

   public int getX() {
       return coordinateX;
   }

   public int getY() {
       return coordinateY;
   }

   public Point sum(final Point that) {
       return new Point(coordinateX + that.coordinateX, coordinateY + that.coordinateY);
   }

// here we override toString with coordinates and class name
   @Override
   public String toString() {
       return "Point{"
               + "X: " + getX()
               + ", Y: " + getY()
               +  '}';
   }

   @Override
   public boolean equals(Object o) {
       if (o == this) {
           return true;
       }
       if (o == null || o.getClass() != this.getClass()) {
           return false;
       }

   @Override
   public int hashCode() {
       return coordinateX + coordinateY;

   }
Bây giờ hãy tạo một lớp thử nghiệm và một phương thức chính. Ở đó chúng ta có hai điểm và điểm thứ ba, chúng ta có được từ tổng của hai điểm. Chúng tôi áp dụng phương thức toString cho điểm này và in nó ra.
//toString() method demo
public class Test {
   public static void main(String[] args) {
       Point myPoint1 = new Point(5,7);
       Point myPoint2 = new Point(-2, 8);
       Point mySum = myPoint1.sum(myPoint2);
     //call toString explicitly
       System.out.println(mySum.toString());
   }
}
Kết quả của chương trình này là như sau:
Điểm{X: 3, Y: 15}
Bạn thực sự không cần phải gọi phương thức toString một cách rõ ràng và thường là không cần. Để gọi phương thức toString() , chỉ cần chuyển đối tượng mong muốn tới System.out.println . Vì vậy, lớp thử nghiệm của chúng tôi sẽ trông như thế này:
//toString method demo
public class Test {
   public static void main(String[] args) {
       Point myPoint1 = new Point(5,7);
       Point myPoint2 = new Point(-2, 8);
       Point mySum = myPoint1.sum(myPoint2);
       //call toString implicitly
       System.out.println(mySum);
   }
}
Đầu ra của chương trình vẫn giống như trước đây. Điều gì sẽ xảy ra nếu chúng ta không ghi đè phương thức toString nhưng lại muốn in đối tượng? Trong trường hợp này, phương thức toString của lớp Object sẽ được gọi. Trong ví dụ của chúng tôi, nếu chúng tôi loại bỏ phương thức toString khỏi lớp Point và giữ nguyên mọi thứ trong lớp thử nghiệm, chúng tôi sẽ nhận được kết quả sau:
Điểm@12
Ở đây chúng ta có mã băm của đối tượng ở dạng thập lục phân.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION