آموزش کامل متدهای جاوا
صفحه اصلی / دوره‌های آموزشی / آموزش جاوا مقدماتی تا متوسط / آموزش کامل متدهای جاوا

آموزش کامل متدهای جاوا

آموزش کامل متدهای جاوا
75,600 تومان
براي خريد اين درس نياز است وارد سايت شويد. در صورت نداشتن حساب کاربري عضو شويد.

متدهای سازنده
در هر کلاس امکان تعریف متدی به نام متد سازنده وجود دارد.
در واقع متد های سازنده رفتاری شبیه به متد های Setter دارند؛و کارشان بیشتر این است که در لحظه‌ی تولید یا بوجود آمدن اشیاء و نمونه های کلاس، اعضای خصوصی آن را مقدار دهی کنند؛ اگر ما نیاز داشته باشیم در لحظه‌ی به وجود آمدن نمونه ای از کلاس به فیلد های داده ای آن مقدار بدهیم، شاید بهترین زمان برای این کار استفاده از متد های سازنده باشد.
متد های سازنده یک سری ویژگی خاص دارند؛ در واقع اگر ما یک کلاس داشته باشیم میتوانیم به کمک متد های سازنده رفتار های خیلی خوبی انجام دهیم؛ اما ویژگی های اصلی متد های سازنده چیست؟
برای این که بهتر آشنا شویم کلاس Person که جلسه قبل هم مثال زدیم دوباره تعریف میکنیم، و اینبار برای متد های سازنده از آن استفاده میکنیم.

کد کلاس اصلی:

package package1;

public class MainClass {

	public static void main(String[] args) {
		
	}

}

کد کلاس Person:

package package1;

public class Person {
	private String Name;
	private String Family;
	private int Age;
	private float Avg;

}


در جلسه قبل روش فراخوانی یک نمونه از کلاس را توضیح دادیم که قطعه کد زیر میباشد:
 

Person p1=new Person();     


کلمه Person که بعد از کلمه new قرار گرفته است در واقع اسم کلاس نیست و همان متد سازنده است؛ از این که یک پرانتز جلویش قرار دارد میتوان تشخیص داد که یک متد میباشد.
متد های سازنده، متد هایی هستند همنام کلاس، متد های سازنده معمولا به صورت عمومی تعریف میشوند؛ اما در آینده و در جلسات بعد خواهیم فهمید که همیشه این متد ها به صورت عمومی نیستند؛ متد های سازنده دارای نوع داده خروجی نیستند؛ از این متد ها استفاده میشود برای مقدار دهی اولیه به اعضای داده ای کلاس؛ متد های سازنده هم میتوانند مانند تابع های Setter به ما کمک کنند تا اعضای خصوصی را پر کنیم.
در پرانتز جلوی نام متد سازنده میتوانیم ورودی ها را تعیین کنیم:
کد کلاس Person:

package package1;  

public class Person {
	private String Name;
	private String Family;
	private int Age;
	private float Avg;

	
	
	public Person(String name,String family,int age,float avg)
	{
		Name=name;
		Family=family;
		Age=age;
		Avg=avg;
	}
}


حالا که متد سازنده را تعریف کردیم به کلاس اصلی برمیگردیم تا از آن استفاده کنیم؛ میبینیم که برنامه دچار خطا شده است،همانطور که گفتیم Person بعد از کلمه new یک سازنده است اما تا زمانی که ما خودمان برای کلاس Person سازنده تعریف نکرده باشیم؛ برای رفع خطا ما باید برای این متد سازنده مقدار تعیین کنیم به شکل زیر:
 

Person p1=new Person("mehdi", "abbasi", 39, 18.5f);     


