Chuyển tới nội dung
Home » Java 18 Là Gì | 1, Java 9: Interface Private Method

Java 18 Là Gì | 1, Java 9: Interface Private Method

Java 18 . Giải phương trình bậc hai ax2+bx+c=0 trong Java | Phần 1 - Lập Trình Java Cơ Bản

1, Java 9: Interface private method

Trước thời điểm Java 8 release, Interface và Abstract class có sự khác biệt khá lớn và gần như luôn xuất hiện trong các buổi phỏng vấn.

Sau đó, Java 8 cung cấp thêm default method biến một abstract method thành non-abstract method với 2 mục đích:


Cung cấp method mặc định cho interface.


Support backward compatibility.

Tiếp tục đến Java 9, Oracle đã bổ sung thêm private method cho interface. Tất nhiên các private method với mục đích tăng tính re-used cho code.

Ví dụ, với Java 8:

public interface Human { default void awake() { System.out.println(“Same code here”); } default void sleep() { System.out.println(“Same code here”); } }

Java 9 với private method:

public interface Human { default void awake() { doSomething(); } default void sleep() { doSomething(); } private void doSomething() { System.out.println(“Same code here”); } }

Thậm chí support luôn private static method:

public interface Human { default void awake() { doSomething(); } default void sleep() { doSomething(); } private static void doSomething() { System.out.println(“Same code here”); } }

Như vậy, interface đã có non-abstract method, private/public static method, public static variable. Về mặt implement đã không còn khác nhau quá nhiều giữa interface và abstract class.

Lưu ý rằng về ý nghĩa thì interface và abstract class vẫn khác nhau, và interface không có instance variable và private static variable.

Tính năng mới Java JDK 18: Internet Address Resolution

Đối với SPI độ phân giải địa chỉ Internet , đề xuất là xác định SPI cho độ phân giải địa chỉ máy chủ và tên để Inet.Addresscó thể sử dụng các bộ phân giải khác với bộ phân giải tích hợp sẵn của nền tảng. Động lực cho nỗ lực này bao gồm việc kích hoạt tốt hơn Project Loom , cho đồng thời và các mô hình lập trình mới trong Java, cùng với việc tích hợp các giao thức mạng mới, tùy chỉnh và cho phép thử nghiệm. Đề xuất không liên quan đến việc phát triển một trình phân giải thay thế cho JDK.

Java 18 . Giải phương trình bậc hai ax2+bx+c=0 trong Java | Phần 1 - Lập Trình Java Cơ Bản
Java 18 . Giải phương trình bậc hai ax2+bx+c=0 trong Java | Phần 1 – Lập Trình Java Cơ Bản

Tham khảo[sửa | sửa mã nguồn]

  1. ^ Binstock, Andrew (20 tháng 5 năm 2015). “Java’s 20 Years of Innovation”. Forbes. Lưu trữ bản gốc ngày 14 tháng 3 năm 2016. Truy cập ngày 18 tháng 3 năm 2016.
  2. ^ a b c d Barbara Liskov with John Guttag (2000). Program Development in Java – Abstraction, Specification, and Object-Oriented Design. USA, Addison Wesley. ISBN 9780201657685.
  3. ^ Chaudhary, Harry H. (28 tháng 7 năm 2014). “Cracking The Java Programming Interview :: 2000+ Java Interview Que/Ans”. Lưu trữ bản gốc ngày 29 tháng 9 năm 2023. Truy cập ngày 29 tháng 5 năm 2016.
  4. ^ Java 5.0 added several new language features (the enhanced for loop, autoboxing, varargs và annotations), after they were introduced in the similar (and competing) C# language [1] [2]
  5. ^ Gosling, James; and McGilton, Henry (tháng 5 năm 1996). “The Java Language Environment”.Quản lý CS1: nhiều tên: danh sách tác giả (liên kết)
  6. ^ Gosling, James; Joy, Bill; Steele, Guy; and Bracha, Gilad. “The Java Language Specification, 2nd Edition”.Quản lý CS1: nhiều tên: danh sách tác giả (liên kết)
  7. ^ “The A-Z of Programming Languages: Modula-3”. Computerworld.com.au. Truy cập ngày 9 tháng 6 năm 2010.
  8. ^ Niklaus Wirth stated on a number of public occasions, e.g. in a lecture at the Polytechnic Museum, Moscow in September, 2005 (several independent first-hand accounts in Russian exist, e.g. one with an audio recording: Filippova, Elena (ngày 22 tháng 9 năm 2005). “Niklaus Wirth’s lecture at the Polytechnic Museum in Moscow”. Bản gốc lưu trữ ngày 1 tháng 12 năm 2020. Truy cập ngày 5 tháng 1 năm 2013.), that the Sun Java design team licenced the Oberon compiler sources a number of years prior to the release of Java and examined it: a (relative) compactness, type safety, garbage collection, no multiple inheritance for classes — all these key overall design features are shared by Java and Oberon.
  9. ^ Patrick Naughton cites Objective-C as a strong influence on the design of the Java programming language, stating that notable direct derivatives include Java interfaces (derived from Objective-C’s protocol) and primitive wrapper classes. [3]
  10. ^ TechMetrix Research (1999). “History of Java” (PDF). Java Application Servers Report. Bản gốc (PDF) lưu trữ ngày 29 tháng 12 năm 2010. Truy cập ngày 5 tháng 1 năm 2013.

    The project went ahead under the name “green” and the language was based on an old model of UCSD Pascal, which makes it possible to generate interpretive code

  11. ^ “A Conversation with James Gosling – ACM Queue”. Queue.acm.org. ngày 31 tháng 8 năm 2004. Truy cập ngày 9 tháng 6 năm 2010.
  12. ^ The Java Language Team. About Microsoft’s “Delegates” (White Paper). JavaSoft, Sun Microsystems, Inc. Bản gốc lưu trữ ngày 27 tháng 6 năm 2012.

    In the summer of 1996, Sun was designing the precursor to what is now the event model of the AWT and the JavaBeans component architecture. Borland contributed greatly to this process. We looked very carefully at Delphi Object Pascal and built a working prototype of bound method references in order to understand their interaction with the Java programming language and its APIs.

  13. ^ “Chapel spec (Acknowledgements)” (PDF). Cray Inc. 1 tháng 10 năm 2015. Lưu trữ (PDF) bản gốc ngày 5 tháng 2 năm 2016. Truy cập ngày 14 tháng 1 năm 2016.
  14. ^ “Gambas Documentation Introduction”. Gambas Website. Lưu trữ bản gốc ngày 9 tháng 10 năm 2017. Truy cập ngày 9 tháng 10 năm 2017.
  15. ^ “Facebook Q&A: Hack brings static typing to PHP world”. InfoWorld. 26 tháng 3 năm 2014. Lưu trữ bản gốc ngày 13 tháng 2 năm 2015. Truy cập ngày 11 tháng 1 năm 2015.
  16. ^ “Write once, run anywhere?”. Computer Weekly. ngày 2 tháng 5 năm 2002. Truy cập ngày 27 tháng 7 năm 2009.
  17. ^ “1.2 Design Goals of the Java™ Programming Language”. Oracle. ngày 1 tháng 1 năm 1999. Bản gốc lưu trữ ngày 23 tháng 1 năm 2013. Truy cập ngày 14 tháng 1 năm 2013.
  18. ^ McMillan, Robert (ngày 1 tháng 8 năm 2013). “Is Java Losing Its Mojo?”. Bản gốc lưu trữ ngày 15 tháng 2 năm 2017. Truy cập ngày 8 tháng 3 năm 2017.

    Java is on the wane, at least according to one outfit that keeps on eye on the ever-changing world of computer programming languages. For more than a decade, it has dominated the TIOBE Programming Community Index, and is back on top – a snapshot of software developer enthusiasm that looks at things like internet search results to measure how much buzz different languages have. But lately, Java has been slipping.

  19. ^ Chan, Rosalie (ngày 22 tháng 1 năm 2019). “The 10 most popular programming languages, according to the ‘Facebook for programmers’”. Business Insider. Bản gốc lưu trữ ngày 29 tháng 6 năm 2019. Truy cập ngày 29 tháng 6 năm 2019.
  20. ^ “JavaOne 2013 Review: Java Takes on the Internet of Things”. www.oracle.com. Bản gốc lưu trữ ngày 19 tháng 4 năm 2016. Truy cập ngày 19 tháng 6 năm 2016. Alt URL Lưu trữ 2019-02-25 tại Wayback Machine
  21. ^ “Why should I uninstall older versions of Java from my system?”. Oracle. Truy cập ngày 9 tháng 9 năm 2016.
  22. ^ Byous, Jon (tháng 1 năm 1998). “Java technology: The early years”. Sun Developer Network. Sun Microsystems. Bản gốc lưu trữ ngày 20 tháng 4 năm 2005. Truy cập ngày 22 tháng 4 năm 2005.
  23. ^ Object-oriented programming “The History of Java Technology”. Sun Developer Network. tháng 1 năm 1995. Bản gốc lưu trữ ngày 10 tháng 2 năm 2010. Truy cập ngày 30 tháng 4 năm 2010.
  24. ^ Murphy, Kieron (4 tháng 10 năm 1996). “So why did they decide to call it Java?”. JavaWorld. Truy cập ngày 13 tháng 7 năm 2020.
  25. ^ Kabutz, Heinz; Once Upon an Oak . Artima. Truy cập ngày 29 tháng 4 năm 2007.
  26. ^ “JAVASOFT SHIPS JAVA 1.0”. Bản gốc lưu trữ ngày 10 tháng 3 năm 2007. Truy cập ngày 13 tháng 5 năm 2018.
  27. ^ Object-oriented Programming with Java: Essentials and Applications. Tata McGraw-Hill Education. tr. 34.
  28. ^ “JSG – Java Study Group”. open-std.org. Bản gốc lưu trữ ngày 25 tháng 8 năm 2006. Truy cập ngày 2 tháng 8 năm 2006.
  29. ^ “Why Java™ Was – Not – Standardized Twice” (PDF). Bản gốc (PDF) lưu trữ ngày 13 tháng 1 năm 2014. Truy cập ngày 3 tháng 6 năm 2018.
  30. ^ “What is ECMA—and why Microsoft cares”. Bản gốc lưu trữ ngày 6 tháng 5 năm 2014. Truy cập ngày 6 tháng 5 năm 2014.
  31. ^ “Java Community Process website”. Jcp.org. ngày 24 tháng 5 năm 2010. Bản gốc lưu trữ ngày 8 tháng 8 năm 2006. Truy cập ngày 9 tháng 6 năm 2010.
  32. ^ “JAVAONE: Sun – The bulk of Java is open sourced”. GrnLight.net. Bản gốc lưu trữ ngày 27 tháng 5 năm 2014. Truy cập ngày 26 tháng 5 năm 2014.
  33. ^
    “Oracle and Java”. oracle.com. Oracle Corporation. Truy cập ngày 23 tháng 8 năm 2010.

    Oracle has been a leading and substantive supporter of Java since its emergence in 1995 and takes on the new role as steward of Java technology with a relentless commitment to fostering a community of participation and transparency.

  34. ^ “Sun’s Evolving Role as Java Evangelist”. O’Reilly Media. Bản gốc lưu trữ ngày 15 tháng 9 năm 2010. Truy cập ngày 2 tháng 8 năm 2009.
  35. ^ “Oracle and Java”. oracle.com. Oracle Corporation. Bản gốc lưu trữ ngày 31 tháng 1 năm 2010. Truy cập ngày 23 tháng 8 năm 2010.

    Oracle has been a leading and substantive supporter of Java since its emergence in 1995 and takes on the new role as steward of Java technology with a relentless commitment to fostering a community of participation and transparency.

  36. ^ Gosling, James (ngày 9 tháng 4 năm 2010). “Time to move on…”. On a New Road. Bản gốc lưu trữ ngày 5 tháng 11 năm 2010. Truy cập ngày 16 tháng 11 năm 2011.
  37. ^ Topic, Dalibor. “Moving to a Plugin-Free Web”. Bản gốc lưu trữ ngày 16 tháng 3 năm 2016. Truy cập ngày 15 tháng 3 năm 2016.
  38. ^ “Learn About Java Technology”. Oracle. Bản gốc lưu trữ ngày 24 tháng 11 năm 2011. Truy cập ngày 21 tháng 11 năm 2011.
  39. ^ “1.2 Design Goals of the JavaTM Programming Language”. Java.sun.com. ngày 1 tháng 1 năm 1999. Truy cập ngày 9 tháng 6 năm 2010.
  40. ^ “JAVASOFT SHIPS JAVA 1.0”. Bản gốc lưu trữ ngày 10 tháng 3 năm 2007. Truy cập ngày 5 tháng 2 năm 2008.
  41. ^ Chander, Sharat. “Introducing Java SE 11”. oracle.com. Lưu trữ bản gốc ngày 26 tháng 9 năm 2018. Truy cập ngày 26 tháng 9 năm 2018.
  42. ^ “The Arrival of Java 15!”. Oracle. 15 tháng 9 năm 2020. Lưu trữ bản gốc ngày 16 tháng 9 năm 2020. Truy cập ngày 15 tháng 9 năm 2020.
  43. ^ “JDK 21”. openjdk.org. Lưu trữ bản gốc ngày 20 tháng 9 năm 2023. Truy cập ngày 20 tháng 9 năm 2023.
  44. ^ “Java Card Overview”. Oracle Technology Network. Oracle. Bản gốc lưu trữ ngày 7 tháng 1 năm 2015. Truy cập ngày 18 tháng 12 năm 2014.
  45. ^ “Java Platform, Micro Edition (Java ME)”. Oracle Technology Network. Oracle. Bản gốc lưu trữ ngày 4 tháng 1 năm 2015. Truy cập ngày 18 tháng 12 năm 2014.
  46. ^ “Java SE”. Oracle Technology Network. Oracle. Bản gốc lưu trữ ngày 24 tháng 12 năm 2014. Truy cập ngày 18 tháng 12 năm 2014.
  47. ^ “Java Platform, Enterprise Edition (Java EE)”. Oracle Technology Network. Oracle. Bản gốc lưu trữ ngày 17 tháng 12 năm 2014. Truy cập ngày 18 tháng 12 năm 2014.
  48. ^ “Is the JVM (Java Virtual Machine) platform dependent or platform independent? What is the advantage of using the JVM, and having Java be a translated language?”. Programmer Interview. Bản gốc lưu trữ ngày 19 tháng 1 năm 2015. Truy cập ngày 19 tháng 1 năm 2015.
  49. ^ Jelovic, Dejan. “Why Java will always be slower than C++”. Bản gốc lưu trữ ngày 11 tháng 2 năm 2008. Truy cập ngày 15 tháng 2 năm 2008.
  50. ^ Google. “Loop Recognition in C++/Java/Go/Scala” (PDF). Truy cập ngày 12 tháng 7 năm 2012.
  51. ^ “Symantec’s Just-In-Time Java Compiler To Be Integrated into Sun JDK 1.1”. Bản gốc lưu trữ ngày 28 tháng 6 năm 2010. Truy cập ngày 1 tháng 8 năm 2009.
  52. ^ Salcic, Zoran; Park, Heejong; Teich, Jürgen; Malik, Avinash; Nadeem, Muhammad (ngày 22 tháng 7 năm 2017). “Noc-HMP: A Heterogeneous Multicore Processor for Embedded Systems Designed in SystemJ”. ACM Transactions on Design Automation of Electronic Systems. 22 (4): 73. doi:10.1145/3073416. ISSN 1084-4309.
  53. ^ “NullPointerException”. Oracle. Bản gốc lưu trữ ngày 6 tháng 5 năm 2014. Truy cập ngày 6 tháng 5 năm 2014.
  54. ^ “Exceptions in Java”. Artima.com. Bản gốc lưu trữ ngày 21 tháng 1 năm 2009. Truy cập ngày 10 tháng 8 năm 2010.
  55. ^ “Java HotSpot™ Virtual Machine Performance Enhancements”. Oracle.com. Bản gốc lưu trữ ngày 29 tháng 5 năm 2017. Truy cập ngày 26 tháng 4 năm 2017.
  56. ^ “Java HotSpot VM Options”. Oracle.com. 7 tháng 9 năm 2010. Bản gốc lưu trữ ngày 6 tháng 3 năm 2011. Truy cập ngày 30 tháng 6 năm 2012.
  57. ^ “Garbage-First Collector”. docs.oracle.com. Bản gốc lưu trữ ngày 9 tháng 3 năm 2016. Truy cập ngày 15 tháng 3 năm 2016.
  58. ^ “Tiobe Index”. TIOBE. Truy cập ngày 21 tháng 1 năm 2020.

