1. वस्तू

Java मधील प्रत्येक गोष्ट एक वस्तू आहे.

अधिक अचूकपणे, जावामध्ये खूप कमी गोष्टी आहेत ज्या वस्तू नाहीत. उदाहरणार्थ, आदिम प्रकार. परंतु हा नियमाचा एक दुर्मिळ अपवाद आहे.

तर ऑब्जेक्ट म्हणजे काय?

ऑब्जेक्ट एक घटक आहे जी डेटावर प्रक्रिया करणार्‍या पद्धतींसह डेटा एकत्रित करते . जेव्हा आपण "डेटा" म्हणतो, तेव्हा आपला अर्थ अर्थातच व्हेरिएबल्स असतो.

ऑब्जेक्टच्या व्हेरिएबल्सला त्याचा "डेटा" किंवा "स्टेट" म्हणतात.

एखाद्या वस्तूच्या पद्धती म्हणजे त्याचे "वर्तन" असे म्हटले जाते. केवळ त्या ऑब्जेक्टच्या पद्धती वापरून ऑब्जेक्टची स्थिती (व्हेरिएबल्स) बदलण्याची प्रथा आहे. ऑब्जेक्टचे व्हेरिएबल्स थेट बदलणे (त्याच्या पद्धती न वापरणे) हा वाईट प्रकार मानला जातो.

प्रत्येक ऑब्जेक्ट , तसेच प्रत्येक व्हेरिएबलचा एक प्रकार असतो . ऑब्जेक्ट तयार झाल्यावर हा प्रकार एकदा निर्धारित केला जातो आणि भविष्यात बदलला जाऊ शकत नाही. ऑब्जेक्टचा प्रकार म्हणजे त्याचा वर्ग.

प्रत्येक ऑब्जेक्टची स्वतःची उदाहरण व्हेरिएबल्सची प्रत (फील्ड) असते. जर नॉन-स्टॅटिक इंट व्हेरिएबल क्लासमध्ये घोषित केले असेल आणि तुमचा प्रोग्राम त्या क्लासच्या 10 ऑब्जेक्ट्स तयार करतो, तर प्रत्येक ऑब्जेक्टचे स्वतःचे इंट व्हेरिएबल असेल.

एखाद्या वस्तूशी संवाद साधणे

ऑब्जेक्टसह कार्य करण्याचा सर्वात सोयीस्कर मार्ग म्हणजे व्हेरिएबलमध्ये त्याचा संदर्भ संग्रहित करणे आणि नंतर त्या व्हेरिएबलवर कॉल पद्धती. हे तुम्हाला परिचित वाटेल:

variable.method()

एक व्हेरिएबल कुठे variableआहे जो ऑब्जेक्टचा संदर्भ संग्रहित करतो आणि methodत्या वर्गाची पद्धत आहे.

जर तुम्हाला ऑब्जेक्टच्या फील्डचा (व्हेरिएबल) संदर्भ घ्यायचा असेल, तर तुम्हाला डॉट ऑपरेटर देखील वापरण्याची आवश्यकता आहे :

variable.field

एक व्हेरिएबल कुठे variableआहे जो ऑब्जेक्टचा संदर्भ संग्रहित करतो आणि fieldएक उदाहरण व्हेरिएबल (फील्ड) आहे.


2. newऑपरेटर

एका विशिष्ट वर्गाचा ऑब्जेक्ट तयार करण्यासाठी, आपल्याला newऑपरेटर वापरण्याची आवश्यकता आहे. सर्वसाधारणपणे, ऑब्जेक्ट तयार करताना ते कसे दिसते ते येथे आहे:

Class variable = new Class(arguments);

Classव्हेरिएबलच्या क्लासचे नाव variableतसेच ऑब्जेक्टच्या क्लासचे नाव कुठे आहे. आणि variable एक व्हेरिएबल आहे जो तयार केलेल्या ऑब्जेक्टचा संदर्भ संग्रहित करतो. आणि argumentsकन्स्ट्रक्टरला पास केलेल्या वितर्कांच्या स्वल्पविरामाने सीमांकित सूचीसाठी प्लेसहोल्डर आहे.

पास होऊ शकणार्‍या वितर्कांची विशिष्ट यादी वर्ग लिहिणाऱ्या प्रोग्रामरद्वारे ठरवली जाते.

तुम्ही याआधी वस्तू तयार केल्या आहेत आणि या विशिष्ट रचना वापरल्या आहेत. तू विसरला नाहीस, मला आशा आहे?

Scanner console = new Scanner(System.in);
int x = console.nextInt();

Scanner console— हे एक consoleव्हेरिएबल तयार करते ज्याचा प्रकार आहे Scanner. - हे एक नवीन ऑब्जेक्ट तयार करते. आणि असाइनमेंट ऑपरेटर नवीन तयार केलेल्या ऑब्जेक्टच्या संदर्भाप्रमाणे व्हेरिएबल सेट करतो.new Scanner(System.in)Scannerconsole

दुस-या ओळीत, व्हेरिएबल वापरून ऑब्जेक्टवर nextInt()मेथड कॉल करतो , जी ऑब्जेक्टचा संदर्भ साठवते .ScannerconsoleScanner

ऑब्जेक्ट निर्मितीची उदाहरणे:

कोड वर्णन
String s = new String("Hello");
एक Stringऑब्जेक्ट तयार करा
Scanner console = new Scanner("");
एक Scannerऑब्जेक्ट तयार करा
int[] data = new int[10];
एक तयार करा : घटकांचा int[]कंटेनर10 int

तयार केलेल्या वस्तूंना क्लासचे ऑब्जेक्ट किंवा क्लासचे उदाहरण म्हणतात , तर क्लासला ऑब्जेक्टचा क्लास म्हणतात . उदाहरणार्थ, sव्हेरिएबल वर्गाच्या उदाहरणाचा संदर्भ संग्रहित करते String.



3. वर्गांचा परिचय

मला वाटते की इतर प्रोग्रामरने लिहिलेले वर्ग वापरणे किती सोयीचे आहे हे तुम्ही आधीच पाहिले आहे. पण स्वतःचे वर्ग लिहिण्याचे काय?

तुम्हाला तुमच्या स्वतःच्या वर्गाची कधी आणि कुठे गरज आहे आणि एक कसा बनवायचा हे तुम्हाला कसे कळेल?

प्रोग्रामर सामान्यतः त्यांचे स्वतःचे वर्ग तयार करतात जेव्हा त्यांना प्रोग्राममध्ये नवीन अस्तित्व आणायचे असते. ते गोंधळात टाकणारे वाटते का? मग मी समजावून सांगण्याचा प्रयत्न करेन, पण मी खूप दूरपासून सुरुवात करणार आहे.

डेटा गट

थोडेसे सोपे करून, आपण असे म्हणू शकतो की जावामधील ऑब्जेक्ट मेमरीचा एक ब्लॉक आहे ज्यामध्ये क्लास (इंस्टन्स फील्ड) मध्ये घोषित व्हेरिएबल्स असतात. किंवा, दुसर्‍या शब्दात, व्हेरिएबल्स एका गटात एकत्र केले जातात.

समजा तुमच्या प्रोग्रामला बिंदूंचे निर्देशांक संग्रहित करणे आवश्यक आहे 100आणि ते स्क्रीनवर प्रदर्शित करण्यासाठी एक पद्धत आवश्यक आहे. हे अॅरे वापरून करता येते. उदाहरणार्थ, यासारखे:

class Solution
{
   public static void printPoints(int[] x, int[] y, int[] color)
   {
     for (int i = 0; i < x.length; i++)
       System.out.println("Color of (" + x[i] + ", " + y[i] + ") = " + color[i]);
   }

   public static void main(String[] args)
   {
     int[] x = new int[100];
     int[] y = new int[100];
     int[] color = new int[100];
     printPoints(x, y, color);
   }
}

एखाद्या बिंदूबद्दलची सर्व माहिती संग्रहित करण्यासाठी आपल्याकडे एकच प्रकार असल्यास ते अधिक सोयीचे होईल: x, y, color. असा प्रकार Java मध्ये अस्तित्वात नसल्यास, तुम्ही तो स्वतः तयार करू शकता.

हे करण्यासाठी, आम्ही वर्गासाठी कोड लिहू Point:

public class Point
{
   public int x;
   public int y;
   public int color;
}

आता वरील कोड याप्रमाणे पुन्हा लिहिला जाऊ शकतो:

