Chia sẻ kiến thức

Cùng khám phá và chia sẻ các bài viết bổ ích.
Tổng 5 Kết quả
Một số khóa học Flutter miễn phí nên học

Tạo bởi - Hi Admin

Một số khóa học Flutter miễn phí nên học

Trong bài viết này VNFS sẽ chia sẻ với các bạn một số khóa học Flutter miễn phí mà chúng ta có thể tham khảo.Dart Programming Tutorial – Full CourseTrước tiên, nếu muốn bắt đầu với Flutter bạn phải biết đến ngôn ngữ Dart. Flutter sử dụng Dart cho việc phát triển app của mình.Flutter Course – Full Tutorial for Beginners (Build iOS and Android Apps)Một khóa học ở freeCodeCamp về Flutter cho người mới bắt đầu. Đây cũng là một trong những khóa học mà tôi được giới thiệu khi bắt đầu đến với Flutter. Nó rất hiệu quả và chắc chắn sẽ rất hữu ích cho bạnLearn Flutter, Google’s groundbreaking multi-platform mobile development framework, to create apps for Android and iOS.Trong khóa học này, Nick Manning đến từ Flutter Crash Course dạy bạn cách để đến với Flutter một cách nhanh nhất và hiệu quả nhất, Nick đã là một kỹ sư Flutter từ những năm 2017 và anh ấy hiểu rất sâu về nó. Khóa học sẽ giúp bạn hiểu sâu về thực thế, hiểu rõ vấn đề một cách trực quan nhất, từng bước và từng bước.Flutter Crash CourseTrong khóa học này chúng ta sẽ được tìm hiểu cách để xây dựng một native mobile app. Định nghĩa Flutter là gì, cách để cài đặt, tạo widgets, stateless and stateful…Flutter Tutorial for BeginnersBạn sẽ khám phá ra cách để sử dụng Flutter để tạo app android và ios. Học được tất cả mọi thứ về widgets, packages, assets & asynchronous code để tạo app “Giờ thế giới”.Flutter & Firebase App BuildLại một playlist nữa về Flutter và Firebase được tạo bởi The Net Ninja. Khi tôi muốn sử dụng firebase cho ứng dụng đầu tiên của mình thì nó chính là sự lựa chọn hợp lý. Khóa học rất đầy đủ và đã giúp tôi hiểu thế nào để tích hợp Firebase vào Flutter.Trong khóa học này bạn sẽ hiểu được cách sử dụng Firebase Firestore (Real- time database) và firebase Authentication. Playlist này dành cho những người đã có một chút kiến thức với FlutterReso CoderMột kênh Youtube chuyên dụng dành riêng cho Flutter. Reso Coder đã tạo ra rất nhiều tutorials để giải thích cách hoạt động của Flutter. Một số tool mà bạn có thể sử dụng cùng Flutter rất rõ ràng đơn giản và tất nhiên bạn có thể tích hợp nó vào dự án của mình.Flutter đang làm thay đổi diện mạo của việc phát triển ứng dụng. Đừng để bị bỏ lại phía sau. Hãy học cách để phát triển những ứng dụng cross-platform dành cho di động và web.FilledStacksMột kênh Youtube chuyên về Flutter. Bạn sẽ khám phá ra tất nhiều tut về Flutter như là Firebase, UI, cấu trúc hoạt động. Và tất nhiên nó có cả những tut về web và mobile. Học cách để xây dựng một sản phẩm chất lượng từ Flutter.Code With AndreaKhóa học về Flutter. Các video bao gồm tất cả những thứ về Flutter bao gồm về cách quản lý các sate, giao diện, kiểm thử và nhiều những thứ khác. Kênh này sẽ giúp bạn trở thành một lập trình viên Flutter giỏi hơn.Xem thêm: Triển khai BLoC trong Flutter

Xem chi tiết

Published - Wed, 23 Feb 2022

Lộ trình học lập trình Flutter

Tạo bởi - Hi Admin

Lộ trình học lập trình Flutter

