JavaRush /Blog Java /Random-VI /Nghỉ giải lao #174. Các cách khác nhau để tạo một đối tượ...

Nghỉ giải lao #174. Các cách khác nhau để tạo một đối tượng trong Java.String thành Int trong Java - Cách chuyển đổi chuỗi thành số nguyên

Xuất bản trong nhóm

Các cách khác nhau để tạo một đối tượng trong Java

Nguồn: Medium Trong hướng dẫn này, chúng ta sẽ tìm hiểu các cách khác nhau để tạo một đối tượng trong Java. Nghỉ giải lao #174.  Các cách khác nhau để tạo một đối tượng trong Java.String thành Int trong Java - Cách chuyển chuỗi thành số nguyên - 1Một đối tượng Java là một thể hiện của một lớp Java. Mỗi đối tượng có một trạng thái, một hành vi và một mã định danh. Các trường (biến) lưu trữ trạng thái của một đối tượng, trong khi các phương thức (hàm) hiển thị hành động của một đối tượng. Các lớp đóng vai trò là “bản thiết kế” từ đó các phiên bản đối tượng được tạo ra trong thời gian chạy.

Tạo một đối tượng trong Java

Tạo đối tượng là quá trình cấp phát bộ nhớ để lưu trữ dữ liệu trong các trường lớp (còn gọi là biến). Quá trình này thường được gọi là tạo một thể hiện của một lớp. Có bốn cách khác nhau để tạo đối tượng trong Java:
  1. sử dụng từ khóa mới
  2. phương thức newInstance()
  3. phương thức clone()
  4. khử lưu huỳnh một đối tượng
Bây giờ chúng ta hãy xem xét chi tiết từng phương pháp được đề cập.

Từ khóa mới

Đây là cách phổ biến nhất để tạo một đối tượng trong Java. Từ khóa mới tạo một thể hiện của một lớp bằng cách cấp phát bộ nhớ cho một thể hiện mới của loại đã chỉ định. Sau new là hàm tạo - một phương thức đặc biệt chịu trách nhiệm tạo đối tượng và khởi tạo các trường của đối tượng đã tạo. Một đối tượng được tạo bằng toán tử mới và được khởi tạo bằng hàm tạo. Đây là một ví dụ về cách tạo một đối tượng Java bằng toán tử new :
Date today = new Date();
Biểu thức này tạo ra một đối tượng Date mới ( Date là một lớp bên trong gói java.util ). Mệnh đề đơn này trong mã thực hiện ba thao tác: khai báo, khởi tạo và khởi tạo. Ngày hôm nay là một khai báo biến nhằm thông báo cho trình biên dịch rằng hôm nay sẽ tham chiếu đến một đối tượng thuộc loại Date . Toán tử mới khởi tạo lớp Date (tạo một đối tượng Date mới trong bộ nhớ) và Date() khởi tạo đối tượng. Hãy xem xét ví dụ dưới đây:
public class Person {
    private String name;
    private int uid;

    public Person() {
        this.name = "Michael Cole";
        this.uid = 101;
    }

    public Person(String name, int uid) {
        super();
        this.name = name;
        this.uid = uid;
    }

    // getters and setters...

    public static void main(String[] args) {

        Person p1 = new Person();
        Person p2 = new Person("John Bodgan", 102);
        System.out.println("Name: " + p1.getName() + " UID: " + p1.getUid());
        System.out.println("Name: " + p2.getName() + " UID: " + p2.getUid());
    }
}
Từ mã này, chúng ta tạo một đối tượng Person bằng từ khóa mới :
  • Đối tượng p1 gọi một hàm tạo không tham số hóa với giá trị tên biến được đặt thành “Michael Cole” và UID được đặt thành 101.
  • Đối tượng p2 gọi hàm tạo được tham số hóa, trong đó nó chuyển giá trị “John Bodgan” và 102. Sau đó, các giá trị này được gán một tên biến và UID.