5, Java 9: Java Module system

Java Module system đem đến 3 lợi ích chính:

  • Chia nhỏ application thông qua Modular Java platform. Có thể hiểu Java bao gồm rất nhiều các thành phần và cấu trúc khác nhau giống như căn biệt thự khổng lồ. Không phải lúc nào cũng tận dụng được hết các phòng trong căn biệt thự đó, ta chỉ sử dụng những thứ mà ta cần, vừa tiết kiệm chi phí lại tiết kiệm cả thời gian.
  • Tăng tính encapsulation. Mặc dù là public class nhưng chỉ có thể truy cập được từ những package được chỉ định. Nghe có vẻ hay ho rồi đây.
  • Nếu triển khai code với Module system, JVM có thể detect missing module và shutdown application.

Thực tế mình cũng chưa thấy có dự án hoặc công ty nào sử dụng Modular Java platform để triển khai code base. Ngoài ra có rất nhiều thứ để nói về Java module, mình sẽ trình bày trong một bài khác.

JVM, JRE và JDK Trong Java: Bạn Biết Chọn Cái Nào Chưa? | Code Thu
JVM, JRE và JDK Trong Java: Bạn Biết Chọn Cái Nào Chưa? | Code Thu

Tìm hiểu về Java Se – Java Se là gì?

Java SE là viết tắt của Java Standard Edition

Java SE là viết tắt của Java Standard Edition. Khi được công bố, nó được gọi là Java 2 Platform Standard Edition (J2SE). Nhưng bây giờ nó được biết tới với cái tên ngắn gọn, dễ nhớ hơn đó là: Java Se.

JavaSE còn được gọi là Java Core. Nó là phiên bản cơ bản nhất của Java và được làm nền tảng cho các phiên bản khác cao hơn. Tuy vậy, Java SE cũng có rất nhiều ứng dụng thực tế. Bạn có thể lập trình phần mềm tiện ích hoặc game (miễn là thiết bị có hỗ trợ máy ảo Java). Nếu bạn muốn lập trình ứng dụng bằng Java Se thì bạn cần phải cài đặt JDK. Đây được hiểu như là bộ công cụ toàn năng dành cho các nhà phát triển phần mềm.

Như vậy bạn đã hiểu được java se là gì rồi phải không? Bây giờ hãy cùng CodeGym đi tìm hiểu những thành phần của nó nhé.

=> Giúp bạn không nhầm lẫn ngay từ khi bắt đầu, phân biệt rõ ràng và chi tiết Java Core với Java ngay tại đây.

3, Java 9: Stream API improvement

Java 9 đã bổ sung thêm 4 methods để tương tác với stream, trong đó có 2 instance methods và 2 static methods là:

Stream

takeWhile(Predicate

predicate); Stream

dropWhile(Predicate

predicate); static

Stream

iterate(T seed, Predicate

hasNext, UnaryOperator

next); static

Stream

ofNullable(T t);






3.1, Take while

Giống với tên gọi của nó, method takeWhile() trả về tất cả các element thỏa mãn điều kiện. Nghe thì có vẻ giống filter() nhưng có đôi chút khác biệt. Hãy chú ý vào chữ while(): có thể hiểu nôm na rằng sẽ duyệt stream từ đầu cho đến khi nào gặp element không thỏa mãn điều kiện thì sẽ dừng lại luôn.

Stream.of(1, 2, 3, 4, 1, 2, 3, 4) .filter(i -> i < 4) .forEach(System.out::print); Stream.of(1, 2, 3, 4, 1, 2, 3, 4) .takeWhile(i -> i < 4) .forEach(System.out::print);

Kết quả của dòng đầu tiên với filter() là

123123

. Với takeWhile() kết quả chỉ là

123

.

3.2, Drop while

Idea tương tự như takeWhile() tuy nhiên logic của nó sẽ là loại bỏ tất cả các element thỏa mãn điều kiện và dừng lại cho đến khi gặp phần tử không thỏa mãn.

Stream.of(2, 4, 6, 8, 9, 10, 12) .dropWhile(n -> n % 2 == 0) .forEach(System.out::print);

Dễ dàng đoán được kết quả là

91012

.

3.3, Iterate

Nếu muốn tạo ra một stream với element đầu tiên = 2, element sau gấp đôi element trước cho đến khi element cuối cùng < 30, có thể sử dụng iterate với Java 9 như sau:

IntStream.iterate(2, x -> x < 30, x -> 2 * x) .forEach(System.out::println);

3.4, Of nullable

Cuối cùng là ofNullable(), nó sẽ trả về stream chứa element đó nếu element not null, còn không sẽ trả về empty stream.

Stream.ofNullable(1).forEach(System.out::println); Stream.ofNullable(null).forEach(System.out::println);

Java Là Gì? Bạn Sẽ Bất Ngờ | Code Thu
Java Là Gì? Bạn Sẽ Bất Ngờ | Code Thu

8, Java 12: String API improvement

Tiếp tục là sự cải tiến cho String API ở JDK 12 với 2 methods:

  • indent()
  • transform()

8.1, indent()

Với indent() method, chuỗi ban đầu được split thành nhiều line giống method lines(), sau đó mỗi line được indent (thêm khoảng trắng) dựa trên giá trị truyền vào.

var input = “Hello\nWorld”; System.out.println(input); System.out.println(input.indent(2)); // Result Hello World Hello World

8.2, transform()

Không có gì phức tạp, transform() apply function lên string hiện tại để tạo ra một kết quả mới:

var result = “Hello”.transform(input -> input + ” world”); System.out.println(result); // Hello world

Finally

Với mỗi feature mình chỉ lấy ví dụ đơn giản để dễ hình dung nhất có thể.

Ngoài ra còn rất nhiều feature/tool khác hoặc cả những thứ đã bị loại bỏ mà chưa đề cập đến như:

  • Docker container support với -XX:-UseContainerSupport từ JDK 10.

  • CompactNumberFormat từ JDK 12.

  • Foreign Function & Memory API với JDK 17.

  • Packing tool với JDK 14.

  • JShell – Java REPL từ JDK 9.

  • Vector API từ JDK 16.

    _ Context-Specific deserialization filters từ JDK 17.

    _ Z GC từ JDK 15.

    … và rất rất nhiều những cải tiến khác.

Từ những thứ kể trên có thể thấy rằng bản release lần này chất lượng thật sự. Còn chần chừ gì mà không nâng cấp lên JDK 17 và trải nghiệm thôi.. à nhầm code thôi.

Say goodbye to Java 8 or even Java 11.

Nếu cần bí kíp ôn luyện OCPJP 11 II thì ping mình. Chỉ cần 2 tuần là có ngay tấm bằng trên tay post LinkedIn nhận job vài nghìn USD ầm ầm (vài nghìn một năm nhé, thời buổi này ai tính theo tháng nữa 🍺).

Nguồn : https://viblo.asia/p/tat-tan-tat-tu-jdk-8-den-jdk-17-3Q75w7795Wb

Tham khảo Lộ trình Java Full Stack dành cho người mới bắt đầu – tại đây

18.  for lồng nhau java - hướng dẫn chi tiết dễ hiểu java 2023
18. for lồng nhau java – hướng dẫn chi tiết dễ hiểu java 2023

4, Java 9: Collection factory

Từ Java 8 trở về trước, việc tạo một collection (List, Set, Map…) khá dài dòng:

List

values = new ArrayList<>(); values.add(“Hello”); values.add(“World”);

Vì lý do đó nên Google đã tung ra Guava collection giúp chúng ta thuận tiên hơn trong việc tạo ra một collection với cú pháp đơn giản:

List

values = ImmutableList.of(“Hello”, “World”);

May mắn thay, Oracle đã nhận ra sự bất tiện này và đưa chúng vào luôn Java 9. Vậy là từ giờ không cần thêm common lib bên ngoài nữa:

List

values = List.of(“Hello”, “World”);

Tính năng mới Java JDK 18: API Vector

API vectơ sẽ được ủ lần thứ ba trong JDK 18, trước đó đã được ủ trong JDK 16 và JDK 17 . Đề xuất này sẽ thể hiện các phép tính vectơ biên dịch tại thời điểm chạy thành các lệnh vectơ tối ưu trên các kiến trúc CPU được hỗ trợ, đạt được hiệu suất vượt trội so với các phép tính vô hướng tương đương.

Các hoạt động vectơ thể hiện mức độ song song cho phép thực hiện nhiều công việc hơn trên một chu kỳ CPU, do đó tạo ra những cải tiến hiệu suất đáng kể.

API vectơ bất khả trị nền tảng nhằm mục đích cung cấp cách viết các thuật toán phức tạp trong Java, sử dụng công cụ vẽ vectơ tự động HotSpot hiện có nhưng với mô hình người dùng giúp vectơ hóa dễ đoán hơn.

JDK 18 cũng sẽ hỗ trợ thêm cho phần mở rộng vectơ vô hướng ARMs nền tảng và cải thiện hiệu suất của các hoạt động vectơ chấp nhận mặt nạ trên các kiến trúc hỗ trợ tạo mặt nạ trong phần cứng.

Bài 18: Collection trong Java
Bài 18: Collection trong Java

Tính năng mới Java JDK 18: Code Snippets

Các đoạn mã trong tài liệu API Java , liên quan đến việc giới thiệu @snippetthẻ cho Tài liệu chuẩn của JavaDoc, để đơn giản hóa việc đưa mã nguồn mẫu vào tài liệu API.

Trong số các mục tiêu của kế hoạch là tạo điều kiện thuận lợi cho việc xác thực các đoạn mã nguồn bằng cách cung cấp quyền truy cập API vào các đoạn đó. Mặc dù tính đúng đắn là trách nhiệm của tác giả, hỗ trợ nâng cao trong JavaDoc và các công cụ liên quan có thể giúp bạn đạt được điều đó dễ dàng hơn.

Các mục tiêu khác bao gồm cho phép tạo kiểu hiện đại, chẳng hạn như đánh dấu cú pháp, cũng như liên kết tự động của tên với khai báo và cho phép hỗ trợ IDE tốt hơn để tạo và chỉnh sửa đoạn mã. Đề xuất lưu ý rằng các tác giả của tài liệu API thường bao gồm các đoạn mã nguồn trong các nhận xét tài liệu.

Kết luận:

T3H hy vọng bạn thấy bài viết này hữu ích. Nếu bạn biết bất kỳ câu hỏi nào về JDK18 nào, hãy cho chúng tôi biết trong phần bình luận bên dưới. Tham khảo thêm các khóa học lập trình tại T3H ngay hôm nay!

  • Tổng đài: (028) 7303 6066
  • Vào Quản lý

Một trong những từ khóa có tần suất tìm kiếm nhiều trên Google đó chính là Java. Nó được biết đến là một trong những ngôn ngữ lập trình “được lòng” người dùng nhất hiện nay. Để hiểu thêm về Java bạn hãy cùng chúng tôi đón đọc bài viết dưới đây.

Java là một ngôn ngữ lập trình dựa trên các lớp (class), hướng đối tượng (OOP), được thiết kế để để hoạt động trên nhiều nền tảng khác nhau như Windows, Mã, UNIX. Theo nhận xét của rất nhiều người thì Java rất mạnh mẽ, an toàn và đáng tin cậy. Các nhà lập trình sử dụng nó để phát triển các ứng dụng Java ở laptop, smartphone, bảng điều khiển trò chơi, trung tâm dữ liệu…

Java Platform là nền tảng cho phép các phần mềm, ứng dụng, chương trình được tạo nên bằng code Java vận hành. Nền tảng này sẽ gồm có các bộ phận: một công cụ thực thi, một trình biên dịch và một bộ thư viện. Người đầu tiên phát triển Java Platform là James Gosling, sau đó tập đoàn Oracle đã mua lại nó.

Có thể khẳng định rằng Java là ngôn ngữ có thể sử dụng để lập trình cho bất kỳ nền tảng nào. Đồng thời có thể dùng cho lập trình cả hướng đối tượng và sử dụng network-centric làm trung tâm. Bên cạnh đó nó còn được xem như một platform cho các hệ thống máy tính. Hầu hết các tổ chức đều sử dụng Java trong các dự án của họ bởi tính năng nhanh, mạnh, bảo mật cao.

Mặc dù nhiều ngôn ngữ lập trình mới, hiện đại xuất hiện nhưng Java vẫn luôn có chỗ đứng riêng. Kể từ năm 2000 cho đến nay Java được ứng dụng ở rất nhiều lĩnh vực, cụ thể:

Tên gọi ban đầu của Java là OAK. Khi vừa mới ra đời, nó được dùng để vận hành các ứng dụng di động và hộp giải mã tín hiệu. Thế nhưng thời điểm đó OAK đã gặp rất nhiều trở ngại và không đạt được mục tiêu đã đề ra.

Năm 1995,d OAK được đổi tên thành “Java” bởi Sun Microsystems. Năm 2009, Sun Microsystems đã thuộc sở hữu của Oracle. Tập đoàn này cũng sở hữu luôn cả Solaris, MySQL và Java.

Kể từ năm 1995 cho đến nay đã có nhiều phiên bản Java ra đời. Dưới đây là lịch sử tóm tắt tất cả các phiên bản Java và năm phát hành của nó:

Số lượng người dùng tăng lên mỗi ngày chứng tỏ ngôn ngữ Java sở hữu những thế mạnh vượt trội hơn những ngôn ngữ lập trình khác. Một số tính năng của Java có thể kể đến như:

Tương tự như những ngôn ngữ lập trình khác, Java cũng được tạo nên từ các thành phần quan trọng. Cụ thể gồm: bộ phát triển Java (JDK), máy ảo Java (JVM) và Môi trường thời gian chạy Java (JRE).

JDK là viết tắt của cụm từ Java Development Kit. Nó được biết đến là một bộ cung cấp môi trường để tạo ra các applets và ứng dụng Java. Nhà phát triển có thể sử dụng JDK trên các hệ điều hành như Windows, macOS, Solaris hoặc Linux để viết code hoặc phát triển, thực thi các chương trình Java. Trên một máy tính có thể cài đặt nhiều phiên bản JDK khác nhau.

Bộ phát triển Java được người dùng sử dụng bởi nó tích hợp nhiều điểm nổ bật, cụ thể:

JVM (máy ảo Java) là viết tắt của cụm từ Java Virtual Machine. Nó được xem là một công cụ cung cấp môi trường để code Java được thực thi. JVM chuyển đổi Java bytecode thành machine language. Ở các ngôn ngữ lập trình khác thì trình biên dịch sẽ tạo ra machine code cho một hệ thống cụ thể. Riêng với Java thì nó lại tạo ra code cho Virtual Machine (máy ảo) nên mới có tên gọi là Java Virtual Machine (JVM).

Java Virtual Machine (JVM) được sử dụng khá phổ biến bởi những lý do sau:

JRE là một là một phần mềm cần thiết để các chương trình Java chạy đúng cách. Nói như vậy có nghĩa là khi bạn muốn chạy chương trình Java bạn cần phải có JRE.

JRE là một trong ba thành phần mà nền tảng Java bắt buộc phải có. JRE có nhiều tính năng nổi bật, chẳng hạn như:

