ก่อนอื่นมาพูดถึงรอบชิงชนะเลิศ
คำหลักสุดท้ายสามารถแก้ไข ตัวแปรวิธีการและคลาส
ตัวแปรสุดท้าย:
ความต้องการ:
1 ต้องการค่าคงที่เวลารวบรวมที่ไม่เปลี่ยนแปลง
2 ค่าเริ่มต้นที่รันไทม์ไม่ต้องการเปลี่ยนแปลง
ผลประโยชน์: การคำนวณที่ดำเนินการในเวลาคอมไพล์ลดภาระในรันไทม์
ส่วนขยาย:
คุณสามารถแก้ไขประเภทพื้นฐานและวัตถุอ้างอิง เมื่อแก้ไขประเภทพื้นฐานหมายความว่าค่าค่อนข้างคงที่ เมื่อแก้ไขการอ้างอิงวัตถุเมื่อการอ้างอิงถูกเริ่มต้นและชี้ไปที่วัตถุจะไม่สามารถเปลี่ยนเป็นวัตถุอื่นได้ (สามารถแก้ไขวัตถุได้)
ว่างเปล่าสุดท้าย
โดเมนที่แก้ไขโดยสุดท้าย แต่ไม่ให้ค่าเริ่มต้นจะต้องกำหนดค่าให้กับสุดท้ายโดยใช้นิพจน์ในนิยามโดเมนหรือตัวสร้าง (ขั้นสุดท้ายจะต้องเริ่มต้นก่อนการใช้งาน)
สังเกต:
หากวัตถุได้รับการแก้ไขโดยคงที่และสุดท้ายในเวลาเดียวกัน (ค่าคงที่ระยะเวลาการรวบรวม) โดยทั่วไปจะแสดงในทุนและพารามิเตอร์การปรับเปลี่ยนคำเชื่อมโยงลิงก์:
หากพารามิเตอร์การแก้ไขสุดท้ายหมายความว่าพารามิเตอร์สามารถอ่านได้ แต่ไม่สามารถแก้ไขได้
ตัวอย่างการใช้งาน:
สุ่มแรนด์ส่วนตัว = ใหม่สุ่ม (); สุ่มแบบคงที่ส่วนตัวแบบสุ่ม = ใหม่สุ่ม (); INT สุดท้ายส่วนตัว N1 = 12; หมายเลข int สุดท้ายส่วนตัว = rand.nextint (30); int คงสุดท้ายคงที่ private number2 = random.nextint (40); @Test โมฆะสาธารณะ FinalDatatest () {System.out.println (N1); System.out.println ("-----------------------------------"); System.out.println (rand.nextint (30)); System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - * @Param SK * @return */สตริงสาธารณะ FinalParam (SK Final String) {// sk = "jeyson"; วิธีสุดท้าย:
สุดท้ายยังสามารถแก้ไขวิธีการซึ่งบ่งชี้ว่าวิธีการไม่สามารถสืบทอดได้โดย subclasses
ประโยชน์ของการใช้งานสุดท้าย:
1 ก่อน JDK1.5 ประสิทธิภาพสูงขึ้นและหลังจาก JDK1.5 สามารถละเว้นได้
2 วิธีการล็อคเพื่อให้แน่ใจว่าความหมายของวิธีการในคลาสย่อยยังคงไม่เปลี่ยนแปลงและไม่สามารถเขียนทับได้ ตัวอย่างการใช้งาน:
Public Final String FinalMethod () {return "Hello World"; - ชั้นสุดท้าย:
หากคุณไม่ต้องการได้รับการสืบทอดโดยชั้นเรียนใด ๆ คุณสามารถใช้ขั้นสุดท้ายเพื่อแก้ไขตัวอย่างการใช้งานของคลาส:
ระดับสุดท้ายของคลาสสุดท้าย FinalClasStx {Private Int K; โมฆะสาธารณะ getMyWord () {ระบบ ออก. println ("นี่คือคลาสสุดท้ายค่าของ k คือ" +getk ()); } public int getk () {return k;} โมฆะสาธารณะ setk (int k) {this .k = k;}} คำหลักชั่วคราว:
ชั่วคราวสามารถแก้ไขตัวแปรเท่านั้นซึ่งบ่งชี้ว่าตัวแปรไม่สามารถเป็นอนุกรมได้
โดยทั่วไปเราสืบทอดคลาสอินเทอร์เฟซแบบอนุกรมและการทำให้เป็นอนุกรมจะดำเนินการโดยอัตโนมัติ เมื่อตัวแปรแก้ไขโดยชั่วคราวถูกทำให้เป็นอนุกรมมันจะไม่ถูกทำให้เป็นอนุกรมไปยังปลายทางที่ระบุ
ดังนั้น,
1 ตัวแปรที่แก้ไขโดยชั่วคราวไม่ได้เป็นส่วนหนึ่งของการคงอยู่ของวัตถุอีกต่อไปและเนื้อหาของตัวแปรนั้นเป็นอนุกรมและไม่สามารถเข้าถึงได้
2 ชั่วคราวสามารถแก้ไขตัวแปรเท่านั้นไม่ใช่วิธีการและคลาส
3 ตัวอย่างการใช้งานของตัวแปรคงที่ที่ไม่สามารถเป็นอนุกรมไม่ว่าจะถูกแก้ไขโดยชั่วคราวหรือไม่:
คลาสสาธารณะ TRANSIENTEX {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (); user.setUserName ("Jeyson"); user.setPassword ("123456"); System.out.println ("ก่อนอนุกรม:"); System.out.println ("username ="+user.getUserName ()); System.out.println ("รหัสผ่าน ="+user.getPassword ()); // serialization ลอง {ObjectOutputStream OS = ใหม่ ObjectOutputStream (ใหม่ fileOutputStream ("C: //MyResource//test1.txt")); OS.WRITEOBJECT (ผู้ใช้); os.flush (); os.close (); } catch (exception e) {e.printstacktrace (); } // deserialization ลอง {ObjectInputStream คือ = ใหม่ ObjectInputStream (ใหม่ FileInputStream ("C: //Myresource//test1.txt"))); user = (ผู้ใช้) คือ readObject (); is.close (); System.out.println ("序列化后:"); System.out.println ("username ="+user.getUserName ()); System.out.println ("รหัสผ่าน ="+user.getPassword ()); } catch (exception e) {e.printstacktrace (); } system.out.println ("--------------------------------"); }} ผู้ใช้ในชั้นเรียนใช้ serializable {ส่วนตัวคงที่สุดท้าย long serialVersionUid = 1l; ชื่อผู้ใช้สตริงส่วนตัว; // ใช้รหัสผ่านสตริงส่วนตัวชั่วคราวชั่วคราว สตริงสาธารณะ getUserName () {ส่งคืนชื่อผู้ใช้; } โมฆะสาธารณะ setUserName (ชื่อผู้ใช้สตริง) {this.userName = ชื่อผู้ใช้; } สตริงสาธารณะ getPassword () {ส่งคืนรหัสผ่าน; } โมฆะสาธารณะ setPassword (รหัสผ่านสตริง) {this.password = รหัสผ่าน; - ส่วนขยาย: externalizable
คลาสที่ใช้อินเทอร์เฟซแบบ serializable ถูกนำมาใช้ดังนั้นการทำให้เป็นอนุกรมจะใช้คลาสโดยอัตโนมัติที่ใช้อินเทอร์เฟซภายนอก ไม่มีสิ่งใดที่จะทำให้เป็นอนุกรมโดยอัตโนมัติและการใช้ชั่วคราวนั้นไม่มีผลต่อผลลัพธ์หรือไม่
หากจำเป็นต้องมีการทำให้เป็นอนุกรมคุณจะต้องระบุตัวแปรที่จะทำให้เป็นอนุกรมในวิธีการ writeexternal
ตัวอย่างการใช้งาน:
คลาสสาธารณะ externalizableEx ใช้ impormalizable {private transient string name = "SSSS"; @Override โมฆะสาธารณะ readExternal (ObjectInput in) พ่น IOException, classnotFoundException {name = (string) in.readObject (); } @Override โมฆะสาธารณะ writeExternal (ObjectOutput) โยน iOexception {out.writeObject (ชื่อ); } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {externalizableex ex = new ExternalizableEx (); Ex.setName ("Jeyson"); System.out.println ("การทำให้เป็นอนุกรม externalizable:"); System.out.println (ex.getName ()); // serialization ลอง {ObjectOutputStream OS = ใหม่ ObjectOutputStream (ใหม่ fileOutputStream (ไฟล์ใหม่ ("C: //MyResource//test2.txt"))))))))))))))))))))))))))))))))))) os.writeObject (ex); os.flush (); os.close (); } catch (exception e) {e.printstacktrace (); } // deserialization ลอง {ObjectInputStream คือ = ใหม่ ObjectInputStream (ใหม่ FileInputStream (ไฟล์ใหม่ ("C: //MyResource//test2.txt" ex = (externalizableex) คือ readObject (); is.close (); System.out.println ("การทำให้เป็นอนุกรม externalizable:"); System.out.println (ex.getName ()); } catch (exception e) {e.printstacktrace (); - คำแถลง:
รอบชิงชนะเลิศส่วนใหญ่มาจากฉบับที่สี่ของ "Java Programming Thought"
บทความอ้างอิง: //www.vevb.com/article/86996.htm
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น