Mô tả ngắn gọn về ngôn ngữ lập trình Java. Ngôn ngữ lập trình Java

Tính năng Java hoặc ngôn ngữ là gì


Nếu bạn hỏi Java là gì, thì bạn có thể nói về Java như một ngôn ngữ hướng đối tượng, có mục đích chung, trông rất giống C và C++, nhưng dễ sử dụng hơn và cho phép bạn tạo các chương trình đáng tin cậy hơn. Thật không may, định nghĩa này sẽ không cung cấp cho bạn sự hiểu biết đầy đủ về Java. Một định nghĩa chi tiết hơn được Sun Microsystems đưa ra và cũng có liên quan, mặc dù nó đã được công bố vào năm 2000:

Java là ngôn ngữ lập trình đơn giản, hướng đối tượng, hỗ trợ web, thông dịch, đáng tin cậy, an toàn, trung lập về kiến ​​trúc, di động, hiệu suất cao, đa luồng, năng động.
Chúng ta hãy xem xét từng định nghĩa riêng lẻ:

Java là một ngôn ngữ đơn giản. Java ban đầu được mô phỏng theo C và C++, đã loại bỏ một số thành phần có thể gây nhầm lẫn. Con trỏ, kế thừa nhiều triển khai và nạp chồng toán tử là một số tính năng của C/C++ không phải là một phần của Java. Hàm này là tùy chọn trong C/C++ nhưng được yêu cầu trong Java - nó là một trình thu gom rác tự động giải phóng các đối tượng và mảng.

Java là một ngôn ngữ hướng đối tượng. Trọng tâm hướng đối tượng trong Java cho phép các nhà phát triển làm việc để điều chỉnh Java để giải quyết một vấn đề, thay vì buộc chúng ta phải thao tác vấn đề để đáp ứng các ràng buộc về ngôn ngữ. Điều này khác với ngôn ngữ có cấu trúc như C. Ví dụ: trong khi Java cho phép bạn tập trung vào việc lưu các đối tượng tài khoản thì C yêu cầu bạn phải suy nghĩ riêng về việc tiết kiệm số dư tài khoản (chẳng hạn như số dư) và các hành vi (chẳng hạn như nhập và kết luận).

Java cho phép bạn làm việc với mạng. Thư viện mạng mở rộng của Java giúp bạn dễ dàng xử lý Giao thức Internet (TCP/IP) cũng như các giao thức mạng như HTTP (Giao thức truyền siêu văn bản) và FTP (Giao thức truyền tệp). Với sự trợ giúp của các thư viện, nhiệm vụ tạo kết nối mạng được đơn giản hóa. Ngoài ra, các chương trình Java có thể truy cập các đối tượng qua mạng TCP/IP bằng cách sử dụng Bộ định vị tài nguyên thống nhất (URL) một cách dễ dàng giống như các tệp nằm trên máy tính cục bộ.

Java là một ngôn ngữ thông dịch. Trong quá trình thực thi chương trình Java, nó được thực thi gián tiếp trên nền tảng cơ bản (chẳng hạn như Windows hoặc Linux) thông qua một máy ảo (là phần mềm đại diện cho nền tảng giả định) và môi trường thời gian chạy liên quan của nó. Máy ảo dịch mã byte thành các lệnh Java (hướng dẫn và dữ liệu liên quan) dành riêng cho nền tảng bằng cách sử dụng tính năng thông dịch. Sau đó, máy ảo sẽ thực thi các hướng dẫn này trên một nền tảng cụ thể. Việc thông dịch giúp việc gỡ lỗi các chương trình Java bị hỏng trở nên dễ dàng hơn vì có nhiều thông tin hơn tại thời điểm biên dịch.

Java là một ngôn ngữ đáng tin cậy. Các chương trình Java phải đáng tin cậy vì chúng được sử dụng trong các ứng dụng tiêu dùng và quan trọng, từ đầu phát Blu-ray hoặc hệ thống điều khiển không khí trong ô tô. Khách hàng và máy chủ của ngân hàng được viết bằng ngôn ngữ này. Các tính năng ngôn ngữ giúp Java trở nên mạnh mẽ bao gồm các khai báo, kiểm tra kiểu trùng lặp khi biên dịch và thời gian chạy (để ngăn chặn các vấn đề về phiên bản không khớp), mảng có kiểm tra giới hạn tự động và không có con trỏ.

Một khía cạnh khác về độ tin cậy của Java là các vòng lặp phải được điều khiển bằng các biểu thức boolean thay vì các biểu thức số nguyên, trong đó 0 là sai và giá trị khác 0 là đúng. Ví dụ: Java không cho phép vòng lặp kiểu C như trong while (x) x++; vì vòng lặp có thể không kết thúc như mong đợi. Thay vào đó, bạn phải cung cấp một biểu thức boolean một cách rõ ràng, ví dụ như trong while (x != 10) x++; (Nghĩa là vòng lặp sẽ chạy cho đến khi x bằng 10).

Java là một ngôn ngữ an toàn. Các chương trình Java được sử dụng trong môi trường mạng/phân tán. Vì các chương trình Java có thể di chuyển và chạy trên các nền tảng khác nhau nên điều quan trọng là phải bảo vệ các nền tảng đó khỏi mã độc có thể phát tán vi-rút nhằm đánh cắp thông tin thẻ tín dụng hoặc thực hiện các hoạt động độc hại khác. Các tính năng của ngôn ngữ Java hỗ trợ độ tin cậy (chẳng hạn như truyền con trỏ) hoạt động với các tính năng bảo mật như hộp cát Java và các mô hình bảo mật mật mã khóa công khai. Cùng với nhau, các tính năng bảo vệ này chống lại vi-rút và mã độc hại khác sẽ ngăn chặn sự hỗn loạn tàn phá một nền tảng không bị nghi ngờ.

Về lý thuyết, Java rất an toàn. Trong thực tế, nhiều lỗ hổng khác nhau đã được phát hiện và khai thác. Do đó, Sun Microsystems và Oracle sau đó tiếp tục phát hành các bản cập nhật bảo mật trong thời điểm hiện tại.

Java là một ngôn ngữ trung lập về kiến ​​trúc(tên khác là nền tảng độc lập). Mạng kết nối các nền tảng với kiến ​​trúc khác nhau dựa trên các bộ vi xử lý và hệ điều hành khác nhau. Java tạo mã byte lệnh độc lập với nền tảng được diễn giải cho từng nền tảng (sử dụng Máy ảo Java).

Java là một ngôn ngữ di động. Kiến trúc trung lập thúc đẩy tính di động. Thư viện Java cũng thúc đẩy tính di động. Khi cần, họ cung cấp các kiểu kết nối mã Java với các khả năng dành riêng cho nền tảng theo cách di động nhất có thể.

Java là một ngôn ngữ hiệu suất cao. Việc giải thích đưa ra một mức độ hiệu suất thường là quá đủ. Những người viết chương trình tùy chỉnh bằng C++ có thể tranh luận ở đây, nhưng trên thực tế, Java tăng năng suất theo từng phiên bản.

Java là một ngôn ngữ đa luồng. Để nâng cao hiệu quả của các chương trình cần thực hiện đồng thời nhiều tác vụ, Java hỗ trợ khái niệm luồng. Ví dụ: một chương trình vận hành giao diện đồ họa người dùng (GUI) trong khi chờ đầu vào từ kết nối mạng sẽ sử dụng một luồng khác để thực hiện chờ, thay vì sử dụng luồng GUI mặc định cho cả hai tác vụ. Điều này cho phép bạn làm việc với giao diện đồ họa mà không khiến nó bị treo. Đồng bộ hóa luồng trong Java cho phép các luồng giao tiếp với nhau một cách an toàn mà không làm hỏng chúng.

Java là một ngôn ngữ động. Vì giao tiếp giữa mã chương trình và thư viện diễn ra linh hoạt trong thời gian chạy nên không cần phải liên kết chúng một cách rõ ràng. Do đó, khi một chương trình hoặc một trong các thư viện của nó phát triển (ví dụ: để sửa lỗi hoặc cải thiện hiệu suất), nhà phát triển chỉ cần phân phối chương trình hoặc thư viện đã cập nhật. Mặc dù kết quả của hành vi động yêu cầu ít mã hơn khi xảy ra thay đổi phiên bản nhưng chính sách phân phối này cũng có thể dẫn đến xung đột phiên bản. Ví dụ: nhà phát triển xóa loại lớp khỏi thư viện hoặc đổi tên nó. Khi một công ty phân phối thư viện cập nhật, các chương trình hiện có phụ thuộc vào loại lớp có thể không còn hoạt động. Để giải quyết vấn đề này, Java hỗ trợ một loại giao diện, giống như một hợp đồng giữa hai bên.

Vì vậy, chúng tôi đã kiểm tra các tính năng của ngôn ngữ Java. Nếu bạn cần viết chương trình bằng ngôn ngữ này, làm bài tập hoặc bằng tốt nghiệp, bạn có thể liên hệ với tôi - [email được bảo vệ]- Tôi chắc chắn sẽ giúp bạn.

Trước khi chuyển sang phần đào tạo, chúng ta hãy bắt đầu với phần giới thiệu về lập trình java, cùng tìm hiểu xem nó là loại ngôn ngữ lập trình nào. Một ít lịch sử. Ngôn ngữ Java được phát triển bởi Sun Microsystems, do James Gosling tạo ra và 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 Sun Microsystems (Java 1.0).

Tính đến năm 2017, phiên bản mới nhất của Java Standard Edition là 8 (J2SE). Với sự phát triển của Java và sự phổ biến rộng rãi của nó, một số cấu hình đã được xây dựng cho các loại nền tảng khác nhau. Ví dụ: J2EE - ứng dụng dành cho doanh nghiệp, J2ME - dành cho ứng dụng di động.

Sun Microsystems đã đổi tên phiên bản J2 trước đó và giới thiệu phiên bản mới: Java SE, Java EE và Java ME. Việc giới thiệu lập trình Java với nhiều phiên bản khác nhau đã khẳng định khẩu hiệu nổi tiếng của công ty là “”.

Lịch sử hình thành ngôn ngữ Java

Lịch sử của ngôn ngữ Java bắt đầu vào tháng 6 năm 1991, khi James Gosling tạo ra một dự án để sử dụng cho một trong nhiều dự án giải mã kỹ thuật số của mình. Cái lưỡi mọc bên ngoài văn phòng của Gosling như một cây sồi Gỗ sồi- tên ban đầu của Java cho đến năm 1995, sau đó lịch sử của Java tiếp tục dưới cái tên này Màu xanh lá và sau đó được đổi tên thành Java.

Nhưng ngày chính thức tạo ra ngôn ngữ Java được coi là ngày 23 tháng 5 năm 1995, sau khi Sun phát hành bản triển khai Java 1.0 đầu tiên. Cô đảm bảo Viết một lần, chạy khắp nơi", cung cấp chi phí thấp trên các nền tảng phổ biến.

Vào ngày 13 tháng 11 năm 2006, Sun đã phát hành hầu hết phần mềm này dưới dạng phần mềm nguồn mở và miễn phí theo các điều khoản của Giấy phép Công cộng GNU (GPL).

