Bài đăng nổi bật

Truyền tham trị 
(Passing Arguments by Values)
Các đối số được truyền bằng giá trị cho các tham số khi phương thức được gọi
Sức mạnh của một phương thức là khả năng làm việc với các tham số. Bạn có thể sử dụng println để in bất kỳ chuỗi nào và max để tìm giá trị nhỏ hơn giữa hai số nguyên bất kỳ. Khi gọi một phương thức, bạn cần phải cung cấp các đối số, nó phải được cung cấp theo thứ tự như các tham số tương ứng trong method signature. Đây được gọi là sự kết hợp các tham số (parameter order association). Ví dụ, phương thức sau in một thông báo n lần:
public static void nPrintln(String message, int n) {
   for (int i = 0; i < n; i++)
      System.out.println(message);
Bạn có thể sử dụng nPrintln("Hello", 3) để in chuỗi Hello 3 lần. Lệnh nPrintln("Hello", 3) truyền giá trị trong tham số chuỗi thực là Hello tới tham số message, truyền 3 cho n và in ra Hello 3 lần. Tuy nhiên, lệnh nPrintln(3, "Hello")  bị sai. Kiểu dữ liệu của 3 không khớp với kiểu dữ liệu của tham số đầu tiền là một chuỗi (message), Hello không khớp với tham số thứ 2 là một số nguyên (n)
Lưu ý
Các đối số phải khới với các tham số theo thứ tự, số và kiểu tương thích, như đã định nghĩa trong method signature. Kiểu tương thích có nghĩa là bạn có thể truyền một đối số cho một tham số mà không ép kiểu tường minh, chẳng hạn như truyền một đối số giá trị int tới một tham số giá trị số thực (double)
Khi bạn gọi một phương thức với một đối số, giá trị của đối số được truyền tới tham số. Đây được gọi là truyền tham trị (pass-by-value). Nếu đối số là một biến thay vì một hằng giá trị, giá trị của biến dươcdj truyền tới tham số. Biến không bị ảnh hưởng, bất kể những thay đổi được thực hiện cho tham số bên trong phương thức. Trong Listing 6.4, giá trị của x (1) được truyền cho tham số n để gọi phương thức increment (dòng 5). Tham số n được tăng lên 1 trong phương thức (dòng 10), nhưng x không bị thay đổi.


Listing 6.5 đưa ra một chương trình khác chứng tỏ sự ảnh hưởng của việc truyền bằng giá trị. Chương trình tạo ra một phouwng thức để đổi chỗ giá trị của hai biến. Phương thức swap được gọi bằng cách truyền cho nó 2 đối số. Thật thú vị, các giá trị của các đối số không bị thay đổi sau khi phương thức được gọi.
Trước khi phương thức swap được gọi (dòng 12), num1 là 1 và num2 là 2. Sau khi phương thức swap được gọi, num1 vẫn là 1 và num2 vẫn là 2. Các giá trị của chúng chưa được hoán đổi. Như trong hình 6.4, các giá trị của các đối số num1 và num2 được truyền đến n1 và n2, nhưng n1 và n2 có vị trí bộ nhớ riêng của chúng không phụ thuộc num1 và num2. Vì vậy, thay đổi n1 và n2 không ảnh hưởng đến nội dung của num1 và num2.
Một giả thiết khác là thay đổi tên tham số n1 trong swap thành num1. Điều này có ảnh hưởng không? Không có sự thay đổi nào xảy ra, bởi vì nó không tạo ra sự khác biệt dù tham số theo giả thiết là cùng tên. Tham số là một biến trong phương thức với không gian bộ nhớ riêng. Biến được cấp phát khi phương thức được gọi và nó biến mất khi phương thức trả về nơi gọi nó.


Hình trên: Các giá trị của các biến được truyền vào danh sách các tham số trong phương thức
Chú ý

Để đơn giản, các lập trình viên Java thường truyền x tới y, điều này thực sự có nghĩa là truyền giá trị của đối số x sang tham số y

Dữ liệu và phương thức của đối tượng có thể được truy cập thông qua toán tử dấu chấm (.)qua biến tham chiếu của đối tượng.
Các đối tượng được tạo mới được cấp phát trong bộ nhớ. Chúng có thể được truy cập thông qua các biến tham chiếu.

Biến tham chiếu và kiểu dữ liệu tham chiếu

(Reference Variables and Reference Types)
Các đối tượng được truy cập qua biến tham chiếu của đối tượng, biến tham chiếu của đối tượng chứa tham chiếu tới các đối tượng. Các biến như vậy được khai báo sử dụng cú pháp sau:
 ClassName objectRefVar;
Một lớp về bản chất là một kiểu dữ liệu do lập trình viên định nghĩa. Một lớp là một kiểu dữ liệu tham chiếu, có nghĩa là một biến của lớp có thể tham chiếu tới một thể hiện của lớp. Câu lệnh sau khai báo biến myCircle thuộc kiểu Circle:
Circle myCircle;
Biến myCircle có thể tham chiếu tới đối tượng Circle. Câu lệnh tiếp theo tạo một đối tượng và gán tham chiếu của nó tới myCircle:
myCircle = new Circle();
Bạn có thể viết một câu lệnh đơn giản kết hợp khai báo một biến tham chiếu đối tượng, tạo ra một đối tượng và gán đối tượng tham chiếu đến biến với cú pháp sau:
ClassName objectRefVar = new ClassName();
Đây là một ví dụ:
Circle myCircle = new Circle();
Biến myCircle giữa một tham chiếu tới đối tượng Circle
Chú ý
Một biến tham chiếu đối tượng xuất hiện để giữa một đối tượng thực chứa một tham chiếu tới đối tượng đó. Nghiêm túc nói, một biến tham chiếu đối tượng và một đối tượng là khác nhau, nhưng phần lớn sự khác biệt này bị bỏ qua. Vì vậy, để đơn giản, tốt nhất hãy nói rằng myCircle là một đối đối tượng Circle thay vì mô tả lòng vòng rằng myCircle là một biến mà chứa tham chiếu tới đối tượng Circle.
Chú ý

Mảng được xem như là các đối tượng trong Java. Mảng được tạo bằng cách sử dụng toán tử new.

Post a Comment

أحدث أقدم