Hiển thị các bài đăng có nhãn JAVA. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn JAVA. Hiển thị tất cả bài đăng

BÀI 5 KIỂU DỮ LIỆU & BIẾN - LẬP TRÌNH JAVA

1. Các kiểu dữ liệu trong Java
Ta có thể chia các kiểu dữ liệu cơ bản trong Java thành 2 nhóm chính:
Kiểu dữ liệu nguyên thủy:
Cú pháp:
  • Khai báo biến: <Kiểu dữ liệu> tên_biến;
  • Khai báo biến và khởi tạo: <Kiểu dữ liệu> tên_biến = giá trị;
Kiểu dữ liệu tham chiếu/đối tượng:
Cú pháp:
  • Khai báo biến:                      <Kiểu dữ liệu> tên_biến;
  • Khai báo biến và khởi tạo: <Kiểu dữ liệu> tên_biến = new hàm_dựng();
a. Kiểu dữ liệu nguyên thủy:
  • Kiểu byte: Ví dụ: byte a;byte a = 100;
  • Kiểu short: Ví dụ: short a;short a = 100;
  • Kiểu int: Ví dụ: int a;int a = 100;
  • Kiểu long: Ví dụ: long a; long a = 100L;
  • Kiểu float: Ví dụ: float a;float a = 100.0f;
  • Kiểu double: Ví dụ:double a;double = 100;
  • Kiểu boolean: Ví dụ:byte a;byte a = true;
  • Kiểu char: Ví dụ: byte a; byte a = ‘A’;
b. Kiểu dữ liệu tham chiếu/đối tượng:
Ví dụ:
Animal animal;
Animal animal = new Animal();
2. Các loại biến trong Java
Có 3 loại biến:
  • Biến địa phương (Local variables)
  • Biến thể hiện (Instance variables)
  • Biến của lớp/biến tĩnh (Class/Static variables)
a. Biến địa phương:
  • Biến địa phương được khai báo trong phương thức, hàm dựng, hoặc là khối lệnh.
  • Biến địa phương được tạo khi các phương thức, hàm dựng, hoặc là khối lênh được gọi và biến sẽ bị hủy khi thoát khỏi phương thức, hàm dựng, hoặc là khối lệnh.
  • Không thể sử dụng các Bổ từ truy cập (Access Modifiers) cho các biến địa phương.
  • Biến địa phương chỉ có tầm vực hoạt động (tồn tại) trong phương thức, hàm dựng hoặc các khối lệnh.
  • Biến địa phương được lưu trữ ngầm ở tầng stack.
  • Không có giá trị khởi tạo mặc định cho các biến địa phương nên các biến địa phương phải được gán giá trị trước khi dùng.
Ví dụ: Ở ví dụ này, age là biến địa phương. Biến này được khai báo bên trong phương thức pupAge() và tầm vực của nó chỉ ở trong phương thức mà thôi.
Kết quả là:
Puppy age is: 7
Ví dụ: Ví dụ sau đây cho thấy nếu ta không khởi tạo cho biến địa phương thì trình biên dịch sẽ báo lỗi.
Khi biên dịch, lỗi sau sẽ xuất hiện:
Test.java:4:variable number might not have been initialized
age = age + 7;
         ^
1 error
b. Biến thể hiện:
  • Biến thể hiện được cài khai báo bên trong lớp nhưng bên ngoài bất kỳ phương thức, hàm dựng hay khối lệnh nào.
  • Một đối tượng được lưu trữ trên heap.
  • Biến thể hiện được khởi tạo khi một đối tượng được khởi tạo với từ khóa “new” và bị hủy khi một đối tượng bị hủy.
  • Một biến thể hiện lưu trữ giá trị mà được tham chiếu bởi nhiều phương thức, hàm dựng hay khối lệnh.
  • Biến thể hiện được khai báo bên trong lớp trước khi hoặc sau khi được dùng.
  • Bổ từ truy cập (Access modifiers) có thể được dùng khi khai báo biến thể hiện.
  • Biến thể hiện khả dụng đối với tất cả các phương thức, hàm dựng hoặc là khối lệnh trong lớp.
  • Biến thể hiện có giá trị mặc định. Nếu là kiểu số thì giá trị mặc định là 0, kiểu Boolean là false, và đối tượng là null. Giá trị có thể khởi tạo khi khai báo hoặc ta thường khởi tạo trong hàm dựng.
  • Biến thể hiện có thể được truy cập trực tiếp bằng cách gọi chúng bên trong lớp.