در لحظه ای که شی p1 قرار است ساخته شود مقادیر تعیین شده ارسال میشوند و در خانه های مورد نظر قرار میگیرند.
از این لحظه به بعد باید ما هر زمان یک شی تعریف میکنیم به طور مثال p2 وPerson را مینویسیم دیگر اجازه نداریم مقدار ها را خالی بگذاریم، چرا؟ چون ما در این حالت مقداری برای سازنده ارسال نکرده ایم و سازنده کلاس نیاز دارد ورودی را دریافت کند؛ مگر این که همان سازنده پیشفرض را دوباره داشته باشیم:
کد کلاس Person:

package package1;

public class Person {
	private String Name;
	private String Family;
	private int Age;
	private float Avg;

	
	
	public Person(String name,String family,int age,float avg)
	{
		Name=name;
		Family=family;
		Age=age;
		Avg=avg;
	}
	
	public Person()
	{
		
	}
}


آیا امکان دارد در یک کلاس ما دو تابع هم نام داشته باشیم؟ بله، امکانش وجود دارد این مبحث همان  Overloadingمتد ها است.

اگر داخل یک کلاس از چندین تابع همنام استفاده کردیم، اشکالی ندارد به شرط این که یا تعداد ورودی های متد با هم متفاوت باشد؛ یا اینکه اگر تعداد ورودی ها یکسان است نوع داده ورودی متفاوت باشد.
اعضای استاتیک
ما چهار دسته عضو استاتیک داریم که دو دسته آن از بقیه مهم تراند:
•    اعضای استاتیک داده ای.
اعضای استاتیک داده ای یعنی ما میتوانیم داده هایمان را به صورت استایک تعریف کنیم.
•    اعضای استاتیک تابعی.
اعضای استاتیک تابعی یعنی ما میتوانیم تابع هایمان را به صورت استاتیک تعریف کنیم.
اعضای استاتیک داده ای
در یک پروژه جدید نام کلاس اصلی را MainClass و نام یک کلاس دیگر را MyClass میگذاریم؛ در MyClass چند عضو تعریف میکنیم و سطح دسترسی را عمومی قرار می دهیم. تا به این جا همه اعضای ما معمولی هستند؛ 
کد MyClass:

package package1;     

public class MyClass {
	public int num1;
	public int num2;
	public void print() 
	{
		num1++;
		System.out.println(num1);
	}

}


برای دسترسی به این اعضا کافی است ما یک شی در کلاس اصلی تعریف کنیم :
کد MainClass:

package package1;    

public class MainClass {

	public static void main(String[] args) {
		MyClass obj1=new MyClass();
		obj1.num1=300;
		
	}

}


اگر همین کار را برای obj2 انجام بدهیم :
 کد MainClass:

package package1;     

public class MyClass {
	public int num1;
	public static int num2;
	public void print() 
	{
		num1++;
		System.out.println(num1);
	}

}


ما دو شی متفاوت داریم، به نام های obj1 و obj2، که هر کدام فیلد های یکسانی دارند؛ مقدار های فیلد های هر شی هیچ ارتباطی با فیلد های شی دیگر ندارد؛ یعنی اگر ما فیلد num1 از obj1 را چاپ کنیم همان مقدار 300 چاپ خواهد شد؛ چرا؟ چون این فیلد ها به صورت مجزا از هم هستند یعنی برای هر شی این فیلد ها برای خودش است و متفاوت با شی دیگری میباشد.
اما اگر بگوییم که num2 از نوع static میباشد یعنی این که همه‌ی شی ها به صورت اشتراکی از این فیلد استفاده میکنند؛ این فیلد فضای مشترک بین تمام نمونه های این کلاس میباشد.
کد MyClass:

package package1;  

public class MyClass {
	public int num1;
	public static int num2;
	public void print() 
	{
		num1++;
		System.out.println(num1);
	}

}


اگر در کلاس اصلی بگوییم:
کد MainClass:

package package1;    

public class MainClass {

	public static void main(String[] args) {
		MyClass obj1=new MyClass();
		MyClass obj2=new MyClass();
		obj1.num2=500;
		obj2.num2=150;
		System.out.println(obj1.num2);
	}

}


