Học nhanh Java cho người mới bắt đầu
- 1- Giới thiệu
- 2- Tạo mới Project
- 3- Các kiểu dữ liệu nguyên thủy (Primitive Data Types)
- 4- Biến (Variable)
- 5- Điều khiển luồng đi của chương trình (Control flow)
-
- 5.1- Câu lệnh if - else
- 5.2- Các toán tử thông thường
- 5.3- Giá trị boolean
- 5.4- Câu lệnh switch- case -default
- 5.5- Vòng lặp for
- 5.6- Vòng lặp while
- 5.7- Vòng lặp do-while
- 6- Mảng trong Java (Array)
-
- 6.1- Mảng là gì?
- 6.2- Làm việc với mảng
- 7- Class, đối tượng và cấu tử (Class, Instance, Constructor)
- 8- Trường (Field)
- 9- Phương thức (Method)
- 10- Thừa kế trong Java
- 11- Hướng dẫn tra cứu sử dụng Javadoc
- 12- Gợi ý
- 1- Giới thiệu ▴
-
Trước hết học Java cần những gì, bạn xem tại:
-
Gợi ý các bước học Java cho người mới bắt đầu tại:
-
-
Tài liệu hướng dẫn này dành cho người mới bắt đầu với Java. Cách trình bầy trong tài liệu này là giới thiệu giới thiệu thật ngắn gọn tất cả những thứ cơ bản cho người mới bắt đầu và đi đôi với thực hành nhỏ. Nếu bạn là một người mới làm quen với Java. Bạn lên đọc và thực hành trọn vẹn tài liệu này, trước khi tìm hiểu chi tiết các khái niệm ở các tài liệu khác.
- 2- Tạo mới Project ▴
-
Trước hết chúng ta tạo mới một Project, nó sẽ được sử dụng trong hướng dẫn này.
-
-
Nhập vào tên project:
-
- BasicJavaTutorial
-
-
Đây là hình ảnh Project vừa được tạo ra:
-
-
Chú ý: Để có thể gõ được các ngôn ngữ khác tiếng Anh trong Project, bạn cần chuyển mã hóa sang UTF8.
-
Nhấn phải chuột vào Project chọn Properties:
-
-
- 3- Các kiểu dữ liệu nguyên thủy (Primitive Data Types) ▴
-
Có 8 loại primitive Data trong JAVA
- Dùng cho kiểu số nguyên có 4 loại: Byte, short, int, long
- Kiểu số thực ta có: float, double
- Kiểu ký tự: char
- Kiểu logic: trả về giá trị true hoặc false (đúng hoặc sai)
-
Kiểu dữ liệu Ghi chú Số bit Giá trị nhỏ nhất Giá trị lớn nhất byte Số tự nhiên 8 bit 8 -128 (-2^7) 127 (2^7-1) short Số tự nhiên 16 bit 16 -32,768 (-2^15) 32,767 (2^15 -1) int Số tự nhiên 32 bit 32 - 2,147,483,648
(-2^31)2,147,483,647
(2^31 -1)long Số tự nhiên 64 bit 64 -9,223,372,036,854,775,808
(-2^63)9,223,372,036,854,775,807
(2^63 -1)float Số thực 32 bit 32 -3.4028235 x 10^38 3.4028235 x 10^38 double Số thực 64 bit 64 -1.7976931348623157 x 10^308 1.7976931348623157 x 10^308 boolean Kiểu logic false true char Kiểu ký tự 16 '\u0000' (0) '\uffff' (65,535). - 4- Biến (Variable) ▴
-
Nhấn phải chuột vào src chọn "New/Package":
-
-
Đặt tên package là:
-
- org.o7planning.tutorial.javabasic.variable
-
-
-
Nhập vào tên class:
-
- VariableExample1
-
-
Class VariableExample1 được tạo ra:
-
-
Sửa code của class VariableExample1:
-
- VariableExample1.java
-
12345678910111213141516171819202122232425262728293031323334353637
package
org.o7planning.tutorial.javabasic.variable;
public
class
VariableExample1 {
public
static
void
main(String[] args) {
// Khai báo một biến, có kiểu là số tự nhiên 32 bit.
int
firstNumber ;
// Gán giá trị cho firstNumber
firstNumber =
10
;
System.out.println(
"First Number ="
+ firstNumber);
// Khai báo một số thực 32 bit (float)
// Số này được gán giá trị 10.2
// Chữ f ở cuối giúp java hiểu đây là kiểu float.
float
secondNumber =
10
.2f;
System.out.println(
"Second Number ="
+ secondNumber);
// Khai báo một số thực 64 bit
// Số này được gán giá trị 10.2
// Chữ d ở cuối giúp java hiểu đây là kiểu double. Phân biệt với kiểu float.
double
thirdNumber =
10
.2d;
System.out.println(
"Third Number ="
+ thirdNumber);
// Khai báo một kiểu ký tự
char
ch =
'a'
;
System.out.println(
"Char ch= "
+ ch);
}
}
-
Chạy class VariableExample1:
-
Nhấn phải chuột vào class VariableExample1 chọn "Run As/Java Application":
-
-
Kết quả chạy class xem trên cửa sổ Console:
-
-
Bạn cũng có thể khai báo nhiều biến cùng một lúc, ví dụ tiếp theo minh họa điều này:
-
Tạo mới class VariableExample2
-
-
- VariableExample2.java
-
12345678910111213141516171819202122232425
package
org.o7planning.tutorial.javabasic.variable;
public
class
VariableExample2 {
public
static
void
main(String[] args) {
// Khai báo 3 số tự nhiên 64 bit (long)
long
firstNumber, secondNumber, thirdNumber;
// Gán giá trị cho firstNumber
// Chữ L ở cuối để nói với java đây là kiểu long, phân biệt với kiểu tự nhiên int.
firstNumber = 100L;
// Gán giá trị cho secondNumber
secondNumber = 200L;
// Gán giá trị cho thirdNumber
thirdNumber = firstNumber + secondNumber;
System.out.println(
"First Number = "
+ firstNumber);
System.out.println(
"Second Number = "
+ secondNumber);
System.out.println(
"Third Number = "
+ thirdNumber);
}
}
-
Results of running the class VariableExample2:
-
- 5- Điều khiển luồng đi của chương trình (Control flow) ▴
-
- 5.1- Câu lệnh if - else ▴
-
Cấu trúc của một câu lệnh if - else là:
-
123456789
if
(Điều kiên
1
) {
// Làm gì đó tại đây
}
else
if
(Điều kiện
2
) {
// Làm gì đó tại đây
}
else
if
(Điều kiện
3
) {
// Làm gì đó tại đây
}
else
{
// Ngược lại
// Làm gì đó tại đây
}
-
Tạo class ElseIfExample1:
-
-
- ElseIfExample1.java
-
123456789101112131415161718192021222324252627
package
org.o7planning.tutorial.javabasic.controlflow;
public
class
ElseIfExample1 {
public
static
void
main(String[] args) {
// Khai báo một số tự nhiên (int)
// Mô phỏng điểm thi của một bạn
int
score =
70
;
System.out.println(
"Your score ="
+ score);
// Nếu điểm số nhỏ hơn 50
if
(score <
50
) {
System.out.println(
"You are not pass"
);
}
// Ngược lại nếu điểm số hơn hơn hoặc bằng 50 và nhỏ hơn 80.
else
if
(score >=
50
&& score <
80
) {
System.out.println(
"You are pass"
);
}
// Trường hợp còn lại (Nghĩa là lớn hơn hoặc bằng 80)
else
{
System.out.println(
"You are pass, good student!"
);
}
}
}
-
Kết quả chạy class ElseIfExample1:
-
-
Thay đổi giá trị của biến "score" trong ví dụ trên và chạy lại class ElseIfExample1:
-
1
int
score =
20
;
-
- 5.2- Các toán tử thông thường ▴
-
- > Lớn hơn
- < Nhỏ hơn
- >= Lớn hơn hoặc bằng
- <= Nhỏ hơn hặc bằng
- && Và
- || hoặc
- == So sánh bằng
- != So sánh khác nhau
- ! Phủ định
-
Tạo class ElseIfExample2
-
- ElseIfExample2.java
-
12345678910111213141516171819202122232425262728293031323334353637383940414243
package
org.o7planning.tutorial.javabasic.controlflow;
public
class
ElseIfExample2 {
public
static
void
main(String[] args) {
// Khai báo một biến int mô phỏng tuổi của bạn.
int
age =
20
;
// Kiểm tra tuổi nhỏ hơn hoặc bằng 17
if
(age <=
17
) {
System.out.println(
"You are 17 or younger"
);
}
// Kiểm tra tuổi bằng 18
else
if
(age ==
18
) {
System.out.println(
"You are 18 year old"
);
}
// Kiểm tra tuổi lớn hơn 18 và nhỏ hơn 40
else
if
(age >
18
&& age <
40
) {
System.out.println(
"You are between 19 and 39"
);
}
// Trường hợp còn lại (Lớn hơn hoặc bằng 40)
else
{
// Một câu lệnh kiểm tra nằm bên trong.
// Kiểm tra tuổi khác 50.
if
(age !=
50
) {
System.out.println(
"You are not 50 year old"
);
}
// Câu lệnh phủ định tuổi bằng 50, nghĩa là khác 50.
if
(!(age ==
50
)) {
System.out.println(
"You are not 50 year old"
);
}
// Nếu tuổi là 60 hoặc 70
if
(age ==
60
|| age ==
70
) {
System.out.println(
"You are 60 or 70 year old"
);
}
}
}
}
-
Bạn có thể thay đổi giá trị của "age" và chạy class ElseIfExample2 và xem các kết quả
- 5.3- Giá trị boolean ▴
-
boolean là một kiểu dữ liệu, nó chỉ có 2 giá trị true hoặc false (Đúng hoặc sai).
-
Tạo class BooleanExample:
-
-
- BooleanExample.java
-
12345678910111213141516171819202122232425262728
package
org.o7planning.tutorial.javabasic.controlflow;
public
class
BooleanExample {
public
static
void
main(String[] args) {
// Khai báo một biến kiểu boolean
boolean
value =
true
;
// Nếu value là true
if
(value ==
true
) {
System.out.println(
"It's true"
);
}
// Ngược lại
else
{
System.out.println(
"It's false"
);
}
// Với giá trị boolean bạn cũng có thể viết.
if
(value) {
System.out.println(
"It's true"
);
}
// Ngược lại
else
{
System.out.println(
"It's false"
);
}
}
}
- 5.4- Câu lệnh switch- case -default ▴
-
Đây cũng là một loại câu lệnh rẽ nhánh gần giống với If-Else được giới thiệu ở trên
-
12345678910
switch
( Biến kiểm tra ) {
case
value1:
// Làm gì đó tại đây;
break
;
case
value2:
// Làm gì đó tại đây;
break
;
default
:
// Làm gì đó tại đây
}
-
- SwitchExample1.java
-
12345678910111213141516171819202122
package
org.o7planning.tutorial.javabasic.controlflow;
public
class
SwitchExample1 {
public
static
void
main(String[] args) {
// Khai báo một biến age (tuổi)
int
age =
20
;
// Kiểm tra giá trị của age
switch
(age) {
case
18
:
// Trường hợp tuổi bằng 18
System.out.println(
"You are 18 year old"
);
break
;
case
20
:
// Trường hợp tuổi bằng 20
System.out.println(
"You are 20 year old"
);
break
;
default
:
// Các trường hợp còn lại
System.out.println(
"You are not 18 or 20 year old"
);
}
}
}
-
Kết quả việc chạy class SwitchExample1:
-
-
Chú ý rằng với câu lệnh case phải là một giá trị cụ thể bạn không thể làm như sau:
-
1234567
// Điều này không được phép!!
case
(age <
18
) :
// case chỉ chấp nhận một giá trị cụ thể ví dụ:
case
18
:
// Làm gì đó tại đây
break
;
-
Xem một ví dụ khác:
-
- SwitchExample2.java
-
123456789101112131415161718192021222324252627
package
org.o7planning.tutorial.javabasic.controlflow;
public
class
SwitchExample2 {
public
static
void
main(String[] args) {
// Khai báo một biến age (tuổi)
int
age =
30
;
// Kiểm tra giá trị của age
switch
(age) {
// Trường hợp tuổi bằng 18
case
18
:
System.out.println(
"You are 18 year old"
);
// Các trường hợp 20, 30, 40 tuổi.
case
20
:
case
30
:
case
40
:
System.out.println(
"You are "
+ age);
break
;
default
:
// Các trường hợp còn lại
System.out.println(
"Other age"
);
}
}
}
-
Kết quả chạy:
-
- 5.5- Vòng lặp for ▴
-
Đây là cấu trúc vòng lặp:
-
123
for
( Giá trị bắt đầu ; Giá trị kết thúc; Giá trị tăng ) {
// Làm gì đó tại đây.
}
-
Hãy xem một ví dụ minh họa:
-
-
- ForLoopExample1.java
-
1234567891011121314151617181920212223242526
package
org.o7planning.tutorial.javabasic.loop;
public
class
ForLoopExample1 {
public
static
void
main(String[] args) {
// Khai báo một biến mô tả bước thứ mấy (Vòng lặp thứ mấy)
int
step =
1
;
// Khai báo một biến value với giá trị bắt đầu là 0
// Sau mỗi một vòng lặp value lại được công thêm 3 (Nghĩa là bước tăng 3)
// Và vòng lặp sẽ kết thúc khi value lơn hơn hoặc bằng 10
// Theo code này nghĩa là mỗi vòng lặp value sẽ tăng 3
// Vòng lặp sẽ dừng lại khi (value < 10) không còn đúng nữa.
for
(
int
value =
0
; value <
10
; value = value +
3
) {
System.out.println(
"Step ="
+ step +
" value = "
+ value);
// Tăng giá trị step lên 1, sau mỗi vòng lặp
step = step +
1
;
}
}
}
-
Kết quả chạy class ForLoopExample1:
-
-
Xem tiếp một ví dụ khác, tính tổng các số từ 1 tới 100:
-
- ForLoopExample2.java
-
12345678910111213141516171819202122232425262728
package
org.o7planning.tutorial.javabasic.loop;
public
class
ForLoopExample2 {
// Đây là một ví dụ tính tổng các số từ 1 tới 100, và in kết quả ra màn hình.
public
static
void
main(String[] args) {
// Khai báo một biến
int
total =
0
;
// Khai báo một biến value
// Có giá trị ban đầu 1
// Sau mỗi vòng lặp giá trị tăng lên 1
// Chú ý: value++ tương đương với câu lệnh: value = value + 1;
// value-- tương đương với câu lệnh: value = value - 1;
for
(
int
value =
1
; value <=
100
; value++) {
// Gán giá trị total bằng giá trị cũ cộng thêm value.
total = total + value;
}
System.out.println(
"Total = "
+ total);
}
}
-
Kết quả
-
- 5.6- Vòng lặp while ▴
-
Đây là cấu trúc vòng lặp while:
-
1234
// Trong khi điều kiện đúng, thì làm gì đó.
while
( Điều kiện ) {
// Làm gì đó tại đây
}
-
Xem ví dụ minh họa
-
-
- WhileExample1.java
-
123456789101112131415161718
package
org.o7planning.tutorial.javabasic.loop;
public
class
WhileExampe1 {
public
static
void
main(String[] args) {
int
value =
3
;
// Trong khi value vẫn nhỏ hơn 10 thì vòng lặp vẫn làm việc.
while
( value <
10
) {
System.out.println(
"Value = "
+ value);
// Tăng giá trị của value lên 2 đơn vị
value = value +
2
;
}
}
}
- 5.7- Vòng lặp do-while ▴
-
Đây là cấu trúc vòng lặp do-while:
-
123456
// Vòng lặp do-while làm việc ít nhất 1 vòng
// và trong khi điều kiện còn đúng thì nó còn làm việc tiếp
do
{
// Làm gì đó tại đây
}
while
( Điều kiện );
-
Ví dụ minh họa:
-
-
- DoWhileExample1.java
-
1234567891011121314151617181920
package
org.o7planning.tutorial.javabasic.loop;
public
class
DoWhileExample1 {
public
static
void
main(String[] args) {
int
value =
3
;
// Vòng lặp do-while thực thi ít nhất 1 lần.
do
{
System.out.println(
"Value = "
+ value);
// Tăng giá trị cho value thêm 3 đơn vị
value = value +
3
;
}
while
(value <
10
);
}
}
-
Kết quả
-
- 6- Mảng trong Java (Array) ▴
-
- 6.1- Mảng là gì? ▴
-
Mảng là một danh sách các phần tử được sắp xếp liền nhau trên bộ nhớ.
-
Hãy xem một hình ảnh mảng 5 phần tử, chứa các số int.
-
- 6.2- Làm việc với mảng ▴
-
Cách khai báo một mảng trong Java.
-
1234567891011121314
// Khai báo một mảng, chưa chỉ rõ số phần tử.
int
[] array1;
// Khởi tạo mảng với 100 phần tử
// Các phần tử chưa được gán giá trị cụ thể
array1 =
new
int
[
100
];
// Khai báo một mảng chỉ rõ số phần tử
// Các phần tử chưa được gán giá trị cụ thể
double
[] array2 =
new
double
[
10
];
// Khai báo một mảng mà các phần tử được gán giá trị cụ thể.
// Mảng này có 4 phần tử
long
[] array3= {10L, 23L, 30L, 11L};
-
Hãy xem một ví dụ:
-
-
-
- ArrayExample1.java
-
12345678910111213141516171819202122232425262728293031323334353637
package
org.o7planning.tutorial.javabasic.array;
public
class
ArrayExample1 {
public
static
void
main(String[] args) {
// Khai báo một mảng 5 phần tử
int
[] myArray=
new
int
[
5
];
// Chú ý phần tử đầu tiên của mảng có chỉ số là 0:
// Gán giá trị cho phần tử đầu tiên (Chỉ số 0)
myArray[
0
] =
10
;
// Gán giá trị cho phần tử thứ hai (Chỉ số 1)
myArray[
1
] =
14
;
myArray[
2
] =
36
;
myArray[
3
] =
27
;
// Giá giá trị cho phần tử thứ 5 (Phần tử cuối cùng trong mảng)
myArray[
4
] =
18
;
// In ra màn hình số phần tử của mảng.
System.out.println(
"Array Length="
+ myArray.length);
// In ra màn hình phần tử tại chỉ số 3 (Phần tử thứ 4 trong mảng)
System.out.println(
"myArray[3]="
+ myArray[
3
]);
// Sử dụng vòng lặp for để in ra các phần tử trong mảng.
for
(
int
index=
0
; index < myArray.length; index++) {
System.out.println(
"Element "
+ index+
" = "
+ myArray[index]);
}
}
}
-
Kết quả:
-
-
Một ví dụ minh họa tiếp sử dụng vòng lặp for để gán giá trị cho các phần tử:
-
- ArrayExample2.java
-
123456789101112131415161718192021
package
org.o7planning.tutorial.javabasic.array;
public
class
ArrayExample2 {
public
static
void
main(String[] args) {
// Khai báo một mảng 5 phần tử
int
[] myArray =
new
int
[
5
];
// In ra màn hình số phần tử của mảng.
System.out.println(
"Array Length="
+ myArray.length);
// Sử dụng vòng lặp for gán giá trị các phẩn tử của mảng.
for
(
int
index =
0
; index < myArray.length; index++) {
myArray[index] =
100
* index * index +
3
;
}
// In ra màn hình phần tử tại chỉ số 3
System.out.println(
"myArray[3] = "
+ myArray[
3
]);
}
}
-
Kết quả
-
- 7- Class, đối tượng và cấu tử (Class, Instance, Constructor) ▴
-
Bạn cần có sự phân biệt giữa 3 khái niệm:
- Class
- Cấu tử (Constructor)
- Đối tượng (Instance)
-
Khi chúng ta nói về Cây, nó là một thứ gì đó trìu tượng, nó là một lớp (class). Nhưng khi chúng ta chỉ thẳng vào một cái cây cụ thể thì lúc đó đã rõ ràng và đó là đối tượng (instance)
-
-
Hoặc khi chúng ta nói về người (Person) thì đó cũng trìu tượng, nó là một lớp. Nhưng khi chỉ thẳng vào bạn hoặc tôi thì đó là 2 đối tượng khác nhau, cùng thuộc lớp người.
-
-
- Person.java
-
1234567891011121314151617181920212223
package
org.o7planning.tutorial.javabasic.javastructure;
public
class
Person {
// Đây là một trường (Field)
// Lưu trữ tên người.
public
String name;
// Đây là một cấu tử, còn gọi là phương thức khởi tạo (Constructor)
// Dùng nó để khởi tạo đối tượng.
// Cấu tử này có một tham số.
// Cấu tử luôn có tên giống tên class.
public
Person(String persionName) {
// Gán giá trị từ tham số vào cho trường name.
this
.name = persionName;
}
// Đây là một phương thức trả về kiểu String.
public
String getName() {
return
this
.name;
}
}
-
Như trên class Person không có hàm main. Tiếp theo class TestPerson là ví dụ khởi tạo các đối tượng của Person thông qua các cấu tử.
-
- PersonTest.java
-
1234567891011121314151617181920212223242526272829
package
org.o7planning.tutorial.javabasic.javastructure;
public
class
PersonTest {
public
static
void
main(String[] args) {
// Tạo một đối tượng từ class Person
// Khởi tạo đối tượng này tử cấu tử của class Person
// Cụ thể là Edison
Person edison =
new
Person(
"Edison"
);
// Class Person có hàm getName()
// Sử dụng đối tượng để gọi hàm getName():
String name = edison.getName();
System.out.println(
"Person 1: "
+ name);
// Tạo một đối tượng từ class Person.
// Khởi tạo đối tượng này tử cấu tử của class Person
// Cụ thể là Bill Gates
Person billGate =
new
Person(
"Bill Gates"
);
// Class Person có trường name (public)
// Sử dụng đối tượng để tham chiếu tới nó.
String name2 = billGate.name;
System.out.println(
"Person 2: "
+ name2);
}
}
-
Kết quả chạy ví dụ:
-
- 8- Trường (Field) ▴
-
Trong phần tiếp theo này chúng ta sẽ thảo luận về một số khái niệm:
-
Trường (Field)
- Trường thông thường
- Trường tĩnh (static Field)
- Trường final (final Field)
- Trường tĩnh và final (static final Field)
-
Xem một ví dụ với trường thông thường và trường tĩnh.
-
-
- FieldSample.java
-
1234567891011121314151617
package
org.o7planning.tutorial.javabasic.javastructure;
public
class
FieldSample {
// Đây là một trường tĩnh.
public
static
int
MY_STATIC_FIELD =
100
;
// Đây là một trường thông thường.
public
String myValue;
// Cấu tử khởi tạo đối tượng FieldSample.
public
FieldSample(String myValue) {
this
.myValue= myValue;
}
}
-
- FieldSampleTest.java
-
1234567891011121314151617181920212223242526272829303132333435363738394041
package
org.o7planning.tutorial.javabasic.javastructure;
public
class
FieldSampleTest {
public
static
void
main(String[] args) {
// Tạo đối tượng thứ nhất.
FieldSample obj1 =
new
FieldSample(
"Value1"
);
System.out.println(
"obj1.myValue= "
+ obj1.myValue);
// In ra giá trị của trường static
// Tham chiếu qua đối tượng.
System.out.println(
"obj1.MY_STATIC_FIELD= "
+ obj1.MY_STATIC_FIELD);
// In ra giá trị của trường static.
// Với các trường tĩnh, có thể truy cập tới nó thông qua class.
// Tham chiếu qua class.
System.out.println(
"FieldSample.MY_STATIC_FIELD= "
+ FieldSample.MY_STATIC_FIELD);
// Tạo đối tượng thứ 2:
FieldSample obj2 =
new
FieldSample(
"Value2"
);
System.out.println(
"obj2.myValue= "
+ obj2.myValue);
// In ra giá trị của trường static
// Tham chiếu qua đối tượng.
System.out.println(
"obj2.MY_STATIC_FIELD= "
+ obj2.MY_STATIC_FIELD);
System.out.println(
" ------------- "
);
// Trường static là trường dùng chung cho mọi đối tượng.
// Sét đặt giá trị mới cho trường static.
// (Có thể thay bởi: FieldSample.MY_STATIC_FIELD = 200)
obj1.MY_STATIC_FIELD =
200
;
// Tại đây sẽ in ra giá trị 200.
System.out.println(
"obj2.MY_STATIC_FIELD= "
+ obj2.MY_STATIC_FIELD);
}
}
-
Kết quả chạy ví dụ:
-
-
Chúng ta hãy xem một ví dụ đơn giản về một class trong Java. Class Cat, mô tả con mèo.
-
Các trường final là các trường mà không thể gán giá trị mới cho nó, nó giống như một hằng số.
-
- FinalFieldExample.java
-
123456789101112
package
org.o7planning.tutorial.javabasic.javastructure;
public
class
FinalFieldExample {
// Một trường final.
// Trường final không cho phép gán giá trị mới.
public
final
int
myValue =
100
;
// Một trường tĩnh và final.
// Trường final không cho phép gán giá trị mới.
public
static
final
long
MY_LONG_VALUE = 1234L;
}
- 9- Phương thức (Method) ▴
-
Phương thức, hay còn gọi là hàm (Method)
- Phương thức thông thường.
- Phương thức tĩnh
- Phương thức final. (Sẽ được đề cập trong phần thừa kế của class).
-
- MethodSample.java
-
1234567891011121314151617181920212223242526272829303132
package
org.o7planning.tutorial.javabasic.javastructure;
public
class
MethodSample {
public
String text =
"Some text"
;
// Cấu tử mặc định
public
MethodSample() {
}
// Đây là một phương thức trả về kiểu String.
// Phương thức này không có tham số
public
String getText() {
return
this
.text;
}
// Đây là một phương thức có 1 tham số String.
// Phương thức này trả về void (Hay gọi là ko trả về gì)
public
void
setText(String text) {
// this.text tham chiếu tới trường text.
// phân biệt với tham số text.
this
.text = text;
}
// Đây là một phương thức tĩnh.
// Trả về kiểu int, có 3 tham số.
public
static
int
sum(
int
a,
int
b,
int
c) {
int
d = a + b + c;
return
d;
}
}
-
- MethodSampleTest.java
-
123456789101112131415161718192021222324252627282930313233
package
org.o7planning.tutorial.javabasic.javastructure;
public
class
MethodSampleTest {
public
static
void
main(String[] args) {
// Tạo đối tượng MethodSample
MethodSample obj =
new
MethodSample();
// Gọi phương thức getText()
String text = obj.getText();
System.out.println(
"Text = "
+ text);
// Gọi method setText(String)
obj.setText(
"New Text"
);
System.out.println(
"Text = "
+ obj.getText());
// Phương thức tĩnh có thể gọi qua class.
// Cách này được khuyến khích dùng. (**)
int
sum = MethodSample.sum(
10
,
20
,
30
);
System.out.println(
"Sum 10,20,30= "
+ sum);
// Hoặc gọi qua đối tượng
// Cách này không được khuyến khích. (**)
int
sum2 = obj.sum(
20
,
30
,
40
);
System.out.println(
"Sum 20,30,40= "
+ sum2);
}
}
-
- 10- Thừa kế trong Java ▴
-
Java cho phép viết class mở rộng từ một class. Class mở rộng từ một class khác được gọi là class con. Class con có khả năng thừa kế các trường và các method từ class cha.
-
- Animal.java
-
123456789101112131415161718
package
org.o7planning.tutorial.javabasic.inheritance;
public
class
Animal {
public
Animal() {
}
public
void
move() {
System.out.println(
"Move ...!"
);
}
// Tiếng kêu của động vật này.
public
void
say() {
System.out.println(
"<nothing>"
);
}
}
-
- Cat.java
-
123456789
package
org.o7planning.tutorial.javabasic.inheritance;
public
class
Cat
extends
Animal {
// Ghi đè method của class Animal.
public
void
say() {
System.out.println(
"Meo"
);
}
}
-
- Dog.java
-
123456789
package
org.o7planning.tutorial.javabasic.inheritance;
public
class
Dog
extends
Animal {
// Ghi đè method của class Animal.
public
void
say() {
System.out.println(
"Go"
);
}
}
-
- Ant.java
-
123456
package
org.o7planning.tutorial.javabasic.inheritance;
// Con kiến
public
class
Ant
extends
Animal {
}
-
- AnimalTest.java
-
123456789101112131415161718192021222324252627282930313233343536
package
org.o7planning.tutorial.javabasic.inheritance;
public
class
AnimalTest {
public
static
void
main(String[] args) {
// Khai báo một đối tượng Cat.
Cat cat =
new
Cat();
// Kiểm tra xem 'cat' có phải là đối tượng Animal ko.
// Kết quả rõ ràng là true.
boolean
isAnimal = cat
instanceof
Animal;
System.out.println(
"cat instanceof Animal?"
+ isAnimal);
// ==> Meo
// Gọi vào method say() của Cat.
cat.say();
// Khai báo một đối tượng Animal
// Khởi tạo đối tượng thông qua cấu tử của Cat.
Animal cat2 =
new
Cat();
// ==> Meo
// Nó vẫn gọi vào method say() của Cat.
cat2.say();
// Tạo đối tượng Animal
// Thông qua cấu tử của class con, Ant.
Animal ant =
new
Ant();
// ==> ..
// Ant không có method say()
// Nó gọi vào method say() thừa kế từ class cha (Animal).
ant.say();
}
}
-
Kết quả chạy ví dụ:
-
- 11- Hướng dẫn tra cứu sử dụng Javadoc ▴
-
-
Javadoc là tài liệu tra cứu cách sử dụng các class thư viện trong java. Chẳng hạn class A gồm có các method nào, trường, cấu tử nào,...
Bạn có thể xem hướng dẫn download và sử dụng Jdk9 Javadoc định dạng CHM tại: -
- 12- Gợi ý ▴
-
Tiếp theo bạn có thể đọc tài liệu "Thừa kế và đa hình trong java" tại: