Java Naming conventions
نامگذاری class, package, method و ... در جاوا طبق یک استانداردی انجام میشه، هرچند که رعایت این استانداردها الزامی نمی باشد اما این کار باعث آسان تر شدن خوندن کد توسط خود برنامه نویس و بقیه برنامه نویس ها میشه
- class name
یک اسم که با حرف بزرگ شروع میشه، مثل String, Color, Button, System و ...
- interface name
یک صفت که با حرف بزرگ شروع میشه، مثل Runnable, Remote, ActionListener و ...
- method name
یک فعل که با حرف کوچک شروع میشه، مثل actionPerformed, main, print, println و ...
- variable name
با حرف کوچک شروع میشه، مثل firstName, orderNumber و ...
- package name
تمامی حروف کوچک هستن، مثل java, lang, sql, util و ...
- constants name
تمامی حروف بزرگ هستن، مثل RED, YELLOW, MAX_PRIORITY و ...
CamelCase in java naming conventions
نام گذاری class, interface, method, variable در جاوا به صورت camelCase هست به این صورت که اگر یه اسم از ترکیب دوتا کلمه باشه، کلمه دوم با حرف بزرگ شروع میشه مثل firstName, ActionEvent و ...
Object and Class in Java
یک تعریف دیگه ای از object و class هست که در واقع میگه object یک موجودیت فیزیکی و همچنین یک موجودیت منطقی هست اما class فقط یک موجودیت منطقی هست
Object in Java
هر موجودیتی که رفتار و حالتی داشته باشه رو به عنوان object میشناسیم، مثل میز، مداد، ماشین و ... . میتونه فیزیکی و یا منطقی باشه (محسوس و نامحسوس). سیستم بانکی رو میشه به عنوان یک موجودیت نامحسوس شناخت.
یک object سه تا ویژگی داره
- state
نشان دهنده دیتای object هست
- behavior
نشان دهنده رفتار و عملکرد یک object
- identity
هویت یک object معمولا با یک id منحصر به فرد (unique) مشخص میشه که در واقع برای کاربران خارجی قابل رویت نیست، و توسط خود jvm برای شناسایی object ها از هم دیگه استفاده میشه
برای مثال مداد یک object هست که یه اسم داره و یه رنگ (رنگ و اسم به عنوان state هستن)
از مداد برای نوشتن استفاده میشه (نوشتن به عنوان behavior هست)
Object is an instance of a class
کلاس یک قالب و یا یک طرح برای ساخت یک object هست، در واقع object یه نمونهای از یک class هست
تعریفهایی که برای یک object وجود داره
- یک موجودیت در دنیای واقعی
- یک موجودیت در زمان اجرا (run time)
- یک موجودیت که دارای رفتار و حالت هست
- یک نمونه از یک class
Class in Java
کلاس یک مجموعهای از object هاست که دارای ویژگی های مشترکی هستن، همچنین کلاس یک قالب و یا یک طرح برای ساخت یک object هست. class یک موجودیت منطقی هست و نمی تونه فیزیکی باشه
یک class تشکیل شده از
- fields
- methods
- constructors
- blocks
- nested class and interface
Syntax to declare a class:
class <class_name>{
field;
method;
} Instance variable in Java
متغیرهایی که در داخل یک class و خارج یک method تعریف میشن رو به عنوان instance variable میشناسیم
این نوع متغیرها مموریای در زمان کامپایل نمیگیرن و فقط در زمان اجرا (runtime) وقتی که object ایجاد میشه مموری میگیره، بخاطر همین بهش میگن instance variable
Method in Java
متود در جاوا برای نمایش رفتار یک object بکار میره و باعث بهینه شدن کد میشه و به کد قابلیت استفاده مجدد رو میده
new keyword in Java
کلمه new در جاوا باعث میشه در زمان runtime برای ساخت object مموری اختصاص پیدا کنه، این مموری اختصاص پیدا شده در Heap memory قرار داره.
Object and Class Example
File: Student.java
در این مثال با استفاده از new از کلاس Student یک آبجکت می سازیم به اسم s1
دقت کنید که متود main در خود کلاس Student هست
File: TestStudent1.java
تفاوت این مثال در این هست که ما از یک کلاس دیگه برای متود main مون استفاده کردیم، که نسبت به مثال قبلی روش بهتری هست
دقت کنید که ما هم می تونیم چندتا کلاس را در جاوا فایلهای متفاوتی داشته باشیم و هم اینکه در یک جاوا فایل اونا رو داشته باشیم. در هر دو روش در زمان compile برای هر کلاس، فایل های متفاوتی (class.) ساخته خواهند شد
File: Student.java
class Student{
int id;//field or data member or instance variable
String name;
public static void main(String args[]){
Student s1=new Student();//creating an object of Student
System.out.println(s1.id);
System.out.println(s1.name);
}
}--------------------------------------------
Output:
0
null
در این مثال با استفاده از new از کلاس Student یک آبجکت می سازیم به اسم s1
دقت کنید که متود main در خود کلاس Student هست
File: TestStudent1.java
class Student{
int id;
String name;
}
class TestStudent1{
public static void main(String args[]){
Student s1=new Student();
System.out.println(s1.id);
System.out.println(s1.name);
}
}--------------------------------------------
Output:
0
null
تفاوت این مثال در این هست که ما از یک کلاس دیگه برای متود main مون استفاده کردیم، که نسبت به مثال قبلی روش بهتری هست
دقت کنید که ما هم می تونیم چندتا کلاس را در جاوا فایلهای متفاوتی داشته باشیم و هم اینکه در یک جاوا فایل اونا رو داشته باشیم. در هر دو روش در زمان compile برای هر کلاس، فایل های متفاوتی (class.) ساخته خواهند شد
3 Ways to initialize object
۳ روش برای initialize کردن object وجود داره (ریختن دیتا توی آبجکت)
- By reference variable
با استفاده از مقداردهی مستقیم به متغیر
- By method
با استفاده از متود
- By constructor
با استفاده از کانستراکتور
Object and Class Example: Initialization through reference
File: TestStudent3.java
class Student{
int id;
String name;
}
class TestStudent3{
public static void main(String args[]){
//Creating objects
Student s1=new Student();
Student s2=new Student();
//Initializing objects
s1.id=101;
s1.name="Sonoo";
s2.id=102;
s2.name="Amit";
//Printing data
System.out.println(s1.id+" "+s1.name);
System.out.println(s2.id+" "+s2.name);
}
}
--------------------------------------------
Output:
101 Sonoo
102 Amitدر این مثال☝️مقداردهی از طریق صدا زدن مستقیم متغیر انجام میشه
Object and Class Example: Initialization through method
File: TestStudent4.java
class Student{
int rollno;
String name;
void insertRecord(int r, String n){
rollno=r;
name=n;
}
void displayInformation(){
System.out.println(rollno+" "+name);
}
}
class TestStudent4{
public static void main(String args[]){
Student s1=new Student();
Student s2=new Student();
s1.insertRecord(111,"Karan");
s2.insertRecord(222,"Aryan");
s1.displayInformation();
s2.displayInformation();
}
}
--------------------------------------------
Output:
111 Karan
222 Aryanدر این مثال☝️مقداردهی متغیرها از طریق متود انجام میشه، در واقع وظیفه مقداردهی رو متود انجام میده و ما با صدا زدن متود میتونیم متغیرهای object مون رو مقداردهی کنیم
Object and Class Example: Initialization through constructor
این مورد رو بعدا بررسی می کنیم
توجه کنید که راه های مختلفی برای ساخت object وجود داره که بعدا اونا رو بررسی خواهیم کرد
- By new keyword
- By newInstance() method
- By clone() method
- By deserialization
- By factory method etc
Anonymous object
آنونیموس آبجکت ها درواقع آبجکت های بدون نامی هستن که هیچ reference ی به اونا وجود نداره، چون ما همون موقع که میسازیم شون همون موقع هم ازشون استفاده می کنیم.
اگر از object ی فقط برای یک بار استفاده بشه، میتونیم از این ویژگی استفاده کنیم.
در مثال زیر ما یک object میسازیم و متودش رو صدا میزنیم
Calculation c=new Calculation();
c.fact(5);
اما از طریق anonymous object این کار رو میشه به این صورت انجام داد
new Calculation().fact(5);
class Calculation{
void fact(int n){
int fact=1;
for(int i=1;i<=n;i++){
fact=fact*i;
}
System.out.println("Factorial is "+fact);
}
public static void main(String args[]){
new Calculation().fact(5);//calling method with anonymous object
}
}
--------------------------------------------
Output:
Factorial is 120در این مثال☝️با استفاده از anonymous object یک آبجکت میسازیم و متودش رو صدا میزنیم
Constructor in Java
کانستراکتور در جاوا در واقع یک متود هست که برای مقداردهی اولیه object به کار میره و در زمان ساخت object صدا زده میشه.
Rules for creating java constructor
دوتا قانون اصلی برای constructor وجود داره، اول اینکه نام متود همنام با نام class هست و دوم اینکه این متود هیچ مقدار بازگشتیای نداره
Types of java constructors
دو نوع constructor وجود داره، در نوع اول هیچ نوع ورودیای نمیگیره که بهش میگن Default constructor، اما در نوع دوم پارامتر ورودی میگیره که بهش میگن Parameterized constructor
Java Default Constructor
Syntax:
<class_name>(){}Example:
class Bike1{
Bike1(){
System.out.println("Bike is created");
}
public static void main(String args[]){
Bike1 b=new Bike1();
}
}
--------------------------------------------
Output:
Bike is createdدر این مثال☝️از no-arg constructor) default constructor) استفاده شده است.
Example:
class Student3{ int id;
String name;
void display(){System.out.println(id+" "+name);
}
public static void main(String args[]){ Student3 s1=new Student3();
Student3 s2=new Student3();
s1.display();
s2.display();
}
}
--------------------------------------------
Output:
0 null
0 null
در این مثال☝️، ما هیچ کانستراکتوری برای کلاس مون ننوشتیم، بخاطر همین کامپایلر برامون یک default constructor میسازه و مقدارهای 0 و null رو به متغیرها میده. (همون default value)
Java parameterized constructor
این نوع از کانستراکتور همراه را پارامترهای ورودی هست
در این مثال☝️ما یه constructor به همراه دوتا پارامتر ورودی داریم که میتونیم با استفاده از اون متغیرهامونو مقداردهی کنیم
در واقع دلیل استفاده از این نوع constructor ها داشتن روشهای مختلف برای مقداردهی اولیه object در زمان ایجاد هست.
Constructor Overloading in Java
ما میتونیم با استفاده از تغییر تعداد و نوع پارامترها تعداد بیشتری constructor داشته باشیم که به این کار Constructor Overloading میگن
دقت کنید، با وجود اینکه هیچ return type ی برای constructor وجود نداره، اما یک instance از class رو همیشه return میکنه.
همچنین constructor میتونه وظایف دیگهای هم علاوه بر مقداردهی اولیه object، (مثل همون کارایی که method انجام میده) داشته باشه.
این نوع از کانستراکتور همراه را پارامترهای ورودی هست
Example:
class Student4{
int id;
String name;
Student4(int i,String n){
id = i;
name = n;
}
void display(){
System.out.println(id+" "+name);
}
public static void main(String args[]){
Student4 s1 = new Student4(111,"Karan");
Student4 s2 = new Student4(222,"Aryan");
s1.display();
s2.display();
}
}
--------------------------------------------
Output:
111 Karan
222 Aryan
در این مثال☝️ما یه constructor به همراه دوتا پارامتر ورودی داریم که میتونیم با استفاده از اون متغیرهامونو مقداردهی کنیم
در واقع دلیل استفاده از این نوع constructor ها داشتن روشهای مختلف برای مقداردهی اولیه object در زمان ایجاد هست.
Constructor Overloading in Java
ما میتونیم با استفاده از تغییر تعداد و نوع پارامترها تعداد بیشتری constructor داشته باشیم که به این کار Constructor Overloading میگن
Example:
class Student5{
int id;
String name;
int age;
Student5(int i,String n){
id = i;
name = n;
}
Student5(int i,String n,int a){
id = i;
name = n;
age=a;
}
void display(){
System.out.println(id+" "+name+" "+age);
}
public static void main(String args[]){
Student5 s1 = new Student5(111,"Karan");
Student5 s2 = new Student5(222,"Aryan",25);
s1.display();
s2.display();
}
}
--------------------------------------------
Output:
111 Karan 0
222 Aryan 25
دقت کنید، با وجود اینکه هیچ return type ی برای constructor وجود نداره، اما یک instance از class رو همیشه return میکنه.
همچنین constructor میتونه وظایف دیگهای هم علاوه بر مقداردهی اولیه object، (مثل همون کارایی که method انجام میده) داشته باشه.
Java Books
[ File : Java A Beginner Guide Sixth Edition Herbert Schildt.pdf ]
https://t.me/java_me/6
[ File : Java The Complete Reference Ninth Herbert Schildt.pdf ]
https://t.me/java_me/7
[ File : OCA Oracle Certified Associate Jeanne Boyarsky.pdf ]
https://t.me/java_me/9
[ File : OCP Oracle Certified Professional Jeanne Boyarsky.pdf ]
https://t.me/java_me/10
Basics of Java
What is Java
https://t.me/java_me/18
History of Java
https://t.me/java_me/20
Features of Java
https://t.me/java_me/23
Hello Java Program
https://t.me/java_me/28
Internal Program
https://t.me/java_me/33
JDK, JRE and JVM
https://t.me/java_me/37
Variables in Java
https://t.me/java_me/43
Data Types in Java
https://t.me/java_me/52
Operators in java
https://t.me/java_me/69
Java Books
https://t.me/java_me/128
Basics of Java
https://t.me/java_me/129
—---------------------------------------------—
Java Control Statements
Java If-else
https://t.me/java_me/83
Java Switch
https://t.me/java_me/95
Java For Loop
https://t.me/java_me/100
Java While Loop
https://t.me/java_me/104
Java do-while Loop
https://t.me/java_me/107
Java Break
https://t.me/java_me/110
Java Continue
https://t.me/java_me/113
Java Comments
https://t.me/java_me/114
Java Books
https://t.me/java_me/128
Basics of Java
https://t.me/java_me/129
Java Control Statements
https://t.me/java_me/132
—---------------------------------------------—
Java OOPs Concepts
OOPs Concepts
https://t.me/java_me/116
Naming conventions
https://t.me/java_me/117
Object and Class
https://t.me/java_me/118
Constructor
https://t.me/java_me/122
Java static keyword
کلمه static توی جاوا در واقع برای manage کردن مموری استفاده میشه و میتونه در متغیرها، متودها، بلاک ها و کلاس تو در تو استفاده بشه
- variable (also known as class variable)
https://t.me/java_me/135
- method (also known as class method)
https://t.me/java_me/136
- block
https://t.me/java_me/137
- nested class
Java static variable
اگه یک متغیر با کلمه static تعریف بشه، اون متغیر به عنوان static variable در نظر گرفته میشه.
نکته: static variable فقط در زمانی که کلاس load میشه و فقط برای یک بار مموری میگیره. در واقع static variable باعث کاهش میزان استفاده از مموری استفاده میشه.
به کد زیر دقت کنید
class Student{
int rollno;
String name;
String college="ITS";
} تصور کنید که ما ۵۰۰ تا student داشته باشیم، در این صورت همه متغیرها وقتی object ساخته میشه مموری میگیره. همه این objectها، rollno و name متفاوتی دارن. پس اختصاص یافتن مموری برای هر کدومشون کار درستی هست، اما college داره برای همه instance ها تکرار میشه که مموری اضافه داره میگیره. حالا اگه این متغیر رو static کنیم دیگه فقط یکبار مموری میگیره.
Example:
class Student8{
int rollno;
String name;
static String college ="ITS";
Student8(int r,String n){
rollno = r;
name = n;
}
void display (){
System.out.println(rollno+" "+name+" "+college);
}
public static void main(String args[]){
Student8 s1 = new Student8(111,"Karan");
Student8 s2 = new Student8(222,"Aryan");
s1.display();
s2.display();
}
}
--------------------------------------------
Output:
111 Karan ITS
222 Aryan ITSتوجه کنید که متغیر static بین همه instance ها share میشه
Example:
class Counter2{
static int count=0;//will get memory only once and retain its value
Counter2(){
count++;
System.out.println(count);
}
public static void main(String args[]){
Counter2 c1=new Counter2();
Counter2 c2=new Counter2();
Counter2 c3=new Counter2();
}
}
--------------------------------------------
Output:
1
2
3در این مثال☝️با توجه به static بودن count، مقدار قبلی متغیر با ساخت یک inctance دیگه از بین نمیره و میتونیم ازش استفاده کنیم، چون در زمان load کلاس مقداردهی شده و مختص به instance های ایجاد شده نیست و همچنین امکان خواندن و نوشتن متغیر توسط instance وجود داره.
Java static method
اگر ما از کلمه static در کنار متود استفاده کنیم، اونو به عنوان static method میشناسیم
دقت کنید که static method مربوط به خود کلاس میشه و نه object، همچنین میتونیم static method رو بدون ساخت یک instance از یک کلاس صدا بزنیم، و اینکه static method فقط میتونه به متغیرها و متودهای static دسترسی پیدا کنه.
Example:
class Student9{
int rollno;
String name;
static String college = "ITS";
static void change(){
college = "BBDIT";
}
Student9(int r, String n){
rollno = r;
name = n;
}
void display (){
System.out.println(rollno+" "+name+" "+college);
}
public static void main(String args[]){
Student9.change();
Student9 s1 = new Student9 (111,"Karan");
Student9 s2 = new Student9 (222,"Aryan");
s1.display();
s2.display();
}
}
--------------------------------------------
Output:
111 Karan BBDIT
222 Aryan BBDITدر این مثال☝️قبل ساخت یک instance از کلاس، متود static رو صدا می زنیم که اون هم میتونه مقدار متغیر static رو عوض کنه.
Example:
class Calculate{
static int cube(int x){
return x*x*x;
}
public static void main(String args[]){
int result=Calculate.cube(5);
System.out.println(result);
}
}
--------------------------------------------
Output:
125 و در این مثال☝️بدون ساخت یک instance از کلاس، از طریق static method محاسبه مون رو انجام بدیم.
دقت کنید که دوتا محدودیت اصلی برای static method وجود داره.
۱- یک static method نمیتونه به اعضا غیراستاتیک دسترسی پیدا کنه یا متودهای غیراستاتیک رو صدا بزنه.
۲- نمیتونیم از کلمات this و super در static method استفاده کنیم. (چون این کلمات به instance یک کلاس مربوط میشه)
Example:
class A{
int a=40;//non static
public static void main(String args[]){
System.out.println(a);
}
}
--------------------------------------------
Output:
Compile Time Errorدر این مثال☝️چون میخواستیم از یک متود static به یک متغیر غیراستاتیک دسترسی پیدا کنیم، به ارور برخورد کردیم.
دقت کنید که متود main هم یک متود استاتیک هست و زمانی که jvm داره این متود رو صدا میزنه، بدون نیاز به ساخت objectی از اون کلاس میتونه این کار رو انجام بده.
Java static block
بلاک static میتونه برای مقداردهی اعضای static بکار بره، همچنین static block قبل از متود main و در زمان load کلاس اجرا میشه.
Example:
class A2{ static{ System.out.println("static block is invoked");}
public static void main(String args[]){ System.out.println("Hello main"); }
}
--------------------------------------------
Output:
static block is invoked
Hello main
در این مثال☝️ابتدا static block اجرا میشه و سپس متود main.
در جاوا ۶ به قبل اجرا برنامه بدون وجود متود main امکان پذیر بوده اما از جاوا ۷ بعد دیگر این امکان وجود ندارد.
Example:
class A3{ static{ System.out.println("static block is invoked"); System.exit(0);
}
}
اجرای این مثال☝️در جاوا بدون هیچ مشکلی انجام خواهد شد، چون در ابتدا static block اجرا میشه و قبل از رسیدن به متود main از برنامه خارج میشه و دیگر وجود یا عدم وجود متود main چک نمیشه اما در جاوا ۷ با اینکه static block قبل از متود main اجرا میشه اما وجود متود main الزامی هست.
خروجی مثال بالا در جاوا ۶ به قبل:
static block is invoked
خروجی مثال بالا از جاوا ۷ به بعد:
Error: Main method not found in class A3, please define the main method as:
public static void main(String[] args)
this keyword in java
در جاوا this به خود object اشاره داره.
از موارد استفاده this میشه این ۶ مورد رو نام برد
1 - refer current class instance variable (اشاره به متغیرهای آبجکت)
2 - invoke current class method (متودهای آبجکت رو صدا بزنه)
3 - invoke current class constructor (کانستراکتورها رو صدا بزنه)
4 - as an argument in the method call (یکی از ورودی های متود باشه)
5 - as argument in the constructor call (یکی از ورودی های کانستراکتور باشه)
6 - return the current class instance from the method (مقدار برگشتی از یک متود باشه)
Example:
class Student{
int rollno;
String name;
float fee;
Student(int rollno,String name,float fee){
this.rollno=rollno;
this.name=name;
this.fee=fee;
}
void display(){
System.out.println(rollno+" "+name+" "+fee);
}
}
class TestThis2{
public static void main(String args[]){
Student s1=new Student(111,"ankit",5000f);
Student s2=new Student(112,"sumit",6000f);
s1.display();
s2.display();
}
}
--------------------------------------------
Output:
111 ankit 5000
112 sumit 6000در این مثال☝️با توجه به اینکه rollno، name و fee (همون instance variable هامون) در کانستراکتور کلاس Student با local variable ها هم نام هستن، ولی تونستیم ازشون استفاده کنیم
در واقعا this.name به instance variable و name خالی به local variable اشاره میکنه
Example:
class Student{
int rollno;
String name,course;
float fee;
Student(int rollno,String name,String course){
this.rollno=rollno;
this.name=name;
this.course=course;
}
Student(int rollno,String name,String course,float fee){
this(rollno,name,course);//reusing constructor
this.fee=fee;
}
void display(){
System.out.println(rollno+" "+name+" "+course+" "+fee);
}
}
class TestThis7{
public static void main(String args[]){
Student s1=new Student(111,"ankit","java");
Student s2=new Student(112,"sumit","java",6000f);
s1.display();
s2.display();
}
}
--------------------------------------------
Output:
111 ankit java null
112 sumit java 6000 در این مثال☝️با استفاده از کلمه this تونستیم یکی از کانستراکتورها مونو صدا بزنیم.
دقت کنید که اگر به صورت زیر👇نوشته بشه
Student(int rollno,String name,String course,float fee){
this.fee=fee;
this(rollno,name,course);//C.T.Error
} (یعنی صدا زدن یه کانستراکتور به وسیله this در یک کانستراکتور دیگه) ما کامپایل ارور خواهیم داشت، چون اول باید instance بسازیم تا بعد بتونیم از instance variable هاش استفاده کنیم.
Inheritance in Java
وراثت در جاوا در واقع یک مکانیسم هست که در اون یک object تمامی ویژگی ها و رفتارهای object پدر رو به دست میاره (یا به ارث می بره). وقتی یک کلاس، یک کلاس دیگه رو به ارث میبره، میتونه از فیلدها و متودهای اون دوباره استفاده کنه و همچنین متودها و فیلدهای خودش رو هم داشته باشه.
وارث یک رابطه ی IS-A (هست یک) هست، که میتونیم رابطه پدر فرزندی هم بهش بگیم.
وراثت در جاوا دوتا قابلیت به ما میده
1- Method Overriding
2- Code Reusability
Syntax:
class Subclass-name extends Superclass-name
{ //methods and fields
}
از کلمه extends برای ارث بردن یک کلاس از کلاس دیگه استفاده میشه.
در جاوا به کلاسی که به ارث برده میده میشه parent یا super کلاس و به کلاسی که به ارث میبره child یا subclass هم گفته میشه.