Java Object Oriented

نگاهی به برنامه نویسی شی گرا در جاوا

ادامه نوشته

Java Profilers

Profiler و APM ابزاری هایی برای مانیتورینگ و دیباگینگ پرفورمنس برنامه ها جاوا در زمان توسعه استفاده می‌شه.

ادامه نوشته

Java Test 1

تو این پست یکسری بدیهیات رو می‌گم، راجع یکسری از یکی دوتا ابزار خیلی خلاصه صحبت می‌کنم و سعی می‌کنم یه کار مسخره انجام بدم

ادامه نوشته

Types of References in Java

چهار نوع رفرنس توی جاوا داریم:

  • Strong References
  • Weak References
  • Soft References
  • Phantom References
ادامه نوشته

Java Garbage Collection

GC با آزاد کردن خودکار حافظه باعث سریعتر شدن برنامه نویسی می‌شه و از نوشتن کد‌های اضافه جلوگیری می‌کنه.

ادامه نوشته

Finalize vs Cleaner

در قدیم اینجوری بود که ما متد finalize رو توی اشیا بازنویسی می‌کردیم و وقتی GC می‌خواست اون شی رو نابود کنه این متد رو صدا می‌زد و ما اگه لاجیک خواصی داشتیم اونجا می‌نوشتیم.

اما به دلیل مشکلاتی که این کار بوجود میاورد اون توی جاوا ۱۱ به بعد deprecated شده.
یکی از بزرگترین مشکلاتی که بوجود میاد این هستش که این متد توی thread مربوط به GC اجرا می‌شه و باعث بوجود اومدن مکث در thread اصلی می‌شه.

حالا باید چیکار کنیم؟

باید توی شی پدر اون شی که داره نابود می‌شه یه Cleaner بسازیم و شی مورد نظر و به همراه یک runnalbe توی اون register کنیم.

+

Java Memory Model

JVM دقیقا مثل باقی برنامه ها یک فضا رو توی رم اشغال می‌کنه و خودش کامل اون رو مدیریت می‌کنه. ستا فضای کاملا جدا از هم داریم که JVM داده‌های زمان اجرا و کدهای کامپایل شده رو اونجا نگه‌میداره.

ادامه نوشته

The end of the Java's Architecture's Story

ما در مورد اینکه برنامه‌ها چجوری اجرا می‌شن صحبت کردیم ولی درباره اجرا کننده برنامه‌ها هیچ صحبتی نکردیم.

ادامه نوشته

Execution Engine

bytecode ها اینجا اجرا می‌شن. Execution Engine دستورات رو خط به خط اجرا می‌کنه‌.

ادامه نوشته

Runtime Data Area

JVM داخل رم یک فضا برای بارگذاری داده‌ها در اختیار داره. class loader شی باینری متناظر هر کلاس رو تولید می‌کنه و اونها رو بصورت جداگانه و با اطلاعات زیر به Runtime Data Area می‌‌ده و اون هم توی method area ذخیره می‌کنه.

ادامه نوشته

Class Loader Subsystem

به ازای هر برنامه که اجرا می‌شه یک نمونه از ماشین مجازی جاوا JVM داخل رم سیستم بارگذاری می‌شه و با استفاده از Class Loader Subsystem کلاس های مورد نظر رو وارد رم می‌کنه و بهش می‌گن dynamic class loading که کلاس‌ها رو load و link و initialize می‌کنه. البته این کار رو فقط یک بار در زمان اجرا انجام می‌ده.

ادامه نوشته

Java Thread

با شی Thread می‌تونیم یک فضای جدای پردازشی ایجاد کنیم. برای این کار باید یک کلاس را از آم مشتق کنیم و تابع run را در آن باز نویسی کنیم و با فراخوانی تابع start آن را اجرا کنیم. همچنین مقادیری که برای کنترل فرایند های درون آن نیاز است را می‌توانید از طریق تابع سازنده آن ارسال کنیم.

ادامه نوشته

Java Non Access Modifiers

تو جاوا یکسری modifire خاص دیگه هم داریم !!!

ادامه نوشته

Java Access Modifiers

تو جاوا چهارتا سطح دسترسی داریم !!!

ادامه نوشته

final vs finally vs finalize

final یک کلمه کلیدی هستش و قبل از کلاس، متد و یا متغییر ها قرار میگیره و مانع از توسعه، بازنویسی و تغییر اونها می‌شه.

finally: یک بلاک برای کد های مهم هستش که همراه با try/cache استفاده میشه و در هر دو صورت اجرا می‌شه.

finalize: یک متد هستش که gc قبل از اینکه یک شی رو دور بریزه اون رو صدا می‌کنه.

Java Static-Final

final:

  • کلاس final قبل توسعه نیست.
  • متد final قابل بازنویسی نیست.
  • متغییر final قابل مقدار دهی نیست.
  • کلاس abstract را نمی‌توان final کرد.

static:

  • فقط کلاسی که درون یک کلاس دیگر است می‌تواند statis باشد.
  • کلاس static قابلیت نمونه سازی مستقل را دارد.
  • کلاس static قابلیت توسعه را دارد.
  • متد static بدون نیاز به نمونه سازی از کلاس در درسترس است.
  • متد static به صورت پیشفرض final است.
  • متد static بدون بازنویسی ولی با همان نام در کلاس فرزند قابل ساخت است.
  • متد static در نمونه ساخته شده از کلاس در دسترس نیست.
  • متد static قابل بازنویسی override نیست.
  • متغییر static بدون نیاز به نمونه سازی از کلاس در درسترس است.
  • متغییر static final خواص هر دو گروه را دارد.

  • در کلاس‌های تودرتو اگه کلاس داخلی static نباشد، برای نمونه سازی از آن لازم است یک نمونه از کلاس بیرونی ایجاد کنیم.

A a = new A();
A.B b = a.new B();

  • متد های هم نام با کلاس پدر در کلاس فرزند بدون باز نویسی قابل ساختن هستند. بجز متدهای final