- vừa được xem lúc

[Object-Oriented + Java] Bài viết #1 - Hello, Java !

0 0 11

Người đăng: Semi Dev

Theo Viblo Asia

Đây đã là ngôn ngữ lập trình thứ N trong hành trình tự học code mà mình đang chia sẻ tại nền tảng blog Viblo ở đây, vì vậy nên chúng ta sẽ thu gọn các điểm căn bản vào mục yêu cầu trước khi bắt đầu Sub-Series này như sau:

Nếu bạn đã đồng hành từ Series Tự Học Lập Trình Web đầu tiên thì chỉ cần đảm bảo rằng đã đi qua thêm Sub-Series Imperative + C của Series Một Số Mô Hình Lập Trình Phổ Biến này. Và nếu như bạn cũng đã đi qua Sub-Series Procedural + Ada nữa thì sẽ là rất tuyệt bởi vì ngoại trừ nhóm công cụ Functional thì tất cả các khía cạnh khác của Java được giới thiệu ở đây chỉ khác với Ada về mặt cú pháp biểu thị.

Trong trường hợp bạn gặp bài viết này từ một nguồn tìm kiếm như Google hay Bing và chưa từng đọc bài viết nào mà mình đã chia sẻ tại đây thì... khả năng cao là bạn hiểu Java rõ hơn so với một người mất gốc mới mò mẫm học lại như mình. Và mình rất hy vọng sẽ nhận được các bình luận từ bạn để hiệu chỉnh lại những kiến thức đã chia sẻ nếu có sơ xuất hoặc do mình chưa hiểu đúng trọng tâm.

Hello, Java !

Do đã mặc định phần kiến thức nền ở trên nên chúng ta sẽ không quay lại các vấn đề như các khái niệm OOP căn bản, ví dụ như: object là cái gì? Hay, class là cái gì? Mà thay vào đó thì sẽ chỉ tập trung giới thiệu các yếu tố về mặt cú pháp do Java cung cấp. Và bây giờ chúng ta sẽ khởi đầu ngay với code Hello, World! thể hiện bằng ngôn ngữ Java.

package app; import java.io.*; class Main { public static void main (String[] $args) { System.out.println ("Hello, Java !"); } } // -- end Main

Để chạy code này ngay trên máy tính đang sử dụng thì chúng ta sẽ cần phải cài đặt một bộ công cụ tạo môi trường phát triển ứng dụng dành riêng cho Java có tên gọi là JDK - Java Development Kit. Bộ công cụ này bao gồm:

  • JVM (Java Virtual Machine) - một máy ảo tạo môi trường vận hành code đã được biên dịch từ các tệp mã nguồn Java mà chúng ta viết.
  • javac (java compiler) - một trình biên dịch giúp chuyển đổi code Java mà chúng ta viết sang ngôn ngữ trung gian để có thể thực thi được bởi máy ảo JVM.

Các liên kết tải về JDK 19 (phiên bản mới nhất hiện tại 02/2023):

Và với việc Oracle - nhà phát triển ngôn ngữ Java - có cung cấp các bộ cài đặt cho đầy đủ các nền tảng hệ điều hành khác nhau thì chúng ta có thể yên tâm rằng: "Viết code một lần, mang tới đâu cũng chạy được." Code xử lý logic phần mềm mà chúng ta xây dựng sẽ tương tác với máy ảo JVM qua giao diện lập trình trong tài liệu được cung cấp, còn máy ảo JVM sẽ phải chuyển tải logic đó sang dạng phù hợp để tương tác với hệ điều hành đang sử dụng.

Sau khi đã cài đặt xong JDK thì chúng ta cần mở cửa sổ dòng lệnh để chạy lệnh biên dịch javac và lệnh thực thi java.

cd Documents/learn-java
find -name "*.java" > src.txt
javac @src.txt
java app/Main
cd Documents\learn-java
dir /s /B *.java > src.txt
javac @src.txt
java app\Main