Ví dụ:
Kết quả là:
name  : Ransika
salary :1000.0
c. Biến của lớp/biến tĩnh:
  • Biến của lớp còn được gọi là biến tĩnh, chúng được khai báo với từ khóa static trong lớp, nhưng bên ngoài các phương thức, hàm dựng hoặc các khối lệnh.
  • Chỉ có một bản sao (copy) của mỗi biến tĩnh trong một lớp, bất kể bao nhiêu đối tượng được tạo ra từ nó.
  • Biến tĩnh ít được sử dụng, nó thường được sử dụng để khai báo hằng số (constant). Hằng số là các biến được khai báo là: public / private final static… Biến hằng số không bao giờ thay đổi giá trị của nó khác với giá trị khởi tạo ban đầu.
  • Biến tĩnh được lưu trữ trong bộ nhớ tĩnh.
  • Biến tĩnh được tạo ra khi chương trình bắt đầu và bị phá hủy khi chương trình kết thúc.
  • Độ khả dụng tương tự như các biến thể hiện. Tuy nhiên, các biến tĩnh thường được khai báo là public để ta có thể dùng chúng ở những lớp khác.
  • Giá trị mặc định là tương tự như các biến thể hiện. Đối với các số giá trị mặc định là 0, đối với boolean thì là false, và với đối tượng là null. Giá trị có thể được chỉ định khi khai báo hoặc trong các hàm dựng. Ngoài ra các giá trị có thể được chỉ định trong khối khởi tạo tĩnh (bạn sẽ gặp sau này).
  • Biến tĩnh có thể được truy cập bằng cách gọi với tên lớp. Cú pháp:  Tên_lớp.Tên_biến_tĩnh.
  • Khi khai báo biến tĩnh là public static final, thì bạn nên đặt tên biến (hằng số) là CHỮ_HOA.
Ví dụ:
Kết quả là:
Development average salary:1000
Chú ý: Nếu biến được truy cập từ ngoài lớp thì ta có thể truy cập là Employee.DEPARTMENT

BÀI 4 LỚP & ĐỐI TƯỢNG - LẬP TRÌNH JAVA

LỚP VÀ ĐỐI TƯỢNG
Java là một ngôn ngữ hướng đối tượng. Như các ngôn ngữ hướng đối tượng khác, java hỗ trợ các khái niệm cơ bản sau đây:
  • Đa hình
  • Thừa kế
  • Đóng gói
  • Trừu tượng
  • Các lớp
  • Đối tượng
  • Phương thức
  • Thuộc tính