Ngôn ngữ lập trình Java bao gồm 4 loại nền tảng khác nhau:

JVM là một thành phần không thể thiếu của Java, quy trình hoạt động của nó trên các bộ vi xử lý và các hệ điều hành khác nhau diễn ra như sau:


System.out.println(1+2)và được lưu dưới dạng


file .java.

Tương tự như trình biên dịch C, Java không tạo ra code thực thi riêng cho từng máy cụ thể. Chỉ có một định dạng duy nhất được tạo ra đó là bytecode. Java sẽ thực thi mọi quy tắc được quy định trong virtual machine. Vì thế mà Java có thể vận hành trên mọi nền tảng. Tóm lại code Java chỉ cần viết 1 lần và chạy trên mọi hệ điều hành từ Windows đến Linux, Android.

Java là một ngôn ngữ lập trình mang lại vô số lợi ích cho người dùng nhất là với các doanh nghiệp. Hiện nay có rất nhiều ngôn ngữ lập trình xuất hiện nhưng Java vẫn chiếm được một vị trí lớn trong lĩnh vực công nghệ thông tin.

Nếu bạn có thắc mắc về Java hay muốn tìm hiểu về những ngôn ngữ lập trình khác, hãy để lại ở bên bình luận bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất.

P/s: Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ kiến thức về lập trình, quản trị mạng, website, domain, hosting, vps, server, email,… Chúc bạn thành công.

Mua Hosting tại BKHOST

Khuyến mãi giảm giá cực sâu, chỉ từ 5k/tháng. Đăng ký ngay hôm nay:

Java (ngôn ngữ lập trình)

Mẫu hình Mẫu hình lập trình
Thiết kế bởi James Gosling

Sun Microsystems

Nhà phát triển Oracle Corporation
Xuất hiện lần đầu 23 tháng 5 năm 1995[1]
Phiên bản ổn định

Java Standard Edition 21 / 19 tháng 9 năm 2023

Kiểm tra kiểu Tĩnh, mạnh, an toàn, kiểu danh định, hiển nhiên
Ngôn ngữ thực thi C và C++
Hệ điều hành Cross-platform (multi-platform)
Giấy phép GNU General Public License, Java Community Process
Phần mở rộng tên tập tin .java,.class,.jar
Trang mạng For Java Developers
Các bản triển khai lớn
OpenJDK và nhiều máy ảo Java
Phương ngữ
Generic Java, Pizza
Ảnh hưởng từ
CLU,[2] Simula67,[2] Lisp,[2] Smalltalk,[2] Ada 83, C++,[3] C#,[4] Eiffel,[5] Generic Java, Mesa,[6] Modula-3,[7] Oberon,[8] Objective-C,[9] UCSD Pascal,[10][11] Object Pascal[12]
Ảnh hưởng tới
Ada 2005, BeanShell, C#, Chapel,[13] Clojure, D, ECMAScript, Fantom, Gambas,[14] Groovy, Hack,[15] Haxe, J#, Kotlin, PHP, Python, Scala, Seed7, Vala, JavaScript, JS++

Java (phiên âm Tiếng Việt: “Gia-va”) là một ngôn ngữ lập trình hướng đối tượng, dựa trên lớp được thiết kế để có càng ít phụ thuộc thực thi càng tốt. Nó là ngôn ngữ lập trình có mục đích chung cho phép các nhà phát triển ứng dụng viết một lần, chạy ở mọi nơi (WORA),[16] nghĩa là mã Java đã biên dịch có thể chạy trên tất cả các nền tảng hỗ trợ Java mà không cần biên dịch lại.[17] Các ứng dụng Java thường được biên dịch thành bytecode có thể chạy trên bất kỳ máy ảo Java (JVM) nào bất kể kiến trúc máy tính bên dưới. Cú pháp của Java tương tự như C và C++, nhưng có ít cơ sở cấp thấp hơn các ngôn ngữ trên. Java runtime cung cấp các khả năng động (chẳng hạn như phản ánh và sửa đổi mã thời gian chạy) thường không có sẵn trong các ngôn ngữ biên dịch truyền thống. Tính đến năm 2019[cập nhật] Java là một trong những ngôn ngữ lập trình phổ biến nhất được sử dụng theo GitHub,[18][19] đặc biệt cho các ứng dụng web máy khách-máy chủ, với 9 triệu nhà phát triển đã được báo cáo.[20]

Java ban đầu được James Gosling tại Sun Microsystems (sau đó đã được Oracle mua lại) phát triển và được phát hành vào năm 1995 như một thành phần cốt lõi của nền tảng Java của Sun Microsystems. Các trình biên dịch Java, máy ảo và thư viện lớp thực thi gốc và tham chiếu ban đầu được Sun phát hành theo giấy phép độc quyền. Kể từ tháng 5 năm 2007, tuân theo các thông số kỹ thuật của Quy trình Cộng đồng Java, Sun đã cấp phép hầu hết các công nghệ Java của mình theo Giấy phép Công cộng GNU. Oracle cung cấp Máy ảo Java HotSpot của riêng mình, tuy nhiên việc triển khai tham chiếu chính thức là OpenJDK JVM, là phần mềm mã nguồn mở miễn phí và được hầu hết các nhà phát triển sử dụng và là JVM mặc định cho hầu hết các bản phân phối Linux.

Tính đến tháng 10 năm 2023, phiên bản mới nhất là Java 21, cũng là một phiên bản hỗ trợ dài hạn (LTS), được phát hành vào 19 tháng 9 năm 2023. Oracle phát hành bản cập nhật miễn phí cho công chúng với phiên bản kế thừa Java 8 LTS vào tháng 1 năm 2019 cho mục đích sử dụng thương mại, mặc dù nếu không nó sẽ vẫn hỗ trợ Java 8 với các bản cập nhật công khai cho mục đích sử dụng cá nhân vô thời hạn. Các nhà cung cấp khác đã bắt đầu cung cấp các bản miễn phí của OpenJDK 8 và 11 mà vẫn đang nhận được bảo mật và các nâng cấp khác.

Oracle (và những công ty khác) khuyên người dùng nên gỡ cài đặt các phiên bản Java đã lỗi thời vì những rủi ro nghiêm trọng do các vấn đề bảo mật chưa được giải quyết.[21] Vì Java 9, 10, 12, 13 và 14 không còn được hỗ trợ, Oracle khuyên người dùng nên chuyển ngay sang phiên bản mới nhất (hiện tại là Java 15) hoặc bản phát hành LTS.

JDK 18: Các tính năng mới trong Java 18

21/03/2022 07:27

Phiên bản mới của Java tiêu chuẩn sẽ có trong bản phát hành cuối cùng vào ngày 22 tháng 3 năm 2022, sẽ có chín tính năng mới. Cùng khám phá ngay những tính năng này trong bài viết dưới đây!

Bộ công cụ phát triển Java (JDK) 18 đã chuyển sang giai đoạn phát hành cuối cùng, kể từ ngày 24 tháng 2. Phiên bản mới của Java tiêu chuẩn sẽ có trong bản phát hành cuối cùng vào ngày 22 tháng 3 năm 2022, sẽ có chín tính năng mới. Cùng khám phá ngay những tính năng này trong bài viết dưới đây!

Java - Bài 18: Mảng một chiều
Java – Bài 18: Mảng một chiều

Tính năng mới Java JDK 18: Simple web server

Với đề xuất máy chủ web đơn giản , một công cụ dòng lệnh sẽ được cung cấp để khởi động một máy chủ web tối thiểu chỉ phục vụ các tệp tĩnh. Không có CGI hoặc chức năng giống như servlet nào. Công cụ này sẽ hữu ích cho việc tạo mẫu, mã hóa đặc biệt và thử nghiệm, đặc biệt là trong các bối cảnh giáo dục.

Các mục tiêu của kế hoạch bao gồm cung cấp máy chủ tệp HTTP tĩnh ngoài hộp với thiết lập dễ dàng và chức năng tối thiểu, giảm năng lượng kích hoạt của nhà phát triển và làm cho JDK dễ tiếp cận hơn và cung cấp triển khai mặc định thông qua dòng lệnh cùng với một API nhỏ để tạo và tùy chỉnh có lập trình. Cung cấp một máy chủ giàu tính năng hoặc cấp thương mại không phải là mục tiêu của đề xuất.

Các lớp đặc biệt[sửa | sửa mã nguồn]

Applet[sửa | sửa mã nguồn]

Java applet là các chương trình được nhúng vào trong các ứng dụng khác, thường là trong một trang web hiển thị trong trình duyệt web. API của Java applet hiện không còn được dùng nữa kể từ ngày 9 tháng 1 năm 2017.

Servlet[sửa | sửa mã nguồn]

Công nghệ Java servlet cung cấp cho các nhà phát triển Web một cơ chế nhất quán, đơn giản để mở rộng chức năng của máy chủ Web và để truy cập các hệ thống kinh doanh hiện có. Servlet là các thành phần Java EE phía máy chủ tạo ra các phản hồi (thường là các trang HTML) cho các yêu cầu (thường là các yêu cầu HTTP) từ máy khách.

Ở một mức độ nào đó, API của Java servlet đã được thay thế bởi hai công nghệ Java cho dịch vụ web:

  • Java API cho RESTful Web Services (JAX-RS 2.0) hữu ích cho AJAX, JSON và dịch vụ REST, và
  • Java API cho XML Web Services (JAX-WS) hữu ích cho dịch vụ web SOAP.
Java 60. Giới thiệu về Java Collections trong lập trình Java
Java 60. Giới thiệu về Java Collections trong lập trình Java

Hệ thống thực thi[sửa | sửa mã nguồn]

Java JVM và bytecode[sửa | sửa mã nguồn]

Một mục tiêu thiết kế của Java là tính di động, có nghĩa là các chương trình được viết cho nền tảng Java phải chạy tương tự nhau trên bất kỳ sự kết hợp nào giữa phần cứng và hệ điều hành với hỗ trợ thời gian chạy thích hợp. Điều này đạt được bằng cách biên dịch mã ngôn ngữ Java sang một đại diện trung gian được gọi là Java bytecode, thay vì trực tiếp tới mã máy cụ thể về kiến trúc. Các lệnh mã bytecode trong Java tương tự như mã máy, nhưng chúng được thiết kế để thực thi bởi một máy ảo (VM) được viết riêng cho phần cứng máy chủ. Người dùng cuối thường sử dụng Java Runtime Environment (JRE) được cài đặt trên máy của họ cho các ứng dụng Java độc lập hoặc trong trình duyệt web cho các ứng dụng Java.

Các thư viện tiêu chuẩn cung cấp một cách chung để truy cập các tính năng dành riêng cho máy chủ như đồ họa, phân luồng và mạng.

Việc sử dụng bytecode phổ biến làm cho việc chuyển cổng trở nên đơn giản. Tuy nhiên, chi phí của việc thông dịch bytecode thành các lệnh máy làm cho các chương trình được thông dịch hầu như luôn chạy chậm hơn các chương trình thực thi gốc. Các trình biên dịch Just-in-time (JIT) biên dịch mã byte thành mã máy trong thời gian chạy đã được giới thiệu từ giai đoạn đầu. Bản thân Java độc lập với nền tảng và được điều chỉnh cho phù hợp với nền tảng cụ thể mà máy ảo Java (JVM) chạy trên nó, máy này sẽ dịch mã bytecode của Java sang ngôn ngữ máy của nền tảng.[48]

Hiệu suất[sửa | sửa mã nguồn]

Các chương trình được viết bằng Java nổi tiếng là chậm hơn và đòi hỏi nhiều bộ nhớ hơn các chương trình được viết bằng C++.[49][50] Tuy nhiên, tốc độ thực thi của các chương trình Java được cải thiện đáng kể với sự ra đời của tính năng biên dịch đúng lúc vào năm 1997/1998 cho Java 1.1,[51] việc bổ sung các tính năng ngôn ngữ hỗ trợ phân tích mã tốt hơn (chẳng hạn như các lớp bên trong, lớp StringBuilder, các xác nhận tùy chọn, v.v.) và tối ưu hóa trong máy ảo Java, chẳng hạn như HotSpot trở thành mặc định cho JVM của Sun vào năm 2000. Với Java 1.5, hiệu suất đã được cải thiện với việc bổ sung gói java.util.concurrent, bao gồm khóa các triển khai miễn phí của ConcurrentMaps và các bộ sưu tập đa lõi khác và nó đã được cải thiện hơn nữa với Java 1.6.

Không JVM[sửa | sửa mã nguồn]

Một số nền tảng cung cấp hỗ trợ phần cứng trực tiếp cho Java; có những bộ điều khiển vi mô có thể chạy Java bytecode trong phần cứng thay vì máy ảo Java phần mềm,[52] và một số bộ xử lý dựa trên ARM có thể có hỗ trợ phần cứng để thực thi Java bytecode thông qua tùy chọn Jazelle của chúng, mặc dù hỗ trợ hầu hết đã bị loại bỏ trong các triển khai hiện tại của ARM.

Quản lý bộ nhớ tự động[sửa | sửa mã nguồn]

Java sử dụng bộ thu gom rác tự động (AGC) để quản lý bộ nhớ trong vòng đời đối tượng. Lập trình viên xác định thời điểm các đối tượng được tạo và thời gian chạy Java chịu trách nhiệm khôi phục bộ nhớ khi các đối tượng không còn được sử dụng. Khi không còn tham chiếu đến một đối tượng, bộ nhớ không thể truy cập sẽ đủ điều kiện để được giải phóng tự động bởi bộ thu gom rác. Một cái gì đó tương tự như rò rỉ bộ nhớ vẫn có thể xảy ra nếu mã của lập trình viên giữ một tham chiếu đến một đối tượng không còn cần thiết, thường là khi các đối tượng không còn cần thiết được lưu trữ trong các bộ chứa vẫn đang được sử dụng. Nếu các phương thức cho một đối tượng không tồn tại được gọi, một ngoại lệ con trỏ null sẽ được đưa ra.[53][54]

Một trong những ý tưởng đằng sau mô hình quản lý bộ nhớ tự động của Java là các lập trình viên có thể không phải chịu gánh nặng khi phải thực hiện quản lý bộ nhớ thủ công. Trong một số ngôn ngữ, bộ nhớ để tạo các đối tượng được cấp phát ngầm trên ngăn xếp hoặc được cấp phát và phân bổ rõ ràng từ heap. Trong trường hợp thứ hai, trách nhiệm quản lý bộ nhớ thuộc về lập trình viên. Nếu chương trình không phân bổ một đối tượng, một rò rỉ bộ nhớ sẽ xảy ra. Nếu chương trình cố gắng truy cập hoặc phân bổ bộ nhớ đã được phân bổ, kết quả là không xác định và khó dự đoán, và chương trình có thể trở nên không ổn định hoặc gặp sự cố. Điều này có thể được khắc phục một phần bằng cách sử dụng các con trỏ thông minh, nhưng chúng làm tăng thêm chi phí và sự phức tạp. Lưu ý rằng việc thu gom rác không ngăn chặn rò rỉ bộ nhớ logic, tức là những nơi bộ nhớ vẫn được tham chiếu nhưng không bao giờ được sử dụng.

Việc thu gom rác có thể xảy ra bất cứ lúc nào. Lý tưởng nhất, nó sẽ xảy ra khi một chương trình không hoạt động. Nó được đảm bảo sẽ được kích hoạt nếu không có đủ bộ nhớ trống trên heap để cấp phát một đối tượng mới; điều này có thể khiến một chương trình bị dừng trong giây lát. Không thể quản lý bộ nhớ rõ ràng trong Java.

Java không hỗ trợ số học con trỏ kiểu C/C++, trong đó địa chỉ đối tượng có thể được thao tác số học (ví dụ: bằng cách thêm hoặc trừ một phần bù). Điều này cho phép bộ thu gom rác di chuyển các đối tượng được tham chiếu và đảm bảo an toàn và bảo mật kiểu.

