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. Mộ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:
- sử dụng từ khóa mới
- phương thức newInstance()
- phương thức clone()
- 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;
}
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;
}
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() và
setter() của nó để thực hiện một số hành động nhất định. Xin lưu ý:
- Cả Class.forName() và newIstance() đều đưa ra các ngoại lệ phải được xử lý bằng cách sử dụng khối try và Catch 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;
}
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) {
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;
}
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
Class và
Constructor , đâ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() và 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.
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);
}
}
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);
}
}
Ở đâ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);
}
}
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() và
valueOf() . Chúc mừng mã hóa!
GO TO FULL VERSION