Trong bài này, chúng ta sẽ cùng xem xét các khái niệm về lớp và các đối tượng.
- Đối tượng - đối tượng có trạng thái và hành vi. Ví dụ: Một con chó có trạng thái màu sắc, tên, giống cũng như hành vi - vẫy đuôi, sủa, ăn, uống. Một đối tượng là một thể hiện của một lớp.
- Lớp - Một lớp có thể được định nghĩa như là một mẫu mô tả các trạng thái, hành vi của các đối tượng mà các đối tượng này là thể hiện của lớp đó.
Đối tượng trong Java:
Bây giờ chúng ta nhìn sâu vào các đối tượng là gì. Nếu chúng ta xem xét thực tế chúng ta có thể tìm thấy nhiều đối tượng xung quanh chúng ta: ô tô, con chó, con người,..  Tất cả các đối tượng này có trạng thái và hành vi.
Nếu ta xem xét một con chó, các trạng thái/đặc điểm của nó là - tên, giống, màu sắc, và hành vi của nó là - sủa, vẫy đuôi, chạy.
Nếu ta so sánh các đối tượng ta đề cập trong lập trình với một đối tượng thế giới thực, thì chúng có những trạng thái/đặc điểm rất giống nhau.
Đối tượng trong lập trình cũng có trạng thái/đặc điểm và hành vi. Trạng thái/đặc điểm được thể hiện thong qua các thuộc tính và hành vi là các phương thức.
Các lớp trong Java:
Một ví dụ về một lớp học được đưa ra dưới đây:

Một lớp có thể chứa bất kỳ các loại biến sau đây:
  • Các biến địa phương. Biến được định nghĩa trong phương thức, hàm dựng hoặc các khối mã lệnh được gọi là các biến địa phương. Biến sẽ được cấp phát và khởi tạo trong phương thức và các biến sẽ bị phá hủy khi phương thức này đã hoàn thành.
  • Biến thể hiện (thuộc tính). Biến thể hiện là các biến trong một lớp nhưng bên ngoài các phương thức. Các biến này được khởi tạo khi lớp được nạp. Biến thể hiện có thể được truy cập từ bên trong mọi  phương thức, hàm dựng hoặc các khối mã lệnh của lớp cụ thể.
  • Các biến lớp (biến tĩnh). Các biến lớp là các biến khai báo trong một lớp, nằm ngoài các phương thức, với từ khóa static.
Một lớp có thể có nhiều phương thức. Trong ví dụ trênbarking(), hungry(), sleeping() là phương thức.
Sau đây, chúng ta cùng xem xét một số những chủ đề quan trọng cần được thảo luận khi nhìn vào các lớp của ngôn ngữ Java.

Hàm dựng (Constructor):
Khi thảo luận về các lớp, một trong những chủ đề quan trọng nhất là hàm dựng. Mỗi lớp đều có ít nhất một hàm dựng. Nếu chúng ta không viết hàm dựng nào cho lớp cả thì trình biên dịch java xây dựng một hàm dựng mặc định cho lớp đó.
Mỗi lần một đối tượng mới được tạo ra thì ít nhất một hàm dựng sẽ được gọi. Nguyên tắc chính của hàm dựng là chúng cần phải có cùng tên với lớp. Một lớp có thể có nhiều hơn một hàm dựng.
Ví dụ về một hàm dựng được đưa ra dưới đây:

Java cũng hỗ trợ lớp Singleton, nơi bạn chỉ có thể tạo ra một thể hiện của một lớp mà thôi (chúng ta sẽ đề cập sau).
Tạo ra một đối tượng:
Như đã đề cập trước đây là lớp cung cấp những bản thiết kế cho các đối tượng. Vì vậy, về cơ bản là một đối tượng được tạo ra từ một lớp. Trong java từ khóa new được sử dụng để tạo các đối tượng mới.
Có ba bước khi tạo một đối tượng từ một lớp:
  1. Khai báo (Declaration). Một khai báo biến với một tên biến với một loại đối tượng.
  2. Tạo thể hiện (Instantiation). Từ khóa "new" được sử dụng để tạo ra các đối tượng.
  3. Khởi tạo (Initialization). Từ khoá “new” được theo sau bởi một lời gọi hàm dựng. Lời gọi này khởi tạo đối tượng mới.
Ví dụ về việc tạo ra một đối tượng được đưa ra dưới đây:

Nếu chúng ta biên dịch và chạy chương trình trên thì nó sẽ cho ra kết quả như sau:
Passed Name is: tommy
Truy cập thuộc tính và phương thức:
Thuộc tính và phương thức được truy cập thông qua đối tượng được tạo ra. Để truy cập chúng, ta thực hiện như sau:
Ví dụ:

Nếu chúng ta biên dịch và chạy chương trình trên thì nó sẽ cho ra kết quả như sau:
Passed Name is :tommy
Puppy’s age is :2
Variable Value :2
Quy tắc khai  báo tập tin nguồn:
Những quy định này là rất cần thiết khi khai báo các lớp:
  • Chỉ có thể có một lớp public cho mỗi tập tin nguồn.
  • Một tập tin nguồn có thể có nhiều lớp không public (non public).
  • Tên lớp public được dùng để đặt tên cho tập tin nguồn và có đuôi là .java. Ví dụ: tên lớp là public class Employee{…}. Sau đó,  tập tin nguồn phải được đặt tên là Employee.java.
  • Nếu lớp được định nghĩa bên trong một gói, từ khóa package khai báo gói phải được báo cáo đầu tiên trong tập tin nguồn.
  • Nếu có khai báo import thì phải được viết giữa từ khóa package và khai báo lớp. Nếu không có báo cáo package thì khai báo import phải là dòng đầu tiên trong tập tin nguồn.
  • Khai báo import và package này sẽ bao hàm tất cả các lớp có trong tập tin nguồn.
  • Các lớp có nhiều cấp độ truy cập và có nhiều loại khác nhau của các lớp: các lớp trừu tượng, các lớp hằng,.. Tôi sẽ giải thích ở các bài sau trong bài định danh truy cập.
Ngoài các loại được đề cập ở trên lớp, Java cũng có một số lớp đặc biệt gọi là các lớp bên trong (Inner classes) và lớp vô danh (Anonymous classes).
Gói trong Java (Java Package):
Hiểu một cách đơn giản, nó là một cách để phân loại các lớp và giao diện. Khi phát triển các ứng dụng trong Java, hàng trăm lớp và giao diện sẽ được viết, do đó phân loại các lớp là điều cần làm cũng như làm cho cuộc sống dễ dàng hơn nhiều.
Khai báo import:
Trong java nếu tên đầy đủ, trong đó bao gồm tên gói và tên lớp, được đưa ra thì sau đó trình biên dịch có thể dễ dàng xác định vị trí mã nguồn. Khai báo import là một cách để chỉ cho trình biên dịch thấy được vị trí mã nguồn.
Ví dụ sau sẽ yêu cầu trình biên dịch tải tất cả các lớp có sẵn trong thư mục java/io:
Một CASE STUDY đơn giản
Chúng ta sẽ tạo ra hai lớp: Employee và EmployeeTest.
Trước tiên, mở notepad và thêm đoạn mã sau. Hãy nhớ rằng đây là lớp Employee và là lớp public. Bây giờ lưu tập tin này với tên Employee.java.
Lớp Employee có bốn thuộc tính có tên là name, age, designator và salary. Lớp có một hàm dựng một tham số được khai báo rõ ràng.
Để chạy được chương trình, ta cần phương thức main() và các đối tượng cần được tạo ra. Chúng ta sẽ tạo ra một lớp riêng cho những công việc này.
Dưới đây là lớp EmployeeTest mà tạo ra hai đối tượng của lớp Employee và gọi các phương thức cho từng đối tượng để gán giá trị cho mỗi biến.
Lưu mã sau đây trong tập tin EmployeeTest.java
Bây giờ biên dịch cả 2 lớp và sau đó chạy EmployeeTest để xem kết quả như sau:
C:\> javac Employee.java
C:\> javac  EmployeeTest.java
C:\> java EmployeeTest
Name: James Smith
Age: 26
Designation: Senior Software Engineer
Salary: 1000.0
Name: Mary Anne
Age: 21
Designation: Software Engineer
Salary: 500.0

BÀI 3 BẮT ĐẦU LẬP TRÌNH JAVA