Giống như trong C++ và một số ngôn ngữ hướng đối tượng khác, các biến của kiểu dữ liệu nguyên thủy của Java hoặc được lưu trữ trực tiếp trong các trường (đối với các đối tượng) hoặc trên ngăn xếp (đối với các phương thức) chứ không phải trên heap, điều này thường đúng đối với dữ liệu không nguyên thủy các loại (nhưng hãy xem phân tích thoát). Đây là một quyết định có ý thức của các nhà thiết kế của Java vì lý do hiệu suất.

Java chứa nhiều loại trình thu gom rác. Theo mặc định, HotSpot sử dụng bộ thu gom rác quét song song.[55] Tuy nhiên, cũng có một số trình thu gom rác khác có thể được sử dụng để quản lý đống rác. Đối với 90% ứng dụng trong Java, bộ thu gom rác đồng thời Mark-Sweep (CMS) là đủ.[56] Oracle đặt mục tiêu thay thế CMS bằng Garbage-First Collector (G1).[57]

Giải quyết được vấn đề quản lý bộ nhớ không giúp lập trình viên bớt gánh nặng xử lý đúng cách các loại tài nguyên khác, như kết nối mạng hoặc cơ sở dữ liệu, xử lý tệp, v.v., đặc biệt là khi có lỗi.

Tính năng mới Java JDK 18:Pattern Matching for Switch

Bản xem trước thứ hai về đối sánh mẫu cho switch , trong đó ngôn ngữ Java sẽ được cải tiến với đối sánh mẫu cho các switch biểu thức và câu lệnh, cùng với các phần mở rộng cho ngôn ngữ của các mẫu. Điều này đã được xem trước trong JDK 17 . Mở rộng đối sánh mẫu để switch cho phép một biểu thức được kiểm tra dựa trên một số mẫu, mỗi mẫu có một hành động cụ thể, do đó, các truy vấn hướng dữ liệu phức tạp có thể được thể hiện một cách ngắn gọn và an toàn.

>>> Đọc thêm: 5 câu hỏi phỏng vấn quan trọng về Java Multithreading

17.7 giải bài tập java 18 break, continue trong java -tự học lập trình java chi tiết nhất
17.7 giải bài tập java 18 break, continue trong java -tự học lập trình java chi tiết nhất

12, Java 16: Pattern matching for instanceof

Nếu muốn check một object có type là String không và assign nó sang biến mới để sử dụng ta làm như sau:

Object object = “”; if (object instanceof String) { var string = (String) object; System.out.println(string); }

Để đơn giản hóa quá trình này, Java 16 cung cấp pattern matching cho

instanceof

với cách sử dụng mới như sau:

Object object = “”; if (object instanceof String string) { System.out.println(string); }

Các thành phần quan trọng nhất của Java SE

Trong Java Se, có 2 thành phần quan trọng mà chúng ta cần nhắc đến. Đó là: JRE – Java SE Runtime Environment và JDK – Java Development Kit.

Java Development Kit là gì?

JDK là công nghệ cốt lõi được sử dụng trong lập trình Java

Java Development Kit (JDK) là một trong ba gói công nghệ cốt lõi được sử dụng trong lập trình Java, cùng với JVM (Máy ảo Java – Java Virtual Machine) và JRE (Java Runtime Environment – Môi trường Java Runtime). Việc phân biệt 3 công nghệ này và hiểu được cách cách chúng kết nối với nhau là việc rất quan trọng. Chúng ta có thể phân biệt nhanh chúng bằng những đặc điểm cơ bản, dễ nhận thấy sau:

– JVM là công nghệ Java nền tảng để hỗ trợ chạy các chương trình.

– JRE là phần on-disk của Java, chúng góp phần tạo ra JVM.

– JDK là công nghệ tạo các chương trình Java. Các chương trình đó có thể được JVM và JRE xử lý và khởi chạy.

Khi mới sử dụng, các developer đôi khi vẫn nhầm lẫn JDK với JRE. Để phân biệt, ta cần nhớ rằng JDK là một gói các công cụ phát triển phần mềm dựa trên Java, trong khi JRE là gói công cụ sử dụng để chạy Java code.

Trong một vài chương trình, JRE có thể chạy các chương trình Java hoàn toàn độc lập. Dù vậy, JRE vẫn luôn được biết rõ là một phần của JDK. Bởi vì bộ công cụ JRE là một phần của JDK và liên quan trực tiếp đến việc phát triển chúng.

Các gói trong JDK

Sau khi đã chọn phiên bản Java phù hợp với mình, bước tiếp theo là bạn cần chọn được gói Java muốn sử dụng. Các gói ở đây là các JDK dành cho các kiểu phát triển khác nhau. 3 gói có sẵn thường được sử dụng là: Java EE – Java Enterprise Edition, Java SE – Java Standard Edition và Java ME – Java Mobile Edition.

Chọn gói JDK phù hợp với phiên bản của bạn

Thông thường trong một phiên bản JDK bất kỳ sẽ chứa Java SE. Nếu bạn tải xuống Java EE hoặc Java ME, bạn đã có một phiên bản Java SE tiêu chuẩn. Ví dụ, Java EE là nền tảng tiêu chuẩn với các công cụ bổ trợ tiện ích cho phát triển ứng dụng doanh nghiệp như Enterprise JavaBeans hay hỗ trợ cho Object Relational Mapping.

Việc chuyển đổi từ JDK này sang JDK khác cũng không quá khó khăn. Vì vậy, bạn hãy yên tâm và không cần quá lo lắng về việc mình chọn sai phiên bản JDK đâu.

Phiên bản JDK tương thích

Bởi vì JDK cung cấp trình biên dịch cho các chương trình Java, nên JDK bạn sử dụng sẽ xác định phiên bản Java nào bạn có thể mã hóa. Ví dụ: nếu bạn muốn sử dụng chức năng trong Java 8 thì bạn sẽ cần phiên bản JDK Java 8 để biên dịch. Nếu bạn chọn các phiên bản khác, các lệnh bạn gửi đi sẽ bị từ chối với lỗi cú pháp.

Java Runtime Environment (JRE)

Với JRE – Java Runtime Environment

Với JRE – Java Runtime Environment, cái tên của nó cũng đã nói lên những cái nó có.

Cụ thể, JRE cung cấp các thư viện, Virtual Machine (máy ảo) và các thành phần khác để chạy các applet và các ứng dụng được viết bằng ngôn ngữ lập trình Java. Hai công nghệ triển khai chính những chương trình này là một phần của JRE: Java Plugin, cho phép các applet chạy trong các trình duyệt phổ biến và Java Web Start, triển khai các ứng dụng độc lập qua mạng.

Nó cũng là nền tảng để phát triển các công nghệ Java 2 Platform, Enterprise Edition (J2EE) để phát triển và triển khai phần mềm doanh nghiệp.

Tuy nhiên, trong JRE không chứa các tiện ích và công cụ như trình biên dịch hoặc trình gỡ lỗi để phát triển các applets và ứng dụng.

Thành thạo ngôn ngữ lập trình Java (bao gồm Java Se), trở thành lập trình viên trong 6 tháng: tại đây.

Static Trong Java: Những gì thuộc về Lớp | Code Thu
Static Trong Java: Những gì thuộc về Lớp | Code Thu

tóm lại

Trong ngắn hạn, có Java 18 và của bất kỳ phiên bản trước hoặc phiên bản tiếp theo nào liên quan đến gói gốc của một trong những ngôn ngữ lập trình tốt nhất và nền tảng phát triển số một trên thế giới trên các Distro Debian ổn định của chúng tôi đều không phức tạp. Và trong trường hợp tốt nhất, nó luôn được khuyến khích sử dụng phiên bản mở và miễn phí có tên OpenJDK, tương tự như vậy được phát triển cùng với Oracle.

Chúng tôi hy vọng rằng ấn phẩm này rất hữu ích cho toàn bộ

«Comunidad de Software Libre, Código Abierto y GNU/Linux»

. Và đừng quên bình luận về nó bên dưới, và chia sẻ nó với những người khác trên các trang web, kênh, nhóm hoặc cộng đồng mạng xã hội hoặc hệ thống nhắn tin yêu thích của bạn. Cuối cùng, hãy truy cập trang chủ của chúng tôi tại «FromLinux» để khám phá thêm tin tức và tham gia kênh chính thức của chúng tôi về Telegram từ FromLinux, Hướng Tây nhóm để biết thêm thông tin về chủ đề này.

Java là một ngôn ngữ lập trình hướng đối tượng (object-oriented), dựa trên lớp (class-based), có mục đích chung, được thiết kế để giảm bớt sự phụ thuộc triển khai. Nó là một nền tảng điện toán (computing platform) phục vụ cho việc phát triển ứng dụng.

Nó được đánh giá là một trong những ngôn ngữ lập trình nhanh, an toàn và đáng tin cậy được hầu hết các tổ chức ưa thích để xây dựng các dự án của họ.

Java được sử dụng rộng rãi để phát triển các ứng dụng Java trong máy tính xách tay, trung tâm dữ liệu, game consoles, siêu máy tính khoa học, thiết bị di động,…

Dừng lại chút nào, nếu bạn đang #open_to_work, thử nghía qua các công việc đang tuyển trên Gamba nhé. Vào LINK NÀY để xem các job Data hoặc scan QR Code ở bên dưới nhé.

Nền tảng Java là một tập hợp các chương trình giúp lập trình viên phát triển và chạy các ứng dụng lập trình Java một cách hiệu quả.

Nó bao gồm một công cụ thực thi (execution engine), một trình biên dịch (complier) và một bộ thư viện trong đó.

Nó là một tập hợp các thông số kỹ thuật và phần mềm máy tính.

James Gosling đã phát triển nền tảng Java tại Sun Microsystems và Tập đoàn Oracle sau đó đã mua lại nó.

Dưới đây là một số ứng dụng quan trọng của Java:

Dưới đây là những dấu mốc quan trọng trong lịch sử của ngôn ngữ Java:

Dưới đây là lịch sử tóm tắt của tất cả các phiên bản Java với ngày phát hành của nó.

Ngày phát hành phiên bản:

Java cung cấp nhiều tính năng hấp dẫn:

Lập trình viên Java viết một chương trình bằng ngôn ngữ mà con người có thể đọc được gọi là Mã nguồn (Source Code).

Vì vậy, CPU hoặc Chip không bao giờ hiểu được mã nguồn được viết bằng bất kỳ ngôn ngữ lập trình nào.

Những máy tính hoặc chip này chỉ hiểu được một thứ, nó gọi là ngôn ngữ máy hoặc mã máy (machine code). Các mã máy này chạy ở cấp độ CPU. Do đó, với model CPU khác nhau thì mã máy sẽ khác nhau.

Tuy nhiên, bạn không cần bận tâm tới mã máy, vì lập trình chủ yếu là về mã nguồn. Máy sẽ hiểu mã nguồn này và chuyển chúng thành mã máy có thể hiểu được, tức là mã thực thi.

Tất cả các chức năng này xảy ra bên trong 3 thành phần nền tảng Java sau:

JDK là một môi trường phát triển phần mềm được sử dụng để tạo các ứng dụng applet và Java. Dạng đầy đủ của JDK là Java Developement Kit (Bộ công cụ phát triển Java).

Các nhà phát triển Java có thể sử dụng JDK trên Windows, macOS, Solaris và Linux. JDK giúp họ viết code và chạy các chương trình Java. Có thể cài đặt nhiều phiên bản JDK trên cùng một máy tính.

Đây là những lý do chính để sử dụng JDK:

Máy ảo Java (JVM – Java Virtual Machine) là một công cụ cung cấp môi trường runtime để chạy code hoặc ứng dụng Java.

Nó chuyển đổi Java bytecode thành ngôn ngữ máy. JVM là một phần của JRE (Java Run Environment).

Ở những ngôn ngữ lập trình khác, trình biên dịch tạo ra mã máy cho một hệ thống cụ thể. Còn trình biên dịch Java thì tạo ra mã cho Máy ảo được gọi là Máy ảo Java.

Dưới đây là những lý do quan trọng của việc sử dụng JVM:

JRE (Java Run Environment) là một phần của phần mềm được thiết kế để chạy phần mềm khác. Nó bao gồm các thư viện lớp (class library), bộ nạp lớp (class loader) và JVM.

Nói một cách dễ hiểu, nếu bạn muốn chạy một chương trình Java, bạn cần có JRE. Nếu bạn không phải là lập trình viên, bạn không cần cài đặt JDK mà chỉ cần JRE để chạy các chương trình Java.

Dưới đây là những lý do chính của việc sử dụng JRE:

Có bốn loại nền tảng ngôn ngữ lập trình Java khác nhau:

API của Java SE cung cấp chức năng lõi của ngôn ngữ lập trình Java. Nó xác định tất cả các nền tảng về kiểu và đối tượng cho các lớp cấp cao.

Nó được sử dụng để kết nối mạng, bảo mật, truy cập cơ sở dữ liệu, phát triển giao diện người dùng đồ họa (GUI) và phân tích cú pháp XML.

Nền tảng Java EE cung cấp API và môi trường runtime để phát triển và chạy các ứng dụng mạng có khả năng mở rộng cao, quy mô lớn, nhiều tầng, đáng tin cậy và an toàn.

Nền tảng Java ME cung cấp một API và một máy ảo kích thước nhỏ chạy các ứng dụng ngôn ngữ lập trình Java trên các thiết bị nhỏ, như điện thoại di động.

JavaFX là một nền tảng để phát triển các ứng dụng internet phong phú bằng cách sử dụng API giao diện người dùng nhẹ.

Nó sử dụng các media engine và đồ họa tối ưu phần cứng giúp cho Java tận dụng các máy khách hiệu suất cao và các API giao diện hiện đại, cấp cao để kết nối với các nguồn dữ liệu được kết nối.

Nguồn: guru99

JDK là gì? JDK và JRE khác nhau chỗ nào

Bài đăng này đã không được cập nhật trong 4 năm

Để có thể tự học lập trình dễ dàng thì bạn không thể bỏ qua khái niệm JDK. Tìm hiểu sơ qua về JDK nhé các bạn. JRE, JDK, Java khác nhau chỗ nào? JDK là dùng cho mục đích phát triển (lập trình, debug), nếu bạn chỉ cần chạy chương trình Java thì không nhất thiết phải cài JDK mà chỉ cần cài JRE.

7, Java 11: String API improvement

7.1, isBlank()

Nếu trước đây để check một string có blank hay không ta cần sử dụng 2 method là trim() và isEmpty() thì nay đã có isBlank().

boolean result = ” “.trim().isEmpty(); boolean result = ” “.isBlank();

7.2, repeat()

Giống tên gọi của nó, method này thực hiện nối chuỗi với chính nó theo số lần chỉ định.

var string = “repeat “; System.out.print(string.repeat(3)); // repeat repeat repeat

7.3) strip()

Method này thực hiện bỏ tất cả những khoảng trắng ở đầu và cuối string, giống như những gì trim() đang làm. Sự khác biệt đó là strip() xịn xò hơn trim() do sử dụng cách thức định nghĩa khoảng trắng xịn sò hơn, nhờ đó đem lại tốc độ tốt hơn và fix một bug đang tồn tại với trim().

7.4 lines()

Cuối cùng là lines(), method này giúp chúng ta chia string thành stream of lines phân cách nhau bằng

\n

:

“hello\nworld”.lines().forEach(System.out::println); // hello // world

15 Tính Năng Độc Quyền Chỉ Có Trong Minecraft Bedrock Edition
15 Tính Năng Độc Quyền Chỉ Có Trong Minecraft Bedrock Edition

2, Java 9: CompletableFuture API improvement

CompletableFuture đã xuất hiện từ Java 8. Tuy nhiên, Oracle bổ sung thêm 4 method trong Java 9 liên quan đến delay và timeout để support cho việc lập trình bất đồng bộ dễ dàng hơn.

