public class Cat {
String name;
int age;
}
समजा आम्ही एक प्रोग्राम लिहित आहोत ज्यामध्ये काही कारणास्तव मांजरींचा समावेश आहे (उदाहरणार्थ, आमच्याकडे एक पशुवैद्यकीय दवाखाना आहे जो ऑनलाइन खात्यात प्रवेश प्रदान करतो). आम्ही कॅट क्लास तयार केला आहे आणि त्यात दोन व्हेरिएबल्स घोषित केले आहेत: स्ट्रिंग नाव आणि इंट वय . या सदस्य व्हेरिएबल्सना फील्ड म्हणतात. मूलत:, आम्ही भविष्यात तयार करू त्या सर्व मांजरींसाठी हे टेम्पलेट आहे. प्रत्येक कॅट ऑब्जेक्टमध्ये दोन व्हेरिएबल्स असतील: नाव आणि वय.
public class Cat {
String name;
int age;
public static void main(String[] args) {
Cat smudge = new Cat();
smudge.age = 3;
smudge.name = "Smudge";
System.out.println("We created a cat named " + smudge.name + ". His age is " + smudge.age);
}
}
हे कसे कार्य करते ते येथे आहे! आम्ही एक मांजर तयार करतो, तिला नाव आणि वय देतो आणि ते सर्व कन्सोलवर प्रदर्शित करतो. केक तुकडा. :) बर्याचदा, वर्ग वास्तविक जगातील गोष्टी आणि घटनांचे वर्णन करतात. एक मांजर, एक टेबल, एक व्यक्ती, एक लाइटनिंग बोल्ट, पुस्तकाचे एक पृष्ठ, एक चाक—तुम्ही वैयक्तिक वर्ग वापरून तुमच्या प्रोग्राममध्ये या सर्व गोष्टी तयार कराल. आत्तासाठी, आपण कॅट क्लासमध्ये घोषित केलेल्या व्हेरिएबल्सवर लक्ष केंद्रित करूया . त्यांना फील्ड किंवा इन्स्टन्स व्हेरिएबल्स म्हणतात. त्यांचे नाव खरोखर हे सर्व सांगते. कॅट क्लासच्या प्रत्येक उदाहरणामध्ये (किंवा ऑब्जेक्ट) हे व्हेरिएबल्स असतील. आम्ही तयार केलेल्या प्रत्येक मांजरीचे स्वतःचे नाव व्हेरिएबल आणि स्वतःचे वय असेलचल हे अर्थपूर्ण आहे - हे मुळात खऱ्या मांजरींच्या बाबतीत कसे आहे. :) उदाहरण व्हेरिएबल्स व्यतिरिक्त, क्लास व्हेरिएबल्स (स्टॅटिक व्हेरिएबल्स) देखील आहेत. चला आमचे उदाहरण पूर्ण करूया:
public class Cat {
String name;
int age;
static int count = 0;
public static void main(String[] args) {
Cat smudge = new Cat();
smudge.age = 3;
smudge.name = "Smudge";
count++;
Cat fluffy = new Cat();
fluffy.age = 5;
fluffy.name = "Fluffy";
count++;
System.out.println("We created a cat named " + smudge.name + ". His age is " + smudge.age);
System.out.println("We created a cat named " + fluffy.name + ". His age is " + fluffy.age);
System.out.println("Total number of cats = " + count);
}
}
कन्सोल आउटपुट: आम्ही Smudge नावाची मांजर तयार केली. त्याचे वय 3 आहे आम्ही फ्लफी नावाची मांजर तयार केली. त्याचे वय 5 आहे एकूण मांजरींची संख्या = 2 आता आमच्या वर्गात काउंट नावाचा एक नवीन व्हेरिएबल आहे. तयार केलेल्या मांजरींची गणना करण्यासाठी हे जबाबदार आहे. प्रत्येक वेळी आम्ही मुख्य मध्ये एक मांजर तयार करतोपद्धत, आम्ही हे व्हेरिएबल 1 ने वाढवतो. स्टॅटिक कीवर्ड वापरून हे व्हेरिएबल घोषित केले जाते. याचा अर्थ तो वर्गाचा आहे, वर्गाच्या विशिष्ट वस्तूचा नाही. जे अर्थातच अर्थपूर्ण आहे: प्रत्येक मांजरीचे नाव त्या विशिष्ट मांजरीचे आहे, परंतु आम्हाला त्या सर्वांना लागू होणारा एक मांजर काउंटर आवश्यक आहे. हे तंतोतंत कीवर्ड स्टॅटिक साध्य करते: ते सर्व मांजरींसाठी काउंट व्हेरिएबल एकच व्हेरिएबल बनवते. टीप: जेव्हा आम्ही व्हेरिएबल प्रदर्शित करतो, तेव्हा आम्ही smudge.count किंवा fluffy.count वापरत नाही. तो Smudge किंवा Fluffy यापैकी एकाचा नाही; ते संपूर्ण मांजर वर्गाशी संबंधित आहे. म्हणूनच ते फक्त मोजले जाते. तुम्ही Cat.count देखील लिहू शकता. ते बरोबरही असेल. नाव व्हेरिएबल प्रदर्शित करताना, आम्ही पुढील गोष्टी करणार नाही:
public class Cat {
String name;
int age;
static int count = 0;
public static void main(String[] args) {
Cat smudge = new Cat();
smudge.age = 3;
smudge.name = "Smudge";
count++;
System.out.println("We created a cat named " + name + ". His age is " + smudge.age);
System.out.println("Total number of cats = " + count);
}
}
ही एक चूक आहे! प्रत्येक मांजरीचे स्वतःचे नाव असते. संकलक येथे गोंधळून जातो. "कन्सोलला नाव आउटपुट करा? कोणाचे नाव?" :/"
पद्धती
व्हेरिएबल्स व्यतिरिक्त, प्रत्येक वर्गात पद्धती आहेत. आम्ही त्यांच्याबद्दल वेगळ्या धड्यात अधिक तपशीलवार बोलू, परंतु सामान्य तत्त्वे अगदी सोपी आहेत. पद्धती तुमच्या वर्गाची कार्यक्षमता परिभाषित करतात, म्हणजे तुमच्या वर्गातील वस्तू काय करू शकतात. तुम्ही यापैकी एका पद्धतीशी आधीच परिचित आहात: main() पद्धत. परंतु, तुम्हाला आठवत असेल, मुख्य पद्धत स्थिर आहे, याचा अर्थ ती संपूर्ण वर्गाशी संबंधित आहे (लॉजिक व्हेरिएबल्स प्रमाणेच आहे). तथापि, मानक, नॉन-स्टॅटिक पद्धती केवळ आम्ही तयार केलेल्या विशिष्ट वस्तूंवर कॉल केल्या जाऊ शकतात. उदाहरणार्थ, जर आपल्याला मांजरीचा वर्ग लिहायचा असेल, तर आपल्या प्रोग्राममध्ये मांजरीचे कोणते कार्य असावे हे आपल्याला माहित असणे आवश्यक आहे. त्या आधारावर, आपल्या मांजरीसाठी काही पद्धती लिहूया:
public class Cat {
String name;
int age;
public void sayMeow() {
System.out.println("Meow!");
}
public void jump() {
System.out.println("Pounce!");
}
public static void main(String[] args) {
Cat smudge = new Cat();
smudge.age = 3;
smudge.name = "Smudge";
smudge.sayMeow();
smudge.jump();
}
}
हे पहा! आता आमचा वर्ग मांजर सारखा जवळ आला आहे! आता आमच्याकडे फक्त नाव ("Smudge") आणि वय (3) असलेली मांजर नाही. तो म्याऊ आणि उडी देखील म्हणू शकतो! त्या "कार्यक्षमते" शिवाय ते कोणत्या प्रकारचे मांजर असेल? :) आम्ही एक विशिष्ट वस्तू (smudge) घेत आहोत आणि त्याला sayMeow() आणि jump() पद्धती म्हणत आहोत. चला कन्सोल पाहू: म्याऊ! ठोका! एक खरी मांजर! :)
आपले स्वतःचे वर्ग तयार करणे. अमूर्त
भविष्यात, तुम्हाला स्वतःचे वर्ग लिहावे लागतील. ते लिहिताना तुम्हाला काय पहावे लागेल? जर आम्ही व्हेरिएबल्सबद्दल बोलत आहोत, तर तुम्हाला अॅब्स्ट्रॅक्शन नावाचे काहीतरी वापरावे लागेल. अॅब्स्ट्रॅक्शन हे ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंगच्या चार मूलभूत तत्त्वांपैकी एक आहे. याचा अर्थ एखाद्या वस्तूची सर्वात महत्वाची आणि लक्षणीय वैशिष्ट्ये काढणे आणि त्याउलट, किरकोळ किंवा क्षुल्लक गोष्टी बाजूला टाकणे. उदाहरणार्थ, कंपनीच्या कर्मचाऱ्यांसाठी फाइलिंग कॅबिनेट तयार करू. कर्मचारी वस्तू तयार करण्यासाठी, आम्ही एक कर्मचारी लिहिले आहेवर्ग आमच्या कंपनीच्या फाइलिंग कॅबिनेटसाठी कर्मचाऱ्याची कोणती वैशिष्ट्ये महत्त्वाची आहेत? नाव, जन्मतारीख, SSN आणि कर्मचारी आयडी. परंतु कंपनीच्या कर्मचार्यांच्या रेकॉर्डसाठी आम्हाला कर्मचार्यांची उंची, डोळ्यांचा रंग किंवा केसांचा रंग आवश्यक असण्याची शक्यता नाही. कंपन्यांना या माहितीची गरज नाही. म्हणून, कर्मचारी वर्गात, आम्ही खालील व्हेरिएबल्स घोषित करतो: स्ट्रिंग नाव , int वय , int socialSecurityNumber , आणि int employeeId. आणि आम्ही अनावश्यक माहिती (डोळ्याचा रंग सारखी) सोडून देतो. दुसऱ्या शब्दांत, आम्ही एक अमूर्तता तयार करतो. तथापि, आम्ही मॉडेलिंग एजन्सीसाठी फाइलिंग कॅबिनेट बनवत असल्यास, परिस्थिती नाटकीयरित्या बदलते. मॉडेलची उंची, डोळ्यांचा रंग आणि केसांचा रंग ही महत्त्वाची वैशिष्ट्ये आहेत, परंतु तिचा SSN आमच्यासाठी पूर्णपणे अप्रासंगिक आहे. तर, मॉडेल क्लासमध्ये, आपल्याला खालील व्हेरिएबल्स तयार करणे आवश्यक आहे: स्ट्रिंगची उंची , स्ट्रिंग केस , स्ट्रिंग डोळे . अशाप्रकारे अमूर्तता कार्य करते - हे सोपे आहे! :)कन्स्ट्रक्टर
चला आपल्या मांजरीच्या उदाहरणाकडे परत जाऊया.
public class Cat {
String name;
int age;
public static void main(String[] args) {
Cat smudge = new Cat();
System.out.println("Here the program does something for 2 hours...");
smudge.age = 3;
smudge.name = "Smudge";
}
}
हा कोड पहा आणि आमच्या प्रोग्राममध्ये काय चूक आहे ते शोधण्याचा प्रयत्न करा. आमच्या कार्यक्रमात नाव किंवा वय नसलेली मांजर 2 तास होती! अर्थात, हे स्वाभाविकच चुकीचे आहे. पशुवैद्यकीय क्लिनिकच्या डेटाबेसमध्ये कोणतीही माहिती नसलेल्या मांजरींचा समावेश नसावा. सध्या, आमची मांजर प्रोग्रामरच्या दयेवर आहे. आम्हाला विश्वास आहे की तो नाव आणि वय निर्दिष्ट करण्यास विसरणार नाही आणि सर्व काही ठीक होईल. जर तो विसरला तर डेटाबेसमध्ये समस्या असेल: अनामित मांजरी. आपण ही समस्या कशी सोडवू शकतो? आपण मांजरींना नाव आणि वय नसताना तयार होण्यापासून रोखले पाहिजे. येथेच बांधकामकर्ते बचावासाठी येतात. चला एक उदाहरण देऊ:
public class Cat {
String name;
int age;
// Constructor for the Cat class
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
public static void main(String[] args) {
Cat smudge = new Cat("Smudge", 5);
}
}
मूलत:, कन्स्ट्रक्टर हा वर्गाच्या वस्तूंसाठी टेम्पलेट असतो. या प्रकरणात, आम्ही सूचित करतो की प्रत्येक मांजरी ऑब्जेक्टसाठी दोन युक्तिवाद, एक स्ट्रिंग आणि एक int निर्दिष्ट करणे आवश्यक आहे . जर आपण आता निनावी मांजर तयार करण्याचा प्रयत्न केला तर ते कार्य करणार नाही.
public class Cat {
String name;
int age;
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
public static void main(String[] args) {
Cat smudge = new Cat(); // Error!
}
}
आता क्लासमध्ये कन्स्ट्रक्टर आहे, Java कंपाइलरला ऑब्जेक्ट्स कशा दिसल्या पाहिजेत हे माहित आहे आणि वितर्क निर्दिष्ट केल्याशिवाय ऑब्जेक्ट्स तयार करण्यास परवानगी देत नाही. आता, या कीवर्डचा शोध घेऊ, जो तुम्हाला कन्स्ट्रक्टरमध्ये दिसतो. तेही सोपे आहे. हा कीवर्ड विशिष्ट ऑब्जेक्ट दर्शवण्यासाठी आहे. कन्स्ट्रक्टरमधील कोड
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
जवळजवळ शब्दशः अर्थ लावला जाऊ शकतो: "या मांजरीचे नाव (आम्ही तयार करत आहोत) = कन्स्ट्रक्टरच्या नावाच्या पॅरामीटरसाठी पास केलेला युक्तिवाद. या मांजरीचे वय (आम्ही तयार करत आहोत) = कन्स्ट्रक्टरच्या बाजूने केलेला युक्तिवाद वय पॅरामीटर." कन्स्ट्रक्टर रन झाल्यानंतर, तुम्ही सत्यापित करू शकता की आमच्या मांजरीला सर्व आवश्यक मूल्ये नियुक्त केली गेली आहेत:
public class Cat {
String name;
int age;
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
public static void main(String[] args) {
Cat smudge = new Cat("Smudge", 5);
System.out.println(smudge.name);
System.out.println(smudge.age);
}
}
कन्सोल आउटपुट: Smudge 5 जेव्हा कन्स्ट्रक्टरला कॉल केला गेला:
Cat smudge = new Cat("Smudge", 5);
हे प्रत्यक्षात अंतर्गत घडले आहे:
this.name = "Smudge";
this.age = 5;
आणि कन्स्ट्रक्टरला पास केलेल्या वितर्कांची मूल्ये स्मज ऑब्जेक्टला नियुक्त केली गेली (या प्रकरणात याचाच संदर्भ आहे). खरं तर, जरी तुम्ही क्लासमध्ये कोणतेही कन्स्ट्रक्टर घोषित केले नाही, तरीही ते कन्स्ट्रक्टरला कॉल करेल! पण ते कसं शक्य आहे? О_О कारण, सर्व Java वर्गांमध्ये तथाकथित डीफॉल्ट कन्स्ट्रक्टर आहे. हे कोणतेही युक्तिवाद घेत नाही, परंतु प्रत्येक वेळी जेव्हा तुम्ही कोणत्याही वर्गाची कोणतीही वस्तू तयार करता तेव्हा ते मागवले जाते.
public class Cat {
public static void main(String[] args) {
Cat smudge = new Cat(); // The default constructor is invoked here
}
}
पहिल्या दृष्टीक्षेपात, हे कदाचित स्पष्ट होणार नाही. आम्ही एक वस्तू तयार केली, मग काय? कन्स्ट्रक्टर इथे कुठे काही करत आहे? ते पाहण्यासाठी, कॅट क्लाससाठी स्पष्टपणे रिक्त कन्स्ट्रक्टर लिहूया . आत, आम्ही कन्सोलवर काही वाक्यांश आउटपुट करू. जर वाक्प्रचार प्रदर्शित केला असेल, तर कन्स्ट्रक्टरला बोलावले होते.
public class Cat {
public Cat() {
System.out.println("A cat has been created!");
}
public static void main(String[] args) {
Cat smudge = new Cat(); // The default constructor is invoked here
}
}
कन्सोल आउटपुट: एक मांजर तयार केली गेली आहे! पुष्टीकरण आहे. डीफॉल्ट कन्स्ट्रक्टर तुमच्या वर्गांमध्ये नेहमी अदृश्यपणे उपस्थित असतो. पण तुम्हाला त्याबद्दल आणखी एक गोष्ट माहित असणे आवश्यक आहे. एकदा तुम्ही आर्ग्युमेंटसह कन्स्ट्रक्टर तयार केल्यावर डिफॉल्ट कन्स्ट्रक्टर क्लासमधून काढून टाकला जातो. खरं तर, आम्ही वरील पुरावा आधीच पाहिले आहे. हे या कोडमध्ये होते:
public class Cat {
String name;
int age;
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
public static void main(String[] args) {
Cat smudge = new Cat(); // Error!
}
}
आम्ही नाव आणि वय नसलेली मांजर तयार करू शकत नाही, कारण आम्ही स्ट्रिंग आणि इंट पॅरामीटर्ससह कॅट कन्स्ट्रक्टर घोषित केले आहे. यामुळे डीफॉल्ट कन्स्ट्रक्टर वर्गातून त्वरित गायब झाला. त्यामुळे लक्षात ठेवा की जर तुम्हाला तुमच्या वर्गात नो-आर्ग्युमेंट कन्स्ट्रक्टरसह अनेक कन्स्ट्रक्टर हवे असतील तर तुम्हाला ते स्वतंत्रपणे घोषित करावे लागेल. आमच्या क्लिनिकला चांगली कामे करायची आहेत आणि ज्यांची नावे आणि वय माहित नाही अशा बेघर मांजरीच्या पिल्लांना मदत करायची आहे. मग आमचा कोड यासारखा दिसला पाहिजे:
public class Cat {
String name;
int age;
// For cats with owners
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
// For street cats
public Cat() {
}
public static void main(String[] args) {
Cat smudge = new Cat("Smudge", 5);
Cat streetCat = new Cat();
}
}
आता आम्ही स्पष्ट डीफॉल्ट कन्स्ट्रक्टर निर्दिष्ट केले आहे, आम्ही दोन्ही प्रकारच्या मांजरी तयार करू शकतो. कन्स्ट्रक्टरमध्ये, तुम्ही थेट मूल्ये नियुक्त करू शकता. तुम्ही त्यांना नेहमी वादातून घ्यायचे नाही. उदाहरणार्थ, आम्ही "स्ट्रीट मांजर क्रमांक <count>" वापरून डेटाबेसमधील सर्व रस्त्यावरील मांजरींना टेम्पलेट म्हणून लेबल करू शकतो. :
public class Cat {
String name;
int age;
static int count = 0;
public Cat() {
count++;
this.name = "Street cat No. " + count;
}
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
public static void main(String[] args) {
Cat streetCat1 = new Cat();
Cat streetCat2 = new Cat();
System.out.println(streetCat1.name);
System.out.println(streetCat2.name);
}
}
आमच्याकडे काउंट व्हेरिएबल आहे, जे आमच्या रस्त्यावरच्या मांजरींची गणना करते. प्रत्येक वेळी डीफॉल्ट कन्स्ट्रक्टर कार्यान्वित केल्यावर, आम्ही संख्या 1 ने वाढवतो आणि ही संख्या मांजरीच्या नावाशी संलग्न करतो. कन्स्ट्रक्टरसाठी युक्तिवादाचा क्रम खूप महत्वाचा आहे. आमच्या कन्स्ट्रक्टरला दिलेले नाव आणि वय वितर्क बदलूया.
public class Cat {
String name;
int age;
public Cat(int age, String name) {
this.name = name;
this.age = age;
}
public static void main(String[] args) {
Cat smudge = new Cat("Smudge", 10); // Error!
}
}
आम्हाला एक त्रुटी आली! कन्स्ट्रक्टर स्पष्टपणे नमूद करतो की जेव्हा एखादी मांजर वस्तू तयार केली जाते, तेव्हा त्याला या क्रमाने संख्या आणि स्ट्रिंग पास करणे आवश्यक आहे. त्यामुळे आमचा कोड काम करत नाही. तुमचे स्वतःचे वर्ग घोषित करताना हा नियम लक्षात ठेवा आणि त्याचा आदर करा:
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
public Cat(int age, String name) {
this.age = age;
this.name = name;
}
हे दोन पूर्णपणे भिन्न कन्स्ट्रक्टर आहेत! आता, सामग्रीबद्दलची तुमची समज दृढ करण्यासाठी काही कार्ये पूर्ण करा. :)
-
पुरातन वास्तूंचे संग्रहालय.
तुमचे कार्य आर्टिफॅक्ट क्लास डिझाइन करणे आहे.
संग्रहालयात तीन प्रकारच्या कलाकृती ठेवण्यात आल्या आहेत.
आम्हाला संग्रहालयाने नियुक्त केलेल्या अनुक्रमांकाशिवाय पहिल्या प्रकाराबद्दल काहीही माहिती नाही (उदाहरणार्थ: 212121).
दुसऱ्या प्रकारासाठी, आम्हाला अनुक्रमांक आणि ती तयार करणारी संस्कृती माहित आहे (उदाहरणार्थ: 212121, "Aztecs").
तिसऱ्या प्रकारासाठी, आम्हाला अनुक्रमांक, ज्या संस्कृतीने ते तयार केले आणि ते ज्या शतकात तयार केले गेले ते माहित आहे (उदाहरणार्थ: 212121, "Aztecs", 12).संग्रहालयात ठेवलेल्या पुरातन वास्तूंचे वर्णन करणारा आर्टिफॅक्ट वर्ग तयार करा आणि वर्गासाठी आवश्यक कन्स्ट्रक्टरचा संच लिहा. नंतर, main() पद्धतीमध्ये, प्रत्येक प्रकारची एक कलाकृती तयार करा.
public class Artifact { // Write your code here public static void main(String[] args) { // Write your code here } }
-
डेटिंग वेबसाइट
चला डेटिंग वेबसाइटसाठी वापरकर्ता डेटाबेस तयार करूया.
परंतु येथे समस्या आहे: आपण युक्तिवादांचा आवश्यक क्रम विसरलात आणि कोणतेही तांत्रिक दस्तऐवजीकरण उपलब्ध नाही. वापरकर्ता
वर्ग डिझाइन करा , ज्यामध्ये खालील फील्ड असतील: नाव ( स्ट्रिंग ), वय ( लहान ), आणि उंची ( int ). कन्स्ट्रक्टरची योग्य संख्या तयार करा, जेणेकरून नाव, वय आणि उंची कोणत्याही क्रमाने निर्दिष्ट केली जाऊ शकते.public class User { String name; short age; int height; // Write your code here public static void main(String[] args) { } }
GO TO FULL VERSION