private abstract array
Този урок ще обсъди специални конструктори като Private constructor в Java, Abstract, String, Array, Interface и Destructor в Java:
В последния ни урок за конструктори в Java научихме важните концепции, свързани с конструкторите в Java. Обсъдихме как да създадем конструктор и правилата за дефиниране на конструктори, заедно с видовете конструктори и т.н.
Също така научихме претоварване на конструктори и вериги на конструктори. Сега, нека обсъдим някои специални конструктори като частен конструктор, абстрактен конструктор и конструктори на низове и масиви в Java. След това ще обсъдим деструкторите в Java и накрая ще изследваме разликите между метода и конструкторите.
=> Погледнете тук ръководството за начинаещи Java.
Нека започнем с частен конструктор в Java.
Какво ще научите:
- Частен конструктор в Java
- Конструктор на абстрактни класове в Java
- Конструктор на интерфейс в Java
- Конструктор на низове в Java
- Конструктори на масиви в Java
- Деструктор в Java
- Конструктор срещу метод в Java
- често задавани въпроси
- Заключение
- Препоръчително четене
Частен конструктор в Java
Както вече споменахме, конструкторите в клас Java могат да имат свързани с тях спецификатори на достъп. Следователно можем да имаме конструктори, които са частни или публични. Ще обсъдим повече за спецификаторите за достъп в следващите ни уроци и ще преразгледаме конструкторите още веднъж.
Когато конструкторът е обявен за частен, той може да бъде достъпен само вътре в класа. Той не може да осъществи достъп до производни класове чрез друг клас. Следователно трябва да предоставим публичен метод в класа, който има частни конструктори, така че този публичен метод да има достъп до частните конструктори.
В Java частният конструктор може да се използва в следните ситуации:
- За прилагане на единични.
- За включване на фабрични методи.
- За класове, които имат само статични членове (променливи и методи).
- За класове с крайни членове. (константи - окончателни и статични).
- За да използвате безопасни за тип изброявания.
Като пример , нека вземем сингъл клас. Единичен клас е клас, който позволява само един обект наведнъж. Можем да използваме частния конструктор, за да гарантираме, че не позволяваме да се създават повече от един обект.
Програмата по-долу реализира единичен клас, използвайки частен конструктор.
class SingleTonClass { //Static Class Reference private static SingleTonClass obj=null; private SingleTonClass(){ System.out.println('SingleTonClass::Private constructor'); } public static SingleTonClass create_object(){ //logic to create only one instance if(obj==null){ obj= new SingleTonClass(); } return obj; } public void display(){ System.out.println('This is SingleTonClass !!'); } } class Main { public static void main(String args[]){ //cannot call private constructor directly. SingleTonClass myobject= SingleTonClass.create_object(); myobject.display(); } }
Изход:
Горната програма декларира единичен клас. Предоставихме частен конструктор и публичен метод за достъп до частния конструктор и също така за ограничаване на броя на обектите само до един. В основния метод изпълняваме публичния метод, за да създадем единичен обект на клас.
Конструктор на абстрактни класове в Java
Абстрактен клас в Java като C ++, с изключение на това, че за разлика от C ++, имаме абстрактна ключова дума в Java, използвана за деклариране на абстрактен клас. Абстрактните класове в Java могат да имат конструктори. Този конструктор на абстрактни класове се извиква, когато създаваме екземпляр на клас на изпълнение (който наследява абстрактния клас).
Да разгледаме следния пример за конструктор на абстрактни класове.
//abstract class declaration abstract class BaseClass { BaseClass() { System.out.println('BaseClass::Constructor Called'); } abstract void func1(); } class DerivedClass extends BaseClass { DerivedClass() { System.out.println('DerivedClass::Constructor Called'); } void func1() { System.out.println('DerivedClass::func1() called'); } } class Main { public static void main(String args[]) { DerivedClass d = new DerivedClass(); } }
Изход:
Тъй като абстрактният клас не може да бъде създаден, ние наследяваме нов клас от този абстрактен клас. Резултатът от програмата показва, че когато създаваме обект от производния клас в основния метод, първо се извиква конструкторът на абстрактния клас, последван от конструктор на производен клас.
Конструктор на интерфейс в Java
Интерфейсите в Java са подобни на абстрактните класове. Интерфейсите по подразбиране са публични резюмета и имат само прототипи на методи. След това тези прототипи се внедряват в класа, който реализира интерфейса.
И така, присъстват ли конструктори в интерфейсите?
Не. Интерфейсите нямат конструктори. Това е така, защото методите в интерфейса са само прототипи и следователно не е необходимо да създаваме екземпляри или да създаваме обект на интерфейса, тъй като изобщо няма да го използваме. Следователно не е необходимо да имате конструктор и в интерфейса.
Долната програма Java демонстрира тази логика.
//interface declaration interface Interface_Add{ public int addNumbers(int num1, int num2); //method prototype } class AddClass implements Interface_Add{ public int addNumbers(int num1, int num2){ //method implementation int result= num1+num2; return result; } } class Main{ public static void main(String args[]) { AddClass obj= new AddClass(); System.out.println('Result of addition:' + obj.addNumbers(2, 3)); } }
Изход:
Тук имаме интерфейс „Interface_add“ с един метод „addNumbers“ прототип. Тогава клас ‘AddClass’ изпълнява този интерфейс, а също и метода addNumbers.
В основния метод класът се инстанцира и методът се изпълнява. Следователно не виждаме нужда от конструктор в този интерфейс.
Сега нека обсъдим конструктори на някои съществуващи класове в подобни на Java String и Array.
Конструктор на низове в Java
Низов обект в Java може да бъде дефиниран като обект от клас String. String клас предоставя следните конструктори за създаване и инициализиране на String обекти.
Някои от тези конструктори са разгледани по-долу:
# 1) String (байт [] myArray)
Изгражда нов String обект от даден байтов масив. За конструиране на низ обект, той използва набора от символи на платформата по подразбиране и декодира байтовия масив.
най-добрата безплатна услуга за конферентен разговор 2020
Пример:
byte[] myArray = {65, 66, 67, 68, 69}; String str =new String(myArray); //ABCDE
# 2) String (байт [] myArray, Charset char_set)
Този конструктор конструира нов низ обект, като използва char_set, посочен в извикването на конструктора, за декодиране на байтовия масив.
Пример:
byte[] myArray = {65, 66, 67, 68, 69}; Charset cs = Charset.defaultCharset(); String str = new String(myArray, cs); //ABCDE
# 3) String (char [] myArray)
Можем да конструираме String обект от символен масив.
Пример:
char myArray[] = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray); //Paris
# 4) String (char [] myArray, int start_index, int count)
Тук конструираме обект String от масив от символи, като включваме броя на символите от start_index до броя.
Пример:
char myArray[] = {'P', 'a', 'r', 'i', 's'}; String s = new String(myArray, 0,2); //Pa
# 5) String (int [] intArray, int offset, int count)
Горният конструктор разпределя нов обект String от масив int. Броят на символите в низа се дефинира чрез отместване и брой.
Пример:
int[] intArray = {65, 69,73,79,85 }; String s = new String (intArray, 0, 5); //AEIOU
# 6) String (StringBuffer strbuffer)
В този конструктор се създава нов String обект от StringBuffer обект.
Пример:
StringBuffer strbuffer = new StringBuffer('SoftwareTestingHelp'); String s = new String (strbuffer); //SoftwareTestingHelp
# 7) String (StringBuilder strbuilder)
Създава се нов обект String с помощта на обекта StringBuilder.
Пример:
StringBuilder strbuilder = new StringBuilder('SoftwareTestingHelp'); String s = new String(strbuilder); // SoftwareTestingHelp
Конструктори на масиви в Java
Масивите използват конструктори за създаване и инициализиране на масиви, като се използва нова ключова дума, както е показано по-долу.
int[] data = new int[4];
Горният оператор инициализира масив от 4 елемента по подразбиране 0.
Друг начин за инициализиране на масива е даден по-долу:
int[] data = new int[]{2, 4, 6, 8};
Деструктор в Java
Досега сме виждали конструктори в Java, с помощта на които създаваме обект. Когато обектът приключи със задачата си и вече не е необходим, тогава паметта, разпределена за обекта, трябва да бъде освободена или освободена. Това е работата на деструктор в Java.
В Java, Garbage Collector е отговорен за освобождаването на обектите, които вече не се използват или са станали недостъпни. Деструкторите в Java се наричат финализатори и те са недетерминирани, така че не можем да гарантираме, че ще бъдат изпълнени.
В Java не е нужно да се притесняваме за деструктори. Деструкторите нямат специфичен синтаксис в Java. Обектите се унищожават, но ние не извикваме деструктор по начина, по който го наричаме в C ++.
Както бе споменато по-горе, работата на деструктора се извършва от финализатора, който се извиква от Garbage Collector.
Методът на финализатора в Java е демонстриран по-долу за справка.
class Main { public static void main(String[] args) { Main dm = new Main(); //create object dm = null; System.gc(); //call garbage collector System.out.println('Main Mathod'); } protected void finalize() //finalize method { System.out.println('Finalize method :: object is garbage collected'); } }
Изход:
В горната програма създаваме обект на клас. Задайте го на null и след това извикваме метода System.gc (). Сега този обект е недостъпен и методът за финализиране (деструктор) е имплицитно извикан.
Конструктор срещу метод в Java
Нека да обобщим някои от разликите между конструктор и метод в Java.
Конструктори | Метод |
---|---|
Създава нов обект. | Работи върху вече съществуващ обект. |
Блок код, използван за инициализиране на членовете на класа при създаване на обект. | Колекция от програмни изрази, които генерират резултат при изпълнение. |
Използва се за извършване на инициализация на обекти. | Поредица от изрази, които се изпълняват от Java. Може или не може да съдържа рутина за инициализация. |
Призовано имплицитно. | Трябва да се извика изрично в програма. |
Извиква се, когато се създава нов обект с помощта на новата ключова дума. | Извиква се, когато методът е извикан от програмиста. |
Има същото име като това на клас. | Той може да има всяко име, разрешено от езика за програмиране. |
Няма тип връщане. | Трябва да има тип return или иначе трябва да се върне void. |
Един клас може да има много претоварени конструктори. | Класът може да е претоварил, както и различни методи. |
Той не може да бъде наследен от детския клас. | Тя може да бъде наследена от детски клас и дори отменена. |
често задавани въпроси
В # 1) Може ли конструкторите да бъдат частни?
Отговор: Да. Конструкторите в Java могат да бъдат частни. Всички класове, включително абстрактни класове, могат да имат частни конструктори. Използвайки частни конструктори, можем да предотвратим създаването на инстанция на класа или да ограничим броя на обектите от този клас.
В # 2) Каква е ползата от абстрактния конструктор на класове в Java?
Отговор: Конструктор на абстрактен клас се извиква, когато създаваме обект от производния клас, който наследява абстрактния клас. Освен това, ако абстрактният клас има някои променливи членове, можем да ги инициализираме в конструктора на абстрактния клас.
В # 3) Можем ли да дефинираме параметризиран конструктор в абстрактния клас в Java?
Отговор: Да, можем да имаме параметризиран конструктор в абстрактен клас. Тогава можем да извикаме този конструктор от производния клас, който е наследил абстрактния клас, използвайки извикване super ().
В # 4) Знаете ли защо в Java няма Destructor?
Отговор: Java не е необходимо да има конкретен деструктор, тъй като има свой колектор за боклук. Този събирач на боклук унищожава недостъпните обекти и освобождава паметта. Метод, наречен финализиране, също е част от събирача на боклук, който се изпълнява недетерминирано и изпълнява функцията на деструктор като освобождаване на ресурси и т.н.
В # 5) Може ли абстрактният клас да има тяло?
Отговор: Не. Абстрактният клас може да има само декларации на методи и конструктори. Неговите методи не се прилагат. Класът, който наследява този абстрактен клас, изпълнява методите. Освен прототип или декларации, той може да има и спецификатори за видимост или достъп.
Заключение
Това завършва нашия урок за конструктори в Java. Тук сме разгледали дефиницията, създаването и видовете конструктори. Също така обсъдихме претоварването на конструктори и веригите на конструктори в Java.
Проучихме абстрактни и частни конструктори в Java и научихме защо интерфейсите не могат да имат конструктори. Видяхме конструктори, които се използват в класове масиви и низове.
Също така обсъдихме деструктори в Java, които изпълняват функцията, противоположна на тази на конструкторите. Конструкторите създават обекти, докато деструкторите унищожават обекти. В Java функцията деструктор се изпълнява от финализатора, който се изпълнява по време на събирането на боклука.
По този начин нямаме конкретен деструктор в Java и не е необходимо да го дефинираме по начина, по който го правим в C ++. Също така обсъдихме разликите между метод и конструктор. Знаем, че конструкторът не е същото като метод, но можем да разглеждаме конструктора като специален метод.
html и css интервю въпроси и отговори
=> Прочетете серията Easy Training Training.
Препоръчително четене
- Java конструктор - конструктори за клас, копиране и по подразбиране
- Концепции на C #: конструктор, деструктор, статичен клас, структура и преброяване
- Java String Array - Урок с примери за кодове
- Java String с String Buffer и String Builder Tutorial
- Дължина на низа на Java () Метод с примери
- Java String съдържа () Урок за метод с примери
- Java String indexOf метод с примери за кодове
- Java String compareTo метод с примери за програмиране