Trong số các câu lệnh phía trên thì có lệnh thứ hai là để tìm và liệt kê toàn bộ các tệp mã nguồn .java mà chúng ta viết vào một tệp văn bản thuần src.txt, sau đó trình biên dịch javac sẽ có thể sử dụng danh sách này để tự động biên dịch toàn bộ tất cả các tệp mã nguồn .java sang các tệp .class chứa code vận hành mà máy ảo JVM có thể hiểu được.

Cuối cùng là lệnh chạy tệp .class có chứa một hàm main khởi động chương trình trong thư mục learn-java/app. Trong lệnh này chúng ta có thể sử dụng tên đầy đủ của tệp là Main.class hoặc ngầm định yếu tố định dạng tệp cũng được, bởi vì JVM sẽ không chạy trực tiếp các tệp code .java cùng tên có mặt trong thư mục đó.

Java có thể làm được những gì?

Cái máy ảo JVM mà chúng ta nói ở trên sẽ tương tác với hệ điều hành ở cấp độ mà gần như không có giới hạn nào về mặt tài nguyên, trừ khi là do chúng ta thiết lập ở phía hệ điều hành đang sử dụng. Vì vậy nên bạn có thể sử dụng Java để viết bất kỳ dạng ứng dụng nào với sự hỗ trợ của thư viện tiêu chuẩn cho javac cung cấp, bao gồm cả những ứng dụng làm việc cục bộ trong máy offline app hoặc các ứng dụng mạng network app.

Những yếu tố quen thuộc

Java là một ngôn ngữ Imperative sử dụng các cấu trúc lệnh điều kiện và vòng lặp tương tự như C. Để tránh lặp lại các bài viết về những chi tiết Imperative đã quá quen thuộc sau khi sử dụng CJavaScript thì chúng ta sẽ liệt kê lướt qua tại đây:

Định kiểu tĩnh

Java là một ngôn ngữ định kiểu tĩnh static-typing với cú pháp định kiểu tương đồng với C 99.99%. Tên của các kiểu dữ liệu được sử dụng làm tiền tố ở các vị trí khai báo các biến và các tham số đầu vào của các phương thức method.

int $integer = 9;
double $floatNumber = 10.01;
boolean $coin = true;
char $character = 'j'; char[] $charArrayTen = new char[10];
char[] $charArray = { 'j', 'a', 'v', 'a' }; String $string = "A sequence of characters";

Như vậy là ở đây chúng ta thấy Java vay mượn luôn cả cú pháp khởi tạo mảng đơn thuần literal array của C. Mặc dù là ngôn ngữ lập trình OOP phổ biến nhất và thậm chí không hỗ trợ viết code bên ngoài các khối định nghĩa của OOP, nhưng so với môi trường JavaScript thì logic thực thi code OOP ở đây sẽ có phần kém linh động hơn một chút. Chúng ta sẽ không thể gọi một phương thức trực tiếp từ một giá trị primitive như thế này:

String $infinity = (1001).toString(); // error

Và như vậy thì chúng ta đã có thể mặc định phương thức xử lý đối với các giá trị primitive trong Java là giống với C. Tuy nhiên có một điểm đặc biệt khác với C đó là ở đoạn String và cấu trúc mảng ký tự đơn thuần char[]:

Chúng ta có cấu trúc mảng đơn thuần char[] vẫn được hiểu tương tự như mảng các ô nhớ liền kề nhau trong C và biến đại diện cho mảng đang trỏ tới địa chỉ của ô đầu tiên. Ở đây Java không hỗ trợ làm việc với các con trỏ ở cấp độ quản lý bộ nhớ thủ công như C, mà chúng ta chỉ đang nói tới bản chất của cấu trúc dữ liệu này để so sánh với String. Như vậy char[] sẽ bao gồm các ô nhớ lưu trữ các ký tự đơn liền kề nhau, không phải là Object, và không có khả năng gọi các phương thức ví dụ như charArray.toString().

Còn String thì lại là kiểu Object trong môi trường Java. Cú pháp khởi tạo với nội dung chuỗi đơn thuần literal string như trên sẽ được Java ngầm định cho đi qua một trình khởi tạo và tạo ra một object, không phải là một mảng đơn thuần chứa các ký tự như char[]. Và như vậy, đôi khi chúng ta sẽ có thể gọi một phương thức từ một chuỗi ví dụ như oneString.length(). Bên cạnh đó thì tại các vị trí mà chúng ta gọi phương thức trực tiếp từ literal string ví dụ như "Just a string".length() thì Java sẽ xử lý giống với JavaScript bằng cách tạo ra một object vỏ bọc tạp thời để thực hiện phương thức, và object này sẽ được xóa đi ngay sau khi phương thức được thực thi xong.

Chuyển kiểu dữ liệu

Đối với các kiểu primitive thì thao tác chuyển từ kiểu dữ liệu có độ rộng nhỏ hơn sang kiểu có độ rộng lớn hơn sẽ được Java tự động xử lý ngầm định, và ở chiều ngược lại thì chúng ta sử dụng cú pháp tương tự với C.

int $integer = 9;
double $floatNumber = $integer; System.out.println ($floatNumber); // 9.0
double $floatNumber = 9.1;
int $integer = (int) $floatNumber; System.out.println ($integer); // 9

Cú pháp điều kiện

if (A_isPossible) { doPlanA();
}
else if (B_isPossible) { doPlanB();
}
else { doPlanZ();
}
switch ($letter) { case 'A': doPlanA(); break; case 'B': doPlanB() break; default: doPlanZ()
}

Cú pháp vòng lặp

int $i = 0; while ($i < 9) { System.out.println ($i); $i += 1;
} // 9 times
int $i = 0; do { // once System.out.println ($i); $i += 1;
} while ($i <= 0);
for (int $i = 0; $i < 9; $i += 1) { System.out.println ($i);
} // 9 times
String $stringArray = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }; for (int $i : $stringArray) { System.out.println ($i);
} // 9 times

Ok.. chúng ta đã điểm qua hết những yếu tố Imperative căn bản và kể từ bài viết tiếp theo chúng ta sẽ tập trung vào các yếu tố hỗ trợ OOPJava cung cấp.

[Object-Oriented + Java] Bài viết #2 - Class Members & Inheritance

Bình luận

Bài viết tương tự

- vừa được xem lúc

Closure trong Javascript - Phần 2: Định nghĩa và cách dùng

Các bạn có thể đọc qua phần 1 ở đây. Để mọi người không quên, mình xin tóm tắt gọn lại khái niệm lexical environment:.

0 0 51

- vừa được xem lúc

Var vs let vs const? Các cách khai báo biến và hằng trong Javascript

Dạo này mình tập tành học Javascript, thấy có 2 cách khai báo biến khác nhau nên đã tìm tòi sự khác biệt. Nay xin đăng lên đây để mọi người đọc xong hy vọng phân biệt được giữa let và var, và sau đó là khai báo hằng bằng const.

0 0 31

- vừa được xem lúc

VueJS: Tính năng Mixins

Chào mọi người, hôm nay mình sẽ viết về Mixins và 1 số vấn đề trong sử dụng Mixins hay ho mà mình gặp trong dự án thực. Trích dẫn từ trang chủ của VueJS:.

0 0 27

- vừa được xem lúc

Asset Pipeline là cái chi chi?

Asset Pipeline. Asset pipeline là cái chi chi. . Giải thích:.

0 0 47

- vừa được xem lúc

Tạo data table web app lấy dữ liệu từ Google Sheets sử dụng Apps Script

Google Sheets là công cụ tuyệt vời để lưu trữ bảng tính trực tuyến, bạn có thể truy cập bảng tính bất kỳ lúc nào ở bất kỳ đâu và luôn sẵn sàng để chia sẻ với người khác. Bài này gồm 2 phần.

0 0 266

- vừa được xem lúc

Học Deep Learning trên Coursera miễn phí

Bạn muốn bắt đầu với Deep Learning nhưng không biết bắt đầu từ đâu? Bạn muốn có một công việc ở mức fresher về Deep Learning? Bạn muốn khoe bạn bè về kiến thức Deep Learning của mình. Bắt đầu từ đâu.

0 0 35