Sử dụng phương thức newInstance()

Phương thức newInstance() trong Java được sử dụng để tạo động một thể hiện của một đối tượng của một lớp nhất định. Có hai cách sử dụng tiêu chuẩn của phương thức newInstance() :
  • phương thức newInstance() từ API java.lang.Class
  • Phương thức newInstance() từ API java.lang.reflect.Constructor

Sử dụng newInstance() từ API lớp

Để tạo một đối tượng của một lớp trong thời gian chạy, chúng ta phải gọi phương thức newInstance() từ Class API, phương thức này trả về một đối tượng của lớp đó. Phương thức newInstance() của lớp java.lang.Class không nhận bất kỳ tham số hoặc đối số nào và có thể được gọi là hàm tạo không có đối số cho lớp đó. Hãy xem một số mã ví dụ để tạo một đối tượng của lớp Person bằng phương thức newInstance() của lớp java.lang.Class :
public class Person {
    private String name;
    private int uid;

    public Person() {
        this.name = "Carl Max";
        this.uid = 101;
    }

   // getters and setters...
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        Class c = Class.forName("com.medium.option2.Person");
        @SuppressWarnings("deprecation")
        Person p = (Person) c.newInstance();
        System.out.println("Name: " + p.getName());
        System.out.println("UID: " + p.getUid());
    }
}
Class.forName (tên đầy đủ của lớp) tải một lớp có tên Person , sau đó newInstance() tạo một đối tượng mới thuộc loại Person và trả về một tham chiếu đến nó. Bây giờ, bằng cách sử dụng tham chiếu Person tới p , chúng ta có thể gọi getters()setter() của nó để thực hiện một số hành động nhất định. Xin lưu ý:
  • Cả Class.forName()newIstance() đều đưa ra các ngoại lệ phải được xử lý bằng cách sử dụng khối tryCatch hoặc từ khóa ném .
  • Phương thức newInstance() từ API Lớp đã không được dùng nữa kể từ Java 9.

Sử dụng newInstance() từ API Trình xây dựng

Phương thức newInstance() của lớp Constructor ( java.lang.reflect.Constructor ) tương tự như phương thức newInstance() của lớp Class , ngoại trừ việc nó chấp nhận các tham số cho các hàm tạo được tham số hóa. Hãy minh họa cách tiếp cận này bằng cách tạo một đối tượng của lớp Person sử dụng phương thức newInstance() của lớp java.lang.reflect.Constructor :
public class PersonTwo {
    private String name;
    private int uid;

    public PersonTwo() {
        this.name = "Maya Kumari";
        this.uid = 101;
    }

    public PersonTwo(String name) {
        this.name = name;
        this.uid = 102;
    }

    public PersonTwo(String name, Integer uid) {
        this.name = name;
        this.uid = uid;
    }

    // getters and setters...
    public static void main(String[] args) {
        try {
            Class.forName("com.medium.option2.PersonTwo");

            Constructor c1 = PersonTwo.class.getConstructor();
            PersonTwo p1 = (PersonTwo) c1.newInstance();
            System.out.println("Name: " + p1.getName());
            System.out.println("UID: " + p1.getUid());

            Constructor c2 = PersonTwo.class.getConstructor(String.class);
            PersonTwo p2 = (PersonTwo) c2.newInstance("James Gunn");
            System.out.println("Name: " + p2.getName());
            System.out.println("UID: " + p2.getUid());

            Constructor c3 = PersonTwo.class.getConstructor(String.class, Integer.class);
            PersonTwo p3 = (PersonTwo) c3.newInstance("Mark Brown", 103);
            System.out.println("Name: " + p3.getName());
            System.out.println("UID: " + p3.getUid());

        } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
Trong đoạn mã trên, đầu tiên chúng ta cần tải lớp bằng phương thức Class.forName() . Tiếp theo, chúng ta sẽ gọi phương thức getConstructor() để khớp với kiểu dữ liệu của các tham số được truyền. Cuối cùng, trong phương thức newInstance() , chúng ta truyền tham số bắt buộc ( null nếu không có đối số). Phương thức newInstance() sẽ trả về một đối tượng mới của lớp PersonTwo bằng cách gọi hàm tạo thích hợp.

Sử dụng phương thức clone()

Phương thức clone() là một phần của lớp Object và được sử dụng để tạo một bản sao của một đối tượng hiện có. Nó tạo ra một đối tượng của lớp mà không gọi bất kỳ hàm tạo nào của lớp. Để sao chép một phương thức, lớp tương ứng phải triển khai giao diện Cloneable , là giao diện đánh dấu. Bây giờ chúng ta sẽ tạo một đối tượng của lớp Person và sau đó sao chép nó vào một đối tượng khác của lớp Person :
public class Person implements Cloneable {
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    private String name;
    private int uid;

    public Person(String name, int uid) {
        super();
        this.name = name;
        this.uid = uid;
    }

    // getters and setters...

    public static void main(String[] args) {
        Person p1 = new Person("Ryan", 101);
        try {
            Person p2 = (Person) p1.clone();
            System.out.println("Name: " + p2.getName());
            System.out.println("UID: " + p2.getUid());
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }

    }
}
Ghi chú. Đối tượng nhân bản sẽ tham chiếu cùng một đối tượng ban đầu thông qua tham chiếu p2 . Tuy nhiên, đối tượng được nhân bản sẽ có sự phân công bộ nhớ riêng. Điều này có nghĩa là bất kỳ thay đổi nào được thực hiện đối với đối tượng Person được tham chiếu bởi p2 sẽ không thay đổi đối tượng Person ban đầu được tham chiếu bởi p1 . Điều này là do phương thức clone() tạo ra một bản sao nông của các đối tượng.

Sử dụng quá trình giải tuần tự hóa đối tượng

Quá trình giải tuần tự hóa đối tượng là quá trình trích xuất một đối tượng từ một chuỗi luồng byte. Việc tuần tự hóa thì ngược lại. Mục đích chính của nó là truy xuất một đối tượng được lưu trữ từ cơ sở dữ liệu/mạng trở lại bộ nhớ. Nếu chúng ta muốn tuần tự hóa hoặc giải tuần tự hóa một đối tượng, chúng ta cần triển khai giao diện Serializable (giao diện mã thông báo). Hãy xem xét ví dụ dưới đây:
public class PersonDriver {

    public static void main(String[] args) {
        Person p1 = new Person("Max Payne", 101);
        FileOutputStream fileOutputStream;
        try {
            fileOutputStream = new FileOutputStream("link to text file");
            ObjectOutputStream outputStream = new ObjectOutputStream(fileOutputStream);
            outputStream.writeObject(p1);
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        FileInputStream fileInputStream;
        try {
            fileInputStream = new FileInputStream("link to text file");
            ObjectInputStream inputStream = new ObjectInputStream(fileInputStream);
            Person p2 = (Person) inputStream.readObject();
            System.out.println("Name: " + p2.getName());
            System.out.println("UID: " + p2.getUid());
            inputStream.close();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
Ở đây trước tiên chúng ta tuần tự hóa đối tượng Person bằng tham chiếu p1 vào một tệp văn bản. Phương thức writeObject() sẽ ghi luồng byte của đối tượng vào một tệp văn bản. Sau đó, bằng cách sử dụng quá trình giải tuần tự hóa đối tượng, chúng tôi trích xuất đối tượng Person trở lại p2 . Tương tự, phương thức readObject() sẽ đọc một đối tượng từ luồng đầu vào của đối tượng. Cuối cùng, chúng ta sẽ in dữ liệu từ đối tượng Person ra bàn điều khiển.

Phần kết luận

Trong bài viết này, chúng ta đã tìm hiểu về các cách khác nhau để tạo một đối tượng trong Java. Đầu tiên, chúng ta xem xét việc tạo các đối tượng bằng từ khóa new , đây là cách phổ biến nhất. Sau đó, chúng ta đã học phương thức newInstance() từ các lớp ClassConstructor , đây là một cách phổ biến khác để tạo đối tượng. Sau đó, chúng tôi sử dụng phương thức clone() để tạo một bản sao nông của đối tượng hiện có thay vì tạo một đối tượng mới. Cuối cùng, chúng tôi đã sử dụng khái niệm tuần tự hóa và giải tuần tự hóa đối tượng để tạo các đối tượng trong Java.

Chuỗi thành Int trong Java - cách chuyển đổi chuỗi thành số nguyên

Nguồn: FreeCodeCamp Hôm nay bạn sẽ tìm hiểu cách chuyển đổi một chuỗi thành số nguyên trong Java bằng cách sử dụng hai phương thức của lớp Integer - ParseInt()valueOf() . Điều này sẽ giúp bạn khi thực hiện các phép toán sử dụng giá trị của biến chuỗi. Nghỉ giải lao #174.  Các cách khác nhau để tạo một đối tượng trong Java.String thành Int trong Java - Cách chuyển đổi chuỗi thành số nguyên - 2

Cách chuyển đổi một chuỗi thành số nguyên trong Java bằng Integer.parseInt

Tùy chọn này giả định rằng phương thức extractInt() lấy một chuỗi để chuyển đổi thành số nguyên làm tham số:
Integer.parseInt(string_varaible)
Trước khi xem ví dụ về cách sử dụng nó, hãy xem điều gì xảy ra khi bạn thêm một giá trị chuỗi và một số nguyên mà không có bất kỳ chuyển đổi nào:
class StrToInt {
    public static void main(String[] args) {
        String age = "10";

        System.out.println(age + 20);
        // 1020
    }
}
Trong mã này, chúng tôi đã tạo một biến age với giá trị chuỗi “10”. Khi chúng tôi thêm số 20 vào một giá trị số nguyên, chúng tôi đã nhận nhầm 1020 thay vì câu trả lời đúng là 30. Điều này có thể được sửa bằng cách sử dụng phương thức extractInt() :
class StrToInt {
    public static void main(String[] args) {
        String age = "10";

        int age_to_int = Integer.parseInt(age);

        System.out.println(age_to_int + 20);
        // 30
    }
}
Ở đây, để chuyển đổi biến age thành số nguyên, chúng ta đã chuyển nó dưới dạng tham số cho phương thức extractInt() - Integer.parseInt(age) - và lưu trữ nó trong một biến có tên age_to_int . Bây giờ khi được cộng vào một số nguyên khác, chúng ta sẽ có được phép cộng chính xác: age_to_int + 20 .

Cách chuyển đổi một chuỗi thành số nguyên trong Java bằng Integer.valueOf

Phương thức valueOf() hoạt động giống như phương thức parsInt() . Nó lấy tham số là một chuỗi cần được chuyển đổi thành số nguyên. Đây là một ví dụ:
class StrToInt {
    public static void main(String[] args) {
        String age = "10";

        int age_to_int = Integer.valueOf(age);

        System.out.println(age_to_int + 20);
        // 30
    }
}
Trong đoạn mã trên, bạn có thể thấy điều tương tự như trong phần trước:
  • Chúng tôi đã chuyển một chuỗi dưới dạng tham số cho valueOf() : Integer.valueOf(age) . Nó được lưu trữ trong một biến có tên là age_to_int .
  • Sau đó chúng tôi đã thêm 10 vào biến đã tạo: age_to_int + 20 . Kết quả là 30 thay vì 1020.

Phần kết luận

Trong bài viết này, chúng ta đã thảo luận về việc chuyển đổi chuỗi thành số nguyên trong Java. Để chuyển đổi một chuỗi thành số nguyên, hai phương thức của lớp Integer đã được sử dụng - parsInt()valueOf() . Chúc mừng mã hóa!
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION