Khởi tạo đối tượng trong php

Các lớp, trường, phương thức, hàm tạo và các đối tượng là các mảnh ghép của các đối tượng hướng ứng dụng Java

Bài hướng dẫn này giúp bạn hiểu

  • Cách mạng báo các lớp
  • Mô tả các thuộc tính thông tin qua các trường
  • Mô tả các hành vi thông qua các phương thức
  • Khởi tạo các đối tượng thông qua các chức năng được tạo
  • Khởi tạo các đối tượng từ các lớp và truy cập các thành viên của họ

Đồng thời, bạn cũng sẽ tìm hiểu về setters và getters, phương thức nạp chồng (quá tải), thiết lập mức truy cập cho các trường, hàm tạo và phương thức, v. v

Lưu ý. Các ví dụ trong hướng dẫn biên dịch này và chạy với phiên bản thấp hơn Java 12

1. Cách Khai báo Lớp trong Java. java base


Một lớp là khuôn mẫu cho các đối tượng. Bạn khai báo một lớp bằng cách chỉ định từ khóa lớp theo sau là một định danh (mã định danh)

next is a cặp ký tự dấu trích dẫn mở và đóng phù hợp với

java C
1 và
java C
2 và phân định phần thân của lớp

Cú pháp khai báo class as after

class identifier
{
   // class body
}

Theo quy ước.
  • Tên lớp có chữ cái đầu tiên viết Hoa
  • Các ký tự tiếp theo viết thương mại (ví dụ. Nhân Viên)
  • Nếu một tên bao gồm nhiều từ, chữ cái đầu tiên của mỗi từ được viết hoa (chẳng hạn như SavingsAccount)

=> Quy định đặt tên này được gọi là CamelCasing (Hoặc PascalCase)

> Xem thêm. Quy ước đặt tên trong Java

Ví dụ bên dưới đây khai báo một lớp có tên là Sách

class Book
{
   // Phần thân của class
}

Phần thân của một lớp được điền với các trường, phương thức và hàm tạo. Kết hợp các tính năng của ngôn ngữ Java vào các lớp như là gói đóng trong Java.

> Tìm hiểu kỹ hơn về Đóng gói trong Java qua ví dụ Hack tài khoản ngân hàng

Khả năng này cho phép chúng ta thiết lập trình ở mức độ hiện tượng cao hơn (các lớp và đối tượng) thay vì tập trung riêng vào cấu trúc dữ liệu và chức năng



Ghi chú. Ứng dụng dựa trên đối tượng là gì?


Ứng dụng dựa trên đối tượng là một ứng dụng có thiết kế dựa trên việc khai báo các lớp, tạo các đối tượng và thiết kế các tương tác giữa các đối tượng

Ghi chú. Lớp tiện ích là gì?


Một lớp có thể được thiết kế để không liên quan gì đến đối tượng làm việc cụ thể. Thay vào đó, nó tồn tại như một địa điểm lưu trữ cho các trường lớp hoặc các phương thức lớp

=> Một lớp như vậy được gọi là lớp tiện ích

Một ví dụ về lớp tiện ích là lớp Toán trong thư viện tiêu chuẩn của Java



Tìm hiểu về Multi-class application và main()


Một ứng dụng Java được thực hiện bởi một hoặc nhiều lớp

Các ứng dụng nhỏ có thể được cung cấp bởi một lớp duy nhất, nhưng các ứng dụng lớn hơn thông thường yêu cầu nhiều lớp

Trong trường hợp đó, một trong các lớp chỉ được định nghĩa là lớp chính và chứa phương thức

java C
3

Ví dụ 1. Một ứng dụng Java có nhiều lớp

class A
{
}

class B
{
}

class C
{
   public static void main(String[] args)
   {
      System.out.println("Ứng dụng bắt đầu từ C");
   }
}
Bạn có thể khai báo lớp ba này trong một tệp mã duy nhất, chẳng hạn như
java C
4. Sau đó, bạn sẽ biên dịch các nguồn tệp này như sau.
javac D.java

Trình biên dịch tạo ra ba tệp.
java C
5,
java C
6 và
java C
7. Run this application application through command after.
java C

You have output as after.
java C
2
Ngoài ra, bạn có thể khai báo từng lớp trong tệp nguồn riêng của nó. Theo quy ước, tên của tệp khớp với tên lớp.

Ví dụ, bạn sẽ khai báo lớp

java C
8 trong
java C
9. Sau đó, bạn có thể biên dịch các nguồn tệp này theo một cách riêng biệt

java C
5
Để tiết kiệm thời gian tiết kiệm thời gian, bạn cũng có thể biên dịch cả ba tệp này cùng một lúc bằng cách thay thế tên tệp bằng dấu hoa thị (
java C
20) (nhưng vẫn .
java C
8
Dù bằng cách nào, bạn cũng sẽ chạy ứng dụng thông qua lệnh sau.
java C

Ghi chú. Tìm hiểu một chút về Public class


Java cho phép bạn khai báo một lớp có quyền truy cập công khai thông qua từ khóa công khai

Khi bạn khai báo một puclic class, bạn phải lưu trữ nó trong một tệp có cùng tên

Ví dụ. Bạn sẽ lưu trữ

java C
22 trong tệp
java C
23. Bạn chỉ có thể khai báo một lớp công khai trong một tệp lệnh


Khi thiết kế các ứng dụng dưới dạng nhiều lớp, bạn sẽ chỉ định một trong các lớp này là lớp chính và định vị phương thức

java C
3 ở trong đó

Tuy nhiên, không có gì ngăn cản bạn khai báo các phương thức

java C
3 trong các lớp khác nhau

Chúng ta sẽ thử xem điều này ở ví dụ tiếp theo

Ví dụ 2. Khai báo nhiều hơn một phương thức main() trong ứng dụng Java

class identifier
{
   // class body
}
4
Sau khi biên dịch mã nguồn, bạn sẽ thực hiện các lệnh sau để kiểm tra các lớp trợ giúp A và B và để chạy ứng dụng lớp C.
class Book
{
   // Phần thân của class
}
0
Sau đó, bạn sẽ quan sát các dòng đầu ra sau, một dòng trên mỗi lệnh java.
class Book
{
   // Phần thân của class
}
1

Hãy cẩn thận khi sử dụng hàm main() trong Java


Việc đặt một phương thức
java C
3 trong mỗi lớp có thể gây nhầm lẫn, đặc biệt nếu bạn quên ghi lại lớp chính

Ngoài ra, bạn có thể quên xóa các phương thức này trước khi đưa ứng dụng vào trong sản phẩm, trong trường hợp đó, sự hiện diện của họ sẽ làm cho ứng dụng hấp dẫn hơn

Hơn nữa, ai đó có thể chạy một trong các lớp hỗ trợ dẫn đến khả năng phá vỡ môi trường của ứng dụng Java

2. Tìm hiểu về Fields. Thuộc tính mô tả

Mô hình hóa mô hình có thể thực hiện được trong thế giới thực về mặt trạng thái gọi là thuộc tính (thuộc tính)

Ví dụ. Một chiếc xe có màu và kiểm tra tài khoản có số dư

Một lớp cũng có thể bao gồm trạng thái phi thực tế. Mặc dù vậy, trạng thái được lưu trữ trong các biến được gọi là các trường (trường)

Cú pháp khai báo một trường (trường) như sau

class Book
{
   // Phần thân của class
}
2
Khai báo trường tùy chọn bắt đầu bằng từ khóa tĩnh (đối số thuộc tính không phải là thực tế) và tiếp tục với loại được theo sau bởi một danh sách ( .

Trường (Trường) có thể được khởi tạo một cách rõ ràng bằng cách chỉ định = theo sau là một biểu thức (biểu thức) với kiểu tương thích. Một dấu chấm phẩy để báo cáo cuối cùng

Ví dụ khai báo một trường có tên là Sách

class Book
{
   // Phần thân của class
}
3
Các cuộc khai báo trường
java C
27 và
java C
28 giống nhau với các cuộc khai báo biến mà chúng ta đã biết.

Các trường này được gọi là trường mẫu vì mỗi đối tượng chứa bản sao riêng của chúng

Các trường tiêu đề và pubYear lưu trữ giá trị cho một cuốn sách cụ thể. Tuy nhiên, thông thường bạn muốn lưu trữ trạng thái độc lập với bất kỳ cuốn sách cụ thể nào

Ví dụ. Bạn có thể muốn ghi lại tổng số đối tượng Sách đã được tạo. Đây là cách bạn sẽ làm điều đó

class Book
{
   // Phần thân của class
}
4
Ví dụ này khai báo trường số nguyên (int) lưu trữ lượng đối tượng Sách được tạo.

Khai báo bắt đầu bằng từ khóa tĩnh để chỉ ra rằng chỉ có một bản sao của trường này trong bộ nhớ

Mỗi cuốn sách đối tượng có thể truy cập bản sao này và không có đối tượng nào có bản sao riêng. Vì lý do này, tính được gọi là một trường lớp

Khởi tạo. Khởi tạo


Các trường trước đó sẽ không được gán giá trị khi bạn không khởi động một cách rõ ràng, nó sẽ được khởi động hoàn toàn với tất cả các bit của nó được đặt thành không

You dedefault this default value is

  • sai (đối với boolean)
  • '\u0000' (đối với char)
  • 0 (đối số int)
  • 0L (đối số dài)
  • 0. 0F (đối với float)
  • 0. 0 (đối với double)
  • or null (đối với một kiểu tham chiếu)

Tuy nhiên, bạn cũng có thể khởi tạo một cách rõ ràng một trường khi trường được khai báo

Ví dụ. you can only

  • java C
    29 (không cần thiết vì số mặc định là 0)
  • java C
    50
  • or even chí
    java C
    51

Mặc dù bạn có thể khởi tạo trường đối tượng thông qua việc gán trực tiếp, nhưng việc thực hiện khởi động này trong một hàm tạo sẽ phổ biến hơn, điều này mình sẽ trình bày sau

Ngược lại, một trường lớp (đặc biệt là hằng số lớp) thường được khởi tạo thông qua việc gán trực tiếp một biểu thức cho trường

Hiểu sơ qua một chút về Lifetime và Scope trong chương trình Java


Một trường đối tượng được sinh ra khi đối tượng của nó được tạo và chết khi đối tượng được thu gom rác (thu gom rác)

Một trường lớp được sinh ra khi lớp được tải xuống và chết khi lớp không được tải xuống hoặc khi ứng dụng kết thúc

=> This is call is Lifetime

Trường sơ thẩm và trường lớp có thể truy cập được từ các khai báo của chúng cho đến cuối các khai báo của lớp chúng

Trường thể hiện chỉ có thể truy cập được vào mã bên ngoài trong ngữ cảnh đối tượng (ngữ cảnh đối tượng)

Trường lớp chỉ có thể truy cập được vào mã bên ngoài trong ngữ cảnh đối tượng (ngữ cảnh đối tượng) và lớp (ngữ cảnh lớp) khi được cấp mức truy cập phù hợp

=> This is call is Scope

> Bạn cũng sẽ được tìm hiểu kỹ hơn về Lifetime và Scope trong KHÓA HỌC LẬP TRÌNH JAVA tại NIIT - ICT Hà Nội. Nhận lịch học ngày

3. Tìm hiểu về Method. Mô tả hành động của đối tượng


Ngoài việc mô hình hóa trạng thái của một thực thể trong thế giới thực, một lớp còn mô hình hóa các hành vi của nó => đây được gọi là phương thức (Phương thức)

Ví dụ. Xe ô tô có thể chuyển đổi và tài khoản tín dụng có thể gửi tiền và rút tiền

Một lớp cũng có thể bao gồm các hành vi phi thực tế. Một khai báo phương thức có cú pháp sau

Cú pháp khai báo phương thức (method)

class Book
{
   // Phần thân của class
}
5
Một khai báo phương thức tùy chọn bắt đầu bằng từ khóa tĩnh (đối với hành vi không phải là thực tế) và tiếp tục với returnType, theo sau là một định nghĩa .

Sau đó, tên được theo sau bởi một số tùy chọn tham số được phân định bằng dấu giải nén

Phần thân được phân tách bằng dấu ngoặc kép chứa mã để thực thi khi phương thức được gọi

Kiểu trả về (hay còn gọi là kiểu trả về) xác định loại giá trị được trả về từ phương thức thông tin qua câu lệnh return (phần này chúng ta sẽ được tìm hiểu sau)

Ví dụ, nếu một phương thức trả về các chuỗi, kiểu trả về của nó sẽ được đặt thành Chuỗi. Khi một phương thức không trả về một giá trị, kiểu trả về của nó được đặt thành vô hiệu

Danh sách tham số (danh sách tham số) là danh sách khai báo tham số được phân tách bằng dấu phẩy

Mỗi lần khai báo bao gồm một loại được theo sau bởi một danh sách không dành riêng cho tên tham số

Tham số là một biến nhận một đối số (đối số) (một giá trị biểu thức có kiểu tương thích với tham số tương ứng của nó) khi một phương thức hoặc hàm tạo được gọi

Một tham số là bộ đối cục bộ đối với phương thức hoặc hàm tạo của nó. Nó xuất hiện khi phương thức hoặc hàm tạo được gọi và biến mất khi phương thức hoặc hàm tạo trả về cho người gọi nó

Nói cách khác, thời gian tồn tại của nó phụ thuộc vào phương thức thực thi. Một số tham số có thể được truy cập bởi bất kỳ mã nào trong phương thức. Phạm vi (Phạm vi) của nó là toàn bộ phương thức

Ví dụ tuyên bố bốn phương thức trong Class Book

class Book
{
   // Phần thân của class
}
6
Các phương thức
java C
52 và
java C
53 trả về giá trị của các trường tương ứng của chúng.

Chúng ta sử dụng lệnh return để trả lại các giá trị này cho người gọi. Lưu ý rằng kiểu biểu thức của câu lệnh này phải tương thích với kiểu trả về của phương thức

Các phương thức

java C
54 và
java C
55 cho phép bạn đặt giá trị của các trường title và pubYear

Các loại trả lại của họ được đặt là void để chỉ ra rằng họ không trả lại bất kỳ giá trị nào cho khi được gọi đến

Tất cả bốn phương thức được gọi là phương thức cá thể (phương thức thể hiện) bởi vì chúng chỉ ảnh hưởng đến các đối tượng mà chúng được gọi



Ghi chú. Cùng tìm hiểu sơ qua một chút về Setter và Getter


Tiền tố 'set' được xác định bởi
java C
54 và
java C
55 là các phương thức thiết lập phương thức (setter methods), có nghĩa là chúng sẽ thiết lập các giá trị

Tương tự, tiền tố 'get' xác định

java C
52 và
java C
53 là các phương thức getter (phương thức getter), có nghĩa là chúng sẽ lấy các giá trị

Nếu bạn đang thắc mắc về lý do sử dụng các phương thức setter / getter thay vì truy cập trực tiếp vào tiêu đề và pubYear, thì bạn có thể đọc kỹ hơn về chủ đề này tại Stackoverflow


Quay trở lại với ví dụ ở trên

Các phương thức

java C
52,
java C
53,
java C
54 và
java C
55 ảnh hưởng đến các bản sao của một đối tượng của các trường title và pubYear

Tuy nhiên, có thể bạn sẽ muốn khai báo một phương thức độc lập với bất kỳ cuốn sách cụ thể nào

Ví dụ. Bạn có thể muốn giới thiệu một phương thức xuất ra số lượng đối tượng Sách, như sau

class Book
{
   // Phần thân của class
}
7
Ví dụ này tuyên bố một phương thức
java C
84 sẽ đưa ra giá trị của trường
java C
85.

Khai báo bắt đầu bằng từ khóa tĩnh để chỉ ra rằng phương thức này thuộc về lớp và không thể truy cập trạng thái đối tượng riêng lẻ, không có đối tượng cần phải được tạo ra

Vì lý do này,

java C
84 được gọi là một phương thức lớp

Tìm hiểu về biến cục bộ. Biến cục bộ

Trong một phương thức hoặc hàm tạo, bạn có thể khai báo các biến bổ sung như một phần của công việc khai triển (triển khai) nó

Các biến này được gọi là biến cục bộ (Biến cục bộ)

Chúng chỉ tồn tại khi phương thức hoặc hàm tạo đang thực thi và không thể truy cập được từ bên ngoài phương thức / hàm tạo đó. Hãy xem xét ví dụ sau

class Book
{
   // Phần thân của class
}
8
Trong ví dụ này khai báo một phương thức có tên là
java C
87 để tính toán và xuất ra mức trung bình của một mảng kép.

Ngoài các giá trị tham số, nó khai báo các biến cục bộ

java C
88 và
java C
89 để giúp tính toán

  • Thời gian tồn tại của biến
    java C
    88 là từ điểm khai báo đến khi phương thức thực hiện xong
  • Phạm vi của biến
    java C
    88 là từ đầu đến cuối phương thức Trung bình
  • Lifetime of
    java C
    89 and range of the limit in the loop for

Thời gian tồn tại và phạm vi của một bộ biến cục bộ được giới hạn trong khối mà nó được khai báo, cũng như các khối con

Đây là lý do tại sao biến ____189 không thể truy cập bên ngoài vòng lặp cho

Hãy xem xét ví dụ sau đây

class Book
{
   // Phần thân của class
}
9

Phương thức nạp chồng. Nạp chồng phương thức


Java cho phép bạn khai báo các phương thức có cùng tên nhưng với các danh sách tham số khác nhau trong cùng một lớp. Tính năng này được gọi là nạp chồng phương thức

Khi biên dịch gặp một biểu thức gọi đến phương thức, nó so sánh danh sách các đối số được phân tách bằng dấu hài của phương thức với mỗi danh sách tham số của quá tải phương thức vì nó cần tìm đúng phương thức để gọi

Hai phương thức cùng tên bị quá tải khi danh sách tham số của chúng khác nhau về số lượng hoặc thứ tự tham số

Ngoài ra, hai phương thức cùng tên cũng bị quá tải khi có ít nhất một tham số khác nhau về kiểu

Ví dụ, hãy xem xét bốn phương thức

java C
4 sau đây, phương pháp vẽ một hình dạng hoặc chuỗi tại vị trí vẽ hiện tại hoặc được chỉ định

class A
{
}

class B
{
}

class C
{
   public static void main(String[] args)
   {
      System.out.println("Ứng dụng bắt đầu từ C");
   }
}
0
Khi biên dịch gặp
java C
5, nó sẽ chọn phương thức thứ ba vì nó cung cấp một danh sách tham số phù hợp.

Tuy nhiên, trình biên dịch sẽ làm gì khi nó gặp

java C
6?

Nó sẽ báo cáo một thông báo lỗi

java C
7 bởi vì có hai phương pháp để lựa chọn

Bạn không thể quá tải một phương thức bằng cách chỉ thay đổi kiểu trả về

Ví dụ

You can't only

java C
8 and
java C
9

Vì trình biên dịch không có đủ thông tin để phân biệt giữa các phương thức này khi nó gặp

class identifier
{
   // class body
}
40 trong tập lệnh. Trình biên dịch sẽ báo cáo lỗi '
class identifier
{
   // class body
}
41' (Định nghĩa lại)

Tìm hiểu về câu lệnh Return trong Java


Đổi khi, một phương thức phải kết thúc thời gian thực hiện trước khi kết thúc

Ví dụ

Phương pháp vẽ một pixel có thể phát hiện tọa độ âm thanh. Các phương thức khác cần trả về một giá trị cho người gọi họ

Đối với cả hai vấn đề, Java cung cấp câu lệnh trả về để chấm dứt phương thức thi và điều khiển trả về cho người gọi phương thức. This command has a cú pháp sau

class A
{
}

class B
{
}

class C
{
   public static void main(String[] args)
   {
      System.out.println("Ứng dụng bắt đầu từ C");
   }
}
1
Bạn chỉ có thể trả về mà không cần biểu thức để thoát sớm một phương thức hoặc một hàm tạo.

Ví dụ

Một phương thức có tên là

class identifier
{
   // class body
}
42 sao chép các byte từ luồng đầu vào tiêu chuẩn (thu được thông tin qua các phương thức cuộc gọi
class identifier
{
   // class body
}
43 ) đến luồng đầu ra tiêu chuẩn (thông qua các phương thức cuộc gọi
class identifier
{
   // class body
}
44 ). Phương pháp thứ hai được hiển thị dưới đây

class A
{
}

class B
{
}

class C
{
   public static void main(String[] args)
   {
      System.out.println("Ứng dụng bắt đầu từ C");
   }
}
2
class identifier
{
   // class body
}
43 byte đọc từ luồng đầu vào tiêu chuẩn, mặc định cho bàn phím nhưng có thể được chuyển hướng đến một tệp.

Khi luồng được chuyển hướng đến một tệp,

class identifier
{
   // class body
}
46 được trả về khi không còn byte nào để đọc

Khi

class identifier
{
   // class body
}
42 phát hiện ra vấn đề này, nó sẽ thực hiện quay trở lại từ vòng lặp vô hạn cho người gọi của nó

You can only return with a expression to return a value for the method call. (Trình xây dựng không hỗ trợ phiên bản trả về này vì chúng không có kiểu trả về. )

Ví dụ. Bạn có thể quay lại sớm từ một phương thức đang tìm kiếm một giá trị mảng cụ thể khi tìm thấy giá trị

Bản ghi này không được hiển thị trong ví dụ sau

class A
{
}

class B
{
}

class C
{
   public static void main(String[] args)
   {
      System.out.println("Ứng dụng bắt đầu từ C");
   }
}
3

4. Tìm hiểu về Constructor. Khởi tạo đối tượng


Cũng giống như việc gán giá trị rõ ràng cho các trường, một lớp có thể khai báo một hoặc nhiều mã khối để khởi động đối tượng mở rộng hơn

Mỗi mã khối là một hàm tạo

Khai báo constructor bao gồm

  • Một tiêu đề (Bao gồm tên lớp (Constructor thì không có tên riêng), sau đó là danh sách tham số tùy chọn)
  • Một phần thân được phân tách bằng dấu trích dẫn

Cú pháp khai báo một hàm tạo như sau.
class A
{
}

class B
{
}

class C
{
   public static void main(String[] args)
   {
      System.out.println("Ứng dụng bắt đầu từ C");
   }
}
4
Tên lớp phải khớp với tên của lớp trong hàm tạo đó được khai báo. tham sốList là một danh sách các tham số được phân tách bằng dấu phẩy.

Một phần thân được phân tách bằng dấu trích dẫn chứa mã để thực thi khi hàm tạo hàm được gọi

Không giống như một phương thức, hàm tạo hàm không có kiểu trả về vì nó không trả về bất kỳ giá trị nào



Ghi chú. Hàm Constructor mặc định không đối số


Khi một lớp không khai báo bất kỳ hàm tạo hàm bất kỳ nào, trình biên dịch sẽ tạo một hàm tạo hàm mặc định không có đối số. Constructor default this does not doing anything

Ví dụ sau khi khai báo hàm dựng hàm trong lớp

class identifier
{
   // class body
}
48. Hàm constructor khởi tạo các trường
java C
27 và
java C
28 của các đối tượng Sách cho các đối số được truyền cho các tham số
class Book
{
   // Phần thân của class
}
01 và
class Book
{
   // Phần thân của class
}
02 của hàm constructor khi các đối tượng được tạo. Hàm tạo cũng tăng trường
java C
85

class A
{
}

class B
{
}

class C
{
   public static void main(String[] args)
   {
      System.out.println("Ứng dụng bắt đầu từ C");
   }
}
5
Tên tham số có dấu gạch dưới hàng đầu để ngăn chặn sự cố với các bài tập.

Ví dụ. if you change name

class Book
{
   // Phần thân của class
}
01 to
java C
27 and only
class Book
{
   // Phần thân của class
}
06, you will only gán giá trị của tham số cho tham số, không thực hiện được gì. Tuy nhiên, bạn có thể tránh vấn đề này bằng cách thêm tiền tố
class Book
{
   // Phần thân của class
}
07 trước tên của trường này

class A
{
}

class B
{
}

class C
{
   public static void main(String[] args)
   {
      System.out.println("Ứng dụng bắt đầu từ C");
   }
}
6
Từ khóa
class Book
{
   // Phần thân của class
}
08 đại diện cho đối tượng hiện tại (thực tế, tham chiếu của nó). Thêm
class Book
{
   // Phần thân của class
}
07 vào tên trường sẽ truy cập tên trường thay vì tham số cùng tên.

Ghi chú. trường đổ bóng


Một tham số hoặc biến tên bộ cục bộ có thể phủ bóng một trường tên lớp. Bạn có thể sử dụng trường này trước tên lớp để truy cập vào trường này

Mặc dù bạn có thể khởi tạo các trường như title và pubYear thông qua các ví dụ được hiển thị ở trên, nhưng tốt nhất là thực hiện các ví dụ thông qua các phương thức setter như

java C
54 và
java C
55, như được trình bày dưới đây

class A
{
}

class B
{
}

class C
{
   public static void main(String[] args)
   {
      System.out.println("Ứng dụng bắt đầu từ C");
   }
}
7
Lưu ý rằng trong tương lai các phương thức này có thể thực hiện các tác vụ khởi tạo bổ sung. In sao mã này trùng lặp trong hàm tạo?

Tìm hiểu về Constructor Calling


Các lớp có thể khai báo nhiều hàm tạo

Ví dụ. Một hàm tạo

class identifier
{
   // class body
}
48 chỉ chấp nhận các đối số
java C
27 và
java C
28 là
class identifier
{
   // class body
}
46 để chỉ ra rằng năm xuất bản không xác định

Hàm khởi tạo hàm bổ sung này giống với lệnh cấm khởi tạo hàm khởi tạo được hiển thị bên dưới

class A
{
}

class B
{
}

class C
{
   public static void main(String[] args)
   {
      System.out.println("Ứng dụng bắt đầu từ C");
   }
}
8
Tuy nhiên, có một vấn đề với hàm tạo hàm mới này. it copy code (
class Book
{
   // Phần thân của class
}
16) is in the current constructor function.

Lặp lại mã là không cần thiết cho lớp

Java cung cấp một cách để tránh sự trùng lặp này bằng cách cung cấp cú pháp

class Book
{
   // Phần thân của class
}
17 để có một hàm tạo hàm gọi một hàm khác

class A
{
}

class B
{
}

class C
{
   public static void main(String[] args)
   {
      System.out.println("Ứng dụng bắt đầu từ C");
   }
}
9
Hàm khởi tạo đầu tiên sử dụng từ khóa này theo sau là danh sách đối số được đặt trích dẫn để gọi hàm tạo hàm thứ hai.

Tham số giá trị duy nhất được truyền không thay đổi làm đối số thứ nhất và

class identifier
{
   // class body
}
46 được truyền dưới dạng đối số thứ hai

Khi sử dụng

class Book
{
   // Phần thân của class
}
19, hãy nhớ rằng nó phải là đoạn mã đầu tiên trong hàm tạo hàm. Nếu không biên dịch biên dịch sẽ báo lỗi

5. Tìm hiểu về đối tượng. Work with class Instance


Một khi bạn đã khai báo một lớp, bạn có thể tạo các đối tượng (object) từ nó. Một đối tượng chính có thể hiện của một lớp

Ví dụ, Class Book đã được khai báo, bạn có thể tạo một hoặc nhiều đối tượng Book other

Hoàn thành nhiệm vụ này bằng cách chỉ định toán tử mới theo sau bởi hàm tạo Book, as after

javac D.java
0
new sẽ tải Sách vào bộ nhớ và sau đó gọi hàm tạo của nó với các đối số
class Book
{
   // Phần thân của class
}
20 và
class Book
{
   // Phần thân của class
}
21.

Đối tượng được khởi tạo cho các giá trị này. Khi hàm tạo hàm trả về từ thực thi của nó,

class Book
{
   // Phần thân của class
}
22 sẽ trả về một tham chiếu (một loại con trỏ tới một đối tượng) cho đối tượng
class identifier
{
   // class body
}
48 mới được khởi động

Tham chiếu này sau đó được gán cho biến

class Book
{
   // Phần thân của class
}
24 (có thể hiện)



Ghi chú. Kiểu trả về của constructor


Nếu bạn đã đặt câu hỏi tại sao hàm tạo hàm không có kiểu trả về, thì câu trả lời là không có cách nào để trả về giá trị của hàm tạo

Sau tất cả, toán tử mới trả về một tham chiếu đến đối tượng vừa được tạo


Sau khi tạo một Sách đối tượng, bạn có thể gọi các phương thức

java C
52 và
java C
53 của nó để trả về các trường giá trị đối tượng

Ngoài ra, bạn có thể gọi

java C
54 và
java C
55 để đặt giá trị mới

Trong cả hai trường hợp, bạn sử dụng toán tử chấm truy cập (

class Book
{
   // Phần thân của class
}
29) Tham khảo
class Book
{
   // Phần thân của class
}
24 để hoàn thành nhiệm vụ này

javac D.java
1

Ghi chú. đối tượng nhắn tin

Gọi một phương thức trên một đối tượng tương ứng với việc gửi một thông báo đến đối tượng. Tên của phương thức và các đối số của nó được khái niệm hóa như một thông điệp đang được gửi đến các đối tượng mà phương thức được gọi

Bạn không được tạo bất kỳ cuốn sách bất kỳ đối tượng nào để gọi các phương thức lớp

Thay vào đó, bạn gọi bằng cách như sau

javac D.java
2
Cuối cùng, có thể nhận và đặt giá trị của phiên bản Sách và lớp đã nộp. Sử dụng một tham chiếu đối tượng để truy cập vào một trường đối tượng và tên lớp để truy cập vào một trường lớp.
javac D.java
3
Trước đây mình đã đề cập rằng các phương thức cá nhân chỉ có thể ảnh hưởng đến các đối tượng mà chúng được gọi là. Chúng không ảnh hưởng đến các đối tượng khác.

Ví dụ sau củng cố sự thật này bằng cách tạo hai đối tượng Sách và sau đó truy cập vào tiêu đề của từng đối tượng, sau đó là đầu ra

javac D.java
4

Ẩn thông tin và mức độ truy cập


Phần thân của một lớp bao gồm giao diện và triển khai

Giao diện là một phần của lớp có thể truy cập được từ bên ngoài lớp

Thực hiện là một phần của lớp tồn tại để hỗ trợ giao diện. Việc triển khai nên được ẩn đi để có thể thay đổi để trả lời các yêu cầu lập trình

Hãy xem xét lớp học

class identifier
{
   // class body
}
48. Constructor và method header tạo thành giao diện của lớp này

Mã trong hàm tạo hàm và phương thức, và các trường khác nhau là một phần của việc triển khai

Không cần phải truy cập vào các trường này vì chúng có thể được đọc hoặc ghi thông qua các phương thức getter và setter

Tuy nhiên, vì không có biện pháp phòng ngừa nào được thực hiện, nên có thể truy cập trực tiếp vào các trường này

Bằng cách sử dụng biến tham chiếu

class Book
{
   // Phần thân của class
}
24 trước đó, bạn có thể chỉ định
class Book
{
   // Phần thân của class
}
33 và
class Book
{
   // Phần thân của class
}
34 và điều đó là ổn với trình biên dịch Java

Để ngăn truy cập vào các trường này (hoặc ít nhất là xác định ai có thể truy cập chúng), bạn cần tận dụng các cấp độ truy cập (mức độ truy cập)

  • riêng. Chỉ mã trong cùng một lớp với thành viên có thể truy cập thành viên
  • công cộng. Bất kỳ mã nào trong bất kỳ lớp nào trong bất kỳ gói nào cũng có thể truy cập thành viên.  
  • được bảo vệ. Bất kỳ mã nào trong cùng một lớp hoặc các lớp con của nó đều có thể truy cập vào thành viên

Nếu không có từ khóa thì sẽ bị ngừng hiểu là Quyền truy cập gói. Truy cập gói tương tự như truy cập công cộng

Tuy nhiên, không giống như truy cập công khai, mã phải được đặt trong một lớp thuộc cùng một gói

Bạn có thể ngăn mã bên ngoài truy cập vào các trường

java C
27 và
java C
28 của
class identifier
{
   // class body
}
48 để nỗ lực truy cập các trường này từ bên ngoài
class identifier
{
   // class body
}
48 sẽ dẫn đến thông báo lỗi biên dịch

Làm việc này bằng cách đặt

class Book
{
   // Phần thân của class
}
39 cho các báo cáo của họ, như được làm giống bên dưới đây

javac D.java
5
Để bạn biết lý do tại sao nên ẩn quyền truy cập vào các trường, mình đã tạo một ví dụ khác mở rộng Lớp Sách để bổ sung thêm trường cho tác giả, phương thức .

Ví dụ sau đây để xem các phần đã sửa đổi của Class Book đã được cập nhật

javac D.java
6
Nếu bạn nhớ lại, function constructor
class Book
{
   // Phần thân của class
}
40 thực thi
class Book
{
   // Phần thân của class
}
41 để tránh trùng lặp mã.

Tương tự, mình đã thiết kế

class Book
{
   // Phần thân của class
}
42 để thực thi
class Book
{
   // Phần thân của class
}
43, gọi hàm tạo hàm mới nhất, để tránh trùng lặp

Bạn có thể dễ dàng tạo một đối tượng Sách mới bao gồm tên tác giả và lấy tên này thông qua phương thức

class Book
{
   // Phần thân của class
}
44

javac D.java
7
Vui lòng xem nhận xét nâng cấp Sách lớp không cho phép nhiều tác giả.

Bạn không thể thay đổi tiêu đề của hàm tạo hoặc

class Book
{
   // Phần thân của class
}
44 /
class Book
{
   // Phần thân của class
}
46 để thực hiện điều chỉnh này vì như vậy sẽ thay đổi giao diện và tạo mã liên quan đến giao diện ở bên ngoài hoạt động liên tục

Thay vào đó, bạn sẽ cần phải làm lại như sau

javac D.java
8
Mình đã thay đổi trường
class Book
{
   // Phần thân của class
}
47 trước đó thành trường
class Book
{
   // Phần thân của class
}
48. Ngoài ra, mình đã thay đổi kiểu của nó từ kiểu
class Book
{
   // Phần thân của class
}
49 sang kiểu mảng
class Book
{
   // Phần thân của class
}
50.

Mình đã sửa hàm tạo của

class Book
{
   // Phần thân của class
}
51 để gọi hàm tạo của hàm 
class Book
{
   // Phần thân của class
}
52

Vì tham số thứ ba của hàm tạo hàm đó là kiểu

class Book
{
   // Phần thân của class
}
50, nên lệnh gọi
class Book
{
   // Phần thân của class
}
19 chuyển đổi đối số ______355 của nó thành một mảng đơn - phần tử bao gồm thông tin chính của nó thông qua
class Book
{
   // Phần thân của class
}
56

Toán tử mới được sử dụng để tạo mảng chuỗi phần tử đơn và gán tham chiếu chuỗi tác giả cho phần tử này

Phương thức

class Book
{
   // Phần thân của class
}
44 ban đầu truy cập phần tử đầu tiên trong mảng tác giả

Mình đã sửa đổi phương thức

class Book
{
   // Phần thân của class
}
46 ban đầu để chuyển đối số đơn
class Book
{
   // Phần thân của class
}
49 thành mảng chuỗi phần tử đơn, sau đó gọi
class Book
{
   // Phần thân của class
}
60 với mảng này làm đối số

Cuối cùng, mình đã bổ sung các phương thức

class Book
{
   // Phần thân của class
}
61 và
class Book
{
   // Phần thân của class
}
60 mới để trả về tham chiếu mảng
class Book
{
   // Phần thân của class
}
48 hoặc gán tham chiếu mới cho
class Book
{
   // Phần thân của class
}
48

Bạn có thể tạo một đối tượng

class identifier
{
   // class body
}
48 mới bao gồm nhiều tên tác giả bằng cách gọi hàm tạo hàm mới

Sau đó, bạn chỉ có thể nhận được tên thông tin đầu tiên thông qua

class Book
{
   // Phần thân của class
}
44 hoặc có thể nhận được tất cả các tên tác giả thông qua
class Book
{
   // Phần thân của class
}
61

javac D.java
9
Nếu trường cấm đầu tiên của
class Book
{
   // Phần thân của class
}
47 không được đánh dấu là
class Book
{
   // Phần thân của class
}
39, bạn sẽ không thể mở rộng (
class Book
{
   // Phần thân của class
}
70)
class identifier
{
   // class body
}
48 theo cách này.

Hơn nữa, các mã bên ngoài sẽ có thể truy cập trực tiếp vào trường này (ví dụ:.

class Book
{
   // Phần thân của class
}
72) và sẽ bị lỗi khi bạn thay đổi tên trường

Cách ẩn các hàm Constructor và Method


Cũng giống như việc ẩn các trường, bạn có thể cần ẩn hàm tạo hàm hoặc phương thức. Bạn thường ẩn hàm tạo hàm để ngăn lớp tiện ích lớp được khởi tạo

Và bạn cũng thường ẩn một phương thức khi nó chỉ tồn tại để phục vụ một phương thức khác (hoặc một hàm tạo hàm). Một phương pháp như vậy được gọi là một phương pháp trợ giúp. Dưới đây là một ví dụ

java C
0

TỔNG KẾT


Như bạn đã được hướng dẫn trong bài viết này, một ứng dụng dựa trên đối tượng ứng dụng được đóng gói trạng thái và hành vi bên trong các lớp và đối tượng

Ngược lại, một ứng dụng hướng đối tượng Java cũng hỗ trợ kế thừa (kế thừa)

Bài viết tiếp theo của mình sẽ tập trung vào lập trình với sự kế thừa. Trong thời gian chờ đợi, bạn có thể xem qua Series Học Java trong 7 ngày nếu bạn muốn

Hi vọng sẽ giúp các bạn học lập trình Java căn bản chắc chắn hơn

---

HỌC VIỆN ĐẠO TẠO CNTT NIIT - ICT HÀ NỘI

Học lập trình chất lượng cao (Từ năm 2002). Học thực tế + Tuyển dụng ngay

Đc. Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội

SĐT. 02435574074 - 0383. 180086

E-mail. xin chào@niithanoi. giáo dục. vn

trang chủ. https. //Facebook. com/NIIT. CNTT-TT/

#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #python #java #php