Flutter là nền tảng phát triển ứng dụng đa nền tảng cho iOS và Android do Google phát triển. Flutter sử dụng ngôn ngữ DART cũng do Google phát triển và flutter cũng đã được sử dụng để tạo ra các ứng dụng native cho Google.Bên dưới là lộ trình học flutter cho các bạn tham khảo. Có thể xem thêm video về học flutter của VNFS tại đây: Triển khai BLoC trong FlutterProgramming LanguageDartIDE for developmentVsCodeAndroid StudiointellijUser InterfaceWidgetsstatefull widgetstateless widgetaccessibilityInherited widgetThemingLocalizationStyleMaterialCupertionAssetsfontsimagessvgaudiovideoStatic User InterfaceViewText,Image,button raised button etcViewGroupContainer, Row, Column, Stack, Expanded, ConstrainedBoxDynamic User InterfaceListViewGridViewExpansionTitleAnimationAnimatedWidgetAnimatedBuilderAnimationControllerCurvedAnimationHeroTransformOpacitySotrageshared preferencefile storagesqlite3rd party libararieshttpdioget_itcached_network_imageFlutter_webview_plug-infont_awesome_flutterSQFLiterxdartbloc_patternBehavior ComponentsPermissionLocal NotificationPush NotificationDownload ManagerMedia PlaybackPreferenceSharingState managementsetStateProviderReduxBLoCMobXQuality AssuranceFirebaseCrashlyticsApp distributionAnalyticsGoogle play beta testsTestFlightApp CenterVersion ControlGitGithubBitbucketGitlabFirebaseFirebase AuthFirebase databaseFirebase StorageFirebase MessagingNative IntegrationAndroidAndroid StudioJavaKotlinApp SigingGoogle Play StoreIn App PurchaseiosXcodeSwiftObjective-CApple CertificationAppStoreKeep Learning and try to improve your code.Xem thêm:Một số khóa học Flutter miễn phí nên họcĐăng ký Youtube VNFS:VNFS Youtube

Xem chi tiết

Published - Wed, 23 Feb 2022

GetX Flutter – Giới thiệu và cài đặt (Phần 1)

Tạo bởi - Hi Admin

GetX Flutter – Giới thiệu và cài đặt (Phần 1)

1. Giới Thiệu về GetX trong FlutterTrong series bài viết này chúng ta sẽ tìm hiểu về GetX trong Flutter. Hiện nay có rất nhiều thư viện State Management như MobX, BLoC, Redux, Provider, v.v. GetX cũng là một micro framework mạnh mẽ cho Flutter. Nó kết hợp State Management, dependency injection và route management một cách nhanh chóng và thiết thực.Những ưu điểm của Get – State managerLink fanpage học Flutter để cập nhật thông tin mới nhất: facebook.com/VNFSChỉ update những widget cần thiết.Sử dụng ít bộ nhớ hơn so với các kiểu quản lý state khác.Chỉ cần sử dụng một component duy nhất là GetWidget thay vì lựa chọn StatefulWidget hay StateLessWidgetViệc tổ chức cấu trúc project sẽ cực kỳ clear, phần code logic được tách hẳn hoàn toàn so với UI.Tối ưu hoá bộ nhớ, Get sẽ tự động thu dọn những component không cần thiết.2. Nguyên lý hoạt độngVề nguyên lý hoạt động của Get. Những bạn nào đã quen làm việc với Rx chắc sẽ hiểu được nguyên lý hoạt động của nó một cách dễ dàng. Về cơ bản Get hoạt động cũng giống như Rx, cũng có các Observable và các component để lắng nghe thay đổi của Observable.3. Cài đặtThêm vào file pubspec.yaml:dependencies: get:Import vào những file cần sử dụng:import 'package:get/get.dart';

Xem chi tiết

Published - Wed, 23 Feb 2022

GetX Flutter – State Management với GetX (Phần 2)

Tạo bởi - Hi Admin

GetX Flutter – State Management với GetX (Phần 2)

1. Tạo Controller kế thừa từ GetxControllerTạo một file mới đặt tên controller.dart sau đó thêm mã vào file vừa tạo như sau: class Controller extends GetxController{ var count = 0.obs; @override void onInit() { super.onInit(); } increment() => count++; @override void onClose() { super.onClose(); } }2. Khởi tạo Controller trong StatelessWidgetCó một lưu ý khi chúng ta sử dụng GetX các bạn sẽ không cần quan tâm đến StatelessWidget hay StateFulWIdget nữa. Cách để chúng ta khởi tạo Controller trong StatelessWidget như sau:final Controller controller = Get.put(Controller());3. Gắn Obx vào widget cần thay đổiVà trong giao diện người dùng, khi bạn muốn hiển thị giá trị đó và cập nhật màn hình bất cứ khi nào giá trị thay đổi, chỉ cần thực hiện điều này:Obx(() => Text("${controller.count)}"));File giao diện đầy đủ sẽ như sau:class Home extends StatelessWidget { final Controller controller = Get.put(Controller()); @override Widget build(context) { return Scaffold( body: Center( child: Obx(() => Text("Clicks: ${controller.count}")) ), floatingActionButton: FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); } }

Xem chi tiết

Published - Wed, 23 Feb 2022

GetX Flutter – Route Management với GetX (Phần 3)

Tạo bởi - Hi Admin

GetX Flutter – Route Management với GetX (Phần 3)