Sau ngày 8 tháng 5 năm 2007, số phận của Java lại trở nên khác hẳn. Công ty đã hoàn tất quy trình, đảm bảo rằng mã nguồn là nguồn mở và miễn phí, ngoại trừ một phần nhỏ mã mà công ty không có bản quyền.

Lợi ích của Java như một ngôn ngữ lập trình

Hướng đối tượng: Trong Java, mọi thứ đều là đối tượng. Tiện ích bổ sung có thể được mở rộng dễ dàng vì nó dựa trên mô hình đối tượng.

Nền tảng độc lập: Không giống như nhiều ngôn ngữ khác, bao gồm C và C++, Java, khi được tạo ra, không được biên dịch thành một nền tảng máy cụ thể mà thành mã byte độc ​​lập với nền tảng. Mã byte này được phân phối qua Internet và được giải thích bởi Máy ảo Java (JVM) mà nó hiện đang chạy.

Đơn giản: Quá trình học tập và giới thiệu về ngôn ngữ lập trình Java được giữ đơn giản. Nếu bạn hiểu các khái niệm cơ bản về lập trình hướng đối tượng thì bạn sẽ dễ dàng học được.

An toàn: Phương thức xác thực dựa trên mã hóa khóa công khai.

Kiến trúc trung tính: Trình biên dịch tạo ra các đối tượng định dạng tệp trung lập về kiến ​​trúc, giúp mã được biên dịch có thể thực thi được trên nhiều bộ xử lý chạy hệ thống Java Runtime.

Cầm tay: Trung lập về mặt kiến ​​trúc và không có các khía cạnh phụ thuộc vào việc triển khai của các thông số kỹ thuật - tất cả những điều này làm cho Java có tính di động. Trình biên dịch trong Java được viết hoàn toàn bằng ANSI C di động, là một tập hợp con của POSIX.

Bền vững: Thực hiện nỗ lực loại bỏ lỗi trong nhiều tình huống khác nhau, tập trung chủ yếu vào thời gian biên dịch, kiểm tra lỗi và kiểm tra thời gian chạy.

Đa luồng: Tính năng đa luồng, bạn có thể viết chương trình có thể thực hiện nhiều tác vụ cùng lúc. Việc đưa tính năng thiết kế này vào ngôn ngữ Java cho phép các nhà phát triển tạo ra các ứng dụng có tính tương tác cao, tinh tế.

Phiên dịch: Mã byte Java được dịch nhanh chóng sang hướng dẫn của máy và không được lưu trữ ở bất kỳ đâu. Làm cho quy trình nhanh hơn và mang tính phân tích cao hơn vì quá trình ràng buộc diễn ra như một quy trình bổ sung có ít trọng lượng đối với quy trình.

Hiệu suất cao: sự ra đời của trình biên dịch Just-In-Time cho phép đạt hiệu suất cao.

Chung: Được thiết kế cho môi trường Internet phân tán.

Năng động: Lập trình Java được coi là năng động hơn C hoặc C++ vì nó được thiết kế để thích ứng với các điều kiện thay đổi. Các chương trình có thể thực hiện một lượng lớn thông tin trong quá trình xử lý, thông tin này có thể được sử dụng để xác thực và cấp quyền truy cập vào các đối tượng trong thời gian chạy.

Sau phần giới thiệu ngắn, tổng quan về lợi ích và lịch sử của Java, chúng ta hãy bắt đầu khóa đào tạo của mình.

Công cụ bạn sẽ cần

Để chạy các ví dụ được thảo luận trong hướng dẫn này, bạn cần một máy tính Pentium 200 MHz có RAM tối thiểu 64 MB (khuyến nghị RAM 128 MB).

Bạn cũng sẽ cần phần mềm sau:

  • Linux 7.1, Windows 95/98/2000/7/8 trở lên hoặc hệ điều hành khác.
  • JDK 5 trở lên.
  • Notepad hoặc bất kỳ trình soạn thảo văn bản nào khác.

Hướng dẫn sẽ cung cấp các kỹ năng cần thiết để tạo các ứng dụng GUI, mạng và web.

Làm quen với đặc điểm lịch sử hình thành và ưu điểm của Java là các bạn đã hoàn thành bài giới thiệu ngôn ngữ lập trình. Bài học tiếp theo sẽ hướng dẫn bạn học ngôn ngữ và tài liệu. Hướng dẫn bạn cách cài đặt và chuẩn bị môi trường để phát triển ứng dụng.

Lập trình là viết mã nguồn của chương trình bằng một trong các ngôn ngữ lập trình. Có nhiều ngôn ngữ lập trình khác nhau, nhờ đó mà tất cả các loại chương trình được tạo ra để giải quyết một số vấn đề nhất định. Ngôn ngữ lập trình là một tập hợp các từ dành riêng để viết mã nguồn của chương trình. Hệ thống máy tính chưa (chưa) có thể hiểu được ngôn ngữ của con người, càng không thể hiểu được logic của con người (đặc biệt là logic của phụ nữ), vì vậy tất cả các chương trình đều được viết bằng ngôn ngữ lập trình, sau đó được dịch sang ngôn ngữ máy tính hoặc mã máy. Các hệ thống dịch mã nguồn chương trình thành mã máy rất phức tạp và theo quy luật, chúng được tạo ra trong hàng chục tháng và hàng chục lập trình viên. Những hệ thống như vậy được gọi là môi trường hoặc công cụ lập trình ứng dụng tích hợp.

Hệ thống lập trình là một môi trường trực quan khổng lồ, được suy nghĩ kỹ lưỡng, nơi bạn có thể viết mã nguồn của chương trình, dịch nó thành mã máy, kiểm tra, gỡ lỗi, v.v. Ngoài ra, có những chương trình cho phép bạn thực hiện các hành động trên bằng dòng lệnh.

Bạn có thể đã nghe thuật ngữ “một chương trình được viết cho Windows hoặc Linux hoặc Unix” nhiều lần. Thực tế là môi trường lập trình khi dịch ngôn ngữ lập trình sang mã máy có thể có hai loại - trình biên dịch và trình thông dịch. Biên dịch hoặc giải thích một chương trình chỉ định cách chương trình sẽ tiếp tục được thực thi trên thiết bị. Các chương trình viết bằng Java luôn hoạt động trên cơ sở diễn giải, trong khi các chương trình viết bằng C/C++ được biên dịch. Sự khác biệt giữa hai phương pháp này là gì?

Trình biên dịch sau khi viết mã nguồn tại thời điểm biên dịch sẽ đọc toàn bộ mã nguồn của chương trình cùng một lúc và dịch sang mã máy. Sau đó, chương trình tồn tại dưới dạng một tổng thể duy nhất và chỉ có thể được thực thi trong hệ điều hành mà nó được viết. Do đó, các chương trình viết cho Windows không thể hoạt động trong môi trường Linux và ngược lại. Trình thông dịch thực thi chương trình từng bước hoặc từng dòng mỗi lần chương trình được thực thi. Trong quá trình diễn giải, không phải mã thực thi được tạo ra mà là mã ảo, sau đó được thực thi bởi máy ảo Java. Do đó, trên bất kỳ nền tảng nào - Windows hay Linux, các chương trình Java đều có thể được thực thi như nhau nếu có một máy Java ảo trong hệ thống, còn được gọi là Hệ thống thời gian chạy.

Lập trình hướng đối tượng

Lập trình hướng đối tượng được xây dựng trên cơ sở các đối tượng, có phần giống với thế giới của chúng ta. Nếu bạn nhìn xung quanh, bạn chắc chắn có thể tìm thấy thứ gì đó sẽ giúp bạn hiểu rõ hơn về mô hình lập trình đó. Ví dụ, bây giờ tôi đang ngồi ở bàn làm việc và gõ chương này trên một máy tính, bao gồm màn hình, bộ phận hệ thống, bàn phím, chuột, loa, v.v. Tất cả những bộ phận này là những vật thể tạo nên một chiếc máy tính. Biết được điều này, rất dễ dàng để xây dựng một số loại mô hình tổng quát về hoạt động của toàn bộ máy tính. Nếu bạn không hiểu sự phức tạp của các thuộc tính phần mềm và phần cứng của máy tính, thì chúng ta có thể nói rằng đối tượng System Unit thực hiện một số hành động nhất định được hiển thị bởi đối tượng Monitor. Ngược lại, đối tượng Keyboard có thể điều chỉnh hoặc thậm chí thiết lập các hành động cho đối tượng System Unit, điều này ảnh hưởng đến hoạt động của đối tượng Monitor. Quá trình được trình bày mô tả rất rõ toàn bộ hệ thống lập trình hướng đối tượng.

Hãy tưởng tượng một sản phẩm phần mềm mạnh mẽ nào đó chứa hàng trăm nghìn dòng mã. Toàn bộ chương trình được thực thi từng dòng, từng dòng và về nguyên tắc, mỗi dòng mã tiếp theo nhất thiết phải được kết nối với dòng mã trước đó. Nếu bạn không sử dụng lập trình hướng đối tượng và khi bạn cần thay đổi mã chương trình này, chẳng hạn như nếu bạn cần cải thiện một số yếu tố, thì bạn sẽ phải thực hiện rất nhiều công việc với toàn bộ mã nguồn của chương trình này.

Trong lập trình hướng đối tượng, mọi thứ đơn giản hơn nhiều, hãy quay lại ví dụ về hệ thống máy tính. Giả sử bạn không còn hài lòng với màn hình 17 inch nữa. Tất nhiên, bạn có thể dễ dàng đổi nó lấy một màn hình 20 inch nếu bạn có nguồn tài chính nhất định. Bản thân quá trình trao đổi sẽ không gây ra vấn đề lớn, trừ khi bạn phải thay đổi trình điều khiển, lau bụi dưới màn hình cũ, thế là xong. Lập trình hướng đối tượng gần như dựa trên nguyên tắc hoạt động này, trong đó một phần nhất định của mã có thể biểu thị một lớp đối tượng đồng nhất có thể dễ dàng nâng cấp hoặc thay thế.

Lập trình hướng đối tượng phản ánh rất dễ dàng và rõ ràng bản chất của vấn đề đang được giải quyết và quan trọng nhất là giúp loại bỏ các đối tượng không cần thiết mà không làm hỏng toàn bộ chương trình, thay thế các đối tượng này bằng những đối tượng mới hơn. Theo đó, khả năng đọc tổng thể mã nguồn của toàn bộ chương trình trở nên dễ dàng hơn nhiều. Điều quan trọng nữa là cùng một mã có thể được sử dụng trong các chương trình hoàn toàn khác nhau.

Các lớp học

Cốt lõi của tất cả các chương trình Java là các lớp, trên đó lập trình hướng đối tượng được dựa trên. Về cơ bản bạn đã biết lớp học là gì nhưng bạn vẫn chưa nhận ra điều đó. Trong phần trước chúng ta đã nói về các đối tượng, sử dụng cấu trúc của toàn bộ máy tính làm ví dụ. Mỗi đối tượng mà máy tính được lắp ráp là một đại diện cho lớp của nó. Ví dụ: lớp Màn hình hợp nhất tất cả các màn hình, bất kể loại, kích cỡ và khả năng của chúng và một màn hình cụ thể đặt trên bàn của bạn là một đối tượng của lớp màn hình.