Với delay là 2 method:

static Executor delayedExecutor(long delay, TimeUnit unit); static Executor delayedExecutor(long delay, TimeUnit unit, Executor executor);

Method đầu tiên trả về executor sẽ thực thi task mà chúng ta submit sau một khoảng thời gian delay time.

Method thứ hai cần truyền thêm executor và chính executor đó sẽ thực thi task sau delay time.

Có thể chạy đoạn code sau để hiểu thêm về nó nhé:

public static void main(String[] args) throws InterruptedException { var future = new CompletableFuture<>(); var delayExecutor = CompletableFuture.delayedExecutor(3, TimeUnit.SECONDS); future.completeAsync(() -> { System.out.println(“Processing data”); return “process success”; }, delayExecutor) .thenAccept(r -> System.out.println(“Result: ” + r)); for (int i = 1; i <= 5; i++) { Thread.sleep(1000); System.out.println(“Running outside… ” + i + ” s”); } }

Tiếp theo cùng đến với 2 method timeout:

CompletableFuture

orTimeout(long timeout, TimeUnit unit); CompletableFuture

completeOnTimeout(T value, long timeout, TimeUnit unit);

Giống với tên gọi của nó, method đầu tiên support việc throw exception nếu process time quá khoảng thời gian chỉ định. Method thứ hai thay vì throw exception sẽ trả về giá trị default value.

Thực hiện run code dưới đây để hiểu thêm nếu cần.

public static void main(String[] args) throws Exception { var task = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return “Finish”; }); BiConsumer

onComplete = (result, error) -> { if (error == null) { System.out.println(“The result is: ” + result); return; } System.out.println(“Time is over”); }; var future = task .orTimeout(3, TimeUnit.SECONDS) .whenComplete(onComplete); var content = future.get(); System.out.println(“Result: ” + content); }

14, JDK 17: Sealed class

Vẫn là nhu cầu tăng tính encapsulation. Java đã mạnh OOP nay càng mạnh hơn.

Thực tế khi implement, sẽ có những lúc ta muốn class A chỉ được phép extends bởi class B và C. Một cách để có thể triển khai đó là đặt cả 3 class vào chung package để để class A có level access modifier là package. Tuy nhiên sẽ có những trường hợp không muốn đặt chung như vậy.. nhưng vẫn phải làm như vậy.

Sealed class sẽ giúp chúng ta xử lý vấn đề này.

sealed interface Runnable permits Dog { void run(); } final class Dog implements Runnable { public void run() { } }

Sử dụng keyword sealed để thông báo đây là một class/interface giới hạn, chỉ được phép extend bởi class Dog. Nếu tạo một class khác implement interface Runnable sẽ báo lỗi.

Nếu học Lập Trình lại từ đâu, mình sẽ học như thế nào?
Nếu học Lập Trình lại từ đâu, mình sẽ học như thế nào?

Ứng dụng của Java SE – Học Java SE thì làm gì?

Các ứng dụng thực tế của Java Se

Khi mới bắt đầu, có thể do các khái niệm quá nhiều và còn có đôi chút giống nhau nên bạn sẽ khó phân biệt. Nhưng bạn cứ yên tâm, khi bắt đầu vào học, bạn có những trải nghiệm thực thế thì bạn sẽ hiểu ra ngay thôi.

Học Java SE thì bạn sẽ lập trình được phần mềm Java chạy trên mọi nền tảng như máy Mac OS, Linux hay Windows là đều dễ dàng chỉ cần viết code một lần.

Java chạy trên máy ảo Java (JVM) và sẽ thực hiện nhiệm vụ giao tiếp với các nền tảng ngay trên máy ảo. Tính bảo mật của Java khá an toàn, bạn sẽ chỉ cần chạy một lần vì tính bảo mật của nó là như nhau trên các nền tảng.

Tính năng mới Java JDK 18: JEP 400

Chỉ định UTF-8 làm bộ ký tự mặc định của các API Java tiêu chuẩn. UTF-8 là một mã hóa ký tự có độ rộng thay đổi cho giao tiếp điện tử và được coi là bộ ký tự tiêu chuẩn của web. Charset là mã hóa ký tự có khả năng mã hóa tất cả các ký tự trên web.

Thông qua thay đổi này, các API phụ thuộc vào bộ ký tự mặc định sẽ hoạt động nhất quán trên tất cả các triển khai, hệ điều hành, ngôn ngữ và cấu hình. Đề xuất không nhằm xác định các API mới theo tiêu chuẩn Java hoặc JDK cụ thể.

Những người ủng hộ đề xuất hy vọng rằng các ứng dụng trong nhiều môi trường sẽ không bị ảnh hưởng bởi sự lựa chọn UTF-8 của Java, vì MacOS, nhiều bản phân phối Linux và nhiều ứng dụng máy chủ đã hỗ trợ UTF-8. Tuy nhiên, có rủi ro trong các môi trường khác, rõ ràng nhất là các ứng dụng phụ thuộc vào bộ mã mặc định sẽ hoạt động không chính xác khi xử lý dữ liệu được tạo ra khi bộ mã mặc định không được chỉ định.

Tham nhũng dữ liệu có thể âm thầm xảy ra. Tác động chính dự kiến sẽ rơi vào người dùng hệ thống Windows ở ngôn ngữ châu Á và có thể là một số môi trường máy chủ ở châu Á và các ngôn ngữ khác.

Redis là gì? Bài học này đủ để bắt đầu | Là một Backend bạn đã từng gặp những trường hợp này chưa?
Redis là gì? Bài học này đủ để bắt đầu | Là một Backend bạn đã từng gặp những trường hợp này chưa?

JDK, JRE, Java, Java Virtual Machine và Java Compiler có gì khác nhau?

JDK = JRE + Các công cụ hỗ trợ phát triển ứng dụng Java compiler là một trong số các công cụ hỗ trợ phát triển ứng dụng của JDK. Java compiler được sử dụng để biên soạn các tập tin Java (đuôi .java) để tạo ra tập tin .class tương ứng.

Các gói JDK

Sau khi chọn phiên bản Java, bạn cũng sẽ cần chọn gói Java muốn sử dụng. Các gói là các Java Development Kit dành cho các kiểu phát triển khác nhau. Các gói có sẵn là Java Enterprise Edition (Java EE), Java Standard Edition (Java SE) và Java Mobile Edition (Java ME).

JVM (Java Virtual Machine): là máy ảo Java. Nó được dùng để thực thi các chương trình Java.

Mỗi nền tảng/hệ điều hành khác nhau (Windows, IOS, Linux…) lại có một loại JVM khác nhau. Hiểu nôm na thì các chương trình Java của các bạn chạy trên JVM. Nói Java đa nền tảng, thực chất thì nó được hỗ trợ JVM trên nhiều nền tảng. Chương trình Java chạy được trên Window/Linux/IOS vì nó có JVM chạy được trên các nền tảng đó.

Thông thường, một phiên bản JDK sẽ chứa Java SE. Nếu bạn tải xuống Java EE hoặc Java ME, bạn sẽ có một phiên bản Java SE tiêu chuẩn. Ví dụ, Java EE là nền tảng tiêu chuẩn với các công cụ bổ trợ tiện ích cho phát triển ứng dụng doanh nghiệp như Enterprise JavaBeans hay hỗ trợ cho Object Relational Mapping.

Việc chuyển đổi từ JDK này sang JDK cũng không có gì khó khăn. Vì vậy, bạn không cần phải quá lo lắng về việc chọn đúng phiên bản và gói JDK ngay từ đầu.

Đọc thêm: Download java jdk

JDK trong câu lệnh

Cài đặt JDK và JRE sẽ thêm lệnh java vào command của bạn. Bạn có thể xác minh bằng cách mở command shell và gõ java -version, bạn sẽ nhận được phiên bản Java vừa cài đặt. (Trong một số trường hợp, bạn sẽ phải khởi động lại hệ thống để nhận các thay đổi). Ngoài ra. bạn cũng sẽ cần javac này để biên dịch các tệp Java của bạn.

Lệnh javac

Lệnh javac nằm trong thư mục “/jdk”, nhưng sẽ không được tự động thêm vào path của hệ thống trong khi cài đặt. Bạn sẽ có tùy chọn để tự cài đặt javac hoặc cài đặt một IDE có chứa lệnh này.

Đừng quên theo dõi khóa học lập trình bên Vntalking nhé!

All rights reserved

Bạn đang tìm hiểu về Java và chưa biết Java Se là gì? Nắm rõ về Java Se và các thành phần: Java Development Kit và Java Runtime Environment cùng CodeGym Hà Nội trong bài viết dưới đây.

Nội dung

Tính năng mới Java JDK 18: Không chấp nhận Finalization cho quá trình removal

Finalizer có các sai sót gây ra các vấn đề nghiêm trọng trong thế giới thực về bảo mật, hiệu suất, độ tin cậy và khả năng bảo trì. Nó cũng có một mô hình lập trình khó. Tính năng hoàn thiện được bật theo mặc định ngay bây giờ nhưng có thể bị tắt để tạo điều kiện cho quá trình thử nghiệm sớm. Nó sẽ bị tắt theo mặc định trong bản phát hành tính năng và bị xóa hoàn toàn trong bản phát hành sau.

Đề xuất yêu cầu một tùy chọn dòng lệnh để vô hiệu hóa việc hoàn thiện và ngừng sử dụng tất cả các trình hoàn thiện và phương thức hoàn thiện trong API Java tiêu chuẩn. Các mục tiêu của đề xuất bao gồm giúp các nhà phát triển hiểu được sự nguy hiểm của việc hoàn thiện, chuẩn bị cho các nhà phát triển trước việc loại bỏ cuối cùng của nó và cung cấp các công cụ đơn giản để giúp phát hiện sự phụ thuộc vào quá trình hoàn thiện

Được giới thiệu trong Java 1.0, việc hoàn thiện nhằm giúp tránh rò rỉ tài nguyên. Một lớp có thể khai báo một trình hoàn thiện – phương thứcprotected void finalize()- cơ quan giải phóng bất kỳ tài nguyên cơ bản nào. Bộ thu gom rác sẽ lên lịch trình hoàn thiện của một đối tượng không thể truy cập được sẽ được gọi trước khi nó lấy lại bộ nhớ đối tượng; đến lượt nó, finalizephương thức có thể thực hiện các hành động chẳng hạn như gọi đối tượng củaclose.

Do các vấn đề với quá trình hoàn thiện, các nhà phát triển nên sử dụng các kỹ thuật thay thế để tránh rò rỉ tài nguyên, cụ thể là các câu lệnh thử với tài nguyên và trình dọn dẹp.

Song Ngư ♓️ HY VỌNG XUẤT HIỆN! MỘT SỰ THẬT VÀ MỘT GIAI ĐOẠN MỚI! NGÀY 19-25 THÁNG 2 NĂM 2024
Song Ngư ♓️ HY VỌNG XUẤT HIỆN! MỘT SỰ THẬT VÀ MỘT GIAI ĐOẠN MỚI! NGÀY 19-25 THÁNG 2 NĂM 2024

13, Java 16: Record type

Chúng ta đã quá nhàm chán với việc tạo ra những Java bean chứa đầy rẫy boilerplate code với getter(), setter(), toString()…

Nếu bạn đã quen với Lombok thì không còn lạ gì những annotation

@Getter

,

@Setter

,

@Data

. Chúng sẽ giúp giải quyết những boilerplate code kể trên.

Oracle biết điều đó nhưng họ muốn làm tốt hơn. Và keyword record ra đời, ngang hàng với class hoặc interface, đều là type.

Nếu trước đây nếu muốn tạo một Java bean Person với các thông số fullName và address, thực hiện như sau:

public class Person { private String fullName; private String address; public Persion(); public Persion(String fullName, String address); public getFullName(); public setFullName(String fullName); public getAddress(); public setAddress(String fullName); }

Với record:

public record Person(String fullName, String address) { public Person() { this(“defaultValue”, “defaultValue”); } }

Nhẹ nhàng thư thái, code ngắn gọn hơn hẳn.

Sự phổ biến[sửa | sửa mã nguồn]

Tính đến ngày 21 tháng 1 năm 2021, Java là ngôn ngữ lập trình phổ biến thứ nhì thế giới với tỉ lệ 11,96% chỉ xếp sau ngôn ngữ C. Qua nhiều năm Java và C vẫn luôn chiếm hai vị trí đầu tiên trong bảng các ngôn ngữ lập trình phổ biến nhất suốt 20 năm qua, tuy những năm gần đây độ phổ biến có xu hướng giảm nhưng Java vẫn giữ được tỉ lệ trên 10% mặc cho sự phát triển chóng mặt của thế giới công nghệ, Java thể hiện đẳng cấp một ngôn ngữ lập trình chất lượng của nhân loại.[58]

Abstract class và interface ???
Abstract class và interface ???

Liên kết ngoài[sửa | sửa mã nguồn]

  • java.com
  • Oracle’s Developer Resources for Java Technology.
  • Oracle’s Beginner’s tutorial for Java SE Programming
  • A Brief History of the Green Project Lưu trữ 2007-06-18 tại Wayback Machine
  • Michael O’Connell: Java: The Inside Story, SunWord, July 1995.
  • Patrick Naughton: Java Was Strongly Influenced by Objective-C (no date).
  • David Bank: The Java Saga, Wired Issue 3.12 (December 1995).
  • Patrick Naughton: The Long Strange Trip to Java, ngày 18 tháng 3 năm 1996.
  • Open University (UK): M254 Java Everywhere Lưu trữ 2012-08-09 tại Wayback Machine (free open content documents).
  • is-research GmbH: List of programming languages for a Java Virtual Machine.
  • How Java’s Floating-Point Hurts Everyone Everywhere, by W. Kahan and Joseph D. Darcy, University of California, Berkeley.
  • Shahrooz Feizabadi: A history of Java in: Marc Abrams, ed., World Wide Web – Beyond the Basics, Prentice Hall, 1998.
  • Java

Tất tần tật từ JDK 8 đến JDK 17

© Dat Bui | Buy me a coffee & give your kindness to the world

Ngày 15/09 vừa qua, các iFan đã được “thỏa mãn” với màn ra mắt của iPhone 13. Hòa chung không khí đó, các tín đồ Java cũng được “sung sướng” khi Oracle chính thức release JDK 17 LTS sau 3 năm thống trị của JDK 11 LTS release vào 09/2018.

Khi JDK 8 LTS release vào 03/2014, nó là một cuộc cách mạng siêu to khổng lồ khi có rất nhiều sự khác biệt với phiên bản tiền nhiệm JDK 7. Rất nhiều features nổi bật như stream API, lambda expression, method reference, functional interface, interface default method, Optional… Phải nói là cực kì đồ sộ, chả thế mà người người, nhà nhà, các công ty, các dự án update ầm ầm.

4 năm sau, Oracle release JDK 11 LTS nhưng không thực sự có sự dịch chuyển mạnh mẽ như JDK 8 đã làm được trước đó.

Đến thời điểm hiện tại cũng còn kha khá các công ty và project sử dụng JDK 8 hoặc kết hợp cả 2 JDK 8 và JDK 11 (theo nguồn khảo sát tự tìm hiểu

).

Oracle vẫn support JDK 8 cho đến hết 03/2022. Tức là chỉ còn còn vài tháng ngắn ngủi (tính từ thời điểm viết bài này). Thực ra cũng không cần quan tâm lắm vì đa số sử dụng OpenJDK vì OracleJDK không còn free nếu sử dụng cho mục đích thương mại từ lâu.

Nhưng…

Với JDK 17, mọi thứ hoàn toàn free bao gồm cả mục đích thương mại.

JDK 11 vẫn ổn, thậm chí JDK 8 vẫn đang phổ biến. Vậy JDK 17 có những feature gì nổi bật, đáng để chuyển đổi hay không?

