Java Virtual Machine (JVM) และหลักการข้ามแพลตฟอร์ม <br /> ฉันเชื่อว่าทุกคนได้เรียนรู้ว่า Java มีคุณสมบัติข้ามแพลตฟอร์มสามารถ "รวบรวมได้ในทันทีและทำงานทุกที่" การปรับเปลี่ยน
ดังนั้น cross-platform จะถูกนำไปใช้อย่างไร? สิ่งนี้เกี่ยวข้องกับการพูดคุยเกี่ยวกับ Java Virtual Machine (JVM)
JVM ยังเป็นซอฟต์แวร์และแพลตฟอร์มที่แตกต่างกันมีรุ่นที่แตกต่างกัน ซอร์สโค้ด Java ที่เราเขียนจะสร้างไฟล์. class ที่เรียกว่าไฟล์ bytecode หลังจากการรวบรวม Java Virtual Machine มีหน้าที่แปลไฟล์ bytecode ลงในรหัสเครื่องภายใต้แพลตฟอร์มเฉพาะจากนั้นเรียกใช้ กล่าวอีกนัยหนึ่งตราบใดที่การติดตั้ง JVM ที่สอดคล้องกันบนแพลตฟอร์มที่แตกต่างกันคุณสามารถเรียกใช้ไฟล์ bytecode และเรียกใช้โปรแกรม Java ที่เราเขียน
ในระหว่างกระบวนการนี้โปรแกรม Java ที่เราเขียนไม่ได้ทำการเปลี่ยนแปลงใด ๆ
JVM เป็น "บริดจ์" และ "มิดเดิลแวร์" ซึ่งเป็นกุญแจสำคัญในการใช้งานข้ามแพลตฟอร์ม วัตถุประสงค์.
หมายเหตุ: ผลลัพธ์การรวบรวมไม่ได้สร้างรหัสเครื่อง แต่เพื่อสร้าง bytecode bytecode ที่สร้างขึ้นโดยการรวบรวมและการสร้างภายใต้แพลตฟอร์มที่แตกต่างกันนั้นเหมือนกัน แต่รหัสเครื่องที่แปลโดย JVM นั้นแตกต่างกัน
ดังนั้นการเรียกใช้โปรแกรม Java จะต้องมีการสนับสนุน JVM เนื่องจากผลการรวบรวมไม่ใช่รหัสเครื่องและจะต้องแปลอีกครั้งโดย JVM ก่อนที่จะดำเนินการ แม้ว่าคุณจะแพ็คเกจโปรแกรม Java ลงใน Executables (เช่น. exe) คุณก็ยังต้องการการสนับสนุน JVM
หมายเหตุ: โปรแกรม Java ข้ามแพลตฟอร์มไม่ใช่ JVMS JVM ได้รับการพัฒนาใน C/C ++ และเป็นรหัสเครื่องที่รวบรวมได้
เกี่ยวกับประสิทธิภาพการดำเนินการของ JVM
ในช่วงไม่กี่ปีที่ผ่านมาของการเปิดตัว Java ผู้คนมีความคิดเห็นที่แตกต่างกัน
อย่างไรก็ตาม JVM มีตัวเลือกในการแปลและบันทึก bytecode ที่ใช้บ่อยที่สุดในรหัสเครื่องซึ่งเป็นกระบวนการที่เรียกว่าการรวบรวมทันที วิธีนี้มีประสิทธิภาพมากซึ่งนำไปสู่การใช้เครื่องเสมือนจริงบนแพลตฟอร์ม. NET ของ Microsoft
คอมไพเลอร์ที่ทันเวลาตอนนี้ค่อนข้างโดดเด่นและได้กลายเป็นคู่แข่งของคอมไพเลอร์แบบดั้งเดิมและในบางกรณีก็เกินกว่าคอมไพเลอร์แบบดั้งเดิมเพราะ JVM สามารถตรวจสอบข้อมูลรันไทม์ได้ ตัวอย่างเช่นคอมไพเลอร์ทันทีสามารถตรวจสอบและเพิ่มประสิทธิภาพรหัสที่ใช้บ่อยการกำจัดการเรียกใช้ฟังก์ชัน (เช่น "ฝัง")
อย่างไรก็ตาม Java มีค่าใช้จ่ายเพิ่มเติมบางอย่างที่ C/C ++ ไม่มีและแอปพลิเคชันหลักจะช้าลง ตัวอย่างเช่น Java ใช้วิธีการวาดภาพที่ไม่ขึ้นกับแพลตฟอร์มและการดำเนินการของโปรแกรม GUI (โปรแกรมลูกค้า) ช้า
ความล้มเหลวของตลาดลูกค้า
ห้องสมุด GUI ของ Java นั้นไม่ได้ยอดเยี่ยมอินเทอร์เฟซไม่เป็นมิตรและผู้ใช้ส่วนใหญ่ไม่คุ้นเคย
สิ่งที่ไม่สามารถยอมรับได้คือหลังจากที่ Microsoft แยกความสนใจและดวงอาทิตย์ของตัวเองแล้ว Windows ไม่ได้ติดตั้ง JVM ไว้ล่วงหน้าอีกต่อไป . แต่คุณคาดหวังให้เขารู้เกี่ยวกับ JVM และติดตั้งการตั้งค่าได้อย่างถูกต้องหรือไม่?
แม้ว่าคุณจะสามารถรวม JVM เข้ากับโปรแกรมของคุณ แต่ติดตั้งและตั้งค่าโดยอัตโนมัติและไม่อนุญาตให้ผู้ใช้แทรกแซงคุณต้องการมาพร้อมกับ JVM ที่ใหญ่กว่าโปรแกรมของคุณหรือไม่? มันอาจเป็นที่ยอมรับสำหรับซอฟต์แวร์ที่จะทำเช่นนี้ พื้นที่ดิสก์เสียไปเท่าไหร่?
ดังนั้นโปรแกรมลูกค้าเพียงไม่กี่คนสำหรับผู้ใช้ทั่วไปที่เปิดตัวในตลาดโดยตรงได้รับการพัฒนาใน Java หากคุณต้องการมีส่วนร่วมในการพัฒนาลูกค้าขอแนะนำให้เรียนรู้ C/C ++ และ. NET ซึ่งมีข้อได้เปรียบที่ดีในการพัฒนาลูกค้าหน้าต่าง
เหตุผลหลายประการถูกกำหนดให้ไม่เอื้ออำนวยที่จะได้รับการแนะนำให้รู้จักกับตลาดและได้รับการยอมรับจากผู้ใช้ทั่วไป แต่แล้วการพัฒนาลูกค้าไม่ใช่ความตั้งใจดั้งเดิมของ Java
แนวคิดคลาส Java และวัตถุ
Java เป็นภาษาการเขียนโปรแกรมเชิงวัตถุเพื่อทำความเข้าใจ Java คุณต้องเข้าใจแนวคิดของชั้นเรียนและวัตถุก่อน
ชั้นเรียนใน Java ถือได้ว่าเป็นโครงสร้างรุ่นอัพเกรดในภาษา C โครงสร้างเป็นประเภทข้อมูลที่สร้างขึ้นซึ่งสามารถมีสมาชิกที่แตกต่างกัน (ตัวแปร) และชนิดข้อมูลของสมาชิกแต่ละคนสามารถแตกต่างกันได้ ตัวอย่างเช่น:
#include <stdio.h> int main () {// กำหนดโครงสร้างนักเรียนโครงสร้าง {// ชื่อตัวแปร * / สมาชิกของโครงสร้างการดำเนินการ stu1.name = "Xiao Ming"; ชื่อ, stu1.age, stu1.score); ผลการทำงาน:
อายุของ Xiao Ming คือ 15 และเกรดของเขาคือ 92.500000
คลาสใน Java ยังเป็นประเภทของการสร้างประเภทข้อมูล แต่ได้รับการขยายออกไป ตัวอย่างเช่น:
การสาธิตระดับสาธารณะ {โมฆะคงที่หลัก (สตริง [] args) {// กำหนดชั้นเรียนนักเรียนชั้นเรียน {// กำหนดคลาสผ่านชั้นเรียนคีย์เวิร์ดคลาส // ตัวแปรที่มีอยู่ในชื่อสตริงคลาส; ฟังก์ชั่นที่รวมอยู่ในนั้น Says () {System.out.println (ชื่อ + "อายุคือ" + อายุ + "คะแนนคือ" คะแนน)}} // กำหนดตัวแปรผ่านคลาสนั่นคือสร้างวัตถุ นักเรียน stu1 = ใหม่นักเรียน (); );}} ผลการทำงาน:
อายุของ Xiao Ming คือ 15 และเกรดของเขาคือ 92.5
ในภาษา C คำจำกัดความของตัวแปรโครงสร้างสามารถทำได้โดยชื่อโครงสร้างและพื้นที่หน่วยความจำสามารถจัดสรรได้ พื้นที่
การเปรียบเทียบสามารถเปรียบเทียบกับภาพวาดวัตถุสามารถเปรียบเทียบกับชิ้นส่วนและภาพวาดอธิบายพารามิเตอร์ของชิ้นส่วนและงานที่พวกเขาทำ
ใน Java การใช้คำหลักใหม่คุณสามารถสร้างวัตถุผ่านคลาสนั่นคือการสร้างภาพวาดเป็นชิ้นส่วน
หมายเหตุ: ชั้นเรียนเป็นเพียงภาพวาดที่เล่นคำอธิบายและไม่ได้ครอบครองพื้นที่หน่วยความจำ
ตัวแปรและฟังก์ชั่นที่มีอยู่ในชั้นเรียนมีชื่อเฉพาะ
การเขียนโปรแกรมเชิงวัตถุ (OOP)
คลาสเป็นแนวคิดทั่วไป ชั้นเรียนสามารถถือได้ว่าเป็นโครงสร้างที่ได้รับการอัพเกรด -โครงการขนาดใหญ่
เนื่องจาก Java, C ++ และภาษาอื่น ๆ สนับสนุนคลาสและวัตถุการเขียนโปรแกรมในภาษาเหล่านี้เรียกว่าการเขียนโปรแกรมเชิงวัตถุและภาษาเหล่านี้เรียกว่าภาษาการเขียนโปรแกรมเชิงวัตถุ เนื่องจากภาษา C ไม่สนับสนุนแนวคิดของคลาสและวัตถุจึงเรียกว่าภาษาการเขียนโปรแกรมที่มุ่งเน้นกระบวนการ
ในความเป็นจริงการมุ่งเน้นวัตถุเป็นเพียงการอัพเกรดที่มุ่งเน้นกระบวนการ
ในภาษา C บล็อกรหัสที่นำกลับมาใช้ใหม่ซึ่งสามารถกำหนดฟังก์ชั่นบางอย่างได้เป็นฟังก์ชั่นและฟังก์ชั่นที่มีคลาสของฟังก์ชั่นถูกประกาศในไฟล์ส่วนหัวและฟังก์ชั่นประเภทต่าง ๆ จะถูกประกาศในไฟล์ส่วนหัวที่แตกต่างกัน ง่ายต่อการเขียนและโทร
ใน Java บล็อกโค้ดที่ทำหน้าที่ให้เสร็จสมบูรณ์สามารถกำหนดเป็นวิธีการและวิธีการที่มีฟังก์ชั่นที่คล้ายกันสามารถกำหนดได้ในคลาสนั่นคือในไฟล์ต้นฉบับ (เนื่องจากไฟล์ต้นฉบับสามารถมีคลาสสาธารณะเดียวเท่านั้น) ไฟล์ต้นฉบับหลายไฟล์สามารถอยู่ในโฟลเดอร์ซึ่งมีชื่อเฉพาะที่เรียกว่าแพ็คเกจ
ด้านบนคือ C ++ ในขณะที่ Java คือ:
การเขียนโปรแกรมเชิงวัตถุไม่มีข้อได้เปรียบในการดำเนินการซอฟต์แวร์อย่างมีประสิทธิภาพ