การเริ่มต้นใช้งาน Java นั้นง่ายกว่าที่ฉันคิดไว้มาก จนถึงตอนนี้ ฉันมีความเข้าใจเกี่ยวกับโครงสร้างไวยากรณ์พื้นฐานของ Java แล้ว แต่ฉันรู้ว่าการศึกษาเชิงลึกของภาษาใดๆ ก็ตามต้องใช้เวลาและการฝึกฝน
Applet เป็นโค้ดที่เขียนด้วยภาษา Java ที่สามารถเรียกใช้บนฝั่งเบราว์เซอร์ได้ ความแตกต่างที่ชัดเจนระหว่างมันกับแอปพลิเคชันนั้นอยู่ที่วิธีการดำเนินการ ตัวอย่างเช่น โปรแกรม C เริ่มทำงานจากโปรแกรม main() ในขณะที่ Applet นั้นซับซ้อนกว่านั้นฉันไม่รู้ว่ามันซับซ้อนแค่ไหน แต่ฉันจะค่อยๆ เข้าใจมัน คุณสมบัติที่สำคัญเกี่ยวกับ Applet คือฉันสามารถส่งค่าในรูปแบบ HTML เป็นพารามิเตอร์ไปยัง Applet ได้ (รับค่าพารามิเตอร์ผ่าน getParameter()) ด้วยวิธีนี้ เพื่อสร้างเอฟเฟกต์ที่แตกต่างกัน เราไม่จำเป็นต้องคอมไพล์โปรแกรม Java ใหม่ แต่เพียงแค่แก้ไขค่าพารามิเตอร์ HTML เนื่องจากโค้ด HTML สามารถสร้างได้แบบไดนามิก ฉันจึงสามารถควบคุมเอฟเฟกต์ไดนามิกของหน้าเว็บได้ตามต้องการ
มีสามวิธีหลักในวงจรชีวิตของ Applet: เริ่มต้น เริ่มต้น และหยุด
init(): รับผิดชอบในการเริ่มต้น Applet วิธีการนี้จะถูกดำเนินการเพียงครั้งเดียวตลอดวงจรชีวิตของ Applet ซึ่งเหมือนกับเหตุการณ์ OnCreate() ใน Delphi
start(): หลังจากที่ระบบเรียก init() มันจะเรียก start() โดยอัตโนมัติ และทุกครั้งที่หน้าต่างปัจจุบันถูกเปิดใช้งานอีกครั้ง วิธีการนี้จะถูกเรียก ซึ่งคล้ายกับเหตุการณ์ OnShow() ใน Delphi
stop(): เมธอดนี้ถูกเรียกหลังจากที่ผู้ใช้ออกจากหน้าที่ Applet ตั้งอยู่ ช่วยให้คุณสามารถหยุดการทำงานของทรัพยากรบางอย่างเมื่อผู้ใช้ไม่สนใจ Applet เพื่อไม่ให้กระทบต่อประสิทธิภาพการทำงานของระบบ และเราไม่จำเป็นต้องลบวิธีนี้ออกโดยไม่ตั้งใจ เหตุการณ์ในเดลฟี
ต่อไปนี้เป็นชื่อไฟล์ของ HelloWorld เวอร์ชัน Applet
: HelloWorld.java
import java.applet.Applet;
นำเข้า java.awt.Graphics
คลาสสาธารณะ HelloWorld ขยาย Applet
-
ชื่อสตริง;
โมฆะสาธารณะ init(){
title="สวัสดีชาวโลก";
-
สีโมฆะสาธารณะ (กราฟิก g)
-
g.drawString(หัวเรื่อง, 50, 20);
}
}
เราจะเห็นได้ว่าไม่มีฟังก์ชันหลักในโปรแกรม แล้วมันทำงานอย่างไร เนื่องจาก Applet ทำงานในสภาพแวดล้อมของเบราว์เซอร์ เราจึงต้องเรียกมันในไฟล์ HTML แท็กที่เกี่ยวข้องที่จำเป็นต้องใช้คือ < แอปเพล็ต> ก่อนอื่นเราจะสร้างไฟล์ HTML test.htm ซอร์สโค้ดจะเป็นดังนี้:
<html>
<ร่างกาย>
แอปเพล็ตแรกของฉันมาที่นี่:
<br>
<รหัสแอปเพล็ต=HelloWorld.class width=650 height=500>
</แอปเพล็ต>
</แอปเพล็ต>
</ร่างกาย>
</html>
วางไฟล์นี้ไว้ในไดเร็กทอรีเดียวกับ HelloWorld.java จากนั้นคอมไพล์ HelloWorld.java คลิก test.htm เพื่อเปิดโดยตรง และคุณจะเห็นว่าโปรแกรม Applet เริ่มทำงาน หรือใช้คำสั่ง AppletViewer AppletViewer test htm คุณยังสามารถเรียกใช้ Applet ได้โดยตรงโดยไม่ต้องใช้เบราว์เซอร์
โปรแกรมต่อไปนี้สามารถช่วยให้เราเข้าใจได้ดีขึ้นว่า Java Applet เรียกวิธีการต่างๆ ที่เราแนะนำข้างต้นอย่างไรตลอดวงจรการใช้งาน
ชื่อไฟล์: StartStop.java
นำเข้า java.awt.*;
นำเข้า java.applet.*;
StartStop คลาสสาธารณะขยาย Applet
-
ข้อความ StringBuffer;
โมฆะสาธารณะ init()
-
message=new StringBuffer("เริ่มต้นเสร็จแล้ว...");
-
โมฆะสาธารณะเริ่มต้น ()
-
message.append("เริ่มแล้ว...");
}
โมฆะสาธารณะหยุด()
-
message.append("หยุดแล้ว...");
}
สีโมฆะสาธารณะ (กราฟิก g)
-
g.drawString(message.toString(), 150, 50);
}
}
วิธีดำเนินการเหมือนกับข้างต้น (สำหรับโปรแกรมนี้ โปรดดูที่ <Java Concise Tutorial> ของอุตสาหกรรมเครื่องจักร)
ต่างจากภาษา C ตรงที่การใช้งาน GUI โดยใช้ Java นั้นง่ายกว่ามาก เนื่องจากเป็นภาษาเชิงวัตถุล้วนๆ AWT ของ Java จึงมีองค์ประกอบอินเทอร์เฟซต่างๆ ให้เราเรียกใช้ เช่นเดียวกับส่วนประกอบใน Delphi ต่อไปนี้เป็นตารางเปรียบเทียบของวัตถุ GUI ใน Java และส่วนประกอบที่เกี่ยวข้องใน Delphi
ชวา เดลฟี
ปุ่ม TButton
แคนวาส ทีแคนวาส
ช่องทำเครื่องหมาย Tช่องทำเครื่องหมาย
ช่องทำเครื่องหมายกลุ่ม TRadioGroup
ตัวเลือก TComboBox
ป้าย TLabel
ฟิลด์ข้อความ TEdit
TextArea TMemo
อย่างไรก็ตาม JDK ไม่ใช่เครื่องมือพัฒนา Visual RAD (การพัฒนาแอปพลิเคชันอย่างรวดเร็ว) การใช้ออบเจ็กต์ไม่สามารถทำได้โดยการลากและขยับเหมือน Delphi เท่านั้น แต่ต้องการให้เราเขียนโค้ดการโทร สิ่งนี้จะสร้างปัญหา ฉันจะทำอย่างไร ทำให้องค์ประกอบต่างๆ วางอยู่ใน Interface ตามความต้องการของฉัน เมื่อมีองค์ประกอบไม่มาก ฉันสามารถให้ Java จัดวาง (Layout) ได้โดยอัตโนมัติ แต่เมื่อมีหลายองค์ประกอบ หรือเมื่อต้องวางองค์ประกอบตามความต้องการของ แอปพลิเคชันคุณต้องใช้พาเนล (Panel) พาเนลยังมีส่วนประกอบที่เกี่ยวข้อง (TPanel) ใน Delphi แต่ส่วนใหญ่จะใช้เพื่อแบ่งส่วนอินเทอร์เฟซและสร้างเลย์เอาต์คร่าวๆ ต้องมีการปรับเปลี่ยนด้วยตนเอง Java ก็ใช้ได้เฉพาะ Panel ที่ใช้ในการวางตำแหน่งซึ่งถือเป็นข้อบกพร่อง
หลังจากเริ่มต้นแล้ว ก็ถึงเวลาดำดิ่งสู่แนวคิดของวัตถุ
สมมติว่าประเภทข้อมูลแบบกำหนดเองที่เรียกว่า Date ถูกสร้างขึ้นใน Java ดังนี้
วันที่เรียนสาธารณะ{
อินท์เดย์;
เดือนอินท์;
ปีสากล;
}
ดังนั้นสำหรับสามคำสั่งต่อไปนี้ที่ประกาศตัวแปร จะมีความแตกต่างหรือไม่เมื่อ Java จัดสรรหน่วยความจำให้กับพวกมัน?
(1) ฉัน;
(2) วันที่เกิดของฉัน;
(3) Date mybirth=new Date();
มีแน่นอน และการจัดสรรเป็นดังนี้:
(1) Java จะจัดสรรหน่วยความจำของตัวแปรจำนวนเต็มสำหรับจำนวนเต็ม i โดยปกติจะเป็น 2 ไบต์
(2) Java ประกาศคลาส Date ตัวแปรอินสแตนซ์ mybirth ได้รับการจัดสรรพร้อมพื้นที่เก็บข้อมูล แต่สิ่งที่เก็บไว้ในพื้นที่เก็บข้อมูลนี้เป็นเพียงการอ้างอิงหรือที่อยู่เท่านั้น ไม่มีสิ่งใดในที่อยู่ปัจจุบัน ดังนั้นเราจึงไม่สามารถใช้ตัวแปรอินสแตนซ์นี้หรืออ้างอิงถึงสมาชิกของตัวแปรได้
(3) Java สร้างตัวแปรอินสแตนซ์ mybirth ของคลาส Date จัดสรรพื้นที่เก็บข้อมูลเพียงพอสำหรับตัวแปรสมาชิก และสุดท้ายส่งคืนการอ้างอิงไปยังพื้นที่เก็บข้อมูลนี้ นั่นคือ ส่งคืนที่อยู่แรกของพื้นที่เก็บข้อมูลนี้ จากนั้นส่งผ่าน mybirth นั่นคือ ที่อยู่แรกนี้ใช้เพื่อเข้าถึงสมาชิกแต่ละคนของตัวแปรอินสแตนซ์นี้ เช่น mybirth.day, mybirth.month, mybirth.year
เมื่อเราประกาศตัวแปรประเภทข้อมูลพื้นฐาน (เช่น บูลีน ไบต์ สั้น ถ่าน int ยาว แบน สองเท่า) ระบบจะจัดสรรหน่วยความจำสำหรับตัวแปรโดยอัตโนมัติ แต่หากมีการประกาศตัวแปร String หรือผู้ใช้กำหนด ระบบจะไม่จัดสรรหน่วยความจำให้ทันที เหตุใดจึงเป็น
เช่นนี้ เนื่องจากทั้งตัวแปร String และผู้ใช้กำหนดอยู่ในหมวดหมู่ของคลาส A ที่ประกาศเป็นคลาส ไม่ใช่ชิ้นส่วนของข้อมูลอีกต่อไป แต่เป็นการอ้างอิงถึงข้อมูล กล่าวคือ mybirth ถือได้ว่าเป็นตัวชี้ไปยังอินสแตนซ์ของคลาส และที่อยู่จะถูกเก็บไว้ในนั้น ซึ่งง่ายต่อการเข้าใจ
หากเจาะลึกเข้าไปอีก เนื่องจากค่าตัวแปรอินสแตนซ์ของคลาสคือพอยน์เตอร์ และพอยน์เตอร์นี้จะชี้ไปที่อินสแตนซ์ของคลาส ดังนั้นเราสามารถกำหนดตัวแปรอินสแตนซ์ของคลาสหลายคลาสด้วยชื่อที่แตกต่างกันได้อย่างชัดเจน และชี้ตัวแปรทั้งหมดไปที่อินสแตนซ์เดียว ตัวอย่างเช่น:
University u=new University();//มีการกำหนดตัวแปรอินสแตนซ์ u ของคลาส University และพื้นที่เก็บข้อมูลของอ็อบเจ็กต์จะถูกจัดสรรให้กับตัวแปรนั้น
University u2=u;//ตัวแปรอินสแตนซ์ u2 ก็ถูกกำหนดไว้เช่นกัน และค่าของ u ถูกกำหนดให้กับมัน เมื่อพิจารณาจาก u2
แล้วจริงๆ แล้ว u2 และ u เป็นสิ่งเดียวกันยกเว้นชื่อที่ต่างกัน เพราะพวกเขาชี้ไปยังที่อยู่เดียวกัน
ฉันคิดว่ายังคงเป็นสิ่งสำคัญที่จะชี้แจงประเด็นนี้ โครงสร้างข้อมูลเหล่านี้เป็นสิ่งที่โปรแกรมเมอร์จำเป็นต้องรู้