Cùng đi tìm hiểu những feature chính và điểm khác biệt hay được sử dụng từ JDK 8 lên JDK 17 qua bài viết này nhé. Let’s begin.

Những thứ nâng cấp hoặc bỏ đi ít được sử dụng như RMI activation, Applet API, Stack-Walking API, Process API improvement… mình sẽ không đề cập đến trong bài viết này.

1) Java 9: Interface private method

Trước thời điểm Java 8 release, Interface và Abstract class có sự khác biệt khá lớn và gần như luôn xuất hiện trong các buổi phỏng vấn.

Sau đó, Java 8 cung cấp thêm default method biến một abstract method thành non-abstract method với 2 mục đích:


Cung cấp method mặc định cho interface.


Support backward compatibility.

Tiếp tục đến Java 9, Oracle đã bổ sung thêm private method cho interface. Tất nhiên các private method với mục đích tăng tính re-used cho code.

Ví dụ, với Java 8:


public interface Human { default void awake() { System.out.println("Same code here"); } default void sleep() { System.out.println("Same code here"); } }

Java 9 với private method:


public interface Human { default void awake() { doSomething(); } default void sleep() { doSomething(); } private void doSomething() { System.out.println("Same code here"); } }

Thậm chí support luôn private static method:


public interface Human { default void awake() { doSomething(); } default void sleep() { doSomething(); } private static void doSomething() { System.out.println("Same code here"); } }

Như vậy, interface đã có non-abstract method, private/public static method, public static variable. Về mặt implement đã không còn khác nhau quá nhiều giữa interface và abstract class.

Lưu ý rằng về ý nghĩa thì interface và abstract class vẫn khác nhau, và interface không có instance variable và private static variable.

2) Java 9: CompletableFuture API improvement

CompletableFuture đã xuất hiện từ Java 8. Tuy nhiên, Oracle bổ sung thêm 4 method trong Java 9 liên quan đến delay và timeout để support cho việc lập trình bất đồng bộ dễ dàng hơn.

Với delay là 2 method:


static Executor delayedExecutor(long delay, TimeUnit unit); static Executor delayedExecutor(long delay, TimeUnit unit, Executor executor);

Method đầu tiên trả về executor sẽ thực thi task mà chúng ta submit sau một khoảng thời gian delay time.

Method thứ hai cần truyền thêm executor và chính executor đó sẽ thực thi task sau delay time.

Có thể chạy đoạn code sau để hiểu thêm về nó nhé:


public static void main(String[] args) throws InterruptedException { var future = new CompletableFuture<>(); var delayExecutor = CompletableFuture.delayedExecutor(3, TimeUnit.SECONDS); future.completeAsync(() -> { System.out.println("Processing data"); return "process success"; }, delayExecutor) .thenAccept(r -> System.out.println("Result: " + r)); for (int i = 1; i <= 5; i++) { Thread.sleep(1000); System.out.println("Running outside... " + i + " s"); } }

Tiếp theo cùng đến với 2 method timeout:


CompletableFuture

orTimeout(long timeout, TimeUnit unit); CompletableFuture

completeOnTimeout(T value, long timeout, TimeUnit unit);


Giống với tên gọi của nó, method đầu tiên support việc throw exception nếu process time quá khoảng thời gian chỉ định. Method thứ hai thay vì throw exception sẽ trả về giá trị default value.

Thực hiện run code dưới đây để hiểu thêm nếu cần.


public static void main(String[] args) throws Exception { var task = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return "Finish"; }); BiConsumer

onComplete = (result, error) -> { if (error == null) { System.out.println("The result is: " + result); return; } System.out.println("Time is over"); }; var future = task .orTimeout(3, TimeUnit.SECONDS) .whenComplete(onComplete); var content = future.get(); System.out.println("Result: " + content); }

3) Java 9: Stream API improvement

Java 9 đã bổ sung thêm 4 methods để tương tác với stream, trong đó có 2 instance methods và 2 static methods là:


Stream

takeWhile(Predicate

predicate); Stream

dropWhile(Predicate

predicate); static

Stream

iterate(T seed, Predicate

hasNext, UnaryOperator

next); static

Stream

ofNullable(T t);







3.1) Take while

Giống với tên gọi của nó, method takeWhile() trả về tất cả các element thỏa mãn điều kiện. Nghe thì có vẻ giống filter() nhưng có đôi chút khác biệt. Hãy chú ý vào chữ while(): có thể hiểu nôm na rằng sẽ duyệt stream từ đầu cho đến khi nào gặp element không thỏa mãn điều kiện thì sẽ dừng lại luôn.


Stream.of(1, 2, 3, 4, 1, 2, 3, 4) .filter(i -> i < 4) .forEach(System.out::print); Stream.of(1, 2, 3, 4, 1, 2, 3, 4) .takeWhile(i -> i < 4) .forEach(System.out::print);

Kết quả của dòng đầu tiên với filter() là

123123

. Với takeWhile() kết quả chỉ là

123

.

3.2) Drop while

Idea tương tự như takeWhile() tuy nhiên logic của nó sẽ là loại bỏ tất cả các element thỏa mãn điều kiện và dừng lại cho đến khi gặp phần tử không thỏa mãn.


Stream.of(1, 2, 3, 4, 1, 2, 3, 4) .filter(i -> i < 4) .forEach(System.out::print);

Dễ dàng đoán được kết quả là

41234

.

3.3) Iterate

Nếu muốn tạo ra một stream với element đầu tiên = 2, element sau gấp đôi element trước cho đến khi element cuối cùng < 30, có thể sử dụng iterate với Java 9 như sau:


IntStream.iterate(2, x -> x < 30, x -> 2 * x) .forEach(System.out::println);

3.4) Of nullable

Cuối cùng là ofNullable(), nó sẽ trả về stream chứa element đó nếu element not null, còn không sẽ trả về empty stream.


Stream.ofNullable(1).forEach(System.out::println); Stream.ofNullable(null).forEach(System.out::println);

4) Java 9: Collection factory

Từ Java 8 trở về trước, việc tạo một collection (List, Set, Map…) khá dài dòng:


List

values = new ArrayList<>(); values.add("Hello"); values.add("World");

Vì lý do đó nên Google đã tung ra Guava collection giúp chúng ta thuận tiên hơn trong việc tạo ra một collection với cú pháp đơn giản:


List

values = ImmutableList.of("Hello", "World");

May mắn thay, Oracle đã nhận ra sự bất tiện này và đưa chúng vào luôn Java 9. Vậy là từ giờ không cần thêm common lib bên ngoài nữa:


List

values = List.of("Hello", "World");

5) Java 9: Java Module system

Java Module system đem đến 3 lợi ích chính:

  • Chia nhỏ application thông qua Modular Java platform. Có thể hiểu Java bao gồm rất nhiều các thành phần và cấu trúc khác nhau giống như căn biệt thự khổng lồ. Không phải lúc nào cũng tận dụng được hết các phòng trong căn biệt thự đó, ta chỉ sử dụng những thứ mà ta cần, vừa tiết kiệm chi phí lại tiết kiệm cả thời gian.
  • Tăng tính encapsulation. Mặc dù là public class nhưng chỉ có thể truy cập được từ những package được chỉ định. Nghe có vẻ hay ho rồi đây.
  • Nếu triển khai code với Module system, JVM có thể detect missing module và shutdown application.

Thực tế mình cũng chưa thấy có dự án hoặc công ty nào sử dụng Modular Java platform để triển khai code base. Ngoài ra có rất nhiều thứ để nói về Java module, mình sẽ trình bày trong một bài khác.

6) Java 10: var

Không cần bàn cãi nhiều, đây chính là cứu tinh của cuộc đời những lập trình viên Java.

Java là một ngôn ngữ đẹp, rõ ràng, nên nó muốn mọi thứ phải rõ ràng. Trước JDK 10, nếu muốn khai báo bất kì biến nào chúng ta cũng cần chỉ đích danh biến đó có type gì:


Object object = new Object(); Map

map = new HashMap<>(); BiConsumer

biConsumer = new BiConsumer<>() { @Override public void accept(String s1, String s2) { } };


Thank God! À không thank Oracle mới đúng, mọi thứ sẽ ngắn gọn hơn rất nhiều với var:


var object = new Object(); var map = new HashMap<>(); var biConsumer = new BiConsumer<>() { @Override public void accept(String s1, String s2) { } };

Lưu ý rằng Java vẫn là một ngôn ngữ rõ ràng, giàu tính thống nhất, scope của var là compile time chứ không phải run time giống như JavaScript.

Note: Oracle đã tăng thêm phạm vi sử dụng của var trong Java 11. Cụ thể là var có thể được sử dụng với lambda parameter.


Map.of("key", "value").forEach((var k, var v) -> {});

Tất nhiên, nếu dùng Java 10 trở xuống chúng ta vẫn có cách sử dụng var thông qua thư viện Lombok thần thánh. Lombok còn tân tiến hơn đó là cung cấp không chỉ var mà còn val: tương đương với final var.

7) Java 11: String API improvement

7.1) isBlank()

Nếu trước đây để check một string có blank hay không ta cần sử dụng 2 method là trim() và isEmpty() thì nay đã có isBlank().


boolean result = " ".trim().isEmpty(); boolean result = " ".isBlank();

7.2) repeat()

Giống tên gọi của nó, method này thực hiện nối chuỗi với chính nó theo số lần chỉ định.


var string = "repeat "; System.out.print(string.repeat(3)); // repeat repeat repeat

7.3) strip()

Method này thực hiện bỏ tất cả những khoảng trắng ở đầu và cuối string, giống như những gì trim() đang làm. Sự khác biệt đó là strip() xịn xò hơn trim() do sử dụng cách thức định nghĩa khoảng trắng xịn sò hơn, nhờ đó đem lại tốc độ tốt hơn và fix một bug đang tồn tại với trim().

7.4 lines()

Cuối cùng là lines(), method này giúp chúng ta chia string thành stream of lines phân cách nhau bằng

\n

:


"hello\nworld".lines().forEach(System.out::println); // hello // world

8) Java 12: String API improvement

Tiếp tục là sự cải tiến cho String API ở JDK 12 với 2 methods:

  • indent()
  • transform()
8.1) indent()

Với indent() method, chuỗi ban đầu được split thành nhiều line giống method lines(), sau đó mỗi line được indent (thêm khoảng trắng) dựa trên giá trị truyền vào.


var input = "Hello\nWorld"; System.out.println(input); System.out.println(input.indent(2)); // Result Hello World Hello World

8.2) transform()

Không có gì phức tạp, transform() apply function lên string hiện tại để tạo ra một kết quả mới:


var result = "Hello".transform(input -> input + " world"); System.out.println(result); // Hello world

9) Java 14: Switch expression

Nếu cần assign value với if else, ta đã có ternary operator. Nhưng với switch case thì.. chẳng có cách nào cho đến khi Java 14 xuất hiện.


// ternary operator var isMonday = day == Day.Monday ? true : false; // switch expression var isMonday = switch (day) { case MONDAY -> true; default -> false; };

10) Java 14: NullPointerException

Mình tin rằng bất kì dev nào cũng đã từng bị ám ảnh bởi Java NPE vì chẳng biết variable nào bị null ngoài cách đọc code và debug.

Tỉ dụ có đoạn code như sau:


var fullName = employee.getDetail().getFullName().toLowerCase();

Và đoạn log:


Exception in thread "main" java.lang.NullPointerException at com.oracle.java14.Application.main(Application.java:7)

Có 3 trường hợp null: employee, employee.getDetail() hoặc employee.getDetail().getFullName(). Chỉ biết chửi đứa nào code như …, không check choác gì cả .

May mắn thay Oracle đã tung ra một JVM options mới giúp chúng ta thuận tiện hơn trong việc debug NPE:


-XX:+ShowCodeDetailsInExceptionMessages

Sau khi thêm option trên, nếu có lỗi xảy ra JVM sẽ show message thân thiện hơn rất nhiều:


Exception in thread "main" java.lang.NullPointerException: Cannot invoke "com.oracle.java14.Application$Employee.getName()" because "employee" is null at com.oracle.java14.Application.main(Application.java:7)

hoặc


Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.trim()" because the return value of "com.oracle.java14.Application$Employee.getName()" is null at com.oracle.java14.Application.main(Application.java:7)

tùy thuộc giá trị nào là null.

Với Java 17, tính năng này đã được tự động thêm vào, không cần enable bằng JVM option nữa.

11) Java 15: Text block

Feature này đã có từ Java 13 tuy nhiên chỉ là phiên bản preview, nếu muốn sử dụng phải enable. Đến Java 15 mới được đưa vào chính thức.

Với Java 15 trở xuống, nếu muốn tạo một String và xuống dòng:


var string = "Line 1\n" + "Line 2\n" + "Line 3";

Hơi vất vả nhưng vẫn dùng được. Để đơn giản hóa việc khai báo này, Java 15 sử dụng cú pháp như sau:


var string = """ Line 1 Line 2 Line 3 """;

Những dòng code đã nói lên tất cả, rất tiện lợi. Thank Oracle.

12) Java 16: Pattern matching for instanceof

Nếu muốn check một object có type là String không và assign nó sang biến mới để sử dụng ta làm như sau:


Object object = ""; if (object instanceof String) { var string = (String) object; System.out.println(string); }

Để đơn giản hóa quá trình này, Java 16 cung cấp pattern matching cho

instanceof

với cách sử dụng mới như sau:


Object object = ""; if (object instanceof String string) { System.out.println(string); }

13) Java 16: Record type

Chúng ta đã quá nhàm chán với việc tạo ra những Java bean chứa đầy rẫy boilerplate code với getter(), setter(), toString()…

Nếu bạn đã quen với Lombok thì không còn lạ gì những annotation

@Getter

,

@Setter

,

@Data

. Chúng sẽ giúp giải quyết những boilerplate code kể trên.

Oracle biết điều đó nhưng họ muốn làm tốt hơn. Và keyword record ra đời, ngang hàng với class hoặc interface, đều là type.

Nếu trước đây nếu muốn tạo một Java bean Person với các thông số fullName và address, thực hiện như sau:


public class Person { private String fullName; private String address; public Persion(); public Persion(String fullName, String address); public getFullName(); public setFullName(String fullName); public getAddress(); public setAddress(String fullName); }

Với record:


public record Person(String fullName, String address) { public Person() { this("defaultValue", "defaultValue"); } }

Nhẹ nhàng thư thái, code ngắn gọn hơn hẳn.

14) JDK 17: Sealed class

Vẫn là nhu cầu tăng tính encapsulation. Java đã mạnh OOP nay càng mạnh hơn.

Thực tế khi implement, sẽ có những lúc ta muốn class A chỉ được phép extends bởi class B và C. Một cách để có thể triển khai đó là đặt cả 3 class vào chung package để để class A có level access modifier là package. Tuy nhiên sẽ có những trường hợp không muốn đặt chung như vậy.. nhưng vẫn phải làm như vậy.

Sealed class sẽ giúp chúng ta xử lý vấn đề này.


sealed interface Runnable permits Dog { void run(); } final class Dog implements Runnable { @Override public void run() { } }

Sử dụng keyword sealed để thông báo đây là một class/interface giới hạn, chỉ được phép extend bởi class Dog. Nếu tạo một class khác implement interface Runnable sẽ báo lỗi.

Finally

Với mỗi feature mình chỉ lấy ví dụ đơn giản để dễ hình dung nhất có thể.

Ngoài ra còn rất nhiều feature/tool khác hoặc cả những thứ đã bị loại bỏ mà chưa đề cập đến như:

  • Docker container support với -XX:-UseContainerSupport từ JDK 10.
  • CompactNumberFormat từ JDK 12.
  • Foreign Function & Memory API với JDK 17.
  • Packing tool với JDK 14.
  • JShell – Java REPL từ JDK 9.
  • Vector API từ JDK 16.
  • Context-Specific deserialization filters từ JDK 17.
  • Z GC từ JDK 15.

