-
کلاس کے طریقوں کی فہرست بنائیں
Object
equals()
hashCode()
toString()
getClass()
notify()
notifyAll()
wait()
wait(long timeOut)
wait(long timeOut, int nanos)
-
equals
اور طریقوں کی ضرورت کیوں ہےhashCode
؟اشیاء کا موازنہ کرنے کے لیے استعمال کیا جاتا ہے۔
اس طریقہ کار کا مقصد
equals
یہ معلوم کرنا ہے کہ آیا اشیاء کے اندرونی مواد کا موازنہ کرکے اشیاء اندرونی طور پر ایک جیسی ہیں۔ یہequals
آہستہ آہستہ کام کرتا ہے، سب سے پہلے اشیاء کے ہیش کوڈز کا موازنہ کیا جاتا ہے، اور اگر ہیش کوڈز برابر ہیں، تو اس کے خلاف چیک کیا جاتا ہے۔equals
-
اگر آپ برابر کو اوور رائیڈ کرتے ہیں لیکن اوور رائڈ نہیں کرتے ہیں تو کیا ہوگا
hashCode
؟ابتدائی طور پر
hashCode
، ایک بے ترتیب نمبر۔جاوا میں مجموعے ہمیشہ استعمال کرتے ہوئے اشیاء کا موازنہ کرنے سے پہلے
equals
طریقہ استعمال کرتے ہوئے ان کی تلاش/ موازنہ کرتے ہیںhashCode()
۔ اور اگر ایک جیسی اشیاء مختلف ہیںhashCode
، تو اشیاء کو مختلف سمجھا جائے گا - ان کا استعمال کرتے ہوئے موازنہ کرنا ممکن نہیں ہوگاequals
۔ -
طریقے کیوں ہیں
wait
,notify
,notifyAll
?کبھی کبھی کسی پروگرام میں ایسی صورت حال ہو سکتی ہے کہ تھریڈ نے کوڈ کے بلاک میں داخل کیا ہو
synchronized
، مانیٹر کو بلاک کر دیا ہو اور مزید کام نہ کر سکے، کیونکہ کچھ ڈیٹا ابھی تک غائب ہے: مثال کے طور پر، جس فائل پر کارروائی کرنی چاہیے وہ ابھی تک لوڈ نہیں ہوئی ہے یا اس طرح کی کوئی چیز۔ اس مسئلے کو حل کرنے کے لیے ایک طریقہ ایجاد کیا گیاwait()
۔ اس طریقہ کو کال کرنے سے دھاگہ مانیٹر کی رہائی اور "توقف" کا سبب بنتا ہے۔غیر موقوف کرنے کے لیے، طریقے استعمال کیے جاتے ہیں
notify
۔notifyAll
طریقہnotify
ایک بے ترتیب دھاگے کو "غیر منجمد" کرتا ہے، طریقہnotifyAll
- دیئے گئے مانیٹر کے تمام "منجمد" تھریڈز۔ -
کسی چیز کو صحیح طریقے سے کلون کیسے کریں؟
کلوننگ کی دو اقسام۔
ڈیفالٹ آبجیکٹ کو کلون کرنے کے لیے:
Cloneable
اپنی کلاس میں ایک انٹرفیس شامل کریں۔- طریقہ کو اوور رائیڈ کریں
clone
اور اس میں بنیادی نفاذ کو کال کریں:
class Point implements Cloneable { int x; int y; public Object clone() { return super.clone(); } }
clone
یا آپ خود طریقہ کے نفاذ کو لکھ سکتے ہیں :class Point { int x; int y; public Object clone() { Point point = new Point(); point.x = this.x; point.y = this.y; return point; } }
-
طریقہ کیوں ضروری ہے
finalize()
اور یہ کیسے کام کرتا ہے؟اگر آپ کو یاد ہو تو یہ
finalize()
ایک خاص طریقہ ہے جسے کچرا اٹھانے والے کی جانب سے اسے تلف کرنے سے پہلے اس پر بلایا جاتا ہے۔اس طریقہ کار کا بنیادی مقصد استعمال شدہ بیرونی غیر جاوا وسائل کو جاری کرنا ہے: بند فائلیں، I/O اسٹریمز وغیرہ۔
finalize()
غیر مستحکم کام کرتا ہے.یہ طریقہ اس پر رکھی گئی توقعات پر پورا نہیں اترتا۔ جاوا مشین کسی چیز کی تباہی میں تاخیر کر سکتی ہے، ساتھ ہی کسی طریقہ کی کال کو،
finalize
جب تک وہ چاہے۔ اس کے علاوہ، یہ اس بات کی ضمانت نہیں دیتا کہ یہ طریقہ بالکل بلایا جائے گا. بہت سے حالات میں، "اصلاح" کی خاطر اسے نہیں کہا جاتا ہے۔ -
مختلف کیا ہے
final
،finally
،finalize
؟final
- ترمیم کرنے والا- فیلڈز کو تبدیل نہیں کیا جا سکتا، طریقے اوور رائڈ ہیں۔
- کلاسز وراثت میں نہیں مل سکتیں۔
- یہ ترمیم کنندہ صرف کلاسز، طریقوں اور متغیرات پر لاگو ہوتا ہے (مقامی متغیرات بھی)
- طریقہ کے دلائل جن کو
final
صرف پڑھنے کے لیے نشان زد کیا گیا ہے؛ انہیں تبدیل کرنے کی کوشش کے نتیجے میں تالیف کی خرابی ہوگی۔ - Переменные
final
не инициализируются по умолчанию, им необходимо явно присвоить meaning при объявлении or в конструкторе, иначе – ошибка компиляции - Если final переменная содержит ссылку на an object, an object может быть изменен, но переменная всегда будет ссылаться на тот же самый an object
- Также это справедливо и для массивов, потому что массивы являются an objectми, – массив может быть изменен, а переменная всегда будет ссылаться на тот же самый массив
- Если класс объявлен
final
иabstract
(взаимоисключающие понятия), произойдет ошибка компиляции - Так How
final
класс не может наследоваться, его методы никогда не могут быть переопределены
finally
— блок в связкеtry-catch-finally
, code в котором выполнится независимо от того вылетело ли исключение в блокеtry
or нет. Используется для освобождения ресурсов.finalize
— метод в классеObject
см 6. -
What такое
try-with-resources
?Это специальная конструкция
try
, называемаяtry-with-resources
, в которой Обрати внимание – послеtry
следуют круглые скобки, где объявляются переменные и создаются an objectы. Эти an objectы можно использовать внутри блокаtry
, обозначенного скобками{}
. Когда выполнение команд блокаtry
закончится, независимо от того – нормально оно закончилось or было исключение, для an object, созданного внутри круглых скобок()
, будет вызван методclose()
; -
Чем отличаются методы
wait(1000)
иsleep(1000)
?sleep()
приостанавливает поток на указанное. состояние меняется на TIMED_WAITING, по истечению — RUNNABLEwait()
меняет состояние потока на WAITINGможет быть вызвано только у an object владеющего блокировкой, в противном случае выкинется исключение IllegalMonitorStateException. при срабатывании метода блокировка отпускается, что позволяет продолжить работу другим потокам ожидающим захватить ту же самую блокировку . в случае
wait(int)
с аргументом состояние будет TIMED_WAITING -
В чем отличие
i++
и++i
?++i
,i
сначала увеличивается на 1, затем участвует в выражении.i++
,i
сначала участвует в выражении, затем увеличивается на 1.
GO TO FULL VERSION