حالا اگر برنامه را اجرا کنیم توقع داریم که مقدار 500 برایمان چاپ شود اما میبینیم که 150چاپ میشود، دلیلش این است که عضو num2 یک عضو static و مشترک بین این کلاس است؛ شی اول در مرحله اول مقدار را 500 قرار میدهد اما بعد از آن شی دوم مقدار آن را به 150 تغییر میدهد.
درمیابیم که اعضای استاتیک یک کلاس متعلق به شی خاصی نیستند؛ و اگر هر شی مقدار آن را دستکاری کند برای همه تغییر کرده است.
حالا که این عضو استاتیک است لازم نیست نام شی را قبل از آن تعریف کنیم چون متوجه شدیم که این عضو متعلق به هیچ کدام از این نمونه ها نیست و متعلق به کلاس میباشد.
پس میتوانیم موقع فراخوانی به جای نوشتن نام شی، اسم کلاس این عضو را بنویسیم؛ در واقع عضو استاتیک متعلق به کلاس میباشد.
اعضای استاتیک تابعی
اگر متدی را به صورت استاتیک تعریف کنیم چند ویژگی به آن داده ایم:
•    این متد دیگر اجازه ندارد با اعضای غیر استاتیک کار کند.
•    شبیه به اعضای استاتیک داده ای ما برای استفاده از آن ها نیاز نیست نام شی را ذکر کنیم و کافی است نام کلاس و تابع مورد نظر را ذکر کنیم.

جلسات دوره


                         
مهدی عباسی
مدرس :

مهدی عباسی

مهدی عباسی هستم، مسلط به حداقل ۲۰ زبان مطرح برنامه نویسی به صورت پیشرفته، مدیر عامل شرکت آریا نرم افزار و بنیانگذار آکادمی درسمن، مسلط به تدریس دروس تخصصی کاردانی و کارشناسی کامپیوتر، پایگاه داده ها، برنامه نویسی پیشرفته، مبانی برنامه نویسی، مباحث ویژه طراحی وب و .... مطالعه بیشتر رزومه

نظر شما در تصمیم دیگران اثرگذار است.

لطفا برای همراهان درسمن و بهتر شدن دوره نظر خود را بنویسید.

برای ارسال نظر نیاز است وارد سایت شوید. در صورت نداشتن حساب کاربری عضو شوید.

نظرات دانشجویان

کاربر درسمن
یزدان

سلام استاد واقعا از شما ممنونم بخاطر اموزشهاتون .استاد یک سوال :ما دوتا شی از یک کلاس اما با متد سازندهای متفاوت تعریف میکنیم وامتحان کردم دیدم میتونم با هرکدومشون به تمام متدهای غیر سازنده کلاس به کرار وصل بشم حالا تفاوت این دوتا چیه ایا فضا های ذخیره سازی متفاوتی دارند یا سطح دسترسی متفاوتی میشه براشون تعریف کرد اگر بخوام بهتر سوالم رو بپرسم اصلا دلیل اینکه ما چندتا متد سازنده تعریف میکنیم چیه ؟

کاربر درسمن
داود پویانی

سلام استاد عباسی وقتتون بخیر امیدوارم همیشه خوب و سالم باشید این کامنت رو صرفا برای قدردانی از شما نوشتم واقعا ممنون از دوره جاوا و شیوه آموزش شما من از جاهای مختلف سعی کردم جاوا رو یاد بگیرم ولی شیوه آموزششون اصلا مناسب و قابل فهم نبود ولی با دوره شما و نحوه آموزش عالیتون تمام مباحث قابل فهم و یادگیری هستن ممنونم ازتون و آرزوی بهترین ها رو برای شما دارم

پشتیبانی 1
پشتیبانی 1 سلام و درود فراوان خدمت شما، ممنون از محبتتون امیدواریم موفق و سربلند باشید. تمام هدف درسمن همینه که دوره های قابل فهم براتون منتشر کنه تا به راحتی متخصص بشید.
نمایش بیشتر
آموزش جاوا مقدماتی تا متوسط

188