Cách tiếp cận này giúp dễ dàng mô hình hóa tất cả các loại quy trình lập trình, giúp giải quyết vấn đề dễ dàng hơn. Ví dụ: có bốn đối tượng thuộc bốn lớp khác nhau: màn hình, thiết bị hệ thống, bàn phím và loa. Để phát tệp âm thanh, bạn cần ra lệnh cho thiết bị hệ thống bằng bàn phím, bạn sẽ quan sát chính hành động ra lệnh một cách trực quan trên màn hình và kết quả là loa sẽ phát tệp âm thanh. Nghĩa là, bất kỳ đối tượng nào cũng là một phần của một lớp nhất định và chứa tất cả các công cụ và khả năng có sẵn cho lớp này. Có thể có bao nhiêu đối tượng của một lớp cũng cần thiết để giải quyết vấn đề.

phương pháp

Khi đưa ra một ví dụ về cách phát một tệp âm thanh, người ta đề cập rằng một lệnh hoặc thông báo được đưa ra, trên cơ sở đó một số hành động nhất định được thực hiện. Nhiệm vụ thực hiện các hành động được giải quyết bằng các phương thức mà mỗi đối tượng có. Phương thức là một tập hợp các lệnh có thể được sử dụng để thực hiện một số hành động nhất định với một đối tượng.

Mỗi đối tượng có mục đích riêng và được thiết kế để giải quyết một loạt vấn đề nhất định bằng cách sử dụng các phương thức. Chẳng hạn, một đối tượng Bàn phím sẽ có tác dụng gì nếu bạn không thể nhấn phím mà vẫn có thể ra lệnh? Đối tượng Bàn phím có một số phím nhất định mà người dùng có thể kiểm soát thiết bị đầu vào và có thể đưa ra các lệnh cần thiết. Các lệnh như vậy được xử lý bằng các phương thức.

Ví dụ: bạn nhấn phím Esc để hủy bất kỳ hành động nào và từ đó đưa ra lệnh cho phương thức được gán cho phím này, giải quyết nhiệm vụ này ở cấp chương trình. Câu hỏi ngay lập tức nảy sinh về số lượng phương thức của đối tượng Bàn phím, nhưng có thể có cách triển khai khác - từ việc xác định các phương thức cho từng phím (nói chung là không khôn ngoan) và đến việc tạo một phương thức duy nhất sẽ giám sát trạng thái chung của bàn phím. Nghĩa là, phương pháp này giám sát xem một phím đã được nhấn hay chưa, sau đó, tùy thuộc vào phím nào được kích hoạt, sẽ quyết định phải làm gì.

Vì vậy, chúng ta thấy rằng mỗi đối tượng có thể tùy ý sử dụng một tập hợp các phương pháp để giải quyết các vấn đề khác nhau. Và vì mỗi đối tượng là một đối tượng của một lớp nhất định, hóa ra lớp đó chứa một tập hợp các phương thức được sử dụng bởi nhiều đối tượng khác nhau của cùng một lớp. Trong Java, tất cả các phương thức bạn tạo phải thuộc hoặc là một phần của một lớp cụ thể.

Cú pháp và ngữ nghĩa của ngôn ngữ Java

Để nói và đọc được bất kỳ ngoại ngữ nào, bạn cần phải học bảng chữ cái và ngữ pháp của ngôn ngữ đó. Một tình trạng tương tự cũng được quan sát thấy khi nghiên cứu các ngôn ngữ lập trình, với sự khác biệt duy nhất, đối với tôi, có vẻ như quá trình này dễ dàng hơn một chút. Nhưng trước khi bắt đầu viết mã nguồn của chương trình, trước tiên bạn phải giải quyết vấn đề được giao cho mình dưới bất kỳ hình thức nào thuận tiện cho bạn.

Hãy tạo một lớp nhất định chịu trách nhiệm, chẳng hạn như đối với một chiếc điện thoại, lớp này sẽ chỉ có hai phương pháp: bật và tắt chính chiếc điện thoại này. Vì hiện tại chúng ta chưa biết cú pháp của ngôn ngữ Java nên chúng ta sẽ viết lớp Phone bằng một ngôn ngữ trừu tượng.

Điện thoại lớp
{
Phương thức Enable()
{
// thao tác bật điện thoại
}
Phương thức vô hiệu hóa ()
{
// thao tác tắt điện thoại
}
}

Lớp Điện thoại có thể trông giống như thế này. Lưu ý rằng dấu ngoặc nhọn tương ứng chỉ ra phần đầu và phần cuối của phần thân của một lớp, phương thức hoặc bất kỳ chuỗi dữ liệu nào. Nghĩa là, dấu ngoặc đơn biểu thị tư cách thành viên trong một phương thức hoặc lớp. Mỗi dấu ngoặc đơn mở phải có dấu ngoặc đơn đóng. Để tránh nhầm lẫn, chúng thường được đặt ở cùng cấp độ trong mã.

Bây giờ hãy viết cùng một lớp chỉ trong Java.

Điện thoại lớp
{
vô hiệu hóa()
{
// phần thân của phương thức on()
}
vô hiệu hóa()
{
// phần thân của phương thức off()
}
}

Từ khóa class trong ngôn ngữ Java khai báo một lớp, theo sau là tên của chính lớp đó. Trong trường hợp của chúng tôi, đây là Telefon. Chỉ cần một vài lời về đăng ký ghi âm. Trong hầu hết các ngôn ngữ lập trình, điều quan trọng là phải lưu tên vào sổ đăng ký nơi chúng được viết. Nếu bạn viết Telefon, thì cách viết như telefon hoặc TELefoN sẽ gây ra lỗi trong quá trình biên dịch. Như chúng tôi đã viết ban đầu, đây là cách chúng tôi nên tiếp tục viết.

Dành riêng hoặc từ khóa được viết theo trường hợp cụ thể của riêng chúng và bạn không thể sử dụng chúng bằng cách đặt tên chúng cho các phương thức, lớp, đối tượng, v.v. Khoảng cách giữa các từ không quan trọng vì trình biên dịch đơn giản bỏ qua chúng, nhưng chúng rất quan trọng đối với khả năng đọc mã.

Trong phần thân của lớp Telefon có hai phương thức: on() - bật điện thoại và phương thức off() - tắt điện thoại. Cả hai phương pháp đều có nội dung riêng và về mặt lý thuyết, chúng phải chứa một số mã nguồn mô tả các hành động cần thiết của cả hai phương pháp. Đối với chúng tôi bây giờ, việc triển khai các phương thức này như thế nào không quan trọng, điều chính yếu là cú pháp của ngôn ngữ Java.

Cả hai phương thức đều có dấu ngoặc đơn on() trong đó các tham số có thể được ghi, chẳng hạn như on(int time) hoặc on(int time, int time1). Với sự trợ giúp của các tham số, có một loại kết nối giữa các phương thức và thế giới bên ngoài. Phương thức on(int time) được cho là lấy tham số thời gian. Nó dùng để làm gì? Ví dụ: bạn muốn điện thoại của mình bật vào một thời điểm nhất định. Sau đó, giá trị nguyên trong tham số thời gian sẽ được chuyển đến phần thân của phương thức và dựa trên dữ liệu nhận được, điện thoại sẽ được bật. Nếu dấu ngoặc đơn trống thì phương thức không chấp nhận bất kỳ tham số nào.

Bình luận

Trong lớp Telefon, trong phần thân của cả hai phương thức đều có một mục nhập sau hai dấu gạch chéo: //. Mục này biểu thị các nhận xét sẽ bị trình biên dịch bỏ qua nhưng cần thiết để mã có thể đọc được. Bạn càng nhận xét nhiều thông tin khi viết chương trình, bạn càng có nhiều khả năng ghi nhớ trong một năm những gì bạn đã làm trong suốt thời gian qua.

Nhận xét trong Java có thể có ba loại:

//, /*…*/ Và /**…*/

Các nhận xét được viết bằng toán tử // phải xuất hiện trên một dòng:

// Một đường thẳng
!!! Lỗi! Bạn không thể gói nó trên dòng thứ hai!
// Dòng đầu tiên
// Dòng thứ hai
// …
// Dòng cuối cùng

Các nhận xét sử dụng toán tử /*…*/ có thể trải dài trên nhiều dòng. Ở đầu nhận xét của bạn, hãy đặt /* và ở cuối, khi bạn nhận xét xong mã, hãy đặt toán tử */. Loại nhận xét cuối cùng /**…*/ được sử dụng khi ghi lại mã và cũng có thể nằm trên bất kỳ số dòng nào.

Các kiểu dữ liệu Java

Để đặt giá trị tùy ý, Java có các kiểu dữ liệu. Trong lớp Telefon chúng ta đã tạo hai phương thức. Cả hai phương thức đều không có tham số, nhưng khi đưa ra ví dụ về phương thức on(int time) với tham số thời gian, họ đã nói về việc truyền một giá trị cho phương thức. Giá trị này cho biết thời điểm điện thoại được cho là sẽ bật. Bộ xác định int xác định loại giá trị thời gian. Có sáu kiểu dữ liệu trong Java 2 ME.

Byte – giá trị số nguyên nhỏ từ –128 đến 128;
short – giá trị số nguyên ngắn trong phạm vi từ –32768 đến 32767;
int – chứa bất kỳ giá trị số nguyên nào từ –2147483648 đến 2147483647;
long – giá trị số nguyên rất lớn, từ –922337203685475808 đến 9223372036854775807;
char là hằng số ký tự Unicode. Phạm vi của định dạng này là từ 0 đến 65536, tương đương với 256 ký tự. Bất kỳ ký tự nào thuộc loại này phải được viết bằng dấu ngoặc đơn, ví dụ: 'G';
boolean là kiểu logic chỉ có hai giá trị: false và true. Loại này thường được sử dụng trong các vòng lặp, sẽ được thảo luận sau. Ý nghĩa rất đơn giản - nếu bạn có tiền trong túi thì điều đó được cho là đúng, còn nếu không thì nó là sai. Vì vậy, nếu có tiền thì chúng ta đến cửa hàng mua bánh mì hoặc bia (gạch chân những gì phù hợp), không có tiền thì chúng ta ở nhà. Nghĩa là, đây là giá trị logic góp phần lựa chọn các hành động tiếp theo cho chương trình của bạn.

Để khai báo một số giá trị cần thiết, hãy sử dụng mục sau:

Int thời gian;
BigTime dài;
từ char;

Toán tử dấu chấm phẩy được yêu cầu sau các mục nhập và được đặt ở cuối dòng. Bạn có thể kết hợp nhiều khai báo cùng loại, cách nhau bằng dấu phẩy:

Mt thời gian, thời gian1, thời gian2;

Bây giờ hãy cải thiện lớp Telefon của chúng ta bằng cách thêm một số giá trị vào nó. Chúng ta không cần các phương thức on() và off() nữa; hãy thêm các phương thức mới có thể thực sự giải quyết được một số vấn đề nhất định.

Điện thoại lớp
{
//S – vùng hiển thị
//w – chiều rộng hiển thị
//h – chiều cao hiển thị
int w, h, S;
//phương thức tính diện tích hiển thị
Khu vực vord()
{
S = w*h;
}
}