CÚ PHÁP CƠ BẢN
Một chương trình java có thể được định nghĩa như là một tập hợp các đối tượng giao tiếp thông qua cách gọi những phương thức. Bây giờ chúng ta hãy dành một ít thời gian xem xét những gì lớp (class), đối tượng (object), phương thức (method) và thuộc tính (property):
  • Đối tượng - đối tượng có trạng thái và hành vi. Ví dụ: Một con chó có trạng thái màu sắc, tên, giống cũng như hành vi - vẫy đuôi, sủa, ăn, uống. Một đối tượng là một thể hiện của một lớp.
  • Lớp - Một lớp có thể được định nghĩa như là một mẫu mô tả các trạng thái, hành vi của các đối tượng mà các đối tượng này là thể hiện của lớp đó.
  • Thuộc tính - Một thuộc tính cơ bản là một trạng thái. Một lớp có thể có nhiều thuộc tính.
  • Phương thức - Một phương thức cơ bản là một hành vi. Một lớp có thể có nhiều phương thức.
Chương trình Java đầu tiên:
Chúng ta hãy xem một đoạn mã đơn giản mà sẽ in dòng “Hello World”:
Làm thế nào để lưu các tập tin, biên dịch và chạy chương trình? Hoặc các bạn đã quen với một công cụ phát triển Java như là Eclipse, Netbeans, JBuilder,…  Hoặc hãy làm theo các bước dưới đây:
  1. Mở notepad và thêm mã như ở trên.
  2. Lưu tên tập tin là: MyFirstJavaProgram.java.
  3. Mở một cửa sổ lệnh và chuyển đến thư mục mà bạn đã lưu tập tin trên. Giả sử là C:\.
  4. Gõ “javac MyFirstJavaProgram.java” và nhấn Enter để biên dịch mã của bạn. Nếu không có lỗi trong mã của bạn dấu nhắc lệnh sẽ đưa bạn đến dòng kế tiếp (Giả sử: biến môi trường đã được thiết lập).
  5. Bây giờ gõ "java MyFirstJavaProgram” để chạy chương trình của bạn.
  6. Bạn sẽ có thể nhìn thấy “Hello World” in trên cửa sổ.
C:\> javac MyFirstJavaProgram.java
C:\> java MyFirstJavaProgram
Hello World
Cú pháp cơ bản:
Để viết code chương trình Java, cần lưu ý những điểm sau đây.
  • Phân biệt chữ HOA, chữ thường.
  • Tên lớp – Khuyến cáo:  Đối với tất cả các tên lớp, chữ cái đầu tiên của mỗi từ phải viết hoa, các ký tự khác viết thường. Ví dụ lớp MyFirstJavaClass.
  • Tên Phương thức - Tất cả các tên phương thức nên bắt đầu với một chữ viết thường, sau đó chữ cái đầu tiên mỗi từ bên trong nên được viết hoa. Ví dụ public void myMethodName().
  • Tên tập tin - Tên của tập tin chương trình chính xác phải phù hợp với tên lớp. Ví dụ: Giả sử “MyFirstJavaProgram” là tên lớp. Sau đó, tập tin sẽ được lưu là “MyFirstJavaProgram.java”.
  • public static void main (String args []) - xử lý chương trình java bắt đầu từ phương thức main() - là một phần bắt buộc của tất cả các chương trình java .
Định danh Java (Java Identifiers):
Tất cả các thành phần java đòi hỏi tên. Tên được sử dụng cho các lớp, các thuộc tính và các phương thức được gọi là định danh.
Trong java có một số điểm cần nhớ về định danh. Chúng như sau:
  • Tất cả các định danh nên bắt đầu với một chữ cái (A đến Z hoặc a đến z), ký hiệu tiền tệ ($) hoặc dấu gạch dưới (_).
  • Một từ khóa không thể được sử dụng như một định danh.
  • Quan trọng nhất là định danh là phân biệt chữ HOA, chữ thường.
  • Ví dụ về các định danh hợp lệ: age, $salary, _value, __ 1_valu.
  • Ví dụ về các định danh không hợp lệ: 123abc, -salary
Java Modifiers:
Có hai loại modifiers:
  • Modifiers truy cập: default, public, protected, private.
  • Modifiers không truy cập: final, abstract, strictfp
Chúng ta sẽ xem xét chi tiết hơn về các biến trong phần tiếp theo.
Biến Java (Java Variables):
Chúng ta sẽ thấy loại sau đây của các biến trong Java:
  • Các biến địa phương (local)
  • Biến lớp (biến tĩnh - static)
  • Các biến thể hiện (biến không tĩnh – non static)
Mảng Java (Java Arrays):
Mảng là đối tượng lưu trữ nhiều biến cùng loại. Tuy nhiên một mảng chính nó là một đối tượng trên heap. Chúng ta sẽ xem xét làm thế nào để khai báo và khởi tạo mảng trong các bài sắp tới.
Kiểu đếm được trong Java (Java Enums):
Kiểu đếm được giới thiệu trong java 5.0. Kiểu đếm được hạn chế một biến chỉ có thể nhận giá trị trong một vài giá trị được xác định trước.
Với việc sử dụng Kiểu đếm được có thể giảm số lượng các lỗi trong chương trình của bạn.
Ví dụ, nếu chúng ta xem xét một ứng dụng cho một cửa hàng nước trái cây tươi, ta có có thể hạn chế kích thước của ly nước là nhỏ, vừa và lớn. Điều này sẽ đảm bảo rằng chương trình sẽ không cho phép bất cứ ai đặt bất kỳ ly nước trái cây nào mà có kích thước khác với nhỏ, vừa và lớn.
Ví dụ:
Ví dụ ở trên sẽ cho ra kết quả như sau:
Size: Meduim
Lưu ý:Kiểu đếm được có thể được khai báo riêng hoặc trong một lớp. Phương thức, thuộc tính, các hàm khởi dựng cũng có thể được định nghĩa bên trong Kiểu đếm được.
Từ khóa Java (Java Keywords):
Danh sách sau đây cho thấy các từ dành riêng trong Java. Những từ dành riêng không được sử dụng để đặt tên cho bất kỳ định danh nào.
Chú thích ​​trong Java (Comments in Java):
Java hỗ trợ chú thích trên một dòng và nhiều dòng rất giống với C và C++. Tất cả các ký tự trong bất kỳ chú thích được bỏ qua bởi trình biên dịch Java.
Sử dụng dòng trống:
Một dòng chỉ chứa khoảng trắng, có thể có chú thích, được biết đến như một dòng trống, và java hoàn toàn bỏ qua nó.
Thừa kế (Inheritance):
Trong java các lớp có thể được bắt nguồn từ một lớp khác. Về cơ bản nếu bạn cần tạo ra một lớp mới và bạn đã có một lớp chứa một số mã mà bạn muốn, sau đó bạn có thể tạo ra một lớp mới có các mã từ lớp mà bạn đã có.
Các lớp được thừa kế được gọi là super-class, các lớp thừa kế thì được gọi là sub-class.
Giao diện (Interface):
Trong ngôn ngữ java một giao diện có thể được giải thích như là một hợp đồng giữa các đối tượng mà trong đó mô tả rõ làm thế nào để chúng giao tiếp với nhau. Giao diện đóng một vai trò quan trọng khi nói đến khái niệm về thừa kế.
Một giao diện xác định các phương thức, mà một lớp thực thi nó (lớp con) nên sử dụng. Nhưng việc thực hiện của phương thức này là hoàn toàn nằm trong các lớp con.
Tiếp theo là gì?
Bài tiếp theo giải thích về các đối tượng và các lớp trong lập trình java. Sau đó bạn sẽ có được một hình ảnh rõ ràng về các đối tượng và các lớp học trong java là gì.