… và rất rất nhiều những cải tiến khác.

Từ những thứ kể trên có thể thấy rằng bản release lần này chất lượng thật sự, lại còn free toàn tập kể cả trong trường hợp sử dụng với mục đích thương mại. Còn chần chừ gì mà không nâng cấp lên JDK 17 và code thôi.

Say goodbye to Java 8 or even Java 11.

Nếu cần bí kíp ôn luyện OCPJP 11 II thì ping mình. Chỉ cần 2 tuần là có ngay tấm bằng trên tay post LinkedIn nhận job vài nghìn USD ầm ầm (vài nghìn một năm nhé, thời buổi này ai tính theo tháng nữa

).

After credit

Theo thông lệ thì khoảng 6 – 9 tháng sau khi release LTS, Oracle sẽ tung ra exam certificate. Tức là khoảng tháng 4 năm sau, chờ ra sách rồi lại cày cuốc thôi.

All rights reserved

Java 18: Cài đặt và cấu hình Oracle JDK 18 trên Debian 11

Cách đây vài ngày (22/03), tổ chức Oracle thông báo về sự sẵn có của “Java 18”. Phiên bản mới nhất của một trong những ngôn ngữ lập trình được sử dụng nhiều nhất và nền tảng phát triển số một thế giới. Gói hoặc chương trình mới, còn được gọi là Oracle JDK 18, cung cấp hàng nghìn cải tiến về hiệu suất, độ ổn định và bảo mật. Và ngoài ra, bao gồm chín đề xuất cải tiến nền tảng, do đó thúc đẩy hơn nữa năng suất của nhà phát triển.

Tuy nhiên, trong ấn phẩm này, chúng tôi sẽ không đi sâu vào tính mới hoặc cải tiến của nó, vì chúng tôi đã làm điều đó vài ngày sau khi (28/03) ra mắt. Sau đây, chúng ta sẽ đi sâu vào các khía cạnh thực tế và kỹ thuật hơn, đó là, về của anh ấy cài đặt và thiết lập về hiện tại Bản phân phối GNU / Linux de Debian ổn định.

Và như thường lệ, trước khi tham gia đầy đủ vào chủ đề hôm nay về cài đặt và thiết lập của phiên bản mới nhất hiện có của Java JDK, tức là, phiên bản Java 18, còn được gọi là Oracle JDK 18, chúng tôi sẽ để lại cho những người quan tâm các liên kết sau đến một số ấn phẩm liên quan trước đó. Theo cách mà họ có thể dễ dàng khám phá chúng, nếu cần, sau khi đọc xong ấn phẩm này:

“Phiên bản Java SE 18 mới này đến với ngoại trừ việc loại bỏ một số tính năng không dùng nữa, duy trì khả năng tương thích với các phiên bản trước của nền tảng Java và hầu hết các dự án Java đã viết trước đây sẽ tiếp tục hoạt động không thay đổi khi chạy với phiên bản mới. Và mã hóa mặc định của nó là UTF-8”. Phiên bản mới của Java SE 18 đã được phát hành và đây là những tin tức về nó

Phiên bản[sửa | sửa mã nguồn]

Sun đã xác định và hỗ trợ bốn phiên bản Java nhắm mục tiêu các môi trường ứng dụng khác nhau và phân đoạn nhiều API của nó để chúng thuộc về một trong các nền tảng. Các nền tảng là:

  • Java Card cho thẻ thông minh.[44]
  • Nền tảng Java, Phiên bản Micro (Java ME) – nhắm mục tiêu môi trường với tài nguyên hạn chế.[45]
  • Nền tảng Java, Phiên bản Tiêu chuẩn (Java SE) – nhắm mục tiêu môi trường máy trạm.[46]
  • Nền tảng Java, Phiên bản Doanh nghiệp (Java EE) – nhắm mục tiêu các môi trường doanh nghiệp hoặc Internet phân tán lớn.[47]

Các lớp trong Java API được tổ chức thành các nhóm riêng biệt gọi là gói. Mỗi gói chứa một tập hợp các giao diện, lớp, gói con và ngoại lệ liên quan.

Sun cũng cung cấp một phiên bản có tên là Personal Java đã được thay thế bằng các cặp cấu hình Java ME dựa trên tiêu chuẩn sau này.

Tóm Tắt 100 Ngày Minecraft 1.18 Sinh Tồn Siêu Khó !!
Tóm Tắt 100 Ngày Minecraft 1.18 Sinh Tồn Siêu Khó !!

Lời kết

Trong bài viết trên, hi vọng các bạn đã giải quyết được thắc mắc “Java Se là gì“. Trên con đường học Java của mình, đây là những kiến thức bạn nên nắm chắc để trở thành một hero. Chúc các bạn thành công.

>> Tìm hiểu thêm về ngôn ngữ Java tại đây:

  1. Scanner trong Java là gì? Phương thức và hàm tạo lớp trong Java
  2. Java core là gì? Cách phân biệt với Java Core với Java

Nhận hoa hồng

18 Tháng Ba, 2023

Một từ khóa đang được tìm kiếm nhiều trong giới công nghệ thông tin chính là “Java là gì?”. Java được hiểu chính là một loại ngôn ngữ lập trình có bậc cao được nhiều người sử dụng. Mặc dù trên thị trường ngày nay có rất nhiều ngôn ngữ lập trình khác ra đời. Nội dung dưới đây của Mona Media sẽ giúp bạn có thể hiểu rõ về ngôn ngữ lập trình Java là gì, hãy cùng khám phá một cách chi tiết thông qua bài viết sau nhé!

Được phát hành vào năm 1995 bởi Sun Microsystems, và do James Gosling khởi xướng. Java được định nghĩa chính là ngôn ngữ lập trình với bậc cao. Nó có xu hướng hướng đối tượng và cung cấp tính năng bảo mật mạnh mẽ. Bên cạnh đó, nó còn được định nghĩa như là một Platform. Ngày nay, Java hoạt động rộng rãi trên đa nền tảng bao gồm Windows, Mac và cả các phiên bản khác của UNIX.

Hiểu một cách rõ hơn, Java chính là ngôn ngữ lập trình có mục đích và hướng đối tượng. Nó được phát triển cho môi trường phân tán và cả phát triển phần mềm. Java không bị giới hạn bởi bất kỳ đối tượng và phần cứng hay cả hệ điều hành cụ thể nào do ngôn ngữ này có tính độc lập với nền tảng. Java còn cung cấp cho người dùng một cơ sở để có thể chỉ cần viết một lần và có thể chạy ở khắp nơi.

Đặc điểm đầu tiên chính là hướng vào đối tượng tương tự với C++. Java được tạo nhằm phục vụ cho mục đích chạy được trên đa nền tảng. Bên cạnh đó, một ngôn ngữ dễ học và thân thuộc với đa số người lập trình là điều mà các kỹ sư của Sun MicroSystem muốn tạo ra. Vì vậy, đây chính là sự sử dụng lại cú pháp của C và C++.

Tuy nhiên, để đảm bảo an toàn, dễ sử dụng nên thao tác với con trỏ trong Java bị lược bỏ. Bên cạnh đó, họ cũng lượt bỏ những thao tác overload, goto, struct và union.

Java có khả năng “cross-platform” được hiểu là có thể chạy tốt ở nhiều môi trường. Bên cạnh đó, có 2 cấp độ mã nguồn và nhị phân thể hiện khả năng độc lập phần cứng và hệ điều hành.

Ngôn ngữ lập trình thường được chia ra làm 2 loại là ngôn ngữ thông dịch (Interpreter) và biên dịch (Compiler).

Java thuộc loại ngôn ngữ thông dịch, hay nói một cách chính xác hơn, Java là loại ngôn ngữ vừa biên dịch vừa thông dịch.

Trong quá trình tạo ra các đối tượng trong Java, môi trường thời gian chạy Java sẽ tự động cấp phát không gian bộ nhớ đến các đối tượng ở trên heap.

Với ngôn ngữ như C C++, bạn cần yêu cầu hủy vùng nhớ bạn đã cấp phát, để tránh thất thoát vùng nhớ. Còn với ngôn ngữ lập trình Java sẽ hỗ trợ cho bạn điều đó, bạn sẽ không phải tự gọi hủy các vùng nhớ. Bộ thu dọn rác Java sẽ theo vết các tài nguyên đã được cấp. Khi không có bất kỳ tham chiếu nào đến vùng nhớ, bộ thu dọn rác tự động sẽ tiến hành thu hồi vùng nhớ đã được cấp phát.

Java hỗ trợ lập trình multithread (đa tiến trình) nhằm thực hiện các công việc đồng thời. Cùng đó, cũng cung cấp các giải pháp sử dụng priority đồng bộ giữa các tiến trình.

Tính an toàn

Tính năng an toàn của Java cho phép phát triển những hệ thống không virus, không có sự giả mạo, và việc xác thực dựa trên mã hóa khóa công khai.

Tính bảo mật

Java cung cấp môi trường quản lý program với nhiều mức độ khác nhau.

Java được phổ biến và đã chiếm lĩnh vực công nghệ từ đầu năm 2000. Nó được ứng dụng trong những lĩnh vực cụ thể sau:

Ba thành phần chính khi nhắc đến kiến trúc và môi trường của Java bao gồm: JVM – Máy ảo Java, JRE – môi trường thời gian chạy Java và cuối cùng là JDK – bộ phát triển Java.

Máy ảo Java cung cấp môi trường và thời gian chạy trong đó bytecode sẽ thực thi. Nó thực hiện những nhiệm vụ như: Tải mã, xác minh mã, thực thi mã và tạo môi trường thời gian chạy.

Môi trường thời gian chạy Java chính là tập hợp công cụ nhằm phát triển các ứng dụng và cung cấp môi trường thời gian chạy các chương trình Java. JVM chính là một phần của JRE, phụ thuộc vào nền tảng. Bên cạnh đó, JRE cũng hỗ trợ thực hiện các chương trình Java như JVM, bộ công cụ giao diện của người dùng và cả công nghệ triển khai hay plugin Java,…

JDK (Java Development Kit), đây chính là một bộ cung cấp môi trường cho sự phát triển và thực thi các chương trình của Java. JDK cũng bao gồm cả JRE. Nó chạy mã Java và bao gồm các tài nguyên khác như: trình biên dịch, trình lưu trữ, trình thông dịch/ trình tải, và trình tạo tài liệu.

Tất cả ba thành phần này hợp lại sẽ giúp xây dựng các chương trình Java. Bộ phát triển Java sẽ bao gồm: Appletviewer – để xem các applet Java, Java – trình thông dịch Java, Javap – trình tháo gỡ Java, Javah – chính là dành cho tệp tiêu đề C, Javac với chức năng trình biên dịch Java, Javadoc – để tạo tệp HTML và cuối cùng là Jdb – trình gỡ lỗi Java.

Bên cạnh những lợi ích mà Java mang lại thì cũng như bao ngôn ngữ lập trình khác Java cũng sẽ có bao gồm ưu và cả nhược điểm. Nó được liệt kê cụ thể bên dưới.

Sở dĩ Java được nhiều người tin dùng và sử dụng bởi nó sở hữu những ưu điểm sau:

Tóm lại, Java chính là một giải pháp thiết thực cung cấp lợi ích thiết thực trong thời đại công nghệ internet. Hy vọng, bài viết trên sẽ giúp bạn có cái nhìn tổng quan về ngôn ngữ Java là gì và những tính năng của Java. Hy vọng nó sẽ giúp bạn trong công việc hiện tại.

Xem thêm:

Dịch vụ thiết kếwebsite chuyên nghiệp

Sở hữu website với giao diện đẹp, độc quyền 100%, bảo hành trọn đời với khả năngmở rộng tính năng linh hoạt theo sự phát triển doanh nghiệp ngay hôm nay!

Ngày 15/09 vừa qua, các iFan đã được “thỏa mãn” với màn ra mắt của iPhone 13. Hòa chung không khí đó, các tín đồ Java cũng được “sung sướng” khi Oracle chính thức release JDK 17 LTS sau 3 năm thống trị của JDK 11 LTS release vào 09/2018.

Khi JDK 8 LTS release vào 03/2014, nó là một cuộc cách mạng siêu to khổng lồ khi có rất nhiều sự khác biệt với phiên bản tiền nhiệm JDK 7. Rất nhiều features nổi bật như stream API, lambda expression, method reference, functional interface, interface default method, Optional… Phải nói là cực kì đồ sộ, chả thế mà người người, nhà nhà, các công ty, các dự án update ầm ầm.

4 năm sau, Oracle release JDK 11 LTS nhưng không thực sự có sự dịch chuyển mạnh mẽ như JDK 8 đã làm được trước đó.

Đến thời điểm hiện tại cũng còn kha khá các công ty và project sử dụng JDK 8 hoặc kết hợp >cả 2 JDK 8 và JDK 11 (theo nguồn khảo sát tự tìm hiểu 😂).

Oracle vẫn support JDK 8 cho đến hết 03/2022. Tức là chỉ còn còn vài tháng ngắn ngủi (tính từ thời điểm viết bài này). Thực ra cũng không cần quan tâm lắm vì đa số sử dụng OpenJDK vì OracleJDK đã tính phí sử dụng doanh nghiệp từ lâu roài.<

JDK 11 vẫn ổn, thậm chí JDK 8 vẫn đang phổ biến. Vậy JDK 17 có những feature gì nổi bật, đáng để chuyển đổi hay không?

Cùng đi tìm hiểu những feature chính và điểm khác biệt hay được sử dụng từ JDK 8 lên JDK 17 qua bài viết này nhé. Let’s begin.

Những thứ nâng cấp hoặc bỏ đi ít được sử dụng như RMI activation, Applet API, Stack-Walking API, Process API improvement… mình sẽ không đề cập đến trong bài viết này.

6, Java 10: var

Không cần bàn cãi nhiều, đây chính là cứu tinh của cuộc đời những lập trình viên Java.

Java là một ngôn ngữ đẹp, rõ ràng, nên nó muốn mọi thứ phải rõ ràng. Trước JDK 10, nếu muốn khai báo bất kì biến nào chúng ta cũng cần chỉ đích danh biến đó có type gì:

Object object = new Object(); Map

map = new HashMap<>(); BiConsumer

biConsumer = new BiConsumer<>() { public void accept(String s1, String s2) { } };

Thank God! À không thank Oracle mới đúng, mọi thứ sẽ ngắn gọn hơn rất nhiều với var:

var object = new Object(); var map = new HashMap<>(); var biConsumer = new BiConsumer<>() { public void accept(String s1, String s2) { } };

Lưu ý rằng Java vẫn là một ngôn ngữ rõ ràng, giàu tính thống nhất, scope của var là compile time chứ không phải run time giống như JavaScript.

Note: Oracle đã tăng thêm phạm vi sử dụng của var trong Java 11. Cụ thể là var có thể được sử dụng với lambda parameter.

Map.of(“key”, “value”).forEach((var k, var v) -> {});

Hồi Sinh Ngọc Rồng hay Ngọc Rồng Online Bản Chính | TOP 5 Lí Do Khiến NRO Lậu Nhấn Chìm NRO Chính
Hồi Sinh Ngọc Rồng hay Ngọc Rồng Online Bản Chính | TOP 5 Lí Do Khiến NRO Lậu Nhấn Chìm NRO Chính

11, Java 15: Text block

Feature này đã có từ Java 13 tuy nhiên chỉ là phiên bản preview, nếu muốn sử dụng phải enable. Đến Java 15 mới được đưa vào chính thức.

Với Java 15 trở xuống, nếu muốn tạo một String và xuống dòng:

var string = “Line 1\n” + “Line 2\n” + “Line 3”;

Hơi vất vả nhưng vẫn dùng được. Để đơn giản hóa việc khai báo này, Java 15 sử dụng cú pháp như sau:

