โครงสร้างแบบมีเงื่อนไข สภาพแวดล้อมการทำงานคราส ตัวระบุ Java
ไวยากรณ์ของภาษา Java ขึ้นอยู่กับไวยากรณ์ของภาษา C แต่มีความแตกต่างดังต่อไปนี้:
ตัวระบุ:
- เมื่อเขียนตัวระบุสามารถใช้ทั้งตัวอักษรละตินและตัวอักษรของตัวอักษรประจำชาติ
- ตัวระบุสามารถมีเครื่องหมายดอลลาร์.
นี่คือกฎไวยากรณ์พื้นฐาน
- ตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กถือเป็นอักขระที่แตกต่างกัน ดังนั้น J และ j จึงเป็นตัวแปรที่แตกต่างกันโดยสิ้นเชิง
- เมื่อเขียนตัวระบุ จะใช้ตัวอักษรละตินและตัวอักษรของตัวอักษรประจำชาติ ตัวเลข ขีดล่าง และเครื่องหมายดอลลาร์ ตัวระบุไม่สามารถเริ่มต้นด้วยตัวเลขหรือมีช่องว่าง ความยาวของตัวระบุไม่จำกัด แต่เพื่อให้โปรแกรมอ่านง่าย คุณควรพยายามใช้ชื่อที่สั้นและมีความหมาย
- ความคิดเห็นมีสองประเภท
- ความคิดเห็นหลายบรรทัด ความคิดเห็นในข้อความอยู่ในวงเล็บเช่น
/ * นี่คือข้อความของความคิดเห็น * /
และสามารถป้อนได้ทุกที่ โดยเฉพาะภายในโอเปอเรเตอร์ - ความคิดเห็นหนึ่งบรรทัด ดูความคิดเห็น:
// นี่คือข้อความของความคิดเห็น - ใช้ได้จนถึงท้ายบรรทัดเท่านั้น
- ความคิดเห็นหลายบรรทัด ความคิดเห็นในข้อความอยู่ในวงเล็บเช่น
- แต่ละประโยคลงท้ายด้วย "; ".
- สามารถวางคำสั่งหลายรายการในบรรทัดได้
- วงเล็บปีกกา () ระบุข้อความประกอบ โอเปอเรเตอร์ทั้งหมดที่วางอยู่ระหว่างพวกเขาถือเป็นโอเปอเรเตอร์เดียว
- ต้องอธิบายประเภทที่ใช้ทั้งหมดก่อนใช้งานครั้งแรก โฆษณาสามารถอยู่ที่ใดก็ได้ในโปรแกรม
- อักขระอยู่ในเครื่องหมายคำพูดเดี่ยว สตริงในเครื่องหมายคำพูดคู่
คีย์เวิร์ด
คีย์เวิร์ดมีความหมายพิเศษสำหรับคอมไพเลอร์ และคำเหล่านี้สามารถใช้ได้ตามความหมายที่กำหนดไว้เท่านั้น คำสงวนไม่สามารถใช้เป็นตัวระบุที่กำหนดเองได้
การเปลี่ยนแปลงใด ๆ ในตัวแปรของตัวแปรหนึ่งจะเปลี่ยนตัวแปรของอีกตัวหนึ่ง เมื่อมีการประกาศวัตถุ ที่อยู่ของตำแหน่งหน่วยความจำจะถูกเรียก ซึ่งมักจะเป็นที่อยู่ของตำแหน่งหน่วยความจำแรกในพื้นที่สงวนที่มีข้อมูลทั้งหมดที่เกี่ยวข้องกับวัตถุ การจัดการใดๆ ของวัตถุนี้หมายถึงที่อยู่นี้ การเปรียบเทียบสองอินสแตนซ์ของอ็อบเจ็กต์ทำได้โดยการอ้างอิงของอินสแตนซ์เหล่านี้
ตัวอย่างโค้ด Java enum
เป็นกระบวนการที่เพิ่มฟังก์ชันการทำงานให้กับคลาสโดยไม่ต้องเขียนโค้ดทั้งหมดในคลาสนั้นใหม่ คลาสใหม่สืบทอดข้อมูลและวิธีการทั้งหมดของคลาสที่ได้รับมา จากนั้นจึงมีความจำเป็นที่คอนสตรัคเตอร์ที่ไม่มีพารามิเตอร์อยู่ในคลาสพาเรนต์ ตัวอย่างเช่น คุณสามารถใช้วิธีการอื่นในการวาดสี่เหลี่ยมทึบนอกเหนือจากที่กล่าวถึงแล้ว ตัวอย่างเช่น โดยการสร้างคลาสสี่เหลี่ยมใหม่ที่สืบทอดคลาสหลักสี่เหลี่ยม สำหรับข้อมูลของสี่เหลี่ยมผืนผ้านั้นจะต้องเปิดเผยต่อสาธารณะซึ่งขัดต่อหลักการห่อหุ้ม
วี ภาษาจาวาคำต่อไปนี้สงวนไว้ คีย์เวิร์ด
คำหลักสามารถแบ่งออกเป็นกลุ่ม:
วิธีแก้ไขคือกำหนดตัวแปรคลาสด้วยตัวดัดแปลงที่ได้รับการป้องกัน สมาชิกของคลาสที่ได้รับการป้องกันโดย "protected" สามารถเข้าถึงได้จากคลาสที่ได้รับ แต่ไม่ใช่จากคลาสอื่น คลิกในบริบทของแอปเพล็ตเพื่อเปิดใช้งาน หลายภาษาอนุญาตให้ส่งอาร์กิวเมนต์ตามค่าหรือที่อยู่ เนื่องจากไม่ทราบที่อยู่ที่แท้จริงของอาร์กิวเมนต์ของเมธอด เมธอดจึงไม่สามารถแก้ไขได้
โครงสร้างแบบมีเงื่อนไขคืออะไร?
ในกรณีของการส่งอาร์กิวเมนต์ไปยังที่อยู่ของเมธอด ตัวแปรอาร์กิวเมนต์จะถูกส่งไปยังเมธอด: การเปลี่ยนแปลงที่ทำกับค่าของตัวแปรโดยเมธอดจะมีผลทันทีและสิ้นสุด โครงสร้างแบบมีเงื่อนไขเรียกว่าคำสั่งเพื่อทดสอบว่าเงื่อนไขเป็นจริงหรือไม่ โครงสร้างตามเงื่อนไขเหล่านี้สามารถเชื่อมโยงกับโครงสร้างที่ทำซ้ำตามการใช้งานเงื่อนไข โครงสร้างเหล่านี้เรียกว่าโครงสร้างแบบวนซ้ำ
ชนิดข้อมูลดั้งเดิม |
ไบต์, สั้น, int, ยาว, ถ่าน, ลอย, สองเท่า, บูลีน |
ลูปและกิ่งก้าน |
ถ้า, อย่างอื่น, เปลี่ยน, กรณี, ค่าเริ่มต้น, ในขณะที่, ทำ, ทำลาย, ดำเนินการต่อ, สำหรับ |
ข้อยกเว้น |
ลอง, จับ, ในที่สุด, โยน, ขว้าง |
ขอบเขต | ส่วนตัว ป้องกัน สาธารณะ |
ประกาศนำเข้า |
นำเข้า, แพ็คเกจ, คลาส, ส่วนต่อประสาน, ขยาย, นำไปใช้, คงที่, สุดท้าย, เป็นโมฆะ, นามธรรม, เนทีฟ วิธีการทดสอบที่สั้นลงไวยากรณ์สำหรับนิพจน์นี้ เป็นไปได้ที่จะทำการทดสอบด้วยโครงสร้างที่มีความรุนแรงน้อยกว่ามาก ด้วยโครงสร้างต่อไปนี้ เรียกว่า ternary operator
การใช้งานภาษาพื้นฐานคีย์เวิร์ดเริ่มต้นนำหน้ารายการตัวดำเนินการที่จะดำเนินการหากนิพจน์ไม่เท่ากับค่าใดค่าหนึ่ง โครงสร้างเหล่านี้บางครั้งเรียกว่าคำสั่งซ้ำ ๆ หรือการวนซ้ำ วิธีทั่วไปที่สุดในการดำเนินการวนรอบคือการสร้างตัวนับและหยุดการวนซ้ำเมื่อตัวนับเกินค่าที่กำหนด |
สร้าง ส่งคืน โทร |
ใหม่ กลับมา นี้ สุดยอด |
มัลติเธรด |
ซิงโครไนซ์, ระเหย |
คีย์เวิร์ดที่สงวนไว้ | |
นัดพิเศษ |
ตัวอย่างของ, enum, ยืนยัน, ชั่วคราว, เข้มงวดfp |
สัญญาณการทำงาน
ป้ายแสดงการทำงานมีจุดประสงค์เพื่อบ่งชี้การดำเนินการทางคณิตศาสตร์ ตรรกะ และการดำเนินการอื่นๆ ตารางแสดงสัญญาณการทำงานที่ใช้บ่อยที่สุด
คำสั่งนี้รันรายการคำสั่งตราบเท่าที่ตรงตามเงื่อนไข อาจต้องใช้ค่าอย่างน้อยหนึ่งค่าในการวนรอบโดยไม่สิ้นสุดรอบ ไวยากรณ์สำหรับนิพจน์นี้คือ "ต่อเนื่อง" ซึ่งมักจะเกี่ยวข้องกับโครงสร้างแบบมีเงื่อนไข มิฉะนั้น เส้นระหว่างคำสั่งนี้กับจุดสิ้นสุดของลูปจะล้าสมัย
การสนทนาที่เกี่ยวข้องที่พบในฟอรัม
โชคดีที่ต้องขอบคุณคำสั่งแบบต่อเนื่อง คุณสามารถพิจารณาค่านี้แยกกัน แล้ววนซ้ำต่อไป! ในทางตรงกันข้าม อาจจำเป็นต้องหยุดการวนซ้ำก่อนเวลาอันควรสำหรับเงื่อนไขที่แตกต่างจากที่ระบุไว้ในส่วนหัวของลูป เราจะมีตัวระบุสามด้านที่คุณต้องเข้าใจ ตัวระบุที่ถูกต้อง: กฎที่คอมไพเลอร์ใช้เพื่อพิจารณาว่าชื่อนั้นถูกต้องหรือไม่ คุณควรทราบและนำไปใช้ในแอปพลิเคชันในอนาคตของคุณ ... ตัวระบุคือชื่อที่ระบุคลาส ตัวแปร หรือเมธอดในโปรแกรม
การดำเนินการ | คำอธิบายสั้น |
+ | ส่วนที่เพิ่มเข้าไป |
- | การลบ |
* | การคูณ |
/ | แผนก |
= | งานที่มอบหมาย |
++ |
เพิ่มขึ้น (เพิ่มขึ้น 1); x ++; เทียบเท่ากับ x = x + 1; |
-- |
ลดลง (ลดลง 1); NS--; เทียบเท่ากับ x = x-1; |
+= | y + = x; เทียบเท่ากับ y = y + x; |
-= | y- = x; เทียบเท่ากับ y = y-x; |
*= | y * = x; เทียบเท่ากับ y = y * x; |
/= | y / = x; เทียบเท่ากับ y = y / x; |
%= | y% = x; เทียบเท่ากับ y = y% x; |
== | เท่ากับ |
!= | ไม่เท่ากับ |
> | มากกว่า |
< | เล็กลง |
>= | มากหรือเท่ากัน |
<= | น้อยกว่าหรือเท่ากับ |
% | เศษที่เหลือของการหารจำนวนเต็ม |
&& | ตรรกะและ |
|| | ตรรกะOR |
! | ปฏิเสธตรรกะไม่ |
บันทึก.
นี่คือกฎที่คุณต้องรู้ ในทางปฏิบัติ ไม่มีการจำกัดจำนวนอักขระที่ตัวระบุสามารถมีได้ คุณไม่สามารถใช้คีย์เวิร์ดเป็นตัวระบุในโปรแกรมของคุณได้
- ไม่จำเป็นต้องขึ้นต้นด้วยตัวเลข
- ด้านล่างนี้คือรายการคำหลักที่มีทั้งหมด
ต่อไปนี้คือตัวอย่างบางส่วนของตัวระบุที่ไม่ถูกต้อง คุณควรทราบสาเหตุ หากคุณยอมรับข้อตกลงเหล่านี้และเริ่มเขียนโค้ด ข้อตกลงเหล่านี้สามารถลดการทดสอบ การบำรุงรักษา และการปรับปรุงของคุณได้ และลองนึกถึงวงเล็บปีกกาด้วย บางครั้งพวกมันก็เขียนในบรรทัดเดียวกัน ซึ่งทำให้โค้ดอ่านไม่ออก
แผนก
- หากมีการหารจำนวนเต็มสองจำนวน เราก็จะได้ผลลัพธ์ของการหารจำนวนเต็ม:
5/3 = 1 แต่การหารจำนวนเต็มที่เหลือคือ 5% 3 = 2 - ถ้าหนึ่งในอาร์กิวเมนต์เป็นจำนวนจริง เราก็มีการหารปกติ:
5 / 2.0 = 2.5
- หากมีการหารจำนวนเต็มสองจำนวน เราก็จะได้ผลลัพธ์ของการหารจำนวนเต็ม:
เพิ่มขึ้นและลดลง
การเพิ่มขึ้นมีสองรูปแบบ: แบบฟอร์มคำนำหน้าแบบฟอร์ม postfix
นอกจากนี้ ชื่อมักจะต้องเป็นชื่อกริยาผสมกัน ... พวกมันเป็นเพียงตัวแปรอินสแตนซ์ส่วนตัว วิธีเดียวที่พวกเขาสามารถเข้าถึงได้จากนอกชั้นเรียนคือผ่านวิธีการของชั้นเรียน วิธีการที่เปลี่ยนค่าของคุณสมบัติเรียกว่า setters และวิธีการที่ได้รับค่าของคุณสมบัติจะเรียกว่า getters โปรดทราบว่าคุณไม่จำเป็นต้องมีตัวแปรชื่อ label ในชั้นเรียนของคุณ ชื่อคุณสมบัติจะอนุมานจากตัวรับและตัวตั้งค่า ไม่ใช่จากตัวแปรในคลาสของคุณ แบบจำลองเหตุการณ์มักใช้ในแอปพลิเคชันแบบกราฟิก เมื่อมีเหตุการณ์เช่นการคลิกเกิดขึ้น วัตถุอื่นๆ ที่อาจมีการรักษา เมื่อเหตุการณ์นั้นเกิดขึ้น จะได้รับข้อมูล
แบบฟอร์มคำนำหน้า
ขั้นแรก ตัวแปรจะเพิ่มขึ้น (หรือลดลง) หนึ่งตัว จากนั้นจะทำการคำนวณเพิ่มเติมด้วยค่าใหม่
int a = 5; int b = 5; int y = 10 + --a; int z = 10 + ++ b; System.out.println ("a =" + a); System.out.println ("b =" + b); System.out.println ("y =" + y); System.out.println ("z =" + z);
ผลลัพธ์จะเป็น:
a = 4
ข = 6
y = 14
z = 16
ในตัวอย่างนี้ ตัวแปร a จะลดลงก่อน 1, b เพิ่มขึ้นหนึ่ง จากนั้นนิพจน์สำหรับ y และ z จะถูกคำนวณ
วัตถุเหล่านี้เรียกว่าผู้ฟัง ชื่อเมธอดที่ใช้เพื่อเพิ่ม Listener ด้วยแหล่งเหตุการณ์ต้องใช้คำนำหน้า add ตามด้วยประเภท listener ชื่อเมธอดที่ใช้ในการลบ Listener ต้องใช้คำนำหน้า Remove ตามด้วยประเภท Listener โดยใช้กฎเดียวกันกับวิธีการบันทึกการเพิ่ม ประเภทของ Listener ที่จะเพิ่มหรือลบต้องส่งผ่านเป็นอาร์กิวเมนต์ของเมธอด โปรดจำไว้ว่าตัวระบุที่ถูกต้องสำหรับตัวแปรเป็นตัวระบุที่ถูกต้องสำหรับเมธอดหรือคลาสด้วย
แบบฟอร์ม Postfix
สำหรับแบบฟอร์ม postfix นิพจน์จะได้รับการประเมินด้วยค่าเดิมของตัวแปรก่อน และค่าของตัวแปรจะเพิ่มขึ้น (หรือลดลง) หนึ่งรายการหลังจากประเมินนิพจน์
int a = 5; int b = 5; int y = 10 + a--; int z = 10 + b ++; System.out.println ("a =" + a); System.out.println ("b =" + b); System.out.println ("y =" + y); System.out.println ("z =" + z);
ผลลัพธ์จะเป็น:
a = 4
ข = 6
y = 15
z = 15
กล่าวอีกนัยหนึ่ง คุณต้องยอมรับว่าตัวระบุนั้นถูกกฎหมาย แม้ว่าจะไม่เป็นไปตามมาตรฐานการตั้งชื่อก็ตาม เรากำลังจัดการกับบทที่สำคัญที่สุดบทหนึ่ง: เงื่อนไขเป็นแนวคิดพื้นฐานอีกอย่างหนึ่งของการเขียนโปรแกรม ในชั้นเรียน การอ่านและการดำเนินการจะดำเนินการตามลำดับ กล่าวคือ ทีละบรรทัด ด้วยเงื่อนไข เราสามารถจัดการสถานการณ์ต่างๆ ได้โดยไม่ต้องอ่านโค้ดทั้งหมด คุณจะตระหนักได้อย่างรวดเร็วว่าโครงการทั้งหมดของคุณเป็นเพียงลำดับและความสัมพันธ์ของเงื่อนไขและวัฏจักร
ให้ตรงไปที่หัวใจของเรื่อง ก่อนที่คุณจะสามารถสร้างและประเมินเงื่อนไข คุณจะต้องรู้ว่าเราจะใช้ "ตัวดำเนินการเชิงตรรกะ" ที่เรียกว่า "ตัวดำเนินการเชิงตรรกะ" สำหรับสิ่งนี้ ส่วนใหญ่จะใช้ในการตั้งค่าเพื่อประเมินกรณีที่เป็นไปได้ต่างๆ ทราบ.
นิพจน์จะได้รับการประเมินด้วยค่าเดิมของตัวแปร หลังจากประเมินนิพจน์สำหรับ yและ zตัวแปร NSลดลง 1 ตัวแปร NSจะเพิ่มขึ้นหนึ่ง
การดำเนินการเชิงตรรกะ
หากค่าแรกในการดำเนินการ "&&" เป็นเท็จ จะไม่มีการตรวจสอบค่าที่สองในการดำเนินการ "หรือ" ในทางกลับกัน หากค่าแรกเป็นจริง ค่าที่สองจะไม่ถูกตรวจสอบ
สำหรับช่วงหลัง คุณจะเข้าใจตัวอย่างที่จะให้ในตอนท้ายของบทนี้ดีขึ้น สิ่งนี้ทำให้คุณสามารถระบุเงื่อนไข "การต่อสู้แบบเดียวกับครั้งก่อน" ... ลองนึกภาพโปรแกรมที่ขอให้ผู้ใช้ป้อนจำนวนเต็มสัมพัทธ์ โครงสร้างแบบมีเงื่อนไขจะช่วยให้เราสามารถจัดการสถานการณ์ทั้งสามนี้ได้ โครงสร้างของเงื่อนไขเหล่านี้มีดังนี้
ลองใช้ตัวอย่างเล็ก ๆ ของเรา ในกรณีนี้ คลาสของเราจะแสดง "จำนวนบวก" มาอธิบายว่าเกิดอะไรขึ้น เมื่อคุณนำเสนอโครงสร้างตามเงื่อนไขแก่เรา คุณก็ใส่เหล็กดัดฟัน และไม่ได้ใส่ไว้ตรงนั้น อันที่จริง วงเล็บปีกกามีอยู่ในโครงสร้างตามเงื่อนไข "ปกติ" แต่เมื่อโค้ดภายในหนึ่งในนั้นประกอบด้วยเพียงบรรทัดเดียว วงเล็บปีกกาจะกลายเป็นตัวเลือกเสริม
ตารางความจริงของการดำเนินการ "&&", "||"
NS | NS | เอ&&บี | A || NS |
เท็จ | เท็จ | เท็จ | เท็จ |
เท็จ | จริง | เท็จ | จริง |
จริง | เท็จ | เท็จ | จริง |
จริง | จริง | จริง | จริง |
นี่คือตัวอย่าง
นี้เรียกว่าเยื้อง! มันจะมีประโยชน์มากในการหาคุณในโปรแกรมในอนาคตของคุณ ลองนึกภาพสองวินาทีว่าคุณมีโปรแกรม 700 บรรทัดพร้อมเงื่อนไข 150 ข้อและทุกอย่างถูกเขียนไว้ที่ขอบด้านซ้าย การแยกการทดสอบออกจากโค้ดเป็นเรื่องยาก ก่อนจะไปต่อ คุณควรรู้ว่าคุณไม่สามารถตรวจสอบความเท่าเทียมกันของสตริงได้! เราจะพูดถึงประเด็นนี้ในภายหลัง ตอนนี้เราจะใช้ตัวดำเนินการบูลีนที่เราเห็นในตอนเริ่มต้น ตรวจสอบว่าตัวเลขที่ระบุอยู่ในช่วงเวลาที่ทราบหรือไม่
ตัวอย่างเช่น จะตรวจสอบว่าจำนวนเต็มอยู่ระหว่าง 50 ถึง โอเปอเรเตอร์นี้แนะนำคุณเกี่ยวกับแนวคิดของจุดตัดของเซต ในที่นี้เรามีเงื่อนไขสองข้อ ซึ่งแต่ละเงื่อนไขกำหนดชุด ดังนั้น เงื่อนไขจะจัดกลุ่มตัวเลขที่เป็นของสองชุดนี้ใหม่ นั่นคือ ตัวเลขตั้งแต่ 51 ถึง 99 รวมอยู่ด้วย พิจารณาช่วงที่คุณต้องการกำหนด
บูลีน a = จริง; บูลีน b = จริง; บูลีน c = เท็จ; บูลีน d = เท็จ; System.out.println ("จริง && จริง =" + (a && b)); // จริง ผลลัพธ์จริง จริง System.out.println ("จริง && เท็จ =" + (a && c)); // true false ผลลัพธ์เป็น false System.out.println ("false && true =" + (c && a)); // ture เท็จผลลัพธ์เท็จ System.out.println ("false && frue =" + (c && d)); // ผลเท็จเท็จ false System.out.println ("true || true =" + (a || b)); // จริง ผลลัพธ์จริง true System.out.println ("true || false =" + (a || c)); // ผลลัพธ์เท็จจริง true System.out.println ("false || true =" + (c || a)); // ture เท็จผลลัพธ์จริง System.out.println ("false || false =" + (c || d)); // เท็จ เท็จ ผลลัพธ์ เป็น เท็จ
สวิตช์ส่วนใหญ่จะใช้เมื่อเราต้องการเงื่อนไข "อาหารตามสั่ง" ยกตัวอย่างแบบสำรวจที่มีคำถามสองข้อ: สำหรับคำถามแต่ละข้อ เราจะได้ 0 หรือ 10 คะแนน ซึ่งให้สามหมายเหตุและคะแนนที่เป็นไปได้สามข้อ เป็นต้น
มาอ่านบทนี้อีกครั้งในบางครั้ง ... ในกรณีนี้ เราใช้สวิตช์เพื่อหลีกเลี่ยงความไม่จำเป็นหากเกิดซ้ำ และทำให้โค้ดสว่างขึ้นเล็กน้อย นี่คือการดำเนินการที่ดำเนินการโดยนิพจน์นี้ คลาสจะประเมินนิพจน์หลังจากสวิตช์ มิฉะนั้นจะไปยังแท็บถัดไป และอื่นๆ เพื่อให้เข้าใจถึงประโยชน์ของคำแนะนำนี้มากขึ้น ให้ลบตัวแบ่งทั้งหมดออก และคอมไพล์โปรแกรมของคุณ เงื่อนไขไตรภาคค่อนข้างซับซ้อนและใช้ค่อนข้างน้อย ลักษณะเฉพาะของเงื่อนไขเหล่านี้คือมีตัวถูกดำเนินการสามตัวเกี่ยวข้อง แต่เงื่อนไขเหล่านี้ยังใช้เพื่อกำหนดข้อมูลให้กับตัวแปร
ผลลัพธ์จะเป็น:
จริง && จริง = จริง
จริง && เท็จ = เท็จ
เท็จ && จริง = เท็จ
เท็จ && เท็จ = เท็จ
จริง || จริง = จริง
จริง || เท็จ = จริง
เท็จ || จริง = จริง
เท็จ || เท็จ = เท็จ
เพจ JSP มีไวยากรณ์ที่รวมกัน: การรวมกันของไวยากรณ์มาตรฐานที่สอดคล้องกับข้อกำหนด HTML และไวยากรณ์ JSP ที่กำหนดโดยข้อมูลจำเพาะ Java Server Pages ไวยากรณ์ JSP กำหนดกฎสำหรับการเขียนหน้า JSP ซึ่งประกอบด้วยแท็ก HTML มาตรฐานและแท็ก JSP
โครงสร้างแบบนี้หน้าตาเป็นแบบนี้ ตกแต่งสิ่งที่เกิดขึ้น การกำหนดถูกต้อง: คุณสามารถใช้ตัวแปรสูงสุดได้ คุณยังสามารถทำการคำนวณก่อนที่จะมีอิทธิพลต่อค่าต่างๆ อย่าลืมว่าค่าที่คุณจะกำหนดให้กับตัวแปรต้องเป็นประเภทเดียวกับตัวแปรของคุณ นอกจากนี้ โปรดทราบด้วยว่าไม่มีอะไรหยุดคุณไม่ให้แทรกเงื่อนไข 3 มิติลงในเงื่อนไขไตรภาคอื่น
เงื่อนไขอนุญาตให้เรียกใช้โค้ดได้เพียงบางส่วนเท่านั้น ... หากบล็อกคำสั่งมีมากกว่าหนึ่งบรรทัด คุณต้องล้อมรอบด้วยวงเล็บปีกกาเพื่อระบุจุดเริ่มต้นและจุดสิ้นสุดของบล็อกคำสั่งอย่างชัดเจน เพื่อให้สามารถใส่เงื่อนไขได้ คุณต้องเปรียบเทียบตัวแปรโดยใช้ตัวดำเนินการบูลีน
หน้า JSP นอกจากแท็ก HTML แล้ว ยังมีแท็ก JSP ในหมวดหมู่ต่อไปนี้:
คำสั่ง JSP
คำสั่ง JSPให้ข้อมูลทั่วโลกเกี่ยวกับคำขอเฉพาะที่ส่งไปยังเซิร์ฟเวอร์และให้ข้อมูลที่จำเป็นระหว่างขั้นตอนการแปล คำสั่งจะถูกวางไว้ที่จุดเริ่มต้นของหน้า JSP ก่อนแท็กอื่นๆ ทั้งหมดเสมอ ดังนั้น พาร์เซอร์(parser) JSP เมื่อแยกวิเคราะห์ข้อความที่จุดเริ่มต้น เน้นคำสั่งส่วนกลาง ดังนั้น JSP Engine (รันไทม์ JSP) จะแยกวิเคราะห์โค้ดและสร้างเซิร์ฟเล็ตจาก JSP คำสั่งเป็นข้อความที่ส่งไปยังคอนเทนเนอร์ JSP
คุณสามารถใส่การเปรียบเทียบแบบบูลีนได้มากเท่าที่คุณต้องการในสถานะ บทบาทของการวนซ้ำคือการทำซ้ำหลาย ๆ ครั้ง โปรแกรมทั้งหมดหรือเกือบทั้งหมดจำเป็นต้องมีฟังก์ชันดังกล่าว เราจะใช้ลูปเพื่อให้โปรแกรมเริ่มต้นใหม่ตั้งแต่ต้น รอการดำเนินการเฉพาะของผู้ใช้ ดูชุดข้อมูล ฯลฯ
วนซ้ำทำงานตราบเท่าที่ตรงตามเงื่อนไข ดังนั้นเราจะใช้แนวคิดของบทที่แล้ว! ซึ่งหมายความว่าเกือบ "ตราบเท่าที่" จากนั้นเรามีเงื่อนไข: อนุญาตให้คุณหยุดการวนซ้ำ การวนซ้ำจะมีประโยชน์ก็ต่อเมื่อเราสามารถควบคุมมันได้ ดังนั้นจึงทำให้คำสั่งซ้ำเป็นจำนวนครั้งที่กำหนด
ไวยากรณ์ คำสั่ง JSPดังนี้
<%@ директива имяАтрибута="значение" %>
ไวยากรณ์งาน คำสั่งใน XML:
คำสั่ง JSPสามารถมีคุณลักษณะหลายอย่าง ในกรณีนี้ สามารถทำซ้ำคำสั่งสำหรับแต่ละแอตทริบิวต์ได้ ในขณะเดียวกันคู่รัก "ชื่อแอตทริบิวต์ = ค่า"สามารถวางไว้ภายใต้คำสั่งเดียวโดยมีช่องว่างเป็นตัวคั่น
คำสั่งมีสามประเภท:
- หน้า (หน้า)
- taglib (ไลบรารีแท็ก)
- รวม (รวม)
คำสั่งหน้า JSP
คำสั่งหน้า JSPกำหนดคุณสมบัติของหน้า JSP ที่ส่งผลต่อนักแปล ลำดับของคุณลักษณะในคำสั่ง หน้าหนังสือไม่เป็นไร. การละเมิดไวยากรณ์หรือการมีอยู่ของแอตทริบิวต์ที่ไม่รู้จักส่งผลให้เกิดข้อผิดพลาดในการแปล ตัวอย่างของคำสั่ง หน้าหนังสือรหัสต่อไปนี้สามารถให้บริการ:
<%@ page buffer="none" isThreadSafe="yes" errorPage="/error.jsp" %>
คำสั่งหน้าประกาศว่าหน้า JSP นี้ไม่ได้ใช้บัฟเฟอร์ ผู้ใช้หลายคนสามารถเข้าถึงหน้า JSP นี้พร้อมกันได้ และหน้าแสดงข้อผิดพลาดชื่อ error.jsp.
คำสั่งหน้า JSPอาจมีข้อมูลเกี่ยวกับหน้า:
<%@ page info = "JSP Sample 1" %>
รายการแอตทริบิวต์คำสั่งที่เป็นไปได้ หน้าหนังสือนำเสนอในตาราง
ชื่อแอตทริบิวต์ | ความหมาย | คำอธิบาย |
---|---|---|
ภาษา | เส้น | กำหนดภาษาที่ใช้ในสคริปต์เล็ตไฟล์ JSP นิพจน์ หรือไฟล์ที่รวมไว้ รวมถึงเนื้อหาของโค้ดที่แปลแล้ว ค่าเริ่มต้นคือ "java" |
ยืดออก | เส้น | ระบุซูเปอร์คลาสสำหรับเซิร์ฟเล็ตที่สร้างขึ้น แอตทริบิวต์นี้ควรใช้อย่างระมัดระวัง เนื่องจากเป็นไปได้ว่าเซิร์ฟเวอร์กำลังใช้ซูเปอร์คลาสอยู่แล้ว |
นำเข้า | เส้น | คำจำกัดความของแพ็คเกจที่จะนำเข้า เช่น <%@ page import="java.util.* %> |
การประชุม | จริงหรือเท็จ | ความหมาย จริง(ค่าเริ่มต้น) ระบุว่าตัวแปรที่กำหนดไว้ล่วงหน้า การประชุม(ประเภท HttpSession) ต้องถูกผูกไว้กับเซสชันที่มีอยู่ หากมี มิฉะนั้น เซสชันใหม่จะถูกสร้างขึ้นและผูกไว้ ความหมาย เท็จกำหนดว่าจะไม่ใช้เซสชันและพยายามเข้าถึงตัวแปร การประชุมจะทำให้เกิดข้อผิดพลาดเมื่อแปลหน้า JSP เป็น servlet |
กันชน | ไม่มีหรือขนาดของบัฟเฟอร์ในหน่วย kB | ตั้งค่าขนาดบัฟเฟอร์สำหรับ JspWriter ค่าเริ่มต้นขึ้นอยู่กับการตั้งค่าเซิร์ฟเวอร์และไม่ควรเกิน 8 kB ถ้าค่าเป็น ไม่มีผลลัพธ์จะไปที่วัตถุโดยตรง ServletResponse |
ออโต้ฟลัช | จริงหรือเท็จ | กำหนดว่าควรล้างบัฟเฟอร์โดยอัตโนมัติเมื่อล้นหรือเกิดข้อผิดพลาด ค่าเริ่มต้นคือ จริง |
isThreadSafe | จริงหรือเท็จ | ความหมาย จริง(ค่าดีฟอลต์) ระบุโหมดการดำเนินการปกติของเซิร์ฟเล็ต โดยที่คำขอหลายรายการได้รับการประมวลผลพร้อมกันโดยใช้อินสแตนซ์เซิร์ฟเล็ตตัวเดียว สมมติว่าผู้เขียนได้ซิงโครไนซ์การเข้าถึงตัวแปรของอินสแตนซ์นั้น ค่าเท็จส่งสัญญาณว่าเซิร์ฟเล็ตควรสืบทอด SingleThreadModel(โมเดลเธรดเดียว) โดยที่การร้องขอแบบต่อเนื่องหรือพร้อมกันได้รับการจัดการโดยอินสแตนซ์ที่แยกจากกันของเซิร์ฟเล็ต |
ข้อมูล | เส้น | กำหนดสตริงของข้อมูลเกี่ยวกับหน้า JSP ที่จะเข้าถึงได้โดยใช้เมธอด Servlet.getServletInfo () |
errorPage | เส้น | ค่าแอตทริบิวต์คือ URL ของหน้าที่ควรจะแสดงในกรณีที่เกิดข้อผิดพลาดที่อาจก่อให้เกิดข้อยกเว้น |
isErrorPage | จริงหรือเท็จ | ส่งสัญญาณว่าสามารถใช้หน้านี้เพื่อจัดการข้อผิดพลาดสำหรับหน้า JSP อื่นๆ ได้หรือไม่ ค่าเริ่มต้นคือ เท็จ |
ชนิดของเนื้อหา | เส้น | ระบุการเข้ารหัสสำหรับเพจ JSP และการตอบกลับ และประเภท MIME ของการตอบกลับ JSP ค่าเริ่มต้นของประเภทเนื้อหาคือ ข้อความ / html, การเข้ารหัส - ISO-8859-1ตัวอย่างเช่น: contentType = "ข้อความ / html; ชุดอักขระ = ISO-8859-1" |
การเข้ารหัสหน้า | เส้น | กำหนดการเข้ารหัสอักขระของเพจ JSP ค่าเริ่มต้นคือ ชุดอักขระจากแอตทริบิวต์ ชนิดของเนื้อหาหากมีการกำหนดไว้ที่นั่น ถ้าค่า ชุดอักขระในแอตทริบิวต์ ชนิดของเนื้อหา undefined ค่า การเข้ารหัสหน้ามีค่าเท่ากัน ISO-8859-1 |
คำสั่ง JSP taglib
คำสั่ง JSP taglibประกาศว่าหน้า JSP ที่กำหนดใช้ไลบรารีแท็ก ระบุหน้า JSP โดยไม่ซ้ำกันด้วย URI และจับคู่คำนำหน้าแท็กซึ่งไลบรารีสามารถดำเนินการได้ หากคอนเทนเนอร์ไม่พบไลบรารีแท็ก จะเกิดข้อผิดพลาดในการแปลที่ร้ายแรง
คำสั่ง taglibมีไวยากรณ์ต่อไปนี้:
<%@ taglib uri="URI ของไลบรารีแท็กรวม"คำนำหน้า =" คำนำหน้าชื่อ" %>
คำนำหน้า " คำนำหน้าชื่อ"ใช้อ้างอิงถึงห้องสมุด ตัวอย่างการใช้ tag library mytags:
<%@ taglib uri="http://www.taglib/mytags" prefix="customs" %>
. . .
ในตัวอย่างนี้ ไลบรารีแท็กมี URI "http: //www.taglib/mytags", สตริงถูกกำหนดเป็นคำนำหน้า ศุลกากรที่ใช้ในหน้า JSP เมื่อเข้าถึงองค์ประกอบของไลบรารีแท็ก
JSP รวมคำสั่ง
คำสั่ง JSP รวมอนุญาตให้คุณแทรกข้อความหรือโค้ดขณะแปลเพจ JSP เป็นเซิร์ฟเล็ต ไวยากรณ์คำสั่ง รวมมีลักษณะดังนี้:
<%@ include file="URI สัมพัทธ์ของเพจที่จะรวม" %>
คำสั่ง รวมมีหนึ่งคุณลักษณะ - ไฟล์... ซึ่งจะรวมข้อความของทรัพยากรที่ระบุในไฟล์ JSP คำสั่งนี้สามารถใช้เพื่อวางส่วนหัวลิขสิทธิ์มาตรฐานบนทุกหน้า JSP:
<%@ include file="copyright.html" %>
คอนเทนเนอร์ JSP เข้าถึงไฟล์รวม หากไฟล์รวมมีการเปลี่ยนแปลง คอนเทนเนอร์สามารถคอมไพล์หน้า JSP ใหม่ได้ คำสั่ง รวมถือว่าทรัพยากร เช่น หน้า JSP เป็นวัตถุแบบคงที่
URI ที่ให้มามักจะถูกตีความโดยสัมพันธ์กับ JSP ของหน้าที่เชื่อมโยงอยู่ แต่เช่นเดียวกับ URI ที่เกี่ยวข้องอื่นๆ คุณสามารถบอกระบบตำแหน่งของทรัพยากรที่น่าสนใจที่สัมพันธ์กับโฮมไดเร็กทอรีของเว็บเซิร์ฟเวอร์โดย นำหน้า URI ด้วยอักขระ "/" เนื้อหาของไฟล์รวมถือเป็นข้อความ JSP ธรรมดา ดังนั้นจึงสามารถรวมองค์ประกอบต่างๆ เช่น HTML แบบคงที่ องค์ประกอบสคริปต์ คำสั่ง และการดำเนินการได้
เว็บไซต์หลายแห่งใช้แถบนำทางขนาดเล็กในทุกหน้า เนื่องจากปัญหาในการใช้เฟรม HTML งานนี้จึงมักแก้ไขได้ด้วยการวางตารางขนาดเล็กไว้ด้านบนหรือด้านซ้ายของหน้า ซึ่งโค้ด HTML จะถูกทำซ้ำหลายครั้งในแต่ละหน้าของเว็บไซต์ คำสั่ง รวม- นี่เป็นวิธีที่เป็นธรรมชาติที่สุดในการแก้ปัญหานี้ ซึ่งช่วยให้นักพัฒนาพ้นจากฝันร้ายของกิจวัตรในการคัดลอก HTML ลงในแต่ละไฟล์ที่แยกจากกัน
เนื่องจากคำสั่ง รวมเชื่อมต่อไฟล์ระหว่างการแปลหน้า จากนั้นหลังจากทำการเปลี่ยนแปลงในแถบนำทางแล้ว ต้องทำการแปลหน้า JSP ทั้งหมดอีกครั้งโดยใช้ไฟล์ดังกล่าว หากไฟล์แนบเปลี่ยนค่อนข้างบ่อย คุณสามารถใช้การกระทำได้ jsp: รวมที่เชื่อมต่อไฟล์เมื่อเข้าถึงหน้า JSP
คำสั่งการประกาศ JSP
คำสั่ง JSP ประกาศมีวัตถุประสงค์เพื่อกำหนดตัวแปรและเมธอดในภาษาสคริปต์ ซึ่งจะใช้ในหน้า JSP ในภายหลัง ไวยากรณ์ ประกาศมีลักษณะดังนี้:
<%! код Java %>
ประกาศอยู่ในบล็อกการประกาศและถูกเรียกในบล็อกนิพจน์ของหน้า JSP รหัสในบล็อกการประกาศมักจะเขียนด้วยภาษาจาวา แต่เซิร์ฟเวอร์แอปพลิเคชันสามารถใช้ไวยากรณ์ของสคริปต์อื่นได้ โฆษณาบางครั้งใช้เพื่อเพิ่มฟังก์ชันการทำงานเพิ่มเติมเมื่อทำงานกับข้อมูลไดนามิกที่ได้รับจากคุณสมบัติของคอมโพเนนต์ JavaBeans ตัวอย่างของ โฆษณาถูกนำเสนอในตาราง
ประกาศสามารถมีได้หลายบรรทัด เช่น ในโค้ดด้านล่างสำหรับคำนวณค่าของฟังก์ชัน ความจริง (int n)ซึ่งควรเท่ากับ 1 เมื่อ n น้อยกว่า 2 และ n! ด้วยค่าบวกของ n;
<%! public static int fact (int n) { if (n <= 1) return 1; else return n * fact (n - 1); } %>
ประกาศห้ามสร้างเอาต์พุตใด ๆ ให้เป็นเอาต์พุตมาตรฐาน ออก... ตัวแปรและเมธอดที่ประกาศในการประกาศได้รับการเริ่มต้นและพร้อมใช้งานสำหรับ scriptlets และอื่นๆ โฆษณาในขณะที่หน้า JSP ถูกเตรียมใช้งาน
Scriptlets สคริปต์
สคริปต์รวมโค้ดต่างๆ ที่เขียนด้วยภาษาสคริปต์ที่กำหนดไว้ใน directive ภาษา... ข้อมูลโค้ดต้องสอดคล้องกับโครงสร้างวากยสัมพันธ์ของภาษา สคริปต์กล่าวคือ โดยปกติแล้ว ไวยากรณ์ของภาษา Java สคริปต์มีไวยากรณ์ต่อไปนี้:
<% текст скриптлета %>
เทียบเท่าไวยากรณ์ scriptletสำหรับ XML คือ:
ถ้าอยู่ในข้อความ scriptletจำเป็นต้องใช้ลำดับของอักขระ%> เหมือนกับการรวมกันของอักขระ ไม่ใช่เป็นแท็ก - เครื่องหมายสิ้นสุด scriptletแทนที่จะใช้ลำดับ%> ให้ใช้อักขระ% \> ต่อไปนี้รวมกัน
ข้อกำหนด JSP ให้ตัวอย่างที่ง่ายและตรงไปตรงมา scriptletที่เปลี่ยนแปลงเนื้อหาของหน้า JSP แบบไดนามิกตลอดทั้งวัน
<% if (Calendar.getInstance ().get (Calendar.AM_PM) == Calendar.AM) {%>สวัสดีตอนเช้า<% } else { %>สวัสดีตอนบ่าย<% } %>
ควรสังเกตว่ารหัสภายใน scriptletแทรกตามที่เขียนและข้อความ HTML แบบคงที่ทั้งหมด (ข้อความเทมเพลต) ก่อนหรือหลัง scriptletแปลงโดยใช้ตัวดำเนินการ พิมพ์... ซึ่งหมายความว่าสคริปต์เล็ตไม่จำเป็นต้องมีชิ้นส่วน Java ที่เสร็จสมบูรณ์ และส่วนที่เปิดทิ้งไว้อาจส่งผลต่อ HTML แบบคงที่ภายนอก scriptlet.
สคริปต์มีสิทธิ์เข้าถึงตัวแปรที่กำหนดอัตโนมัติเหมือนกับนิพจน์ ตัวอย่างเช่น หากจำเป็นต้องแสดงข้อมูลใด ๆ บนเพจ คุณต้องใช้ตัวแปร ออก.
<% String queryData = request.getQueryString (); out.println ("Дополнительные данные запроса: " + queryData); %>
นิพจน์นิพจน์
นิพจน์ สำนวนในหน้า JSP นิพจน์ที่สั่งการได้ซึ่งเขียนด้วยภาษาสคริปต์ที่ระบุในการประกาศภาษา (โดยทั่วไปคือ Java) ผลลัพธ์ สำนวน JSP ซึ่งเป็นประเภท String ที่ต้องการจะถูกส่งไปยังเอาต์พุตสตรีมมาตรฐาน ออกโดยใช้วัตถุปัจจุบัน JspWriter... ถ้าผลลัพธ์คือ สำนวนหล่อไม่ได้ สตริงอาจเกิดข้อผิดพลาดในการแปลหากตรวจพบปัญหาในขั้นตอนการแปล หรือมีข้อยกเว้นเกิดขึ้น ClassCastExceptionหากตรวจพบความไม่สอดคล้องกันระหว่างการดำเนินการตามคำขอ การแสดงออกมีไวยากรณ์ต่อไปนี้:
<%= текст выражения %>
ไวยากรณ์ทางเลือกสำหรับ JSP สำนวนเมื่อใช้ XML:
คำสั่งดำเนินการ สำนวนในหน้า JSP จากซ้ายไปขวา ถ้า การแสดงออกปรากฏในแอตทริบิวต์รันไทม์มากกว่าหนึ่งรายการ จากนั้นจะรันจากซ้ายไปขวาในแท็กนั้น การแสดงออกต้องเป็นนิพจน์ที่สมบูรณ์ในสคริปต์เฉพาะ (โดยทั่วไปคือ Java)
สำนวนถูกดำเนินการในขณะที่โปรโตคอล HTTP กำลังทำงาน ค่านิพจน์จะถูกแปลงเป็นสตริงและรวมอยู่ในตำแหน่งที่เหมาะสมในไฟล์ JSP
นิพจน์มักใช้ในการคำนวณและแสดงการแสดงสตริงของตัวแปรและเมธอดที่กำหนดไว้ในบล็อกการประกาศเพจ JSP หรือได้มาจาก JavaBeans ที่สามารถเข้าถึงได้จาก JSP รหัสต่อไปนี้ สำนวนทำหน้าที่แสดงวันที่และเวลาของคำขอหน้า:
เวลาปัจจุบัน:<%= new java.util.Date () %>
เพื่อให้ง่ายขึ้น สำนวนมีตัวแปรที่กำหนดไว้ล่วงหน้าหลายตัวที่คุณสามารถใช้ได้ ตัวแปรที่ใช้บ่อยที่สุดคือ:
- คำขอ HttpServletRequest;
- การตอบสนอง HttpServletResponse;
- เซสชัน HttpSession - เกี่ยวข้องกับคำขอ ถ้ามี;
- ออกไป PrintWriter - เวอร์ชันบัฟเฟอร์ของประเภท JspWriter สำหรับการส่งข้อมูลไปยังไคลเอ็นต์