أولاً ، دعنا نتحدث عن النهائي.
يمكن للكلمة الرئيسية النهائية تعديل المتغيرات والأساليب والفئات .
المتغير النهائي:
يحتاج:
1 تحتاج إلى ثابت وقت التجميع لا يتغير أبدًا
2 قيمة تهيئة في وقت التشغيل ، لا تريد تغييرها
الفوائد: حسابات تنفيذها في وقت الترجمة ، مما يقلل من العبء على وقت التشغيل
الامتدادات:
يمكنك تعديل الأنواع الأساسية والكائنات المرجعية. عند تعديل النوع الأساسي ، فهذا يعني أن القيمة ثابتة تمامًا. عند تعديل مرجع كائن ، بمجرد تهيئة المرجع وإشارةه إلى كائن ، لا يمكن تغييره إلى كائن آخر (يمكن تعديل الكائن نفسه)
فارغ نهائي
يجب تعيين المجال الذي يتم تعديله حسب النهائي ولكن لا يعطي القيمة الأولية قيمة إلى النهائي باستخدام تعبير في تعريف المجال أو مُنشئه (يجب تهيئة النهائي قبل الاستخدام)
يلاحظ:
إذا تم تعديل كائن بواسطة ثابت ونهائي في نفس الوقت (ثابت فترة الترجمة) ، يتم التعبير عنه بشكل عام في رأس المال ، ومعلمات تعديل كلمة الارتباط السفلي:
إذا كانت المعلمة المعدلة النهائية ، فهذا يعني أن المعلمة قابلة للقراءة ولكن لا يمكن تعديلها.
مثال الاستخدام:
راند عشوائي خاص = جديد عشوائي () ؛ عشوائي ثابت عشوائي = جديد عشوائي () ؛ نهائي خاص int n1 = 12 ؛ رقم int النهائي الخاص = rand.nextint (30) ؛ private static final number2 = random.nextint (40) ؛ test public void finalDatatest () {system.out.println (n1) ؛ System.out.println ("-----------------------------------") ؛ System.out.println (Rand.Nextint (30)) ؛ System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * param sk * regurn */public string finalparam (final string sk) {// sk = "jeyson" ؛ الطريقة النهائية:
يمكن أيضًا تعديل الطريقة النهائية ، مما يشير إلى أنه لا يمكن أن يتم مورث الطريقة بواسطة الفئات الفرعية.
فوائد استخدام النهائي:
1 قبل JDK1.5 ، كانت الكفاءة أعلى ، وبعد JDK1.5 ، يمكن تجاهلها
2 قفل الأسلوب للتأكد من أن معنى الطريقة في الفئة الفرعية يبقى دون تغيير ولا يمكن الكتابة فوقه. مثال على الاستخدام:
السلسلة النهائية العامة FinalMethod () {return "Hello World" ؛ } الفصل النهائي:
إذا كنت لا تريد أن تكون ورثًا من قبل أي فصل ، فيمكنك استخدام النهائي لتعديل مثال الاستخدام للفئة:
الفئة النهائية العامة النهائيات {private int k ؛ public void getMyWord () {system. Out .println ("هذه فئة نهائية ، قيمة k هي" +getk ()) ؛ } public int getk () {return k ؛} public void setk (int k) {this .k = k ؛}} ثم الكلمة الرئيسية العابرة:
يمكن أن يعدل العابر فقط المتغيرات ، مما يشير إلى أنه لا يمكن التسلسل المتغير.
بشكل عام ، نرث فئة الواجهة التسلسلية ، وسيتم تنفيذ التسلسل تلقائيًا. عندما يتم تسلسل المتغير الذي تم تعديله عن طريق العابرة ، فلن يتم تسلسله إلى الوجهة المحددة.
لذا،
1 لم يعد المتغير الذي تم تعديله بواسطة عابرة جزءًا من ثبات الكائن ، ويتم تسلسل محتوى المتغير ولا يمكن الوصول إليه.
2 عابرة يمكن فقط تعديل المتغيرات ، وليس الأساليب والفئات
3 مثال لاستخدام متغير ثابت لا يمكن التسلسل به بغض النظر عما إذا تم تعديله بواسطة عابرة:
الفئة العامة transientex {public static void main (string [] args) {user user = new user () ؛ user.setUserName ("jeyson") ؛ user.setPassword ("123456") ؛ System.out.println ("قبل التسلسل:") ؛ System.out.println ("username ="+user.getUserName ()) ؛ System.out.println ("password ="+user.getPassword ()) ؛ . OS.WriteObject (المستخدم) ؛ os.flush () ؛ OS.Close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }. user = (user) iS.ReadObject () ؛ is.close () ؛ System.out.println ("序列化后 :") ؛ System.out.println ("username ="+user.getUserName ()) ؛ System.out.println ("password ="+user.getPassword ()) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } System.out.println ("----------------------------------") ؛ }} مستخدم الفئة ينفذ serializable {private static Final Long SerialVersionuid = 1L ؛ اسم المستخدم الخاص بالسلسلة الخاصة ؛ // استخدام كلمة مرور السلسلة العابرة العابرة ؛ السلسلة العامة getUserName () {return username ؛ } public void setusername (string username) {this.userName = username ؛ } السلسلة العامة getPassword () {return password ؛ } public void setPassword (سلسلة كلمة مرور) {this.password = password ؛ }} الامتداد: خارجي
يتم تنفيذ الفئة التي تنفذ الواجهة القابلة للتسلسل ، لذلك سيقوم التسلسل تلقائيًا بتنفيذ الفئة التي تنفذ الواجهة الخارجية. لا يمكن التسلسل تلقائيًا ، وما إذا كان استخدام عابرة ليس له أي تأثير على النتيجة.
إذا كان التسلسل مطلوبًا ، فأنت بحاجة إلى تحديد المتغير يدويًا ليتم تسلسله في طريقة الكتابة.
مثال على الاستخدام:
الطبقة العامة ExternalizableEx تنفذ {{private transient string name = "ssss" ؛ Override public void readexternal (ObjectInput in) يلقي ioException ، classnotfoundException {name = (string) in.ReadObject () ؛ } Override public void writeextern (ObjectOutput) يلقي ioException {out.writeObject (name) ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } public static void main (string [] args) {externalizableEx ex = new externalizableEx () ؛ ex.setName ("jeyson") ؛ system.out.println ("التسلسل الخارجي:") ؛ System.out.println (ex.getName ()) ؛ . OS.WriteObject (ex) ؛ os.flush () ؛ OS.Close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }. ex = (externalizableEx) iS.ReadObject () ؛ is.close () ؛ system.out.println ("التسلسل الخارجي:") ؛ System.out.println (ex.getName ()) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }}} إفادة:
معظم النهائي يأتي من الطبعة الرابعة من "أفكار برمجة جافا"
مقالة مرجعية: //www.vevb.com/article/86996.htm
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.