var string = “”” Line 1 Line 2 Line 3 “””;

Những dòng code đã nói lên tất cả, rất tiện lợi. Thank Oracle.

Tính năng mới Java JDK 18: Foreign Function và Memory API

Sự ấp ủ thứ hai của một hàm ngoại và API bộ nhớ , trong đó một API được giới thiệu qua đó các chương trình Java có thể tương tác với mã và dữ liệu bên ngoài thời gian chạy Java. Bằng cách gọi các hàm ngoại – mã bên ngoài JVM – và bằng cách truy cập an toàn vào bộ nhớ ngoại – bộ nhớ không được quản lý bởi JVM – API cho phép các chương trình Java gọi các thư viện gốc và xử lý dữ liệu gốc mà không có sự nguy hiểm và dễ vỡ của JNI (Java Native Interface).

Mục đích là thay thế JNI bằng một mô hình phát triển Java thuần túy, ưu việt hơn. API này được ấp ủ trong JDK 17. Đối với JDK 18, các cải tiến sẽ được kết hợp dựa trên phản hồi, chẳng hạn như hỗ trợ cho nhiều nhà cung cấp dịch vụ hơn như Boolean và MemoryAddress trong các chốt var truy cập bộ nhớ và một API mới để sao chép mảng Java vào và từ bộ nhớ các phân đoạn.

>>> Tham khảo: Khóa học lập trình Java

Bản Mod Bị NGUYỀN RỦA Trong Minecraft
Bản Mod Bị NGUYỀN RỦA Trong Minecraft

Java 18: Nhiều cải tiến về hiệu suất, độ ổn định và bảo mật

Làm thế nào để sử dụng Java 18?

Xả

để tải xuống Java 18 (Oracle JDK 18) cái sau phải được truy cập liên kết và tải xuống tệp .deb sẵn sàng Bản phân phối GNU / Linux dựa trên Debian ổn định.

Cài đặt

Sau khi tải xuống, chúng tôi tiến hành cài đặt nó theo cách ưu tiên, tức là với lệnh apt hoặc dpkg. Trong trường hợp sử dụng của chúng tôi, chúng tôi sử dụng lệnh sau:


«sudo apt install ./Descargas/jdk-18_linux-x64_bin.deb»

cấu hình

Sau khi gói được cài đặt, chúng tôi vẫn cần tiếp tục cấu hình java 18, để nó được định cấu hình là phiên bản mặc định, vì hiện tại của chúng tôi hệ điều hành đã sử dụng (Phép màu GNU / Linux), đi cùng OpenJDK 11.

Và đối với điều này, chúng ta cần người dùng quản trị (root), chạy các lệnh sau:


sudo -s echo "JAVA_HOME=/usr/lib/jvm/jdk-18" >> /etc/profile echo "PATH=$PATH:$HOME/bin:$JAVA_HOME/bin" >> /etc/profile echo "export JAVA_HOME" >> /etc/profile echo "export PATH" >> /etc/profile update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-18/bin/java 1 update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-18/bin/javac 1 update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk-10.0.1/bin/jar 1 update-alternatives --set java /usr/lib/jvm/jdk-10.0.1/bin/java update-alternatives --set javac /usr/lib/jvm/jdk-10.0.1/bin/javac update-alternatives --set jar /usr/lib/jvm/jdk-10.0.1/bin/jar . /etc/profile

xác minh

Sau khi hoàn tất thủ tục này, chúng ta có thể thực hiện như sau mệnh lệnh Để xác nhận rằng mọi thứ diễn ra tốt đẹp:


java --version javac --version jar --version

Tại thời điểm này, không còn gì để làm ngoài việc thử một số ứng dụng hoặc phát triển Java để trải nghiệm những lợi ích của phiên bản cài đặt mới.

“Các tệp nhị phân Microsoft OpenJDK dành cho Java 11 dựa trên mã nguồn OpenJDK, tuân theo các tập lệnh phát hành tương tự được sử dụng bởi dự án Eclipse Adoptium và được kiểm tra bởi bộ Eclipse Adoptium QA (bao gồm các thử nghiệm dự án OpenJDK)”. Microsoft đã công bố sự sẵn có của phiên bản xem trước của OpenJDK

10, Java 14: NullPointerException

Mình tin rằng bất kì dev nào cũng đã từng bị ám ảnh bởi Java NPE vì chẳng biết variable nào bị null ngoài cách đọc code và debug.

Tỉ dụ có đoạn code như sau:

var fullName = employee.getDetail().getFullName().toLowerCase();

Và đoạn log:

Exception in thread “main” java.lang.NullPointerException at com.oracle.java14.Application.main(Application.java:7)

Có 3 trường hợp null: employee, employee.getDetail() hoặc employee.getDetail().getFullName(). Chỉ biết chửi đứa nào code như …, không check choác gì cả 🔨.

May mắn thay Oracle đã tung ra một JVM options mới giúp chúng ta thuận tiện hơn trong việc debug NPE:

-XX:+ShowCodeDetailsInExceptionMessages

Sau khi thêm option trên, nếu có lỗi xảy ra JVM sẽ show message thân thiện hơn rất nhiều:

Exception in thread “main” java.lang.NullPointerException: Cannot invoke “com.oracle.java14.Application$Employee.getName()” because “employee” is null at com.oracle.java14.Application.main(Application.java:7)

hoặc

Exception in thread “main” java.lang.NullPointerException: Cannot invoke “String.trim()” because the return value of “com.oracle.java14.Application$Employee.getName()” is null at com.oracle.java14.Application.main(Application.java:7)

tùy thuộc giá trị nào là null.

Với Java 17, tính năng này đã được tự động thêm vào, không cần enable bằng JVM option nữa.

Bí Kíp Sử Dụng Constructor Trong Java Cho PRO | Code Thu
Bí Kíp Sử Dụng Constructor Trong Java Cho PRO | Code Thu

Lịch sử[sửa | sửa mã nguồn]

James Gosling, Mike Sheridan và Patrick Naughton khởi xướng dự án ngôn ngữ Java vào tháng 6 năm 1991.[22] Java ban đầu được thiết kế cho truyền hình tương tác, nhưng nó quá tiên tiến đối với ngành truyền hình cáp kỹ thuật số vào thời điểm đó.[23] Ban đầu ngôn ngữ này được gọi là Oak theo tên một cây sồi bên ngoài văn phòng của Gosling. Sau đó, dự án có tên là Green và cuối cùng được đổi tên thành Java, từ cà phê Java, loại cà phê đến từ Indonesia.[24] Gosling đã thiết kế Java với cú pháp kiểu C/C++ mà các lập trình viên hệ thống và ứng dụng đã quen thuộc.[25]

Sun Microsystems đã phát hành bản triển khai công khai đầu tiên dưới dạng Java 1.0 vào năm 1996.[26] Nó hứa hẹn khả năng Viết một lần, Chạy mọi nơi (WORA), cung cấp thời gian chạy miễn phí trên các nền tảng phổ biến. Khá an toàn và có tính năng bảo mật có thể định cấu hình, nó cho phép các hạn chế truy cập mạng và tệp. Các trình duyệt web lớn đã sớm kết hợp khả năng chạy các ứng dụng Java trong các trang web và Java nhanh chóng trở nên phổ biến. Trình biên dịch Java 1.0 được viết lại bằng Java bởi Arthur van Hoff để tuân thủ nghiêm ngặt đặc tả ngôn ngữ Java 1.0.[27] Với sự ra đời của Java 2 (ban đầu được phát hành với tên gọi J2SE 1.2 vào tháng 12 năm 1998 – 1999), các phiên bản mới có nhiều cấu hình được xây dựng cho các loại nền tảng khác nhau. J2EE bao gồm các công nghệ và API cho các ứng dụng doanh nghiệp thường chạy trong môi trường máy chủ, trong khi các API đặc trưng của J2ME được tối ưu hóa cho các ứng dụng di động. Phiên bản dành cho máy tính để bàn được đổi tên thành J2SE. Năm 2006, vì mục đích tiếp thị, Sun đã đổi tên các phiên bản J2 mới lần lượt là Java EE, Java ME và Java SE.

Năm 1997, Sun Microsystems đã tiếp cận cơ quan tiêu chuẩn ISO/IEC JTC 1 và sau đó là Ecma International để chính thức hóa Java, nhưng sau đó công ty nhanh chóng rút khỏi quy trình này.[28][29][30] Java vẫn là một tiêu chuẩn thực tế, được kiểm soát thông qua Quy trình cộng đồng Java.[31] Đã có lúc, Sun cung cấp hầu hết các triển khai Java của mình mà không tính phí, bất chấp trạng thái phần mềm độc quyền của họ. Sun đã tạo ra doanh thu từ Java thông qua việc bán giấy phép cho các sản phẩm chuyên biệt như Hệ thống Doanh nghiệp Java.

Vào ngày 13 tháng 11 năm 2006, Sun đã phát hành phần lớn máy ảo Java (JVM) của mình dưới dạng phần mềm mã nguồn mở và miễn phí (FOSS), theo các điều khoản của Giấy phép Công cộng GNU (GPL). Vào ngày 8 tháng 5 năm 2007, Sun đã hoàn thành quá trình, cung cấp tất cả mã cốt lõi của JVM theo các điều khoản phân phối phần mềm miễn phí / nguồn mở, ngoại trừ một phần nhỏ mã mà Sun không giữ bản quyền.[32][33]

Phó chủ tịch Rich Green của Sun nói rằng vai trò lý tưởng của Sun đối với Java là như một nhà truyền giáo.[34] Sau khi Tập đoàn Oracle mua lại Sun Microsystems vào năm 2009–10, Oracle đã tự mô tả mình là người quản lý công nghệ Java với cam kết không ngừng thúc đẩy cộng đồng tham gia và minh bạch.[35] Điều này không ngăn được Oracle đệ đơn kiện Google ngay sau đó vì đã sử dụng Java bên trong Android SDK.

Ngày 2 tháng 4 năm 2010, James Gosling từ chức tại Oracle.[36]

Vào tháng 1 năm 2016, Oracle đã thông báo rằng môi trường thời gian chạy Java dựa trên JDK 9 sẽ ngừng cung cấp plugin trình duyệt.[37]

Phần mềm Java chạy trên mọi thứ, từ máy tính xách tay đến trung tâm dữ liệu, bảng điều khiển trò chơi đến siêu máy tính khoa học.[38]

Nguyên tắc[sửa | sửa mã nguồn]

Có 5 mục tiêu chính trong việc xây dựng ngôn ngữ Java:[39]

  1. Nó phải đơn giản, hướng đối tượng và quen thuộc.
  2. Nó phải mạnh mẽ và an toàn.
  3. Nó phải không phụ thuộc vào kiến trúc và có tính di động.
  4. Nó phải thực thi với hiệu suất cao.
  5. Nó phải được thông dịch, phân luồng và động.

Phiên bản[sửa | sửa mã nguồn]

Các phiên bản Java đã phát hành:

Version Date
JDK Beta 1995
JDK1.0 ngày 23 tháng 1 năm 1996[40]
JDK 1.1 ngày 19 tháng 2 năm 1997
J2SE 1.2 ngày 8 tháng 12 năm 1998
J2SE 1.3 ngày 8 tháng 5 năm 2000
J2SE 1.4 ngày 6 tháng 2 năm 2002
J2SE 5.0 ngày 30 tháng 9 năm 2004
Java SE 6 ngày 11 tháng 12 năm 2006
Java SE 7 ngày 28 tháng 7 năm 2011
Java SE 8 (LTS) ngày 18 tháng 3 năm 2014
Java SE 9 ngày 21 tháng 9 năm 2017
Java SE 10 ngày 20 tháng 3 năm 2018
Java SE 11 (LTS) ngày 25 tháng 9 năm 2018[41]
Java SE 12 ngày 19 tháng 3 năm 2019
Java SE 13 ngày 17 tháng 9 năm 2019
Java SE 14 ngày 17 tháng 3 năm 2020
Java SE 15 ngày 15 tháng 9 năm 2020[42]
Java SE 16 ngày 16 tháng 3 năm 2021
Java SE 17 (LTS) ngày 14 tháng 9 năm 2021
Java SE 18 ngày 22 tháng 3 năm 2022
Java SE 19 ngày 20 tháng 9 năm 2022
Java SE 20 ngày 21 tháng 3 năm 2023
Java SE 21 (LTS) ngày 19 tháng 9 năm 2023[43]

Keywords searched by users: java 18 là gì

Ngôn Ngữ Lập Trình Java Là Gì? Tính Năng & Ứng Dụng | Bkhost
Ngôn Ngữ Lập Trình Java Là Gì? Tính Năng & Ứng Dụng | Bkhost
Gambaru | Java Là Gì? Ý Nghĩa Và Tính Năng Của Các Nền Tảng Java
Gambaru | Java Là Gì? Ý Nghĩa Và Tính Năng Của Các Nền Tảng Java
Oracle Công Bố Java 18 - Kinh Tế - Tài Chính Việt Nam
Oracle Công Bố Java 18 – Kinh Tế – Tài Chính Việt Nam
Java Là Gì? Khám Phá 5 Công Dụng Nổi Trội Nhất Của Java
Java Là Gì? Khám Phá 5 Công Dụng Nổi Trội Nhất Của Java
Java Là Gì? Khám Phá 5 Công Dụng Nổi Trội Nhất Của Java
Java Là Gì? Khám Phá 5 Công Dụng Nổi Trội Nhất Của Java
Java Platform Là Gì? Những Điều Bạn Cần Biết Về Java Platform
Java Platform Là Gì? Những Điều Bạn Cần Biết Về Java Platform
Học Lập Trình Java Từ Đâu Và Như Thế Nào? | Topdev
Học Lập Trình Java Từ Đâu Và Như Thế Nào? | Topdev
Gambaru | Java Là Gì? Ý Nghĩa Và Tính Năng Của Các Nền Tảng Java
Gambaru | Java Là Gì? Ý Nghĩa Và Tính Năng Của Các Nền Tảng Java
Java Platform Là Gì? Những Điều Bạn Cần Biết Về Java Platform
Java Platform Là Gì? Những Điều Bạn Cần Biết Về Java Platform
Cài Đặt Môi Trường Java | How Kteam
Cài Đặt Môi Trường Java | How Kteam
Java Se Là Gì? Tìm Hiểu Các Thành Phần Quan Trọng Của Java Se
Java Se Là Gì? Tìm Hiểu Các Thành Phần Quan Trọng Của Java Se
Java Là Gì? Tìm Hiểu Ngôn Ngữ Lập Trình Java Cho Người Mới
Java Là Gì? Tìm Hiểu Ngôn Ngữ Lập Trình Java Cho Người Mới
Lập Trình Game Java - 3 Kỹ Năng Cần Có Để Thành Chuyên Gia -
Lập Trình Game Java – 3 Kỹ Năng Cần Có Để Thành Chuyên Gia –
Java Là Gì? Tìm Hiểu Tất Tần Tật Về Java Trong Vòng 5 Phút
Java Là Gì? Tìm Hiểu Tất Tần Tật Về Java Trong Vòng 5 Phút
Java Virtual Machine Là Gì? Tại Sao Sử Dụng Virtual Trong Java - Codegym
Java Virtual Machine Là Gì? Tại Sao Sử Dụng Virtual Trong Java – Codegym
Java Là Gì? Khám Phá 5 Công Dụng Nổi Trội Nhất Của Java
Java Là Gì? Khám Phá 5 Công Dụng Nổi Trội Nhất Của Java
Selenium Java] Cài Đặt Môi Trường Java Jdk Và Ide Để Code | Anh Tester
Selenium Java] Cài Đặt Môi Trường Java Jdk Và Ide Để Code | Anh Tester
Java Platform Là Gì? Những Điều Bạn Cần Biết Về Java Platform
Java Platform Là Gì? Những Điều Bạn Cần Biết Về Java Platform

See more here: kientrucannam.vn

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *