โครงสร้างแบบมีเงื่อนไข หน้าเซิร์ฟเวอร์จาวา ไวยากรณ์หน้า JSP
หน้า JSP มีไวยากรณ์ที่รวมกัน: การรวมกันของไวยากรณ์มาตรฐานตามที่กำหนดโดยข้อกำหนด HTML และไวยากรณ์ JSP ตามที่กำหนดโดยข้อกำหนด Java Serverหน้า. ไวยากรณ์ JSPกำหนดกฎสำหรับการเขียนหน้า JSP ซึ่งประกอบด้วยแท็ก HTML มาตรฐานและแท็ก JSP
หน้า 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" %>
รายการแอตทริบิวต์ directive ที่เป็นไปได้ หน้าหนังสือนำเสนอในตาราง
ชื่อแอตทริบิวต์ | ความหมาย | คำอธิบาย |
---|---|---|
ภาษา | เส้น | กำหนดภาษาที่ใช้ในสคริปต์เล็ตไฟล์ 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 สำหรับการส่งข้อมูลไปยังไคลเอ็นต์
หนึ่งในองค์ประกอบพื้นฐานของภาษาโปรแกรมหลายๆ ภาษาคือ โครงสร้างแบบมีเงื่อนไข... โครงสร้างเหล่านี้ช่วยให้คุณสามารถควบคุมการทำงานของโปรแกรมตามเส้นทางใดเส้นทางหนึ่งได้ ขึ้นอยู่กับเงื่อนไขบางประการ
ภาษา Java ใช้เงื่อนไขต่อไปนี้: if..else และ switch..case
ถ้า / อื่นสร้าง
นิพจน์ if / else ตรวจสอบความจริงของเงื่อนไขบางอย่างและรันโค้ดบางอย่างขึ้นอยู่กับผลการทดสอบ:
Int num1 = 6; int num2 = 4; if (num1> num2) (System.out.println ("ตัวเลขตัวแรกมากกว่าตัวที่สอง"))
เงื่อนไขถูกวางไว้หลังคีย์เวิร์ด if และหากตรงตามเงื่อนไขนี้ โค้ดที่วางไว้เพิ่มเติมในบล็อก if หลังจากวงเล็บปีกกาจะถูกเรียกใช้ การดำเนินการเปรียบเทียบตัวเลขสองตัวทำหน้าที่เป็นเงื่อนไข
เนื่องจาก ในกรณีนี้ ตัวเลขตัวแรกมากกว่าตัวที่สอง นิพจน์ num1> num2 จึงเป็น true และคืนค่า true ดังนั้น การควบคุมจะส่งผ่านไปยังบล็อกของรหัสหลังจากวงเล็บปีกกาและเริ่มดำเนินการตามคำแนะนำที่มีอยู่ โดยเฉพาะวิธี System.out.println ("ตัวเลขแรกมากกว่าตัวเลขที่สอง"); ... หากตัวเลขแรกน้อยกว่าหรือเท่ากับตัวเลขที่สอง คำสั่งในบล็อก if จะไม่ถูกดำเนินการ
แต่ถ้าเราต้องการดำเนินการบางอย่างหากไม่เป็นไปตามเงื่อนไข ในกรณีนี้ เราสามารถเพิ่มบล็อกอื่นได้:
Int num1 = 6; int num2 = 4; if (num1> num2) (System.out.println ("หมายเลขแรกมากกว่าวินาที");) อื่น (System.out.println ("หมายเลขแรกน้อยกว่าวินาที");
Int num1 = 6; int num2 = 8; if (num1> num2) (System.out.println ("ตัวเลขตัวแรกมากกว่าตัวที่สอง")) else if (num1 เราสามารถรวมหลายเงื่อนไขพร้อมกันได้โดยใช้ตัวดำเนินการเชิงตรรกะ: Int num1 = 8; int num2 = 6; if (num1> num2 && num1> 7) (System.out.println ("ตัวเลขตัวแรกมากกว่าตัวที่สองและมากกว่า 7")) ที่นี่ if block จะถูกดำเนินการถ้า num1> num2 เป็นจริงและในเวลาเดียวกัน num1> 7 เป็นจริง ออกแบบ สวิตช์ / เคสคล้ายกับโครงสร้าง if / else เนื่องจากช่วยให้คุณสามารถประมวลผลหลายเงื่อนไขพร้อมกัน: จำนวนเต็ม = 8; switch (num) (กรณีที่ 1: System.out.println ("number is 1"); break; case 8: System.out.println ("number is 8"); num ++; break; case 9: System. ออก println ("number is 9"); break; default: System.out.println ("number is not 1, 8, 9");) นิพจน์ที่จะเปรียบเทียบตามคีย์เวิร์ด switch ในวงเล็บ ค่าของนิพจน์นี้จะเปรียบเทียบตามลำดับกับค่าหลังตัวดำเนินการเคส และหากพบการจับคู่ บล็อกกรณีเฉพาะจะถูกดำเนินการ คำสั่ง break จะถูกวางไว้ที่ส่วนท้ายของ case block เพื่อหลีกเลี่ยงการดำเนินการของ block อื่นๆ ตัวอย่างเช่น หากคำสั่ง break ถูกลบในกรณีต่อไปนี้: กรณีที่ 8: System.out.println ("หมายเลข 8"); เลขที่ ++; กรณีที่ 9: System.out.println ("หมายเลขคือ 9"); หยุดพัก; เนื่องจากตัวแปร num ของเราเท่ากับ 8 ดังนั้น case 8 block จะถูกดำเนินการ แต่เนื่องจากในบล็อกนี้ ตัวแปร num จะเพิ่มขึ้นหนึ่งรายการ จึงไม่มีคำสั่ง break ดังนั้น case 9 block จะเริ่มดำเนินการ หากเราต้องการจัดการสถานการณ์เมื่อไม่พบรายการที่ตรงกัน เราก็สามารถเพิ่มบล็อกเริ่มต้นได้ดังในตัวอย่างด้านบน บล็อกเริ่มต้นเป็นทางเลือกแม้ว่า เริ่มต้นด้วย JDK 7 ในนิพจน์ switch..case นอกเหนือจากประเภทดั้งเดิม คุณยังสามารถใช้สตริงได้: แพ็คเกจ firstapp; นำเข้า java.util.Scanner; คลาสสาธารณะ FirstApp (โมฆะคงที่สาธารณะหลัก (สตริง args) (สแกนเนอร์ใน = สแกนเนอร์ใหม่ (System.in); System.out.println ("ป้อน Y หรือ N:"); อินพุตสตริง = in.nextLine (); สวิตช์ ( input) (ตัวพิมพ์ "Y": System.out.println ("You pressed the letter Y"); break; case "N": System.out.println ("You pressed the letter N"); break; default: System .out .println ("คุณกดตัวอักษรที่ไม่รู้จัก");))) ternary operation มีไวยากรณ์ต่อไปนี้: [ตัวถูกดำเนินการแรกเป็นเงื่อนไข]? [ตัวถูกดำเนินการที่สอง]: [ตัวถูกดำเนินการที่สาม] ดังนั้นตัวถูกดำเนินการสามตัวจึงมีส่วนร่วมในการดำเนินการนี้ในครั้งเดียว การดำเนินการ ternary จะคืนค่าตัวถูกดำเนินการที่สองหรือสาม ทั้งนี้ขึ้นอยู่กับเงื่อนไข: ถ้าเงื่อนไขเป็นจริง ตัวถูกดำเนินการที่สองจะถูกส่งกลับ ถ้าเงื่อนไขเป็นเท็จแล้วที่สาม ตัวอย่างเช่น: Int x = 3; int y = 2; int z = x ในที่นี้ ผลลัพธ์ของการดำเนินการแบบไตรภาคคือตัวแปร z ขั้นแรกเงื่อนไข x เมื่อเราดูโปรแกรมจาวา มันสามารถกำหนดเป็นคอลเลกชันของวัตถุที่โต้ตอบโดยการเรียกใช้เมธอดของกันและกัน ตอนนี้ให้เราเข้าใจสั้น ๆ ไวยากรณ์ Javaคลาส วัตถุ เมธอด และตัวแปรอินสแตนซ์หมายความว่าอย่างไร วัตถุ- วัตถุมีสภาพและพฤติกรรม ตัวอย่างเช่น: สุนัขสามารถมีสถานะ - สี, ชื่อ, เช่นเดียวกับพฤติกรรม - พยักหน้า, วิ่ง, เห่า, กิน วัตถุเป็นตัวอย่างของการเรียน. ระดับ- สามารถกำหนดเป็นเทมเพลตที่อธิบายพฤติกรรมของวัตถุ วิธี- เป็นพฤติกรรมเบื้องต้น คลาสสามารถมีได้หลายวิธี มันอยู่ในวิธีการที่ข้อมูลที่บันทึกอย่างมีเหตุผลถูกจัดการและดำเนินการ ตัวแปรอินสแตนซ์- แต่ละอ็อบเจ็กต์มีชุดตัวแปรอินสแตนซ์เฉพาะของตัวเอง สถานะของวัตถุถูกสร้างขึ้นโดยค่าที่กำหนดให้กับตัวแปรอินสแตนซ์เหล่านี้ มาดูโค้ดง่ายๆ ที่จะแสดงคำว่า "Hello world!" และสำหรับไวยากรณ์ Java อย่างหนึ่ง MyFirstJavaProgram คลาสสาธารณะ (public static void main (String args) (/ * นี่เป็นโปรแกรม java แรกของฉัน การดำเนินการจะแสดง "Hello world!" * / System.out.println ("Hello world!"); / / กำลังแสดงข้อความ บนหน้าจอ)) มันสำคัญมากที่จะต้องรู้และจำประเด็นต่อไปนี้ในไวยากรณ์: ตัวระบุ- ชื่อที่ใช้สำหรับคลาส ตัวแปร และเมธอด คอมโพเนนต์ Java ทั้งหมดต้องมีชื่อ มีกฎหลายข้อในไวยากรณ์ Java ที่ต้องจำเกี่ยวกับตัวระบุ พวกเขามีดังนี้: การแจงนับถูกนำมาใช้ใน Java 5.0 พวกเขาจำกัดตัวแปรให้เลือกค่าที่กำหนดไว้ล่วงหน้าเพียงหนึ่งค่าเท่านั้น ค่าในรายการที่แจกแจงนี้เรียกว่า โอน. เมื่อใช้การแจงนับใน Java คุณสามารถลดจำนวนข้อผิดพลาดในโค้ดของคุณได้ ตัวอย่างเช่น หากดูคำสั่งซื้อน้ำผลไม้สดในร้านค้า เราอาจจำกัดขนาดของแพ็คน้ำผลไม้สำหรับขนาดเล็ก กลาง และใหญ่ ทำให้สามารถใช้การแจงนับใน Java ได้เพื่อไม่ให้ใครสั่งขนาดแพ็คเกจอื่นนอกจากขนาดเล็ก กลาง หรือใหญ่ ผลลัพธ์ที่ได้จากตัวอย่างข้างต้น: ขนาด: MEDIUM บันทึก:ใน Java สามารถประกาศ enums ได้อย่างอิสระหรือภายในคลาส เมธอด ตัวแปร คอนสตรัคเตอร์ สามารถกำหนดได้ในการแจงนับ เช่นเดียวกับภาษาอื่นๆ ใน Java คุณสามารถแก้ไขคลาส เมธอด และอื่นๆ โดยใช้ตัวดัดแปลง ตัวดัดแปลงใน Java แบ่งออกเป็นสองประเภท: เราจะพิจารณาตัวดัดแปลงคลาส ตัวดัดแปลงวิธีการ และอื่นๆ อย่างละเอียดในหัวข้อถัดไป ใน Java อาร์เรย์คืออ็อบเจ็กต์ที่เก็บตัวแปรประเภทเดียวกันหลายตัว อย่างไรก็ตาม อาร์เรย์นั้นเป็นวัตถุ เราจะดูวิธีการสร้างและเติมอาร์เรย์ในบทต่อๆ ไป ต้องตรงกับชื่อของคลาสที่มีการเรียกเมธอด main () เมื่อเครื่อง Java เริ่มทำงาน ไฟล์ต้นฉบับ Java เป็นไฟล์ข้อความที่มีนิยามคลาสตั้งแต่หนึ่งรายการขึ้นไป นักแปล Java ถือว่า ก่อนอื่น ในบทนี้ เราจะเขียน แปล และเรียกใช้โปรแกรม "Hello World" ที่เป็นที่ยอมรับ หลังจากนั้น เราจะดูองค์ประกอบคำศัพท์ที่จำเป็นทั้งหมดที่นักแปล Java รับรู้: ช่องว่าง ความคิดเห็น คำสำคัญ ตัวระบุ ตัวพิมพ์ ตัวดำเนินการ และตัวคั่น ในตอนท้ายของบทนี้ คุณจะมีข้อมูลเพียงพอที่จะสามารถนำทางโปรแกรม Java ที่ดีได้ด้วยตัวเอง นี่คือโปรแกรม Java แรกของคุณ คลาส HelloWorld ( ระบบ. ออก. println ("สวัสดีชาวโลก"); ในการทำงานกับตัวอย่างที่ให้ไว้ในหนังสือ คุณต้องข้ามเครือข่ายจาก Sun Microsystems และติดตั้ง Java Developers Kit - แพ็คเกจสำหรับการพัฒนาแอปพลิเคชัน Java ( ภาษา Java ต้องการให้โค้ดโปรแกรมทั้งหมดอยู่ในคลาสที่มีชื่อ ข้อความตัวอย่างข้างต้นควรเขียนลงในไฟล์ HelloWorld.java ตรวจสอบให้แน่ใจว่าอักษรตัวพิมพ์ใหญ่ในชื่อไฟล์ตรงกันในชื่อของคลาสที่มีอยู่ ในการแปลตัวอย่างนี้ คุณต้องเริ่มตัวแปล Java - javac โดยระบุชื่อไฟล์ด้วยข้อความต้นฉบับเป็นพารามิเตอร์: นักแปลจะสร้างไฟล์ HelloWorld.class พร้อมไบต์โค้ดที่ไม่ขึ้นกับโปรเซสเซอร์สำหรับตัวอย่างของเรา ในการรันโค้ดผลลัพธ์ คุณต้องมีสภาพแวดล้อมรันไทม์ของ Java (ในกรณีของเราคือโปรแกรมจาวา) ซึ่งคุณต้องโหลดคลาสใหม่เพื่อดำเนินการ เราเน้นว่ามีการระบุชื่อของคลาส ไม่ใช่ชื่อของไฟล์ที่มีคลาสนี้ มีการดำเนินการเพียงเล็กน้อย แต่เราได้ตรวจสอบแล้วว่าตัวแปล Java ที่ติดตั้งและรันไทม์ทำงาน เป็นขั้นเป็นตอน คลาส HelloWorld ( บรรทัดนี้ใช้คำสงวน โมฆะคงที่สาธารณะหลัก (สตริง args) ( เมื่อมองแวบแรก ตัวอย่างบรรทัดที่ซับซ้อนเกินไปเป็นผลมาจากข้อกำหนดที่สำคัญซึ่งมีอยู่ในการพัฒนาภาษา Java ประเด็นคือใน เมื่อแบ่งบรรทัดนี้เป็นโทเค็นแยกกัน เราจะพบคำสำคัญทันที คีย์เวิร์ดต่อไปคือ คุณมักจะต้องใช้วิธีการที่คืนค่าประเภทใดประเภทหนึ่ง เช่น ในที่สุด เราก็มาถึงชื่อเมธอด พารามิเตอร์ทั้งหมดที่ต้องส่งผ่านไปยังเมธอดจะถูกระบุในวงเล็บเป็นรายการองค์ประกอบที่คั่นด้วย ";" (อัฒภาค). แต่ละรายการในรายการพารามิเตอร์ประกอบด้วยประเภทที่คั่นด้วยช่องว่างและตัวระบุ แม้ว่าเมธอดจะไม่มีพารามิเตอร์ แต่คุณยังต้องใส่วงเล็บสองสามตัวหลังชื่อ ในตัวอย่างที่เรากำลังพูดถึง วิธีการ ระบบ. ออก. prlntln ("สวัสดีชาวโลก!"); บรรทัดนี้ดำเนินการเมธอด วงเล็บปีกกาปิดในบรรทัดที่ 4 สิ้นสุดการประกาศวิธีการ พื้นฐานคำศัพท์ เมื่อเราพูดถึงคลาส Java แบบละเอียดแล้ว ให้ย้อนกลับไปดูลักษณะทั่วไปของไวยากรณ์ของภาษานี้ โปรแกรมสำหรับ ความคิดเห็น (1) แม้ว่าความคิดเห็นจะไม่ส่งผลต่อโค้ดปฏิบัติการของโปรแกรมแต่อย่างใด ก = 42; // ถ้า สำหรับคำอธิบายโดยละเอียดเพิ่มเติม คุณสามารถใช้ความคิดเห็นที่วางไว้หลายบรรทัด โดยเริ่มต้นข้อความความคิดเห็นด้วยสัญลักษณ์ / * และลงท้ายด้วยสัญลักษณ์ * / ในกรณีนี้ ข้อความทั้งหมดระหว่างสัญลักษณ์คู่นี้จะถือเป็นความคิดเห็นและตัวแปล จะละเลยมัน * รหัสนี้ค่อนข้างซับซ้อน ... * ฉันจะพยายามอธิบาย: ความเห็นแบบพิเศษที่สาม มีไว้สำหรับโปรแกรมบริการ * ชั้นเรียนนี้สามารถทำสิ่งมหัศจรรย์ได้ เราแนะนำให้ทุกคนที่ * อยากเขียนคลาสที่สมบูรณ์แบบกว่านี้ เอาไปเป็น * ขั้นพื้นฐาน. * @see Java แอปเพล็ต แอปเพล็ต * © ผู้แต่ง Patrick Naughton คลาส CoolApplet ขยาย Applet (/ ** * วิธีการนี้มีสองพารามิเตอร์: * / void put (คีย์สตริง, ค่าอ็อบเจ็กต์) ( คีย์เวิร์ดที่สงวนไว้ คีย์เวิร์ดที่สงวนไว้เป็นตัวระบุพิเศษที่ในภาษา ตารางที่ 2 คำสงวน Java สังเกตว่าคำว่า ตารางที่ 3 ชื่อวิธีที่สงวนไว้ ตัวระบุ ตัวระบุใช้เพื่อตั้งชื่อคลาส เมธอด และตัวแปร ลำดับของตัวอักษรพิมพ์เล็กและตัวพิมพ์ใหญ่ ตัวเลข และสัญลักษณ์ _ (ขีดล่าง) และ $ (ดอลลาร์) สามารถใช้เป็นตัวระบุได้ ตัวระบุไม่ควรขึ้นต้นด้วยตัวเลข เพื่อที่นักแปลจะไม่สับสนกับค่าคงที่ที่เป็นตัวเลข ซึ่งจะอธิบายไว้ด้านล่าง อักษร ค่าคงที่ใน อักษรจำนวนเต็ม จำนวนเต็มเป็นประเภทที่ใช้บ่อยที่สุดในโปรแกรมทั่วไป ค่าจำนวนเต็มใดๆ เช่น 1, 2, 3, 42 เป็นจำนวนเต็มตามตัวอักษร ในตัวอย่างนี้ ให้เลขทศนิยม กล่าวคือ ตัวเลขที่มีฐาน 10 - ตรงกับที่เราใช้ในชีวิตประจำวันนอกโลกของคอมพิวเตอร์ นอกจากตัวเลขทศนิยมแล้ว ตัวเลขฐาน 8 และ 16 - ฐานแปดและฐานสิบหก - ยังสามารถใช้เป็นตัวอักษรจำนวนเต็มได้อีกด้วย Java รู้จักเลขฐานแปดด้วยศูนย์นำหน้า ตัวเลขทศนิยมปกติไม่สามารถเริ่มต้นด้วยศูนย์ได้ ดังนั้นการใช้ตัวเลขภายนอกที่ถูกต้อง 09 ในโปรแกรมจะทำให้เกิดข้อความแสดงข้อผิดพลาดในการแปล เนื่องจาก 9 ไม่อยู่ในช่วง 0 .. ค่าจำนวนเต็มคือค่าของประเภท อักษรจุดลอยตัว ตัวเลขทศนิยมแทนค่าทศนิยมที่มีเศษส่วน สามารถเขียนได้ทั้งในรูปแบบปกติหรือเลขชี้กำลัง ในรูปแบบปกติ ตัวเลขประกอบด้วยตัวเลขทศนิยมจำนวนหนึ่งตามด้วยจุดทศนิยม ตามด้วยตัวเลขทศนิยมของเศษส่วน ตัวอย่างเช่น 2.0, 3.14159 และ 6667 เป็นค่าทศนิยมที่ถูกต้องซึ่งเขียนในรูปแบบมาตรฐาน ในรูปแบบเลขชี้กำลัง ลำดับทศนิยมจะถูกระบุเพิ่มเติมหลังองค์ประกอบที่แสดง ลำดับถูกกำหนดโดยเลขทศนิยมบวกหรือลบตามอักขระ E หรือ e ตัวอย่างของตัวเลขในรูปแบบเลขชี้กำลัง: 6.022e23, 314159E-05, 2e + 100 วี ตัวอักษรบูลีน ตัวแปรบูลีนสามารถมีได้เพียงสองค่าเท่านั้น - ตัวอักษรตามตัวอักษร สัญลักษณ์ใน ตารางที่ 3 ลำดับการควบคุม คำอธิบาย เลขฐานแปด เลขฐานสิบหก อะพอสทรอฟี แบ็กสแลช คืนรถ ไลน์ฟีด ไลน์ใหม่ คำแปลของหน้า แถบแนวนอน ถอยหลังหนึ่งก้าว ตัวอักษรสตริง ตัวอักษรสตริงใน ผู้ประกอบการ โอเปอเรเตอร์คือสิ่งที่ดำเนินการบางอย่างกับอาร์กิวเมนต์หนึ่งหรือสองอาร์กิวเมนต์และให้ผลลัพธ์ ในทางวากยสัมพันธ์ ตัวดำเนินการมักถูกวางไว้ระหว่างตัวระบุและตัวอักษร ผู้ประกอบการจะกล่าวถึงในรายละเอียดใน ตารางที่ 3 ตัวแยก อักขระบางกลุ่มที่อาจปรากฏในโปรแกรม Java ที่ถูกต้องทางไวยากรณ์เท่านั้นที่ยังไม่มีชื่อ สิ่งเหล่านี้เป็นตัวคั่นอย่างง่ายที่ส่งผลต่อรูปลักษณ์ของโค้ดของคุณ ชื่อ ใช้สำหรับอะไร? วงเล็บกลม จัดสรรรายการพารามิเตอร์ในการประกาศและการเรียกใช้เมธอด และยังใช้เพื่อกำหนดลำดับความสำคัญของการดำเนินการในนิพจน์ เน้นนิพจน์ในคำสั่งควบคุมการทำงานของโปรแกรม และในตัวดำเนินการแคสต์ เหล็กดัดฟัน วงเล็บเหลี่ยม ใช้ในการประกาศอาร์เรย์และเมื่อเข้าถึงแต่ละองค์ประกอบอาร์เรย์ อัฒภาค แยกตัวดำเนินการ แยกตัวระบุในการประกาศตัวแปร ยังใช้เพื่อเชื่อมโยงคำสั่งในส่วนหัวของลูป แยกชื่อแพ็คเกจออกจากชื่อแพ็คเกจย่อยและชื่อคลาส และยังใช้เพื่อแยกชื่อตัวแปรหรือเมธอดออกจากชื่อตัวแปร ตัวแปร ตัวแปรคือองค์ประกอบหน่วยเก็บข้อมูลหลักในโปรแกรม Java ตัวแปรมีลักษณะเฉพาะด้วยการรวมกันของตัวระบุ ประเภท และขอบเขต ขึ้นอยู่กับตำแหน่งที่คุณประกาศตัวแปร ตัวแปรอาจเป็นแบบโลคัล ตัวอย่างเช่น โค้ดภายในลูป for หรืออาจเป็นตัวแปรอินสแตนซ์ที่เข้าถึงได้ทุกเมธอดของคลาสนี้ ขอบเขตท้องถิ่นถูกประกาศโดยใช้วงเล็บปีกกา การประกาศตัวแปร รูปแบบพื้นฐานของการประกาศตัวแปรมีดังนี้: ตัวระบุประเภท [= ค่า] [, ตัวระบุ [= ค่า ประเภทเป็นหนึ่งในประเภทที่มีอยู่แล้วภายใน นั่นคือ ตัวอย่างด้านล่างสร้างตัวแปรสามตัวที่สอดคล้องกับด้านข้างของสามเหลี่ยมมุมฉากแล้ว ตัวแปรคลาส ( โมฆะคงที่สาธารณะหลัก (สตริง args) ( System.out.println ("c =" + c); ก้าวแรกของคุณ เราประสบความสำเร็จมากมาย: ขั้นแรกเราเขียนโปรแกรมเล็ก ๆ ในภาษาโครงสร้างสวิตช์
การดำเนินงานแบบไตรภาค
โปรแกรมแรกและความคุ้นเคยกับไวยากรณ์ของภาษา
C:> javac MyFirstJavaProgram.java C:> java MyFirstJavaProgram สวัสดีชาวโลก! พื้นฐานไวยากรณ์ Java
ตัวระบุ Java
การแจงนับ
ตัวอย่างโค้ด Java enum
คลาส FreshJuice (enum FreshJuiceSize (เล็ก กลาง ใหญ่) FreshJuiceSize ขนาด;) คลาสสาธารณะ FreshJuiceTest (โมฆะคงที่สาธารณะหลัก (สตริง args) (FreshJuice juice = ใหม่ FreshJuice (); juice.size = FreshJuice.FreshJuiceSize.MEDIUM; System.Juice.FreshJuiceSize.MEDIUM .println ("ขนาด:" + juice.size);)) ประเภทตัวแปร
ตัวดัดแปลง
Array
int ก; ... การกระทำกับตัวแปร a ...; ถ้า (ก) (...)
ไม่ถูกต้องในแง่ของไวยากรณ์ Java และจะไม่คอมไพล์
นอกจากนี้ยังรองรับ ประเภทจำกัดโดยการระบุซูเปอร์คลาสสำหรับคลาสพารามิเตอร์ ตัวอย่างเช่น การประกาศคลาส "generic class" CLASS_NAME