class Solution
{
   public static void printPoints(Point[] points)
   {
     for (int i = 0; i < points.length; i++)
       System.out.println("Color of (" + points[i].x + ", " + point[i].y + ") = " + points[i].color);
   }

   public static void main(String[] args)
   {
     Point[] data = new Point[100];
     for (int i = 0; i < data.length; i++)
       data[i] = new Point();
     printPoints(data);
   }
}

आता क्लासमध्ये एक पद्धत जोडूया Pointजी ऑब्जेक्टबद्दल माहिती प्रदर्शित करेल:

public class Point
{
   public int x;
   public int y;
   public int color;
   public void print()
   {
     System.out.println("Color of (" + x + ", " + y + ") = " + color);
   }
}

आता Solutionवर्ग असे दिसते:

class Solution
{
   public static void printPoints(Point[] points)
   {
     for (int i = 0; i < points.length; i++)
       points[i].print();
   }

   public static void main(String[] args)
   {
     Point[] data = new Point[100];
     for (int i = 0; i < data.length; i++)
       data[i] = new Point();
     printPoints(data);
   }
}

Pointबिंदूची स्थिती दाखवणाऱ्या पद्धतीसह आम्ही बिंदूचे निर्देशांक आणि रंगाची माहिती वर्गात कुशलतेने लपवून ठेवली .

क्लासेस हा प्रोग्रामची जटिलता व्यवस्थापित करण्याचा एक मार्ग आहे. जेव्हा एखादा मोठा कार्यक्रम अनेक लहान वर्गांमध्ये विभागला जातो तेव्हा तो कमी गुंतागुंतीचा बनतो.


4. उत्परिवर्तनीय वि अपरिवर्तनीय वस्तू

एके काळी, आम्ही जावामध्ये स्थिरांकांचा अभ्यास केला आणि निष्कर्षापर्यंत पोहोचलो जो फारसा दिलासादायक नाही. स्थिरांक तुम्हाला बदलण्यापासून व्हेरिएबल्सचे संरक्षण करू देतात, परंतु ते ज्या वस्तूंचा संदर्भ घेतात त्यांच्या बदलांना ते प्रतिबंधित करू शकत नाहीत.

या समस्येचे निराकरण करण्यासाठी, जावा स्थिर वस्तू घेऊन आला. किंवा, त्यांना अधिक वारंवार म्हणतात, अपरिवर्तनीय वस्तू.

तसे, तुम्हाला असा वर्ग आधीच माहित आहे, ज्यांचे ऑब्जेक्ट बदलले जाऊ शकत नाहीत: String. एखादी Stringवस्तू निर्माण झाल्यानंतर ती कायमस्वरूपी अपरिवर्तित राहते. आणि Java च्या निर्मात्यांनी हे कसे साध्य केले?

प्रथम, वर्गातील सर्व चल Stringलपलेले आहेत, म्हणजे घोषित केले आहेत private.

दुसरे, तुम्ही Stringक्लास इनहेरिट करू शकत नाही: त्याच्या क्लास डिक्लेरेशनमध्ये finalमॉडिफायरचा समावेश आहे.

तिसरे, आणि सर्वात मनोरंजक म्हणजे, वर्गाच्या सर्व पद्धती String, ज्या सिद्धांतानुसार, आपण विद्यमान ऑब्जेक्ट बदलण्याची अपेक्षा करता, प्रत्यक्षात ती बदलू नका, परंतु त्याऐवजी एक नवीन परत करा.

उदाहरणार्थ, toUpperCase()पद्धत स्ट्रिंगमधील सर्व अक्षरे अपरकेस बनवते. परंतु ज्या ऑब्जेक्टवर पद्धत कॉल केली जाते ती बदलण्याऐवजी, ती Stringकॅपिटल अक्षरे असलेली एक नवीन ऑब्जेक्ट परत करते:

String text = "This is a very important message";
String message = text.toUpperCase();

हा कोड कार्यान्वित केल्यानंतर मेमरीमध्ये हे असेल:

उत्परिवर्तनीय वि अपरिवर्तनीय वस्तू

म्हणून आपल्या स्ट्रिंग्स कोणत्याही पद्धतीमध्ये पाठवा: कोणीही त्यांना बदलणार नाही.