Vì vậy, chúng ta có ba biến S, w và h, lần lượt chịu trách nhiệm về diện tích, chiều rộng và chiều cao của màn hình tính bằng pixel. Phương thức Area() tính toán diện tích màn hình điện thoại tính bằng pixel. Thao tác này vô dụng nhưng rất minh họa và dễ hiểu. Phần thân của phương thức Area() đã tự tìm thấy và có dạng S = w*h. Trong phương pháp này, chúng ta chỉ cần nhân chiều rộng với chiều cao và gán hoặc, như người ta nói, lưu kết quả vào biến S. Biến này sẽ chứa các giá trị của vùng hiển thị của điện thoại này .

Bây giờ chúng ta đã tiến gần đến các toán tử của ngôn ngữ Java, với sự trợ giúp của nó, bạn có thể thực hiện tất cả các loại hoạt động. Các toán tử của ngôn ngữ Java cũng như các ngôn ngữ lập trình khác đều có mục đích riêng. Vì vậy, có các toán tử số học, toán tử tăng và giảm, toán tử logic và toán tử quan hệ. Chúng ta hãy xem xét từng toán tử trên.

Toán tử số học

Tất cả các toán tử số học đều rất đơn giản và tương tự như các toán tử nhân "*", chia "/", cộng "+" và trừ "-" được sử dụng trong toán học. Có một toán tử chia modulo “%” và một tình huống thoạt nhìn hơi khó hiểu với toán tử bằng nhau “=”. Toán tử bằng được gọi là toán tử gán trong các ngôn ngữ lập trình:

Ở đây bạn gán giá trị 3 cho biến x. Và toán tử “bằng” trong các ngôn ngữ lập trình tương ứng với việc viết hai toán tử “bằng” liên tiếp: “==”. Hãy xem một ví dụ về những gì các toán tử số học khác nhau có thể làm.

Int x, y, z;
x = 5;
y = 3;
z = 0;
z = x + y;

Trong trường hợp này, z sẽ có giá trị bằng tổng của x và y, tức là 8.

Biến x có giá trị 5, nhưng sau khi ghi lại giá trị trước đó sẽ bị mất và tích z*x (8*5) được ghi, bằng 40. Bây giờ, nếu chúng ta tiếp tục mã của mình thêm nữa, các biến sẽ trông như thế này như thế này:

// x = 40;
// y = 3;
// z = 8;

Các toán tử cộng và trừ có mục đích tương tự như trong toán học. Số âm cũng có liên quan.

Các toán tử giảm “––” và tăng “++” rất cụ thể nhưng rất đơn giản. Trong lập trình, đôi khi bạn cần tăng hoặc giảm một giá trị. Điều này thường xảy ra theo chu kỳ. Hoạt động tăng làm tăng một biến.

Int x = 5;
x++;
// Ở đây x đã bằng 6 rồi

Hoạt động giảm làm giảm một biến.

Int x = 5;
x--;
// x bằng 4

Các phép toán tăng và giảm có thể là hậu tố và tiền tố:

Int x = 5;
int y = 0;
y = x++;

Ở dòng mã cuối cùng, giá trị x đầu tiên được gán cho y, là giá trị 5, và chỉ sau đó biến x mới được tăng thêm một. Hóa ra là:

Gia tăng tiền tố có dạng:

Int x = 3;
int y = 0;
y = ++x;

Và trong trường hợp này, đầu tiên biến x được tăng thêm một, sau đó nó gán giá trị đã tăng cho y.

Toán tử quan hệ

Toán tử quan hệ cho phép bạn kiểm tra xem cả hai vế của biểu thức có bằng nhau hay không. Có toán tử đẳng thức "==", toán tử nhỏ hơn "<» и больше «>", nhỏ hơn hoặc bằng"<=» и больше или равно «>=”, cũng như toán tử phủ định “!=”.
9 == 10;

Biểu thức này không đúng, chín không bằng mười nên giá trị của biểu thức này là sai.

Ngược lại, ở đây, toán tử phủ định biểu thị sự bất đẳng thức của biểu thức và giá trị sẽ đúng. Các toán tử lớn hơn, nhỏ hơn, lớn hơn hoặc bằng và nhỏ hơn hoặc bằng tương tự như các toán tử tương ứng trong toán học.

Toán tử logic

Có hai toán tử logic. Toán tử “AND”, được biểu thị bằng ký hiệu “&&” và toán tử “OR”, được biểu thị bằng hai dấu gạch chéo lên “||”. Ví dụ: có một biểu thức:

A*B && B*C;

Nếu chỉ có cả hai phần của biểu thức đều đúng thì giá trị của biểu thức được coi là đúng. Nếu một trong các phần sai thì giá trị của toàn bộ biểu thức sẽ sai.
Ngược lại với toán tử “&&”, có toán tử “||”, không phải vô cớ mà nó được gọi là “OR”.

A*B || B*C;

Nếu bất kỳ phần nào của biểu thức đúng thì toàn bộ biểu thức đó đúng. Cả hai toán tử có thể được kết hợp trong một biểu thức, ví dụ:

A*B || B*C && C*D || BA;

Với sự trợ giúp của cách diễn đạt này, có vẻ như tôi đã khiến bạn gặp khó khăn, phải không? Thực tế là trong Java, cũng như trong toán học, có một mức độ ưu tiên hay cái gọi là hệ thống phân cấp của các toán tử, với sự trợ giúp của nó, người ta xác định toán tử nào quan trọng hơn và do đó, được kiểm tra trước. Hãy xem xét việc sử dụng danh sách mức độ ưu tiên của tất cả các toán tử ngôn ngữ Java có sẵn:

, ., (),
!, ~, ++, – –, + (một ngôi), – (một ngôi), mới,
*, /, %,
+, –,
<<, >>, >>>,
<, <=, >, >=,
= =, !=,
&, ^, |,
&&,
||,
?:,
=, +=, –=, *=, /=, %=, |=, ^=, <<=, >>=, >>>=.

Tính kết hợp của các toán tử trong danh sách theo thứ tự từ trái sang phải và từ trên xuống dưới. Tức là mọi thứ ở bên trái trở lên đều có cấp bậc cao hơn và quan trọng hơn.

Gửi công việc tốt của bạn trong cơ sở kiến ​​thức rất đơn giản. Sử dụng mẫu dưới đây

Các sinh viên, nghiên cứu sinh, các nhà khoa học trẻ sử dụng nền tảng kiến ​​thức trong học tập và công việc sẽ rất biết ơn các bạn.

Đăng trên http://www.allbest.ru/

Giới thiệu

2. Ưu điểm của ngôn ngữ

2.1 Bảo mật

2.3 Độ tin cậy

2.4 Tương tác

2.7 Dễ học

3. Ứng dụng JAVA

5. Tính di động của JAVA

Phần kết luận

Thư mục

Giới thiệu

Ngày nay, việc tạo ra phần mềm là một công việc vô cùng khó khăn. Khó khăn gắn liền với sự đa dạng của kiến ​​trúc máy, hệ điều hành, vỏ đồ họa, v.v. Sự phát triển nhanh chóng của các công nghệ liên quan đến Internet càng làm phức tạp thêm nhiệm vụ này. Các loại máy tính khác nhau được kết nối với Internet - máy trạm IBM PC, Macintosh, Sun và các loại khác. Ngay cả trong khuôn khổ các máy tính tương thích với IBM, cũng có một số nền tảng, ví dụ: MS Windows 9x/Me/XP/NT/2000, OS/2, Solaris, nhiều loại hệ điều hành UNIX khác nhau với lớp vỏ đồ họa X-Windows , v.v. Tất cả các hệ thống này tạo thành một mạng duy nhất, phải hoạt động như một mạng duy nhất, đồng thời đảm bảo mức độ bảo mật thông tin cao. Dưới ảnh hưởng của những yếu tố này, mức độ yêu cầu đặt ra đối với phần mềm tăng lên mạnh mẽ.

Các ứng dụng hiện đại phải an toàn, hiệu suất cao, chạy trong môi trường phân tán và trung lập về kiến ​​trúc. Tất cả những yếu tố này đã dẫn đến nhu cầu về một cái nhìn mới về chính quá trình tạo và phân phối ứng dụng trên nhiều máy có kiến ​​trúc khác nhau. Các yêu cầu về tính di động đã buộc phải từ bỏ cách tạo và phân phối tệp nhị phân truyền thống chứa mã máy và do đó, gắn liền với một nền tảng cụ thể. Hệ thống phát triển Java của Sun Microsystems đáp ứng tất cả các yêu cầu này. Java là ngôn ngữ hướng đối tượng, sử dụng thuận tiện và đáng tin cậy nhờ những ưu điểm như đa nhiệm, hỗ trợ các giao thức Internet và đa nền tảng. Java là một ngôn ngữ được dịch và mọi chương trình Java được biên dịch dựa trên một máy giả định được gọi là Máy ảo Java. Kết quả của quá trình biên dịch này là mã byte Java, do đó có thể được thực thi trên bất kỳ hệ điều hành nào, miễn là nó có hệ thống thời gian chạy Java giúp diễn giải mã byte thành mã máy thực tế của hệ thống cụ thể.

Tuy nhiên, tính linh hoạt như vậy của công nghệ này dẫn đến một nhược điểm - nó đòi hỏi nhiều tài nguyên máy tính. Do các chương trình Java không chứa mã máy và hệ thống thời gian chạy Java được kích hoạt khi chúng chạy nên hiệu suất của chúng thấp hơn đáng kể so với các chương trình thông thường được viết bằng ngôn ngữ lập trình C++. Nhược điểm này ngày càng ít được chú ý hơn theo thời gian do sức mạnh tính toán của hệ thống máy tính ngày càng tăng.

Ngôn ngữ Java hướng đối tượng và có thư viện lớp khá lớn. Thư viện lớp Java đơn giản hóa rất nhiều việc phát triển ứng dụng bằng cách cung cấp cho người lập trình các công cụ mạnh mẽ để giải quyết các vấn đề phổ biến. Do đó, lập trình viên có thể chú ý hơn đến việc giải quyết các vấn đề được áp dụng, chẳng hạn như tổ chức mảng động, tương tác với hệ điều hành hoặc triển khai các thành phần giao diện người dùng.

lập trình java di động

1. Lịch sử hình thành ngôn ngữ JAVA

Ngôn ngữ Java bắt đầu như một phần của dự án tạo ra phần mềm tiên tiến cho các thiết bị gia dụng khác nhau. Dự án được bắt đầu bằng C++, nhưng một số vấn đề đã sớm nảy sinh, cách tốt nhất để giải quyết vấn đề đó là thay đổi chính công cụ - ngôn ngữ lập trình. Rõ ràng là cần có một ngôn ngữ lập trình độc lập với nền tảng, giúp tạo ra các chương trình không cần phải biên dịch riêng cho từng kiến ​​trúc và có thể được sử dụng trên các bộ xử lý khác nhau trong các hệ điều hành khác nhau.

Sự ra đời của ngôn ngữ Java bắt đầu bằng một câu chuyện khá thú vị. Năm 1990, nhà phát triển phần mềm của Sun Microsystems, Patrick Naughton nhận ra rằng ông cảm thấy mệt mỏi với việc duy trì hàng trăm giao diện phần mềm khác nhau được sử dụng trong công ty, và nói với Giám đốc điều hành Sun Microsystems và người bạn Scott McNeely rằng ông có ý định làm việc cho NeXT. Đến lượt McNeely yêu cầu Naughton liệt kê những lý do khiến anh không hài lòng và đưa ra giải pháp cho các vấn đề như thể anh là Chúa và có thể làm bất cứ điều gì.

Naughton tuy không ngờ rằng sẽ có người chú ý đến bức thư của mình nhưng vẫn nêu ra những phàn nàn của mình, chỉ trích không thương tiếc những khuyết điểm của Sun Microsystems, đặc biệt là kiến ​​trúc phần mềm NeWS đang được phát triển vào thời điểm đó. Trước sự ngạc nhiên của Naughton, lá thư của anh đã thành công: nó được gửi đến tất cả các kỹ sư hàng đầu tại Sun Microsystems, những người đã nhanh chóng phản hồi và bày tỏ sự ủng hộ nồng nhiệt đối với đồng nghiệp của họ cũng như tán thành quan điểm của anh ấy về tình hình tại Sun Microsystems. Lời kêu gọi cũng đã nhận được sự chấp thuận từ ban lãnh đạo cao nhất của công ty, cụ thể là Bill Joy, người sáng lập Sun Microsystems và James Gosling, ông chủ của Naughton.

Vào ngày Naughton chuẩn bị rời công ty, quyết định được đưa ra là thành lập một nhóm gồm các nhà phát triển hàng đầu để họ có thể làm bất cứ điều gì ngoại trừ tạo ra điều gì đó phi thường. Một nhóm sáu người bắt đầu phát triển một ngôn ngữ lập trình hướng đối tượng mới, được đặt tên là Oak, theo tên cái cây mọc dưới cửa sổ của Gosling.

Sun Microsystems đã sớm biến đội Xanh thành công ty Người đầu tiên. Công ty mới có một ý tưởng thú vị nhưng không tìm được ứng dụng phù hợp cho nó. Sau một loạt thất bại, tình thế bất ngờ thay đổi đối với công ty: trình duyệt Khảm được công bố. Do đó, World Wide Web đã ra đời, từ đó bắt đầu sự phát triển nhanh chóng của Internet. Naughton đề xuất sử dụng Oak để tạo các ứng dụng Internet. Vì vậy, Oak đã trở thành một sản phẩm độc lập và chẳng bao lâu sau, trình biên dịch Oak và trình duyệt Oak "WebRunner" đã được viết. Năm 1995, Sun Microsystems quyết định công bố một sản phẩm mới, đổi tên thành Java (lời giải thích hợp lý duy nhất cho cái tên này là do tình yêu cà phê của các lập trình viên). Khi Java đến với Internet, việc chạy các ứng dụng Java - các chương trình nhỏ được tải xuống qua Internet trở nên cần thiết. WebRunner được đổi tên thành HotJava và Netscape bắt đầu hỗ trợ các sản phẩm Java.

2. Ưu điểm của ngôn ngữ

Ngôn ngữ phải thể hiện những phẩm chất sau: tính đơn giản và sức mạnh, tính bảo mật, hướng đối tượng, độ tin cậy, tính tương tác, tính độc lập về kiến ​​trúc, khả năng diễn giải, hiệu suất cao và dễ học. Ngay cả khi bạn chưa bao giờ viết một dòng Java nào, thì việc biết về các khả năng của nó cũng rất hữu ích, vì chính các thuộc tính ngôn ngữ được liệt kê ở trên đã mang lại cho các trang của World Wide Web tính năng động của chúng.

2.1 Bảo mật

Vì ngôn ngữ Java được thiết kế để sử dụng trong môi trường nối mạng hoặc phân tán nên người ta chú ý nhiều đến tính bảo mật của nó. Hiện tại, ngôn ngữ Java cho phép bạn tạo các hệ thống được bảo vệ một cách đáng tin cậy khỏi vi-rút và truy cập trái phép.

Nhưng không có ngôn ngữ lập trình nào có thể cung cấp bảo mật 100%, vì không thể cung cấp mọi thứ. Các lỗ hổng đầu tiên trong Java đã được các chuyên gia bảo mật từ Đại học Princeton tìm thấy ở phiên bản Java 1.0. Có thể nói rằng tất cả các lỗi mới vẫn được tìm thấy, nhưng không một ngôn ngữ lập trình nào tránh khỏi điều này.

Tuy nhiên, các chuyên gia của Sun đang làm mọi cách để loại bỏ kịp thời các lỗ hổng bảo mật trong JDK. Vì vậy, công ty đã công bố các thông số kỹ thuật nội bộ của trình thông dịch ngôn ngữ Java và thu hút các chuyên gia độc lập trong lĩnh vực phần mềm bảo mật đến tìm kiếm lỗi.

Đây chỉ là một danh sách nhỏ các tình huống mà hệ thống bảo mật ngôn ngữ Java ngăn không cho xảy ra:

Tràn ngăn xếp chương trình có thể thực thi được do một số sâu gây ra;

Thiệt hại đối với các vùng bộ nhớ nằm ngoài không gian được phân bổ cho quy trình;

Đọc và ghi các tệp cục bộ khi sử dụng trình nạp lớp an toàn, chẳng hạn như trình duyệt web, không cho phép truy cập tệp đó.

Tất cả các biện pháp an toàn đều khá phù hợp và thường hoạt động mà không gặp vấn đề gì, nhưng sự thận trọng không bao giờ có hại. Theo thời gian, các biện pháp bảo vệ mới đã được thêm vào ngôn ngữ. Bắt đầu từ phiên bản 1.1, ngôn ngữ Java đã đưa ra khái niệm về các lớp được ký điện tử. Bằng cách sử dụng lớp được ký điện tử, bạn có thể chắc chắn về tác giả của nó. Nếu bạn tin tưởng nó, bạn có thể cấp cho lớp này tất cả các đặc quyền có sẵn trên máy của bạn.

Một cơ chế phân phối mã thay thế do Microsoft đề xuất dựa trên công nghệ ActiveX và chỉ sử dụng chữ ký số để bảo mật. Nhưng điều này là chưa đủ, bởi bất kỳ người dùng phần mềm Microsoft nào cũng có thể xác nhận rằng các chương trình của ngay cả những nhà sản xuất nổi tiếng cũng thường xuyên gặp sự cố, từ đó tạo ra nguy cơ hỏng dữ liệu.

Đồng thời, hệ thống bảo mật bằng ngôn ngữ Java đáng tin cậy hơn nhiều so với công nghệ ActiveX, vì nó kiểm soát ứng dụng một cách độc lập ngay từ khi khởi chạy và không cho phép nó gây ra thiệt hại.

2.2 Hướng đối tượng

Ngôn ngữ Java được phát triển như một ngôn ngữ thuần túy hướng đối tượng, không giống như C++, có mô hình đối tượng bị “làm suy yếu” bởi các khả năng còn sót lại của ngôn ngữ C. Java không có các cấu trúc C++ như struct, union và thủ tục; chúng được thay thế bằng các phương thức, giao diện và các lớp nâng cao hơn.

Các lớp trong Java được tạo khác với trong C++; nó liên quan đến cách Java xử lý các hoạt động kế thừa. Khi một lớp con được dẫn xuất từ ​​lớp cha (hoặc lớp cha), Java sẽ sử dụng từ khóa mở rộng:

lớp công khai MyString mở rộng String()

Sau câu lệnh này, lớp MyString kế thừa tất cả các phương thức và biến của siêu lớp của nó. Trong C++, việc này được thực hiện bằng cách sử dụng một khai báo như class:mode superclass(.

Các hàm và thủ tục trong Java được thay thế bằng các cấu trúc được gọi là phương thức. Các phương thức rất giống với các thủ tục C++, ngoại trừ các phương thức đó không thể độc lập với lớp (ngoại trừ các phương thức từ giao diện).

Trong Java, cũng như trong C++, có thể có nhiều hàm tạo, mang lại cho người lập trình khả năng khởi tạo một đối tượng theo nhiều cách khác nhau. Khi khai báo hàm tạo, có hai quy tắc cơ bản: tên hàm tạo và tên lớp phải khớp nhau; Khi khai báo hàm tạo, kiểu trả về không được chỉ định. Giống như các biến tham chiếu khác, các lớp được tạo động bằng từ khóa mới. Dưới đây là một ví dụ về khai báo lớp với nhiều hàm tạo:

Lớp công khai MyString mở rộng Chuỗi(

Chuỗi công khai x;

công khai MyString())(

x=Chuỗi mới(“Chuỗi mặc định”);

//gọi hàm tạo của lớp String

công khai MyString(String x)(

this.x=Chuỗi mới(x);

Trong ví dụ trên, từ khóa this được sử dụng theo cách tương tự như trong C++ để phân biệt giữa các tham chiếu đến biến lớp và biến phương thức.

Một cách khác để tạo một lớp là sử dụng hàm tạo siêu lớp và từ khóa super. Đây là một ví dụ đơn giản:

lớp công khai ParentClass(

công khai ParentClass(x,y)(

lớp công khai ChildClass mở rộng ParentClass(

công khai ChildClass(x,y)(

//gọi hàm tạo của siêu lớp

Các phương thức lớp tương tự như hàm tạo theo nhiều cách, nhưng chúng có thể trả về bất kỳ kiểu nào.

public int ClassMethod(int j)(

2.3 Độ tin cậy

Java giới hạn bạn trong một số lĩnh vực chính và do đó giúp bạn sớm phát hiện lỗi trong quá trình phát triển chương trình. Đồng thời, nó không chứa nhiều nguồn lỗi cố hữu trong các ngôn ngữ lập trình khác (ví dụ như gõ mạnh). Hầu hết các chương trình đang sử dụng ngày nay đều gặp sự cố ở một trong hai tình huống: khi bộ nhớ được cấp phát hoặc khi xảy ra ngoại lệ. Trong môi trường lập trình truyền thống, việc cấp phát bộ nhớ là một công việc khá tẻ nhạt - người lập trình phải theo dõi tất cả bộ nhớ được sử dụng trong chương trình, nhớ giải phóng nó khi không còn cần thiết nữa. Thông thường, các lập trình viên quên giải phóng bộ nhớ mà họ đã có được hoặc tệ hơn là bộ nhớ trống vẫn đang được một số phần của chương trình sử dụng. Các ngoại lệ trong môi trường lập trình truyền thống thường xảy ra trong các trường hợp như chia cho 0 hoặc cố gắng mở một tệp không tồn tại và phải được xử lý bằng cách sử dụng các cấu trúc phức tạp và không thể đọc được (ngoại trừ trong Delphi). Java giải quyết một cách hiệu quả cả hai vấn đề này bằng cách sử dụng trình thu gom rác để giải phóng bộ nhớ chưa được phân bổ và các phương tiện hướng đối tượng tích hợp để xử lý các ngoại lệ.

Quy trình thu gom rác đặc biệt là một trong những tính năng thú vị nhất của ngôn ngữ lập trình Java và thời gian chạy ứng dụng Java, được thiết kế để xóa các đối tượng không cần thiết khỏi bộ nhớ. Hệ thống này giúp người lập trình giảm bớt nhu cầu giám sát chặt chẽ việc sử dụng bộ nhớ bằng cách giải phóng rõ ràng các vùng không còn cần thiết.

Khi tạo các đối tượng trong Java, bạn có thể tuân theo nguyên tắc "tạo và quên nó đi", vì hệ thống thu gom rác sẽ đảm nhiệm việc xóa các đối tượng của bạn. Một đối tượng sẽ bị xóa khỏi bộ nhớ ngay khi không có tham chiếu đến nó từ các đối tượng khác.

Mức độ ưu tiên của quá trình thu gom rác là rất thấp nên việc "dọn dẹp" thời gian chạy ứng dụng Java không lấy đi tài nguyên của chính ứng dụng đó.

Con trỏ hay địa chỉ bộ nhớ là tính năng mạnh nhất và nguy hiểm nhất của C++. Nguyên nhân của hầu hết các lỗi trong mã ngày nay là do việc xử lý con trỏ không chính xác. Ví dụ, một trong những sai lầm điển hình là tính toán sai kích thước mảng từng đơn vị một và làm hỏng nội dung của ô nhớ nằm bên cạnh nó.

Mặc dù Java triển khai các đối tượng xử lý như các con trỏ nhưng nó thiếu khả năng làm việc trực tiếp với các con trỏ. Bạn không thể chuyển đổi một số nguyên thành một con trỏ, cũng như không thể truy cập một địa chỉ bộ nhớ tùy ý.

2.4 Tương tác

Java được tạo ra như một công cụ đáp ứng nhu cầu cấp thiết trong việc tạo các chương trình mạng tương tác. Java có một số giải pháp thú vị cho phép bạn viết mã thực hiện nhiều chức năng khác nhau cùng lúc, trong khi vẫn theo dõi được điều gì cần xảy ra và khi nào. Java sử dụng phương pháp tinh tế nhất từng được phát minh để giải quyết vấn đề đồng bộ hóa quy trình, cho phép bạn thiết kế các hệ thống tương tác đẹp mắt. Các quy trình Java tinh tế, dễ sử dụng cho phép bạn triển khai hành vi cụ thể trong chương trình của mình mà không gặp rắc rối khi nhúng vòng lặp sự kiện toàn cầu.

2.5 Độc lập với kiến ​​trúc máy tính

Trình biên dịch tạo ra một tệp đối tượng, định dạng của tệp này không phụ thuộc vào kiến ​​trúc máy tính. Trong trường hợp này, chương trình đã biên dịch có thể được thực thi trên bất kỳ bộ xử lý nào do hệ thống thực thi chương trình Java kiểm soát.

Để thực hiện điều này, trình biên dịch ngôn ngữ Java tạo ra các hướng dẫn mã byte độc ​​lập với kiến ​​trúc máy tính cụ thể. Mã byte được thiết kế theo cách có thể dễ dàng diễn giải trên bất kỳ máy nào hoặc được dịch nhanh chóng sang mã phụ thuộc vào máy.

Nhưng ý tưởng này không thể được gọi là mang tính cách mạng. Trở lại những năm 1970, hệ thống triển khai ngôn ngữ Pascal do Niclaus Wirth phát triển và hệ thống UCSD Pascal đã sử dụng cùng một công nghệ.

Việc sử dụng mã byte mang lại lợi ích lớn trong việc thực thi chương trình (mặc dù trong một số trường hợp, quá trình biên dịch đồng bộ sẽ bù đắp cho điều này). Các nhà phát triển ngôn ngữ Java đã thực hiện rất xuất sắc việc phát triển một bộ hướng dẫn mã byte hoạt động hoàn hảo trên hầu hết các máy tính hiện đại, dễ dàng dịch sang các hướng dẫn máy thực.

2.6 Phiên dịch và hiệu suất cao

Khả năng phi thường của Java trong việc chạy mã của nó trên bất kỳ nền tảng được hỗ trợ nào đạt được bằng cách dịch các chương trình của nó sang một biểu diễn trung gian gọi là mã byte. Ngược lại, mã byte có thể được diễn giải trên bất kỳ hệ thống nào có môi trường thời gian chạy Java. Hầu hết các hệ thống ban đầu cố gắng độc lập với nền tảng đều phải chịu một hình phạt rất lớn về hiệu suất (Basic, Perl). Mặc dù Java sử dụng trình thông dịch, nhưng mã byte vẫn dễ dàng được dịch trực tiếp sang mã máy gốc (trình biên dịch Just In Time) một cách nhanh chóng. Điều này đạt được hiệu suất rất cao (Symantec JIT được tích hợp vào Netscape Navigator).

2.7 Dễ học

Ngôn ngữ Java, mặc dù phức tạp hơn ngôn ngữ shell nhưng vẫn dễ học hơn rất nhiều so với các ngôn ngữ lập trình khác như C++. Java khác với C++ ở một số thay đổi chính giúp cú pháp Java dễ hiểu hơn: bộ tiền xử lý, tệp tiêu đề, câu lệnh được nhập và chỉ thị #define đã bị xóa. Điều này làm cho việc học Java dễ dàng hơn. Ví dụ: hãy xem xét đoạn chương trình sau:

Như bạn có thể thấy, Java đã loại bỏ tất cả các chỉ thị tiền xử lý, chẳng hạn như #define, giúp văn bản chương trình dễ đọc hơn. Thay vì chỉ thị #include của C++, Java sử dụng câu lệnh nhập để cho phép các lớp đối tượng khác được nhập vào mã được tạo.

3. Ứng dụng JAVA

Các chương trình được viết bằng ngôn ngữ lập trình Java có thể được chia theo mục đích của chúng thành hai nhóm lớn.

Nhóm đầu tiên bao gồm các ứng dụng Java được thiết kế để chạy tự động dưới sự điều khiển của một máy thông dịch Java đặc biệt. Việc triển khai máy này đã được tạo cho tất cả các nền tảng máy tính lớn.

Nhóm thứ hai được gọi là applet. Mỗi applet là một chương trình nhỏ được tải động qua mạng - giống như hình ảnh, tệp âm thanh hoặc phần tử hoạt hình. Tính năng chính của applet là chúng là các chương trình thực chứ không chỉ là một định dạng tệp khác để lưu trữ phim hoạt hình hoặc bất kỳ thông tin nào khác. Applet không chỉ chạy cùng một tập lệnh mà còn phản ứng với hành động của người dùng và có thể thay đổi hành vi của nó một cách linh hoạt.

Các ứng dụng liên quan đến ứng dụng đầu tiên là các chương trình độc lập thông thường. Vì chúng không chứa mã máy và chạy dưới một trình thông dịch đặc biệt nên hiệu suất của chúng thấp hơn đáng kể so với các chương trình thông thường được viết, chẳng hạn như bằng ngôn ngữ lập trình C++. Tuy nhiên, chúng ta không nên quên rằng các chương trình Java có thể chạy trên bất kỳ nền tảng nào mà không cần dịch lại, bản thân điều này có tầm quan trọng rất lớn trong quá trình phát triển Internet.

Các ứng dụng Java được nhúng vào các tài liệu HTML được lưu trữ trên máy chủ Web. Bằng cách sử dụng applet, bạn có thể làm cho các trang máy chủ Web trở nên động và có tính tương tác. Applet cho phép bạn thực hiện xử lý cục bộ phức tạp dữ liệu nhận được từ máy chủ Web hoặc được người dùng nhập bằng bàn phím. Vì lý do bảo mật, các applet (không giống như các ứng dụng Java thông thường) không có bất kỳ quyền truy cập nào vào hệ thống tệp của máy tính cục bộ. Họ chỉ có thể nhận tất cả dữ liệu để xử lý từ máy chủ Web. Việc xử lý dữ liệu phức tạp hơn có thể được thực hiện bằng cách tổ chức sự tương tác giữa các applet và phần mở rộng máy chủ Web - ứng dụng CGI và ISAPI.

Để cải thiện hiệu suất của các ứng dụng Java, các trình duyệt hiện đại sử dụng trình biên dịch Just-In-Time (JIT). Khi một applet được tải lần đầu tiên, mã của nó sẽ được dịch sang một chương trình thực thi thông thường, chương trình này được lưu vào đĩa và được thực thi. Kết quả là tốc độ thực thi tổng thể của một ứng dụng Java tăng lên nhiều lần.

4. Máy ảo JAVA và mã byte

Một chương trình được viết bằng một trong các ngôn ngữ cấp cao, bao gồm ngôn ngữ Java, được gọi là mô-đun nguồn, không thể được thực thi ngay lập tức. Trước tiên, nó phải được biên dịch, nghĩa là được dịch thành một chuỗi lệnh máy - một mô-đun đối tượng. Nhưng, theo quy định, nó không thể được thực thi ngay lập tức: mô-đun đối tượng cũng phải được liên kết với các thư viện chức năng được sử dụng trong mô-đun và phải cho phép tham chiếu chéo giữa các phần của mô-đun đối tượng, dẫn đến mô-đun tải - một chương trình hoàn toàn sẵn sàng để thực hiện.

Mô-đun nguồn, được viết bằng Java, không thể tránh khỏi các quy trình này, nhưng ở đây, tính năng chính của công nghệ Java được bộc lộ - chương trình được biên dịch trực tiếp thành các lệnh máy, nhưng không phải thành các lệnh của bộ xử lý cụ thể mà thành các lệnh của bộ xử lý đó. -gọi là máy ảo Java (JVM, Java Virtual Machine). Máy ảo Java là tập hợp các lệnh cùng với hệ thống để thực thi chúng. Máy ảo Java hoàn toàn dựa trên ngăn xếp, do đó, nó không yêu cầu đánh địa chỉ bộ nhớ phức tạp hoặc số lượng lớn thanh ghi. Do đó, các lệnh JVM rất ngắn, hầu hết chúng có độ dài 1 byte, đó là lý do tại sao các lệnh JVM được gọi là mã byte, mặc dù có các lệnh có độ dài 2 và 3 byte. Theo các nghiên cứu thống kê, độ dài lệnh trung bình là 1,8 byte. Mô tả đầy đủ về các lệnh và toàn bộ kiến ​​trúc JVM có trong Đặc tả máy ảo Java (VMS, Đặc tả máy ảo).

Một tính năng khác của Java là tất cả các hàm tiêu chuẩn được gọi trong một chương trình chỉ được kết nối với nó khi chạy và không được bao gồm trong mã byte. Như các chuyên gia nói, ràng buộc động xảy ra. Điều này cũng làm giảm đáng kể kích thước của chương trình được biên dịch.

Vì vậy, ở giai đoạn đầu tiên, một chương trình viết bằng Java được trình biên dịch dịch thành mã byte. Quá trình biên dịch này độc lập với loại bộ xử lý cụ thể và kiến ​​trúc của bất kỳ máy tính cụ thể nào. Nó có thể được thực hiện một lần ngay sau khi viết chương trình. Mã byte được ghi trong một hoặc nhiều tệp và có thể được lưu trữ trong bộ nhớ ngoài hoặc truyền qua mạng. Điều này đặc biệt thuận tiện do kích thước nhỏ của tệp bytecode. Mã byte kết quả sau đó có thể được thực thi trên bất kỳ máy tính nào có hệ thống triển khai JVM. Trong trường hợp này, cả loại bộ xử lý lẫn kiến ​​trúc của máy tính đều không quan trọng. Đây là cách thực hiện nguyên tắc Java “Viết một lần, chạy mọi nơi”.

Giải thích mã byte và liên kết động làm chậm đáng kể việc thực thi chương trình. Điều này không thành vấn đề trong những tình huống mà mã byte được truyền qua mạng, mạng vẫn chậm hơn bất kỳ cách diễn giải nào, nhưng trong những tình huống khác cần có một máy tính mạnh và nhanh. Vì vậy, các phiên dịch viên không ngừng được cải tiến để tăng tốc độ phiên dịch. Các trình biên dịch JIT (Just-In-Time) đã được phát triển để ghi nhớ các phần mã đã được diễn giải trong các hướng dẫn của máy xử lý và chỉ thực thi các phần này khi được truy cập lại, chẳng hạn như trong các vòng lặp. Điều này làm tăng đáng kể tốc độ tính toán lặp đi lặp lại. SUN đã phát triển toàn bộ công nghệ Hot-Spot và đưa nó vào máy ảo Java của mình. Nhưng tất nhiên, chỉ có bộ xử lý chuyên dụng mới có thể mang lại tốc độ cao nhất.

SUN Microsystems đã phát hành bộ vi xử lý PicoJava chạy trên tập lệnh JVM và đang có kế hoạch phát hành toàn bộ dòng bộ xử lý Java ngày càng mạnh mẽ. Hiện đã có bộ xử lý Java của các công ty khác. Các bộ xử lý này thực thi trực tiếp mã byte. Nhưng khi thực thi các chương trình Java trên các bộ xử lý khác, cũng cần phải diễn giải các lệnh JVM thành các lệnh của bộ xử lý cụ thể, điều đó có nghĩa là cần có một chương trình thông dịch và đối với từng loại bộ xử lý, từng kiến ​​trúc máy tính, bạn nên viết thông dịch viên riêng.

Vấn đề này đã được giải quyết trên hầu hết các nền tảng máy tính. Họ triển khai các máy ảo Java và đối với các nền tảng phổ biến nhất, có một số triển khai JVM từ các công ty khác nhau. Ngày càng có nhiều hệ điều hành và hệ thống quản lý cơ sở dữ liệu bao gồm việc triển khai JVM trong nhân của chúng. Một hệ điều hành JavaOS đặc biệt cũng đã được tạo ra, sử dụng trong các thiết bị điện tử. Hầu hết các trình duyệt đều có máy ảo Java tích hợp để chạy các applet.

Ngoài việc triển khai JVM để thực thi mã byte trên máy tính, bạn cũng cần có một tập hợp các hàm được gọi từ mã byte và được liên kết động với mã byte. Bộ này được đóng gói dưới dạng thư viện lớp Java bao gồm một hoặc nhiều gói. Mỗi hàm có thể được viết bằng mã byte, nhưng vì nó sẽ được lưu trữ trên một máy tính cụ thể nên nó có thể được viết trực tiếp trong hệ thống hướng dẫn của máy tính đó, do đó tránh được nhu cầu diễn giải mã byte. Các hàm như vậy được gọi là phương thức "gốc". Sử dụng các phương pháp gốc sẽ tăng tốc độ thực thi chương trình.

SUN Microsystems, người sáng tạo ra công nghệ Java, phân phối miễn phí một bộ công cụ phần mềm cần thiết cho toàn bộ chu trình làm việc với ngôn ngữ lập trình này: biên dịch, giải thích, gỡ lỗi, bao gồm cả thư viện lớp phong phú có tên JDK (Bộ công cụ phát triển Java).

Bộ chương trình và lớp JDK chứa:

1. Trình biên dịch Javac từ văn bản nguồn sang mã byte; trình thông dịch java chứa triển khai JVM;

2. Trình thông dịch jre nhẹ (không có trong phiên bản mới nhất);

3. Trình xem applet appietviewer, thay thế trình duyệt;

4. trình gỡ lỗi jdb;

5. Trình phân tách javap;

6. Chương trình lưu trữ và nén jar;

7. Chương trình thu thập tài liệu javadoc;

8. Chương trình Javah để tạo các tệp tiêu đề ngôn ngữ C;

9. chương trình javakey để thêm chữ ký điện tử;

10. Chương trình Native2ascii chuyển đổi tệp nhị phân thành tệp văn bản;

11. Các chương trình rmic và rmiregistry để làm việc với các đối tượng ở xa;

12. Chương trình serialver xác định số phiên bản của lớp;

13. Thư viện và tệp tiêu đề của các phương thức “gốc”;

14. Thư viện lớp Java API (Giao diện lập trình ứng dụng).

Ngoài JDK, SUN còn phân phối riêng một bộ JRE (Môi trường chạy thi hành Java).

Bộ chương trình và gói lớp JRE chứa mọi thứ cần thiết để thực thi mã byte, bao gồm trình thông dịch java (trong các phiên bản trước là trình thông dịch jre nhẹ) và thư viện lớp. Đây là một phần của JDK và không chứa trình biên dịch, trình gỡ lỗi hoặc các công cụ phát triển khác. Nó là JRE hoặc dạng tương tự của nó từ các công ty khác được chứa trong các trình duyệt có thể chạy các chương trình bằng Java, hệ điều hành và hệ thống quản lý cơ sở dữ liệu.

5. Tính di động của JAVA

Tạo các ứng dụng thực sự hoạt động trên nhiều nền tảng không phải là nhiệm vụ dễ dàng. Thật không may, vấn đề không chỉ giới hạn ở nhu cầu biên dịch lại mã nguồn của chương trình để hoạt động trong môi trường khác. Nhiều vấn đề nảy sinh với sự không tương thích của giao diện chương trình của các hệ điều hành và shell đồ họa khác nhau triển khai giao diện người dùng.

Chỉ cần nghĩ về các vấn đề liên quan đến việc chuyển các ứng dụng Windows 16-bit sang môi trường 32-bit của Windows 95 và Windows NT. Ngay cả khi bạn cẩn thận làm theo tất cả các phương pháp hay nhất để thiết kế ứng dụng của mình chạy trên các phiên bản Windows trong tương lai, bạn khó có thể biên dịch lại mã nguồn mà không thay đổi một dòng nào của nó. Tình hình thậm chí còn tệ hơn nếu bạn cần, ví dụ, chuyển mã nguồn của ứng dụng Windows sang môi trường hệ điều hành OS/2 hoặc sang vỏ X-Windows của hệ điều hành UNIX. Nhưng còn có những máy tính và máy trạm khác!

Như bạn có thể thấy, ngay cả khi bạn chuẩn hóa ngôn ngữ lập trình trên tất cả các nền tảng, các vấn đề tương thích với giao diện lập trình của hệ điều hành khiến việc chuyển các chương trình trên các nền tảng khác nhau trở nên khó khăn hơn nhiều. Và tất nhiên, bạn không thể mơ rằng mô-đun khởi động của cùng một chương trình có thể hoạt động mà không có những thay đổi trong môi trường của các hệ điều hành khác nhau và trên các nền tảng khác nhau. Nếu một chương trình được chuẩn bị cho bộ xử lý Intel, nó sẽ không bao giờ đồng ý chạy trên bộ xử lý Alpha hoặc bất kỳ bộ xử lý nào khác.

Kết quả là, khi tạo một ứng dụng có thể chạy trên nhiều nền tảng, bạn buộc phải tạo một số ứng dụng khác nhau và duy trì chúng một cách riêng biệt.

Hình 1 cho thấy cách một ứng dụng ban đầu được phát triển cho Windows NT được chuyển sang nền tảng Apple Macintosh.

Hình 1 Di chuyển một ứng dụng từ nền tảng Windows NT sang nền tảng Macintosh

Đầu tiên, người lập trình chuẩn bị mã nguồn ứng dụng cho nền tảng Windows NT và gỡ lỗi nó ở đó. Để có được mô-đun khởi động, các văn bản nguồn sẽ được biên dịch và chỉnh sửa. Mô-đun khởi động thu được có thể chạy trên bộ xử lý Intel trong hệ điều hành Windows NT.

Để chuyển một ứng dụng sang môi trường hệ điều hành Macintosh, lập trình viên thực hiện những thay đổi cần thiết đối với mã nguồn của ứng dụng. Những thay đổi này là cần thiết vì có sự khác biệt trong giao diện lập trình của hệ điều hành Windows NT và hệ điều hành được cài đặt trên Macintosh. Sau đó, các mã nguồn này được dịch và chỉnh sửa, tạo ra mô-đun khởi động có thể chạy trên môi trường Macintosh nhưng không thể chạy trên môi trường Windows NT.

Một chương trình Java được biên dịch thành một mô-đun nhị phân bao gồm các lệnh của bộ xử lý ảo Java. Một mô-đun như vậy chứa mã byte được trình thông dịch Java thực thi. Hiện tại, các mô hình bộ xử lý vật lý đầu tiên có khả năng thực thi mã byte này đã được tạo ra, nhưng trình thông dịch Java vẫn có sẵn trên tất cả các nền tảng máy tính chính. Tất nhiên, mỗi nền tảng sử dụng trình thông dịch riêng, hay chính xác hơn là bộ xử lý ảo Java của riêng nó.

Nếu ứng dụng Java (hoặc applet) của bạn cần chạy trên nhiều nền tảng thì không cần phải biên dịch nguồn của nó nhiều lần. Bạn có thể biên dịch và gỡ lỗi một ứng dụng Java trên một nền tảng thuận tiện nhất cho bạn. Kết quả là mã byte phù hợp với mọi nền tảng có bộ xử lý ảo Java.

Điều này được minh họa trong hình. 2.

Hình 2 Chuẩn bị một ứng dụng Java để chạy trên các nền tảng khác nhau

Bằng cách này, ứng dụng Java chỉ được biên dịch và gỡ lỗi một lần, đây là một cải tiến đáng kể. Tuy nhiên, câu hỏi vẫn là - phải làm gì với giao diện phần mềm của hệ điều hành, giao diện này khác nhau đối với các nền tảng khác nhau?

Ở đây, theo ý kiến ​​​​của chúng tôi, các nhà phát triển Java đưa ra một giải pháp khá tốt. Ứng dụng Java không truy cập trực tiếp vào giao diện hệ điều hành. Thay vào đó, nó sử dụng các thư viện lớp tiêu chuẩn được tạo sẵn chứa mọi thứ cần thiết để tổ chức giao diện người dùng, truy cập các tệp, làm việc trên mạng, v.v.

Tất nhiên, việc triển khai nội bộ của các thư viện lớp phụ thuộc vào nền tảng. Tuy nhiên, tất cả các mô-đun tải triển khai khả năng của các thư viện này đều được cung cấp sẵn cùng với máy ảo Java, vì vậy lập trình viên không cần phải lo lắng về điều này. Ví dụ, đối với hệ điều hành Windows, các tệp DLL tải động được cung cấp, bên trong đó tất cả chức năng của các lớp Java tiêu chuẩn đều bị ẩn.

Bằng cách trừu tượng hóa phần cứng ở cấp thư viện lớp, các lập trình viên không còn phải lo lắng về sự khác biệt trong việc triển khai giao diện lập trình của các hệ điều hành cụ thể. Điều này cho phép bạn tạo các ứng dụng di động thực sự không yêu cầu dịch lại và sửa đổi văn bản nguồn khi chuyển sang các nền tảng khác nhau.

Một vấn đề khác nảy sinh khi chuyển các chương trình được viết bằng ngôn ngữ lập trình C là kích thước vùng bộ nhớ bị chiếm bởi các biến thuộc loại tiêu chuẩn khác nhau trên các nền tảng khác nhau. Ví dụ: trong hệ điều hành Windows phiên bản 3.1, một biến kiểu int trong chương trình viết bằng C chiếm 16 bit. Trong Windows NT, kích thước này là 32 bit.

Rõ ràng, rất khó để viết một chương trình mà không biết chính xác có bao nhiêu bit trong một từ hoặc byte. Khi chuyển chương trình sang nền tảng có độ sâu bit khác, có thể xảy ra lỗi khó phát hiện.

Trong ngôn ngữ Java, tất cả các kiểu dữ liệu cơ bản đều có độ rộng bit cố định, độc lập với nền tảng. Vì vậy, người lập trình luôn biết rõ kích thước của các biến trong chương trình của mình.

Phần kết luận

Ngôn ngữ lập trình Java là ngôn ngữ hướng đối tượng hoàn toàn kế thừa phần lớn cú pháp từ C++. Tất nhiên, lợi ích của Java vượt xa tính chất đa nền tảng của nó. Ngôn ngữ Java có cú pháp đơn giản và logic hơn C++. Java với tư cách là một nền tảng cung cấp cho các lập trình viên một số lượng lớn các thư viện (gói), chứa một số lượng lớn các mô tả về các lớp và giao diện cho mọi trường hợp. Với sự trợ giúp của họ, bạn có thể tạo các ứng dụng Java 100% có khả năng truy cập cơ sở dữ liệu, hỗ trợ chuyển thư, với phần máy khách yêu cầu trình duyệt web hoặc ngược lại, với phần máy khách có giao diện phức tạp.

Java là một ngôn ngữ rất thanh lịch và đẹp đẽ. Tuy nhiên, khi sử dụng cũng không thể tránh khỏi những vấn đề. Một trong những vấn đề lớn là khi tạo một ứng dụng phức tạp bằng Java, bạn sẽ chỉ phải sử dụng ngôn ngữ này để tạo tất cả các phần của ứng dụng đó. Java không cung cấp nhiều khả năng tương tác giữa các ngôn ngữ (điều này có thể hiểu được do mục đích của Java là trở thành một ngôn ngữ lập trình đa mục đích). Trong thế giới thực, có hàng triệu dòng mã mà chúng ta muốn tích hợp với các ứng dụng Java mới. Tuy nhiên, điều này rất khó thực hiện.

Thư mục

Sukhov, S. A. Nguyên tắc cơ bản của lập trình Java [Văn bản]: sách giáo khoa / Sukhov S. A. - Ulyanovsk: Đại học Kỹ thuật Bang Ulyanovsk, 2006. - 88 tr.

Weber D. Công nghệ Java trong bản gốc: trans. từ tiếng Anh [Văn bản] - St. Petersburg: BHV - Petersburg, 2001

Sách giáo khoa Java [Tài nguyên điện tử] Chế độ truy cập: http://www.java-study.ru/java-uchebnik

Đăng trên Allbest.ru

...

Tài liệu tương tự

    Lịch sử hình thành ngôn ngữ Java. Nguyên tắc cơ bản của lập trình hướng đối tượng. Cấu trúc, đặc điểm cú pháp và ví dụ về khả năng ứng dụng của việc sử dụng ngôn ngữ Java, những ưu điểm của nó. Triển vọng việc làm của một lập trình viên Java.

    bài tập khóa học, được thêm vào ngày 14/12/2012

    Kiến trúc Java và Java RMI, các thuộc tính chính, hệ thống và thành phần cơ bản của chúng. Bảo mật và Máy ảo Java. Giao diện API Java. Một ví dụ về việc sử dụng ứng dụng RMI. Làm việc với chương trình "Máy tính". Tính linh hoạt, tính di động của nền tảng.

    bài tập khóa học, được thêm vào ngày 03/12/2013

    Tạo ngôn ngữ lập trình bằng ứng dụng Java. Lịch sử tên và logo Java. Đánh giá về sự đa dạng của các trình soạn thảo văn bản hiện đại. Xử lý chuỗi. Các phương thức trong lớp String. Java: Nhiệm vụ xử lý văn bản. Các ví dụ lập trình

    bài tập khóa học, được thêm vào ngày 19/07/2014

    Các giai đoạn phát triển, tính năng và khả năng của ngôn ngữ lập trình Java; nguồn gốc của tên. Các ứng dụng của Sun Microsystems: Ý tưởng, Kiểu nguyên thủy. Python là ngôn ngữ lập trình cấp cao, có mục đích chung: cấu trúc dữ liệu, cú pháp và ngữ nghĩa.

    tóm tắt, được thêm vào ngày 23/06/2012

    Ngôn ngữ Java là ngôn ngữ lập trình đơn giản, hướng đối tượng, đa luồng được Sun Microsystems phát triển để mở rộng khả năng của Internet. Các kiểu dữ liệu, từ vựng và cấu trúc điều khiển của một ngôn ngữ lập trình nhất định.

    trình bày, được thêm vào ngày 25/04/2014

    Phát triển trình soạn thảo đồ họa để vẽ đồ họa 2D và 3D bằng ngôn ngữ lập trình Java và giao diện lập trình ứng dụng Java 2D và Java 3D. Tạo trình soạn thảo đồ họa 3D Paint. Các phương thức cơ bản của lớp Graphics.

    bài tập khóa học, được thêm vào ngày 19/11/2009

    Lịch sử phát triển của ngôn ngữ lập trình Java. Lịch sử của Tetris - một trò chơi máy tính đình đám được phát minh ở Liên Xô. Luật chơi, tính năng tính điểm. Tạo giao diện chương trình, triển khai nó trong môi trường Java, mã hóa, thử nghiệm.

    bài tập khóa học, được thêm vào ngày 27/09/2013

    Mô tả ngôn ngữ lập trình Java: đặc điểm chung, thuộc tính chính, tổng quan ngắn gọn. Độ tin cậy và bảo mật, hiệu suất và hệ thống cơ bản của chương trình. Phát triển chương trình tra từ điển, thuật toán cho hoạt động của nó. Cái nhìn tổng quát về mã chương trình.

    bài tập khóa học, được thêm vào ngày 28/10/2012

    Đặc điểm của kiến ​​trúc Java. Công nghệ kết nối cơ sở dữ liệu Java. Các ứng dụng Java đa nền tảng. Ưu điểm của ngôn ngữ lập trình. Cấu trúc logic của cơ sở dữ liệu. Cấu trúc của gói phần mềm. Xác minh phần mềm.

    bài tập khóa học, được thêm vào ngày 13/01/2016

    Kiến trúc cấp lệnh nền tảng Java, Định dạng tệp lớp Java. Trình biên dịch ngôn ngữ giống như hợp ngữ cho phép bạn tạo các tệp lớp được JVM thực xử lý chính xác, hỗ trợ tất cả các lệnh mã byte Java và các khả năng quan trọng nhất của JVM.

Ngôn ngữ Java được tạo ra vào năm 1995 và qua 22 năm tồn tại, nó đã chiếm được cảm tình của hàng triệu lập trình viên. Làm sao anh ta làm điều đó? Tại sao không có một sự thay thế xứng đáng nào xuất hiện trong thời gian này? Để hiểu điều này, hãy nói về các tính năng của ngôn ngữ Java.

Khi phát hành ngôn ngữ này, Sun Microsystems đã đặt ra 5 mô hình để có thể thành công:

  1. tính đơn giản, hướng đối tượng và dễ hiểu;
  2. độ tin cậy và an toàn;
  3. tính di động và tính độc lập của nền tảng;
  4. hiệu suất cao;
  5. khả năng diễn giải, dòng chảy và tính năng động.

Chúng ta hãy xem xét từng người trong số họ chi tiết hơn.

Sự đơn giản

Cú pháp ngôn ngữ được kế thừa từ C++. Ngày nay, so với Python, Groove hay Go, nó khó có thể gọi là đơn giản, nhưng sau đó vẻ ngoài tiến hóa của nó đã khiến nó có thể thu hút được sự chú ý của các nhà phát triển C.

Một chương trình Hello World tiêu chuẩn trông như thế này:

public static void main(String args)
{
System.out.println("Xin chào thế giới");
}

Hình thức xây dựng này không làm tăng tốc độ gõ nhưng lại dễ đọc, dễ hiểu và dễ tái tạo.

độ tin cậy

Độ tin cậy được đảm bảo bởi hai nguyên tắc:

  • Ối. Hệ thống phân cấp kế thừa làm tăng khả năng đọc mã và giảm các lỗi không đáng có.
  • gõ mạnh. Nhà phát triển phải làm nhiều việc hơn nhưng dữ liệu được diễn giải một cách rõ ràng.

Ngoài ra, Java ban đầu được dự định cấm truy cập bộ nhớ trực tiếp, điều này cũng sẽ làm tăng độ tin cậy. Tuy nhiên, các nhà phát triển đã để lại một số lỗ hổng, chẳng hạn như cửa hậu sun.misc.Unsafe, có thể vượt qua lệnh cấm này.

Sự an toàn

Ngoài việc bảo tồn dạng chung của các cấu trúc, Java, so với C++, đã chính thức mất đi hai mối nguy hiểm tiềm ẩn: con trỏ và đa kế thừa. Trên thực tế, cả hai hàm đều được giữ nguyên, nhưng được trình bày dưới một dạng khác: các giá trị được sử dụng thay cho con trỏ và các giao diện, thay vì các lớp, có liên quan đến đa kế thừa. Tuy nhiên, tính năng này của lập trình java gần như loại bỏ được những thiệt hại có thể xảy ra do sự bất cẩn của nhà phát triển.

Sự tiện lợi

Khái niệm Java có nghĩa đen là: “Viết một lần, chạy mọi nơi”. Nghĩa là, khả năng thực thi của mã không phụ thuộc vào hệ điều hành được sử dụng hoặc phần mềm được cài đặt. Điều này đạt được thông qua việc dịch sang mã byte bằng máy ảo JVM.

Tính năng này của java trên Android rất hữu ích. Sự đa dạng của nhà sản xuất, kiểu điện thoại, đặc điểm - tất cả những điều này có thể ảnh hưởng tiêu cực đến hoạt động của ứng dụng nếu không có sự tồn tại của một công cụ phổ quát như vậy.

Hiệu suất

Tính đặc thù của Java liên quan đến việc dịch sang mã byte cũng có tác động tích cực đến hiệu suất của sản phẩm cuối cùng. Về tốc độ thực thi, các chương trình tương tự trong Java kém hơn 1,5-2 lần so với các chương trình trong C/C++, trong khi lại vượt trội hơn so với JavaScript, Ruby và Python.

Hệ sinh thái phát triển

Trong 22 năm tồn tại, ngôn ngữ này đã có được hàng chục IDE và framework, hàng trăm cộng đồng và diễn đàn, hàng nghìn thư viện và plugin. Tất cả những điều này đều có tác dụng có lợi đối với ngưỡng bước vào nghề, nhu cầu và chất lượng sản phẩm được sản xuất bằng Java.

Tất nhiên, mỗi ngôn ngữ lập trình phổ biến là duy nhất, mỗi ngôn ngữ đều có nhược điểm và ưu điểm riêng. Các tính năng của Java không mang tính cách mạng; chúng tuy nhỏ nhưng đồng thời lại rất cơ bản. Đây là điều phân biệt một ngôn ngữ tốt với ngôn ngữ tốt nhất.