1. Định tuyến không sử dụng tên routeĐịnh tuyến dễ dàng hơn với GetX. Chúng ta cần thay MaterialApp thành GetMaterialApp ở main.dartGetMaterialApp( // Before: MaterialApp( home: MyHome(), )Để chuyển đến một trang mới chúng ta sử dụng phương thức sau:Get.to(NextScreen());Đóng snackbars, dialogs, bottomsheets, hay bất cứ thứ gì có thể đóng bằng Navigator.pop(context) thì trong GetX chúng ta sử dụng cú pháp:Get.back();Điều hướng đến trang mới và không cho quay về trang hiện tại (Thường được sử dụng cho SplashScreen, Login,..):Get.off(NextScreen());Đến trang mới và xóa hết các trang cũ:Get.offAll(NextScreen());Đến trang mới và nhận dữ liệu trả về từ trang đó ngay khi back về trang hiện tại:var data = await Get.to(Payment());Trả dữ liệu về trang trước theo cú pháp:Get.back(result: 'success');2. Định tuyến sử dụng tên routeĐối với chuyển trang bằng tên thì cũng tương tự các hàm trên nhưng có thêm hậu tố Named như: toNamed, offNamed, offAllNamed, …void main() { runApp( GetMaterialApp( unknownRoute: GetPage(name: '/notfound', page: () => UnknownRoutePage()), initialRoute: '/', getPages: [ GetPage(name: '/', page: () => MyHomePage()), GetPage(name: '/second', page: () => Second()), ], ) ); }3. Truyền dữ liệu cho trang mới3.1 Truyền dữ liệu với arguments:Get.toNamed("/NextScreen", arguments: 'Get is the best');print(Get.arguments); //print out: Get is the best3.2 Dynamic urls linksDynamic urls khá quen thuộc đối với Web Developer. GetX hỗ trợ nó cho Flutter. Ta có thể sử dụng theo syntax thuộc tính:Get.offAllNamed("/NextScreen?device=phone&id=354&name=Enzo");print(Get.parameters['id']); // out: 354 print(Get.parameters['name']); // out: EnzoHoặc có thể sử dụng theo cấu trúc định sẵn như ví dụ bên dưới:GetPage( name: '/profile/:user', page: () => UserProfile(), ),Gửi dữ liệu với route được định nghĩa ở trên.Get.toNamed("/profile/34954");Nhận dữ liệu tương tự như ở trên.print(Get.parameters['user']); // out: 3495

Xem chi tiết

Published - Wed, 23 Feb 2022

Tìm kiếm
Danh mục phổ biến
Bài viết mới nhất
Làm việc với thư mục và file trong Java
Làm việc với thư mục và file trong Java
Trong các ứng dụng, bạn cần thao tác thường xuyên với tập tin (file) và thư mục (folder) trong hệ thống. Các thao tác này bao gồm: liệt kê danh sách tập tin, thư mục, thêm/đổi tên, xóa thư mục, v.v. Trong bài viết này sẽ hướng dẫn một số thao tác với tập tin và thư mục trong Java. Java cung cấp 2 class hỗ trợ những việc này bao gồm:Lớp java.io.File đại diện cho một tập tin (file) hoặc một thư mục (directory) của hệ thống, nó được đưa vào Java từ phiên bản 1.0.Lớp java.nio.file.Files cung cấp các phương thức static và native để thao tác với tập tin và thư mục, nó được bổ sung vào từ phiên bản Java 7.0. Lớp này thường được sử dụng khi maintain/optimize chương trình để tăng hiệu suất chương trình Java. Khả năng tăng hiệu suất chương trình của NIO không chỉ phụ thuộc vào hệ điều hành mà còn phụ thuộc vào phiên bản JVM, hệ thống máy chủ, ổ cứng, hay thậm chí dữ liệu.1. Đường dẫn (Path) là gì?Một hệ thống tập tin lưu trữ và tổ chức các tập tin trên một số loại phương tiện lưu trữ, thường là một hoặc nhiều ổ đĩa cứng, theo cách sao cho chúng có thể dễ dàng lấy ra.Hầu hết các hệ thống tập tin được sử dụng ngày hôm nay lưu trữ các tập tin trong một cây (hoặc cấu trúc phân cấp). Ở đầu cây là một (hoặc nhiều hơn) các nút gốc. Dưới nút gốc, có các tệp và thư mục (thư mục trong Microsoft Windows). Mỗi thư mục có thể chứa các tệp tin và các thư mục con, do đó có thể chứa các tệp và thư mục con, v.v … có khả năng lưu trữ một chiều sâu gần như vô hạn.Microsoft Windows hỗ trợ nhiều nút gốc. Mỗi nút gốc ánh xạ tới một phân vùng, chẳng hạn như C:\ hoặc D:\. Hệ điều hành Solaris (Linux) hỗ trợ một nút gốc, được biểu thị bởi ký tự dấu gạch chéo /.Một tập tin được xác định bởi đường dẫn của nó thông qua hệ thống tập tin, bắt đầu từ nút gốc. Ví dụ, tập tin statusReport trong hình trên được mô tả bằng ký hiệu sau:Trong Hệ điều hành Solaris: /home/user2/statusReportTrong Microsoft Windows: C:\home\user2\statusReportKý tự được sử dụng để phân cách các tên thư mục cho hệ thống tập tin:Hệ điều hành Solaris sử dụng dấu gạch chéo (/).Microsoft Windows sử dụng dấu gạch chéo ngược (\). Tuy nhiên, vẫn có thể sử dụng dấu gạch chéo (/) trên Microsoft Window.Đường dẫn tương đối và tuyệt đốiMột đường dẫn tuyệt đối luôn chứa các phần tử gốc và danh sách thư mục đầy đủ cần thiết để định vị tệp tin. Ví dụ, /home/user2/statusReport là một đường dẫn tuyệt đối. Tất cả thông tin cần thiết để định vị tệp tin được chứa trong chuỗi đường dẫn.Một đường dẫn tương đối cần phải được kết hợp với một đường dẫn khác để truy cập một tập tin. Ví dụ, user1/foo là một đường dẫn tương đối. Nếu không có thêm thông tin, một chương trình không thể xác định chính xác vị trí thư mục user2/statusReport trong hệ thống tập tin.2. Giới thiệu lớp Java.io.FileLớp java.io.File đại diện cho một tập tin hoặc một thư mục trong hệ thống, nó đại diện cho một đường dẫn (path). Đường dẫn này có thể không thực sự tồn tại trên hệ thống. Nếu tồn tại thì nó có thể là một thư mục (directory) hoặc là một tập tin (file).Ví dụ tạo một đối tượng File đại diện cho một đường dẫn, và kiểm tra sự tồn tại của nó, ghi ra các thông tin cơ bản của File.public static void main(String[] args) {        // Tạo một đối tượng File đại diện cho một đường dẫn    File file = new File("D:/WorkSpace/data/test.txt");    // Kiểm tra sự tồn tại.    System.out.println("Path exists : " + file.exists());    if (file.exists()) {        // Kiểm tra có phải có phải là một folder hay không?        System.out.println("isDirectory : " + file.isDirectory());        // Kiểm tra có phải là một đường dẫn ẩn hay không?        System.out.println("isHidden : " + file.isHidden());        // Lấy tên file/ folder        System.out.println("Simple Name: " + file.getName());        // Đường dẫn tuyêt đối.        System.out.println("Absolute Path: " + file.getAbsolutePath());        // Kiểm tra kích thước file:        System.out.println("Length : " + file.length() + " (bytes)");        // Thời điểm sửa lần cuối        long lastMofifyInMillis = file.lastModified(); // milliseconds        Date lastModifyDate = new Date(lastMofifyInMillis);        System.out.println("Last modify date: " + lastModifyDate);    }}3. Tạo thư mụcLớp File cung cấp 2 phương thức để tạo môt thư mục:mkdir(): Tạo thư mục cho bởi đường dẫn nếu thư mục cha tồn tại.mkdirs(): Tạo thư mục cho bởi đường dẫn, bao gồm cả các thư mục cha nếu nó không tồn tại.Ví dụ: public static void main(String[] args) {    File dir = new File("D:/WorkSpace/data/created1/child1");    System.out.println("Pathname: " + dir.getAbsolutePath());    System.out.println("Path exists:  " + dir.exists()); // false    System.out.println("Parent Path exists: " + dir.getParentFile().exists()); // false    // Với mkdir(), thư mục chỉ được tạo ra nếu thư mục cha tồn tại.    boolean created = dir.mkdir();    System.out.println("Directory created: " + created); // false    System.out.println();    File dir2 = new File("D:/WorkSpace/data/created2/child2");    System.out.println("Pathname: " + dir2.getAbsolutePath());    System.out.println("File exists: " + dir2.exists()); // false    // Với mkdirs(), thư mục được tạo ra bao gồm cả các thư mục cha nếu nó không tồn tại.    created = dir2.mkdirs();    System.out.println("Directory created: " + created); // true} 4. Xóa tập tinSử dụng phương thức delete() để xóa tập tin và thư mục. Lưu ý: phương thức delete() chỉ cho phép xóa thư mục rỗng.public static void main(String[] args) {    File file = new File("D:/WorkSpace/data/test.txt");    if (file.delete()) {        System.out.println(file.getName() + " is deleted!");    } else {        System.out.println("Delete operation is failed.");    }}5. Xóa thư mụca) Xóa thư mục rỗngpublic static void main(String[] args) {    File folder = new File("D:/WorkSpace/data/created4");    if (folder.delete()) {        System.out.println(folder.getName() + " is deleted!");    } else {        System.out.println("Delete operation is failed.");    }}b) Xóa thư mục có chưa thư mục con và tập tin bằng đệ quypublic static void main(String[] args) {    File folder = new File("D:/WorkSpace/gpcoder/data/created3");    delete(folder);}public static void delete(File file) {    if (file.isDirectory()) {        // directory is empty, then delete it        if (file.list().length == 0) {            file.delete();            System.out.println("Directory is deleted : " + file.getAbsolutePath());        } else {            // list all the directory contents            String files[] = file.list();            for (String temp : files) {                // construct the file structure                File fileDelete = new File(file, temp);                // recursive delete                delete(fileDelete);            }            // check the directory again, if empty then delete it            if (file.list().length == 0) {                file.delete();                System.out.println("Directory is deleted : " + file.getAbsolutePath());            }        }    } else {        // if file, then delete it        file.delete();        System.out.println("File is deleted : " + file.getAbsolutePath());    }}6. Đọc và ghi file trong java – Các thao tác xử lý dữ liệuBước 1: Tạo đối tượng luồng và liên kết với nguồn dữ liệu.Bước 2: Thao tác dữ liệu (đọc hoặc ghi hoặc cả hai).Bước 3: Đóng luồnga) Xử lý nhập xuất dữ liệu sử dụng luồng byteSử dụng luồng byte trong các trường hợp như nhập xuất kiểu dữ liệu nguyên thủy (như kiểu int, float, double, boolean), nhập xuất kiểu dữ liệu kiểu đối tượng (object)Ví dụ 1: Ghi dữ liệu vào d:/mydata.bin với DataOutputStreampublic static void main(String[] args) {   try {   //Bước 1: Tạo đối tượng luồng và liên kết nguồn dữ liệu   FileOutputStream fos = new FileOutputStream("d:/file/mydata.bin");   DataOutputStream dos = new DataOutputStream(fos);   //Bước 2: Ghi dữ liệu   dos.writeInt(100);   dos.writeDouble(9.5);   //Bước 3: Đóng luồng   fos.close();   dos.close();   System.out.println("Done!");  } catch (IOException ex) {    ex.printStackTrace();  } }Ví dụ 2: Đọc dữ liệu chứa trong tập tin d:/mydata.bin với DataInputStreampublic static void main(String[] args) {  try {   //Bước 1: Tạo đối tượng luồng và liên kết nguồn dữ liệu   FileInputStream fis = new FileInputStream("d:/file/mydata.bin");   DataInputStream dis = new DataInputStream(fis);   //Bước 2: Đọc dữ liệu   int n = dis.readInt();    double m = dis.readDouble();   //Bước 3: Đóng luồng   fis.close();   dis.close();   //Hiển thị nội dung đọc từ file   System.out.println("Số nguyên: " + n);   System.out.println("Số thực: " + m);  } catch (IOException ex) {    ex.printStackTrace();  } }b) Xử lý nhập xuất dữ liệu bằng luồng characterLuồng byte rất mạnh mẽ và linh hoạt. Tuy nhiên nếu bạn muốn lưu trữ file chứa văn bản Unicode thì luồng character là lựa chọn tốt nhất vì ưu điểm của luồng character là nó thao tác trực tiếp trên ký tự Unicode. Tất cả các luồng character đều được kế thừa từ 2 lớp Reader và WriterVí dụ 1: Ghi dữ liệu với FileWriterpublic static void main(String[] args) {   try {     //Bước 1: Tạo đối tượng luồng và liên kết nguồn dữ liệu     File f = new File("d:/mydata3.txt");     FileWriter fw = new FileWriter(f);     //Bước 2: Ghi dữ liệu     fw.write("Ghi dữ liệu bằng luồng character");     //Bước 3: Đóng luồng     fw.close();   } catch (IOException ex) {     System.out.println("Loi ghi file: " + ex); }}Ví dụ 2: Đọc dữ liệu với FileReaderpublic static void main(String[] args) {   try {     //Bước 1: Tạo đối tượng luồng và liên kết nguồn dữ liệu     File f = new File("d:/mydata3.txt");     FileReader fr = new FileReader(f);     //Bước 2: Đọc dữ liệu     BufferedReader br = new BufferedReader(fr);     String line;     while ((line = br.readLine()) != null){       System.out.println(line);     }     //Bước 3: Đóng luồng     fr.close();     br.close();    } catch (Exception ex) {      System.out.println("Loi doc file: "+ex);  }}

Wed, 27 Jul 2022

Hướng dẫn cài đặt môi trường Java và Eclipse
Hướng dẫn cài đặt môi trường Java và Eclipse
1 Cài đặt môi trường JDKJDK (Java Development Kit) là một bộ phát triển phần mềm để phát triển các ứng dụng trong Java. JDK bao gồm JRE và các Development Tool. Bạn có thể cài đặt nhiều phiên bản Java JDK trên cùng một máy tính. Để cài đặt môi trường JDK các bạn thực hiện theo các bước sau:Bước 1: Tải xuống JDKMở trình duyệt và tìm kiếm Tải xuống JDK 17 hoặc nhấp vào liên kết để tải xuống từ trang web Oracle (https://www.oracle.com/java/technologies/downloads/#java17). Nó sẽ hiển thị trang tải xuống JDK như trong Hình 1.Bây giờ hãy nhấp vào liên kết X64 Installer để bắt đầu tải xuống JDK 17.Bước 2 : Cài đặt JDKBây giờ thực thi trình cài đặt JDK bằng cách nhấp đúp vào nó. Nó có thể yêu cầu sự cho phép của hệ thống trước khi bắt đầu cài đặt. Nhấp vào có để cho phép trình cài đặt tự thực thi. Nó hiển thị màn hình chào mừng của trình cài đặt như được hiển thị trong dưới đây:Nhấp vào  nút Tiếp theo (Next) để bắt đầu quá trình cài đặt. Màn hình tiếp theo hiển thị các tùy chọn để thay đổi đường dẫn cài đặt. Có thể thay đổi vị trí cài đặt trên màn hình này nếu muốn. Mặc định nó sẽ được cài đặt trong ổ C như hiển thị trong dưới đây.Bây giờ hãy nhấp vào nút Tiếp theo (Next) để bắt đầu cài đặt. Đợi quá trình cài đặt diễn ra, màn hình cài đặt thành công sẽ được hiển thị như sau:Bước 3: Cài đăt biến môi trường (Environment Variables)Đầu tiên chúng ta mở của sổ RUN của window (bạn nào không biết thì nhấn tổ hợp phím window+R) sau đó nhập vào sysdm.cpl xong nhấn Enter. Tiếp đến chọn thẻ Advanced => Environment Variables như hình bên dưới:Bây giờ hãy nhấp vào nút Environment Variables  > thêm JAVA_HOME & Đường dẫn như được hiển thị trong các hình ảnh dưới đây:Bây giờ chúng ta phải thêm Java Path. Nếu biến Path đã có thì chúng ta chỉ cần nhấp vào nút  Edit…  > sau đó nhấp vào  nút New để thêm đường dẫn như hình bên dưới.Bước 4: Xác minh cài đặt JavaĐể xác minh cài đặt, hãy mở dấu nhắc lệnh ( phím Win + R  và gõ  cmd ), sau đó nhập  java -version  và nhấn phím Enter.Xin chúc mừng! Bạn đã được cài đặt thành công Bộ phát triển Java (JDK) 17 trên hệ thống Windows của mình.

Mon, 27 Tháng sáu 2022

Tìm hiểu sự khác biệt giữa OOP trong C++ và Java
Tìm hiểu sự khác biệt giữa OOP trong C++ và Java
Đặc điểmC++JavaNgôn ngữ thuần OOPKhông phải là ngôn ngữ thuần OOP, được phát triển từ C với tên là C++  hay được gọi là “C với các lớp”.Java là ngôn ngữ thuần OOP. Nghĩa là thành phần nào nó cũng thuộc về lớp, nằm trong lớp.Phạm vi truy cậpC++ có 3 phạm vi truy của cập của thuộc tính và phương thức: private, protected, publicJava mở rộng hơn C++ có 4 phạm vi truy cập: private, default, protected, public.Nạp chồng toán tửC++ có phép chúng ta nạp chồng các toán tử như toán tử vào ra << >>, + – * / hay -= += /= */.Java không cho phép nạp chồng toán tử. Mà chỉ có toán tử + cho phép nối hai chuổi.Hỗ trợ đa kế thừaC++ hổ trợ đa kế thừa, nghĩa là một class có kể kế thừa nhiều lớp dẫn xuất.Java không cho phép bạn đa kế thừa từ nhiều lớp, mà chỉ kế thừa 1 lớp và được implements nhiều interfaceHỗ trợ interfaceC++ không tồn tại khái niệm interfaceJava hỗ trợ interfaceLớp vô sinhC++ không có lớp vô sinh, nghĩa là lớp dẫn xuất được tạo ra thì các lớp con có thể kế thừaJava có lớp vô sinh khi chúng ta đánh dấu final cho lớp. Khi đó lớp này sẽ không có lớp nào kế thừa từ nó.Hàm bạn, lớp bạnC++ có hổ trợ hàm bạn, lớp bạnJava không hổ trợ hàm bạn, lớp bạnLớp cha của mọi lớpMột lớp trong C++ được tạo ra và chưa kế thừa từ lớp nào thì nó không có lớp cha.Mặc định trong Java khi một lớp được tạo ra thì cha của nó chính là lớp Object. Lớp Object này là cha của mọi lớp trong Java.Tổ chức trong classC++ chúng ta có thể gom nhóm những thuộc tính hay phương thức có cùng phạm vi truy cập với nhau. Ví dụpublic:int a;int b;C++ định nghĩa các prototype trong file .h và định nghĩa thân các method trong file .cppTrước mỗi method hay thuộc tính chúng ta phải chỉ định phạm vi truy cập. Nếu không chỉ định thì Java hiểu đó là defaut.Java khai báo và định nghĩa method trong một file .javaPhạm vi truy cập mặc địnhTrong C++ nếu chúng ta không chỉ rõ phạm vi truy cTrong Java nếu không chỉ rõ tường mình thì mặc định thuộc tính hay phương thức đó sẽ có phạm vi truy cập là default.Phạm vi truy cập protectedPhạm vi truy cập là protected trong C++ chỉ truy cập được ở trong class định nghĩa và ở lớp conPhạm vi truy cập protected trong Java được truy cập ở Java là trong class định nghĩa, trong cùng package và lớp con trong cùng package.Gọi lại phương thức của lớp chaC++ sử dụng cú pháp <class_name>::method();Java sử dụng từ khóa super với cú pháp:Super.method();Gọi lại constructor của lớp C++ không cho phép gọi lại contructor khác trong một contructor khác của lớp Java cho phép gọi lại contructor của lớp trong một contructor khác với cú pháp:this(parameter) Kiểu kế thừa Trong C++ có các kiểu kế thừa lớp là:Private, protected, public Trong Java chỉ có kiểu kế thừa là public. Phương thức vô sinh Trong C++ không tồn tại phương thức vô sinh. Nghĩa là có thể override lại ở lớp con. Trong Java nếu phương thức được đánh dấu là final thì ở lớp con không thể override lại được. Phương thức thuần túy ảo C++ có khái niệm phương thức thuần túy ảo. Với cú pháp: return type  name_method()= 0;Java không có khái niệm phương thức thuần túy ảo. Lớp ảo C++ nhận biết lớp ảo khi lớp đó có các phương thức đánh dấu với từ khóa virtual hoặc phương thức thuần ảo Java nhận biết lớp ảo khi khai báo lớp có từ khóa abtract và có những phương thức được đánh dấu là abstract.Phương thức ảoPhương thức ảo trong C++ được đánh dấu bởi từ khóa virtual và có định nghĩa bên trong thân hàm.Phương thức ảo trong Java được đánh dấu bởi từ khóa abstract. Những phương thức này không có định nghĩa thân hàm, kết thúc bằng dấu ‘;’Tổ chức class như thư mụcTrong C++ chúng ta nhắc đến namespace để định nghĩa các lớp trong này.Java định nghĩa các class trong các package.Lập trình đồng bộC++ không hổ trợ lập trình đồng bộ cho class.Java hổ trợ lập trình đồng bộ với từ khóa synchronized.Hàm mainHàm main của C++ không thuộc về lớp nào. Là một hàm cục bộHàm main trong java cũng nằm trong một class vì java là ngôn ngữ thuần OOP.DestructorC++ có destructor. Người lập trình phải chủ động thu dọn vùng nhớ đã cấp phát.Java không có khái niệm destructor mà có bộ thu gom rác gọi là GC (garbage collection). Khi một đối tượng không còn tham chiếu nữa thì bộ thu gom rác sẽ hoạt động.

Thứ Ba, 01 Mar 2022

Tất cả Blog