Khái niệm cơ bản (2)

Trong phần này, chúng ta tiếp tục tìm hiểu các khái niệm cơ bản của ngôn ngữ Java. Chúng ta sẽ bắt đầu với một vài chương trình đơn giản, để tìm hiểu về biến, hằng số, kiểu dữ liệu. Cuối cùng, chúng ta tìm hiểu các nhập/xuất dữ liệu trên ứng dụng console.

Java rule

Chúng ta bắt đầu với chương trình HelloWorld . Đoạn code sau được đặt trong file HelloWorld.java.

Chú ý: tên public class phải trùng với tên file java.

package net.vncoding;

public class HelloWorld {

    public static void main(String[] args) {
        
        System.out.println("Hello World");
    }
}

Code Java được tổ chức rất chặt chẽ từ khâu đầu tiên. File Java có thể chứa một hoặc nhiều class. Nhưng chỉ cho phép khai báo duy nhất 1 public class.

Package

package net.vncoding;

Package được dùng để tổ chức class thành các group, group chia sẻ chức năng tương tự. Package tương tự với namespace ở các ngôn ngữ lập trình khác (C++, C#,…). Đối với các code sample đơn giản, thường bỏ qua việc khai báo package và package mặc định sẽ được sử dụng.
Tuy nhiên, trong toàn bộ tutorial Java này, tôi sử dụng package cho toàn bộ các code sample.
Tên package phản ánh đường dẫn lưu file java. Trong ví dụ này, file HelloWorld.java được lưu ở đường dẫn \net\vncoding. Câu lệnh khai báo package phải được khai báo ở đầu file.

Class

public class HelloWorld {
...
}

Class là block code của Java. Từ khóa public class có ý nghĩa không hạn chế quyền truy cập class. Đoạn code ở trên là định nghĩa class (Class definition).
– Body của class bắt đầu bởi dấu { và kết thúc bởi dấu }.
– Chỉ duy nhất một class được khai báo là public trong file Java. Và Remind các bạn lại một lần nữa, tên public class phải trùng với tên file java. File Java là HelloWorld.java và public class HelloWorld. Tên class bắt đầu bằng chữ in hoa.

Phương thức

public static void main(String[] args) {
    ...
}

main() là 1 phương thức hay gọi là hàm. Phương thức tập lệnh thực hiện 1 chức năng nào đó. Thay vì viết code chung vào 1 chỗ, chúng ta có thể chia thành phương thức. Đây được gọi là tính module hóa chương trình.
– Body của phương thức được bắt đầu bởi dấu { và kết thúc bởi dấu }.
– Phương thức main() là điểm bắt đầu khi chạy Java application.
– Phương thức static có thể được gọi trực tiếp, không cần thông qua 1 đối tượng nào (instance of class)
– Đầu tiên, chúng ta cần start application, sau đó ta thể tạo đối tượng của class.
– Từ khóa void thông báo cho trình biên dịch (Compiler) là phương thức không trả về giá trị.
– Cuối cùng, từ khóa public tạo cho phương thức main() available với bên ngoài.

System.out.println("Hello World");   

– Câu lệnh này in ra dòng chữ “Hello World” trên màn hình console.
– Cuối mẫu câu lệnh phải có dấu ;
– Câu lệnh này việc gọi 1 phương thức println() của class System.
– Class System gồm các phương thức xuất/nhập cho console application.

Nhập giá trị

Ví dụ này hướng dẫn bạn cách đọc giá trị nhập vào từ bàn phím

package net.vncoding;

/*
 This is Readline program
 Date: 2017/11/18 
 */

import java.util.Scanner;

public class ReadLine {

    public static void main(String[] args) {
        
        System.out.print("Write your name:");

        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();

        System.out.println("Hello " + name);
        
        sc.close();
    }
}

Chương trình show chuỗi “Write your name: ” trên màn hình console. Sau đó, bạn nhập tên bạn “Vu Hong Viet”. Chương trình sẽ hiển thị ra “Hello Vu Hong Viet”.

import java.util.Scanner;

– Thư viện Java có rất nhiều class có sẵn mà bạn có thể sử dụng phát triển ứng dụng. Thư viện Java được phân chia thành các package. Class Scanner là 1 trong số đó.
– Khi chúng ta import class với từ khóa import, chúng ta có thể refer tới class mà không cần viết lại tên package. Ngược lại, nếu bạn không sử dụng từ khóa import class, bạn phải khai báo đầy đủ tên package khi bạn khai báo 1 đối tượng “java.util.Scanner sc;”

System.out.print("Write your name:");

– Câu lệnh này in chuỗi “Write your name: ” lên màn hình console.
– Phương thức print() không thêm kí tự xuống dòng vào cuối chuỗi (Khác với println()), từ đó bạn có thể nhập tên tên cùng 1 dòng với chuỗi “Write your name: “.

Scanner sc = new Scanner(System.in);

– Đối tượng của class Scanner được tạo. Đối tượng mới được tạo với từ khóa new. Phương thức tạo đối tương đi theo sau từ khóa new. Chúng ta truyền tham số luồng input (System.in) tới phương thức tạo của đối tượng Scanner.
– Scanner là class đọc text đơn giản, và có thể phân biệt được kiểu dữ liệu nguyên thủy (int, float,…) và chuỗi kí tự.

String name = sc.nextLine();

– Phương thức nextLine() đọc dòng tiếp theo từ màn hình console, và trả về chuỗ kí tự. Giá trị trả về được lưu biến name.

System.out.println("Hello " + name);

– Lệnh này in chuỗi ra màn hình console. Chuỗi gồm 2 phần: chuỗi “Hello” và biến name.
– Chúng ta nối 2 giá trị thành 1 chuỗi bằng cách sử dụng toán tử +.
– Toán tử + có thể nối 2 hoặc nhiều chuỗi kí tự.

Java - Đọc giá trị nhập vào
Java – Đọc giá trị nhập vào

Truyền đối số command line

Chương trình Java có thể nhận đối số command line. Dưới đây là ví dụ mình họa.

package net.vncoding;

/*
 This is CommandLineArgs program
 Date: 2017/11/18 
 */

public class CommandLineArgs {

    public static void main(String[] args) {
        
        for (String arg : args) {
            
            System.out.println(arg);
        }
    }
}

Đối số command line được truyền qua phương thức main()

public static void main(String[] args)

– Phương thức main() nhận mảng chuỗi kí tự từ đối số command line.
– Mảng được khai báo: kiểu dữ liệu + 2 ngoặc vuông []. Như vậy, String[] là mảng chuỗi kí tự.
– args là tham số của phương thức main().
– Phương thức có thể có nhiều tham số truyền vào.

for (String arg : args) {
    System.out.println(arg);
}

– Chúng ta duyệt mảng chuỗi kí tự với vòng lặp for. Vòng lặp for gồm nhiều chu kì.
– Trong ví dụ này, số chu kì vòng lặp bằng số lượng chuỗi trong mảng. Trong mỗi chu kì, chuỗi kí tự được gán cho biến arg. Vòng lặp kết thúc khi tất cả các chuỗi trong mảng args được gán cho biến arg.
– Câu lệnh for có body được mở đầu và kết thúc bởi dấu {}.
– Các chuỗi trong mảng args sẽ lần lượt được hiển thị lên console. Phương thức println() tự động thêm kí tự xuống dòng vào cuối mỗi chuỗi.
(Vòng lặp và mảng được mô tả kĩ trong các chương sau).
– Trên IDE (Eclipse, NetBeans), chúng ta truyền đối số bằng cách chọn [Properties] –> [Run/Debug Setting] –> [Edit]…
Ví dụ: Truyền 3 chuỗi là: “VuHongViet”, “28” và “Hanoi”. Các đối số truyền vào phân cách nhau bởi dấu space.

Java - Truyền đối số command line trên Eclipse
Java – Truyền đối số command line trên Eclipse
Java - Kết quả in ra đối số command line
Java – Kết quả in ra đối số command line

Biến

– Biến là nơi để lưu dữ liệu. Biến có tên và kiểu dữ liệu. Kiểu dữ liệu quyết định giá trị được gán cho biến (Số nguyên, chuỗi, boolean,…).
– Trong chương trình, biến có thể lưu các giá trị khác nhau của cùng kiểu dữ liệu.
– Biến trong Java luôn được khởi tạo giá trị default trước khi biến này được sử dụng để tính toán.

package net.vncoding;

/*
 This is Variables program
 Date: 2017/11/18 
 */

public class Variables {

    public static void main(String[] args) {
        
        String city = "Ha Noi";
        String name = "Vu Hong Viet"; int age = 28;
        String nationality = "Viet Nam";

        System.out.println(city);
        System.out.println(name);
        System.out.println(age);
        System.out.println(nationality);

        city = "Thai Nguyen";
        System.out.println(city);
    }
}

Trong ví dụ trên, chúng ta khai báo 4 biến. 3 biến kiểu chuỗi kí tự. Biến age kiểu số nguyên. Từ khóa int được sử dụng để khai báo biến số nguyên.

String city = "Ha Noi";

Khai báo biến city với giá trị khởi tạo là “Ha Noi”.

String name = "Vu Hong Viet"; int age = 28;

Khai báo và khởi tạo 2 biến. Chúng ta có thể viết 2 câu lệnh trên cùng 1 dòng vì kết thúc mỗi câu lệnh là dấu chấm phẩy, nên Java Compiler vẫn biết được là 2 câu lệnh viết chung 1 dòng. Nhưng vì lý do dễ đọc, mỗi câu lệnh nên viết trên 1 dòng.

System.out.println(city);
System.out.println(name);
System.out.println(age);
System.out.println(nationality);

In giá trị các biến ra màn hình console.

city = "Thai Nguyen";
System.out.println(city);

Chúng ta có thể gán lại giá trị khác cho biến city.

Java - Khai báo biến
Java – Khai báo biến

Hằng số

Khác với biến, không thể thay đổi giá trị khởi tạo của hằng số. Hằng số được khởi tạo với từ khóa final

package net.vncoding;

/*
 This is Constants program
 Date: 2017/11/18 
 */

public class Constants {

    public static void main(String[] args) {
        
        final int WIDTH = 100;
        final int HEIGHT = 150;
        int var = 40;

        var = 50;
        
        //WIDTH = 110;  --> Error      
    }
}

Trong ví dụ này, chúng ta khai báo 2 hằng số và 1 biến

final int WIDTH = 100;
final int HEIGHT = 150;

– Sử dụng từ khóa final để khai báo hằng số.
– Theo coding convention, nên đặt tên hằng số là chữ in hoa.

int var = 40;
var = 50;

Khai báo và khởi tạo cho biến. Sau đó gán giá trị mới cho biến. –> OK.

// WIDTH = 110;

Không được phép gán giá trị mới cho hằng số. Nếu chúng ta bỏ comment đi, Compiler báo lỗi “The final local variable WIDTH cannot be assigned”

Định dạng chuỗi

Việc tạo chuỗi kí tự từ các biến là công việc rất phổ biến trong lập trình. Ngôn ngữ Java có phương thức System.format() để tạo chuỗi từ các biến.

package net.vncoding;

/*
 This is StringFormatting program
 Date: 2017/11/18 
 */

public class StringFormatting {

    public static void main(String[] args) {
    
        int age = 28;
        String name = "Vu Hong Viet";

        String output = String.format("%s is %d years old.", name, age);
        
        System.out.println(output);
    }
}

Trong ví dụ này, chúng ra tạo 1 chuỗi từ 2 biến name và age.

int age = 28;
String name = "Vu Hong Viet";

Biến số nguyên age và biến chuỗi kí tự name.

String output = String.format("%s is %d years old.", name, age);

Chúng ta sử dụng phương thức format(). Trong đó %s và %d là các kí tự điều khiển, %s là chuỗi kí tự, %d là số nguyên. Giá trị biến name được thay cho %s, giá trị biến age thay cho %d.

Java - Định dạng chuỗi
Java – Định dạng chuỗi

Be the first to comment

Leave a Reply