types classes java
Този урок ще обсъди различни типове класове в Java като абстрактни, бетонни, финални, вътрешни, POJO, статични и други специални класове с примери:
В предишния ни урок обсъдихме класове и обекти в Java. Класът в Java е шаблон или план. Може да се определи и като колекция от подобни обекти. Дефинираме обекти от клас тип и след това комуникираме чрез тези обекти.
Всеки обект е екземпляр на клас, който има състояние и поведение.
=> Посетете тук за ексклузивната серия уроци за обучение по Java.
Какво ще научите:
Видове класове в Java - Въведение
Всички знаем, че класът има следните компоненти:
- Модификатори: Посочете достъп за класа.
- ClassName: Име на класа.
- Ключови думи: Ключови думи, предлагащи дали клас разширява или прилага клас или интерфейс.
- Класът Body, затворен в къдрави скоби {}
В зависимост от различните използвани модификатори, посоченото тяло на класа и използваните ключови думи, имаме различни типове класове в Java.
как да преглеждате bin файлове на android -
- Клас бетон: Нормален клас, който има конкретното изпълнение на методи.
- POJO клас: Това е „Plain Old Java Object“, съдържащ само частни променливи членове и методи за задаване на getter за достъп до тези променливи.
- Абстрактен клас: Този клас има един или повече абстрактни методи.
- Финален клас: Краен клас не може да бъде наследен.
- Статичен клас: Клас, съдържащ само статични членове.
- Вътрешен клас: Вътрешен клас е клас, който е член на друг клас.
В този урок ще обсъдим всеки от тези типове класове с примери.
Ще обсъдим и някои други видове класове, които се считат за специални класове в Java.
- Анонимен клас: Клас без никакво име.
- Неизменим клас: Клас, чийто обект не може да бъде променен.
- Единичен клас: Клас, чийто единичен екземпляр може да бъде създаден.
- Клас на обекта: Основният клас на всички функции на Java.
- Клас обвивка: Всеки примитивен тип данни в Java има клас на обвивка.
Но първо, нека да обсъдим накратко как да импортираме клас в Java заедно с основния клас в Java, който съдържа основния метод или начална точка в Java.
Импортиране в Java
В Java, ако искаме да включим някаква функция или функционалност в нашата програма, тогава можем да използваме израза „импортиране“. Използвайки инструкция за импортиране, можем да импортираме цял пакет и да използваме неговата функционалност в нашата програма или да включим и един клас.
По-долу е даден синтаксисът на оператора за импортиране.
import packageName/classname;
Ако искаме да импортираме пакета java.lang и всички негови класове, тогава можем да напишем следното изявление:
import java.lang.*;
Да предположим, че искаме да включим функционалността на класа Arrays в нашата програма, тогава можем да напишем следното изявление:
import java.util.Arrays;
Изявлението за импортиране е еквивалентно на C / C ++ включва изявление. Изявлението за импортиране се поставя в началото на програмата Java като първото извлечение. В програмата Java можем да имаме повече от един израз.
Основен клас в Java
Вече знаем, че в Java методът main () е началната точка на изпълнението на всяка програма и може да бъде поставен във всеки клас на конкретното приложение. Ако обаче имаме сложно приложение с твърде много файлове и класове, препоръчително е да имаме клас Main и да поставим метода main () в този клас Main.
class Main{ public static void main(String() args){ System.out.println(“Hello, World!”); } }
Имайте предвид, че JVM не създава обект от клас Main. Логиката зад това е, че тъй като main () е статичен метод, той може да бъде извикан без никакъв обект на клас.
Видове класове в Java
Сега нека преминем към типовете класове в Java. Ще обясним всеки от тези класове един по един, последван от примерите за програмиране.
# 1) Бетонен клас
Конкретен клас е всеки нормален клас в Java програма. Този клас няма да има абстрактни методи. Всички методи в конкретния клас са напълно приложени.
Конкретният клас може да наследява от друг клас, дори абстрактен клас или да реализира интерфейс. Можем да създадем екземпляр на конкретния клас и да създадем негови обекти.
Прост пример за конкретен клас е показан по-долу.
public class Main { // Concrete Class example static int total(int val1, int val2) { return val1 + val2; } public static void main(String args()) { int sum = total(100, 108); System.out.println('Total of two integers: ' + sum); } }
Изход
Горната програма показва конкретен клас. Виждаме, че този клас има цялостно изпълнение. Не е останало нищо непълно или неприложено.
# 2) Клас POJO
POJO (Plain Old Java Object) е клас, съдържащ само частни променливи членове. Освен частните променливи на членове, той съдържа само методите getter и setter, използвани от тези променливи на членове.
Клас POJO няма своето поведение. Въпреки това, той може да замени някои методи като равни или интерфейси.
Свойства на POJO клас:
- Класът POJO трябва да има публичен метод за получаване и задаване.
- Всички променливи на членовете или екземпляра трябва да са частни.
- Класът POJO не разширява или прилага класове или интерфейси, които са предварително зададени.
- Те не съдържат анотации, които са предварително зададени.
- Няма конструктор без никакви аргументи (конструктор без аргументи).
По-долу е дадена Java програма, която демонстрира POJO класа.
//declare a POJO class class POJO_Class { private int daysOfWeek=7; //private variable public int getdaysOfWeek() { //getter return daysOfWeek; } public void setdaysOfWeek(int dow) { //setter this.daysOfWeek = dow; } } public class Main { public static void main(String args()){ POJO_Class pojoDemo = new POJO_Class(); //instance of POJO class System.out.println('Days of the week:' + pojoDemo.getdaysOfWeek()); } }
Изход
Горната демонстрация на класа POJO показва, че той има частна променлива и методите на getter setter за тази променлива. За достъп до тази променлива член използваме метода getter. Методът на задаване се използва за актуализиране на стойността.
# 3) Абстрактен клас
Абстрактен клас е клас, който е непълен или чието внедряване не е завършено. Абстрактен клас не може да бъде създаден. Тя трябва да бъде разширена от останалите класове и да приложи своите методи, за да образува конкретен клас.
Абстрактният клас се декларира с помощта на ключовата дума ‘abstract’. Абстрактният клас може да има статични и крайни методи, както и конструктори.
Нека демонстрираме абстрактен клас в Java.
interface multiply //interface multiply { int product(int num1, int num2); } // abstract class abstract class Product implements multiply { // this is an abstract method to calculate product of two numbers public abstract int product(int num1, int num2); } // Concrete class :this will implement the abstract method above class Main extends Product { public int product(int num1, int num2) { return num1*num2; } // main method public static void main(String args()) { Main obj = new Main(); int prod = obj.product(100, 20); // print product System.out.println('Product of two numbers: ' + prod); } }
Изход
В горната програма имаме умножение на интерфейса. Създаваме абстрактен клас Product, който реализира умножен интерфейс. Вътре в Продукта имаме метод, който не е приложен. Тогава имаме клас Main, който наследява класа Product и реализира метода product. По-късно извикваме този метод за обекта Main class.
# 4) Статичен клас
Статиката в Java като цяло означава обекта, който принадлежи към клас, а не към отделните екземпляри. Така че статичният член или метод в Java не трябва да бъде достъпен с обект, а директно с име на клас.
Статичният клас в Java може да съдържа само статични членове. Също така не можем да създадем екземпляр на статичен клас.
Следващата Java програма демонстрира статичен клас.
class Static_Class { static int total; // static variable static void sum(int val1, int val2) { // static method System.out.print('Static method to calculate sum:' + ' '); total = val1 + val2; System.out.println(val1 + '+' + val2); // print the numbers } static class Nested_Class { // static class static { // static block System.out.println('static block inside a static nested class'); } public void displaySum() { sum(25, 75); // call static method // print the value in static variable total, it holds the sum of two numbers System.out.println('Sum of two numbers:' + total); } } } public class Main { public static void main(String args()) { // declare static class object Static_Class.Nested_Class object = new Static_Class.Nested_Class(); object.displaySum(); // call displaySum method inside a static class } }
Изход
Горният клас демонстрира статичния клас. Тук имаме статичен клас, който е член на друг конкретен клас. Вътре в статичния клас изчисляваме сумата от две числа и съхраняваме резултата в статична променлива, която е член на външния клас.
# 5) Финален клас
Последният клас е клас, който не може да бъде наследен или подкласиран. След като един клас е обявен за окончателен в Java, той е нещо като константа и става неизменим.
Следователно, за да направим клас неизменим, трябва да го обявим за окончателен.
//final class final class Base_Class { void Display() { System.out.println('Base_Class::Display()'); } } //class Derived_Class extends Base_Class { //Compile-time error - can't inherit final class class Derived_Class{ void Display() { System.out.println('Derived_Class::Display()'); } } public class Main { public static void main(String() arg) { Base_Class base_obj = new Base_Class(); //create a final class object base_obj.Display(); Derived_Class deri_obj = new Derived_Class(); deri_obj.Display(); } }
Изход
Горната програма първо декларира Base_Class, който е означен като „окончателен“. Следователно, когато се опитваме да го разширим в Derived_Class, получаваме грешка в компилатора. (Коментираният ред). Но можем да създадем неговия обект и да извикаме метода Display.
# 6) Вложен клас / Вътрешен клас
Вложен клас, известен също като Вътрешен клас в Java, се използва за подобряване на капсулирането. Вложен клас / Вътрешен клас е клас, затворен в друг клас.
Точно както клас има променливи и методи като свои членове, той също може да има вътрешен клас като свой член.
Вложен клас има следната структура:
class OuterClass{ class NestedClass{ //nested class code… } //outerclass code… }
Вътрешните класове имат следните подтипове:
- Вложен вътрешен клас
- Метод Локален вътрешен клас
- Анонимен Вътрешен клас
- Статичен вложен клас
# 1) Вложен вътрешен клас
Вложен вътрешен клас има достъп до променливи на частни членове на външен клас. Също така можем да приложим модификатори за достъп към вложения вътрешен клас.
# 2) Метод Локален вътрешен клас
Това е вътрешният клас, който е деклариран в метод на външен клас.
# 3) Анонимен вътрешен клас
Анонимният вътрешен клас е вътрешен клас, деклариран във външен клас и е без никакво име.
# 4) Статичен вложен клас
Начинът, по който клас има статична променлива на член, може да има и статичен клас като свой член.
Пример за вложен / вътрешен клас е даден по-долу:
public class Main { //nested/inner class enclosed inside Main class. class InnerClass { public void inner_print() { System.out.println('Inner class'); } } public static void main(String() args) { System.out.println('Main in Outer class'); } }
Изход
Други специални класове в Java
Неизменим клас в Java
Неизменяем клас генерира неизменяеми обекти. Неизменим обект е обект, чието съдържание не може да се променя, след като обектът е създаден. Така че неизменяем клас е този, чийто обект не може да бъде променен след създаването му.
Всички класове обвивки в Java за примитивни типове (Integer, Boolean, Byte и др.) Са неизменни. Класът String също е неизменен.
Можем да имаме и дефинирани от потребителя неизменяеми класове в Java.
За да бъде един клас неизменим, той трябва да бъде обявен за окончателен заедно с всички негови членове на данни. Също така, класът трябва да има параметризиран конструктор. Всички променливи-членове трябва да имат метод за получаване, но не и метод за задаване.
Всички горепосочени изисквания трябва да бъдат изпълнени, за да бъде един клас неизменим.
Нека да приложим Java програма, за да демонстрираме неизменния клас.
как да отворя apk файлове
final class City { final String city_name; final int cityId; //parameterised constructor public City(String name, int id) { this.city_name = name; this.cityId = id; } //getters for member variables public String getcityName() { return city_name; } public int getcityId() { return cityId; } } // Driver class class Main { public static void main(String args()) { City city = new City('New York', 1001); System.out.print('City Id:' + city.getcityId() + ' '); System.out.println('City Name:' + city.getcityName()); //city.cityId = 1002; //cannot assign a value to final variable regNo } }
Изход
В горната програма ние обявихме клас City. Това е краен клас и в този клас сме декларирали две променливи членове и параметризиран конструктор. Също така сме декларирали getter методи за тези две променливи членове. Така че класът City отговаря на всички изисквания на неизменния клас.
Обърнете внимание на коментирания ред код в основния метод. Ако коментираме този ред, ще получим грешка в компилатора (предоставена в коментара тук), тъй като се опитваме да зададем стойността за променлива член.
Единичен клас в Java
Единичен клас позволява по един екземпляр наведнъж. В Java сингълът е модел на дизайн. Този модел на проектиране гарантира, че във всеки момент от времето съществува само един екземпляр на клас. Така че всеки клас, дефиниран като единичен, има една точка за достъп и тя е глобална.
Обърнете внимание, че прекратяването на жизнения цикъл на приложението не унищожава единичен клас като нормалните класове. Когато клас е деклариран за единичен, тогава не създаваме нов екземпляр всеки път, когато се прави нова заявка за обекта.
Същият екземпляр се използва отново и отново. По този начин можем да спестим място в паметта най-вече в случай на многонишкови приложения и приложения за бази данни.
Можем да използваме единичен клас за дейности като кеширане, регистриране и др.
Следващата програма демонстрира клас на Singleton.
class Singleton { // static variable of type Singleton private static Singleton single_instance = null; // String variable public String str; // private constructor : restricted to this class private Singleton() { str = 'Singleton class::private constructor'; } // create instance of Singleton class using getInstance static method public static Singleton getInstance() { if (single_instance == null) single_instance = new Singleton(); return single_instance; } } class Main { public static void main(String args()) { // instantiate Singleton class with obj1 Singleton obj1 = Singleton.getInstance(); // instantiate Singleton class with obj2 Singleton obj2 = Singleton.getInstance(); System.out.println('obj1(str):' + obj1.str); System.out.println('obj2(str):' + obj2.str); // change variable of instance obj1 obj1.str = (obj1.str).toUpperCase(); System.out.println('
After changing obj1(str):'); System.out.println('obj1(str):' + obj1.str); System.out.println('obj2(str):' + obj2.str); } }
Изход
В горната програма дефинирахме сингълтон клас с частен конструктор. Определихме променлива член от тип String. В основния метод декларираме два екземпляра на сингълтон класа. След това променяме променливата String, като използваме един от екземплярите.
Когато отпечатваме стойността String и за двата екземпляра, забелязваме, че стойността на променливата String се е променила и за двата екземпляра. Следователно, въпреки че сме променили стойността само за един екземпляр, поради сингълтонния клас промените се отразяват във всички екземпляри.
Винаги връщаме един и същ екземпляр, въпреки че изглежда създаваме различни екземпляри.
Клас на обекта в Java
Класът Object е родителският клас или първият клас в Java. Той е на най-високото ниво в йерархията на Java.
Тъй като всички класове имат клас Object като суперклас, всички Java обекти, включително Arrays, прилагат методите Object class. Класът обект присъства в пакета “java.lang”.
Декларация за java.lang.Object е:
публичен клас Обект
Следващата таблица описва конструкторите и методите на клас Object.
Конструктор / метод | Описание |
---|---|
Клас getClass () | Връща класа на изпълнение на обекта. |
Конструктор на клас обекти | |
Обект () | Конструктор на клас обекти |
Методи на обектния клас | |
защитен обект клонинг () | Връща клонинг или копие на обекта. |
boolean equals (Object obj) | Проверява дали даден обект obj е равен на този обект. |
защитена празнина финализиране () | Извиква се от събирача на боклук, когато всички препратки към обекта са унищожени. |
int hashCode () | Връща хеш код за обекта. |
void notify () | Използвайте за събуждане на една чакаща нишка. |
void notifyAll () | Събужда всички чакащи нишки. |
String toString () | Връща String еквивалент на обекта. |
празно чакане () | Прави нишка да изчака, докато се събуди чрез метод за уведомяване от друга нишка. |
празно чакане (дълго време за изчакване) | Прави нишката да изчака, докато изтече времето, дадено от ‘timeout’ или се събуди чрез методите notify или notifyAll. |
празно чакане (дълго време за изчакване, int nanos) | Причинява нишката да изчака до изтичане на определеното време или докато нотификацията () или notifyAll () не бъде извикана от друга нишка. |
Нека да приложим примерна програма на Java, която ще демонстрира някои от методите на обектния клас.
public class Main { public static void main(String() args) { Main t = new Main(); System.out.println('Main class Object HashCode:' + t.hashCode()); t = null; // call garbage collector System.gc(); System.out.println('Main class:End'); } @Override protected void finalize() { System.out.println('Main Class::finalize method called.'); } }
Изход
Тук имаме Основен клас. В метода main () създаваме обект от клас Main. Този обект е потомък на клас Обект и поддържа всички методи на клас Обект. По този начин използваме този обект и извикваме няколко метода на клас обекти като hashCode (), System.GC (), finalize () и т.н.
Клас на обвивка в Java
Java предоставя функция, наречена клас обвивка, която има механизъм, който преобразува примитивния тип данни в обект и обратно. Класовете на обвивки са класовете, които представляват примитивни типове като int, char и т.н. като обекти.
По този начин всеки примитивен тип данни в Java има съответния клас на обвивка.
Следващата таблица показва примитивните типове данни и техния еквивалентен клас на обвивка.
Примитивен тип | Тип обвивка |
---|---|
плувка | Плувка |
булев | Булево |
char | Характер |
байт | Байт |
къс | Къс |
инт | Цяло число |
дълго | Дълго |
двойно | Двойна |
За да преобразуваме примитивите в обекти и обектите в примитиви, имаме техники, наречени съответно „автобокс“ и „бокс“. Ase Java е обектно-ориентиран език за програмиране, ние винаги се справяме с обекти и имаме много функции като колекции, Сериализация и др., които също се нуждаят от обекти и примитивни типове.
Така че е наложително винаги да се нуждаем от обекти и примитивни типове в Java и по този начин се нуждаем от тези техники за автоматично кутиране и разопаковане.
Автобокс
Автобоксирането е техника за автоматично преобразуване на примитивен тип данни в обект от съответния клас обвивка. Например , преобразуването на int в клас Integer, char в клас Character и др. са екземпляри на автобокс.
Забележка: Класовете Wrapper използват метода valueOf (), за да преобразуват примитива в обекти, които са амортизирани от Java 5.
Разопаковане
Обратното преобразуване на обектите от клас обвивка в съответните им примитивни типове данни се нарича „unboxing“.
Забележка: От Java 5 методът intValue (), който преобразува обекта на обвивката в примитивен тип, се амортизира.
По-долу е даден пример за бокс / дебокс.
public class Main { public static void main(String args()){ //Convert int to Integer : boxing int num=20; Integer int_class= Integer.valueOf(num);//explicit conversion from int to Integer Integer inum=num;//autoboxing System.out.println('int => Integer: ' + num+' => '+inum); //Convert Integer to int: unboxing Integer val=new Integer (3); int ival=val.intValue();//explicit conversion from Integer to int int jval=val;//unboxing System.out.println('Integer => int:' + val+' => '+jval); } }
Изход
Горната програма показва автобоксиране и разопаковане на int стойност. Първо преобразуваме int в Integer обект и след това Integer обект се преобразува в тип данни int.
Нека внедрим програма, която демонстрира класовете обвивки, присъстващи в Java.
public class Main { public static void main(String args()) { byte bbyte=10; short sshort=20; int iint=300; long llong=400; float ffloat=3.14F; double ddouble=77.2D; char cchar='A'; boolean bboolean=true; //Convert primitives into objects => Autoboxing Byte byteobj=bbyte; Short shortobj=sshort; Integer intobj=iint; Long longobj=llong; Float floatobj=ffloat; Double doubleobj=ddouble; Character charobj=cchar; Boolean boolobj=bboolean; //Print converted objects System.out.println('Primitives converted to Objects:'); System.out.println('Byte object: '+byteobj); System.out.println('Short object: '+shortobj); System.out.println('Integer object: '+intobj); System.out.println('Long object: '+longobj); System.out.println('Float object: '+floatobj); System.out.println('Double object: '+doubleobj); System.out.println('Character object: '+charobj); System.out.println('Boolean object: '+boolobj); //Convert Objects to Primitives => Unboxing byte bytevalue=byteobj; short shortvalue=shortobj; int intvalue=intobj; long longvalue=longobj; float floatvalue=floatobj; double doublevalue=doubleobj; char charvalue=charobj; boolean boolvalue=boolobj; //Print primitives System.out.println('Converting Objects to Primitives'); System.out.println('byte value: '+bytevalue); System.out.println('short value: '+shortvalue); System.out.println('int value: '+intvalue); System.out.println('long value: '+longvalue); System.out.println('float value: '+floatvalue); System.out.println('double value: '+doublevalue); System.out.println('char value: '+charvalue); System.out.println('boolean value: '+boolvalue); } }
Изход
Горният изход на програмата показва преобразуването от примитивни типове в обвиващи обекти (Autoboxing) и обръща преобразуването от обвиващи обекти в примитивни типове (unboxing).
често задавани въпроси
В # 1) Какъв е типът данни на класа в Java?
Отговор: Java предоставя клас с име „Клас”, който съдържа информация за всички класове, обекти и интерфейси на работещото приложение. Класът Class също представлява примитивни типове данни и тип void.
Класът Class е част от пакета java.lang.
видове дефекти в софтуерното тестване
В # 2) Какво представлява нормалният клас в Java?
Отговор: Нормалният клас в Java е нестатичен клас. Можем да създадем обекти от нормален клас, като използваме новата ключова дума. Също така, всеки нормален клас може да има друг клас за свой член. В този случай класът член се нарича вложен или вътрешен клас, а заграждащият клас се нарича външен клас.
В # 3) Дали String е клас на обвивка в Java?
Отговор: Не, String не е клас на обвивка в Java. За да бъде клас клас обвивка, ние се нуждаем от съответния му примитивен тип. Например, за клас на обвивка Integer имаме примитивен тип int. За клас String нямаме съответния примитивен тип данни.
В # 4) Каква е ползата от Wrapper Class?
Отговор: Класовете Wrapper се използват за преобразуване на примитивни типове данни в обекти. С други думи, класовете обвивки обгръщат примитивни типове в обекти. Класовете на обвивки се използват, когато някои функции на Java като Колекции очакват само обекти, а не примитивни типове данни.
В # 5) Защо Singleton Class се използва в Java?
Отговор: Винаги, когато искаме глобална точка за достъп за даден обект, ние избираме единичен модел, който ни позволява да проектираме единичен клас, в който ще има само един екземпляр. Единичните класове се използват в кешове, обединяване на нишки, приложения на бази данни, регистриране и др.
Заключение
В този урок разгледахме различните типове класове, използвани в Java. Видяхме конкретни, абстрактни, окончателни, статични, вложени, POJO и др. Типове класове. Освен това обсъдихме и класове на Singleton, неизменяеми класове и обсъдихме примери за тяхното изпълнение.
Също така обхванахме класовете обвивки и обектните класове в Java. Класовете Wrapper са класовете, които обгръщат примитивните типове данни на Java в обекти. Обектният клас в Java е суперкласът на всички останали класове. Това е най-високият клас в йерархията на Java.
След като обсъдихме класовете и обектите в Java и типовете класове, в следващия урок ще продължим с подробна дискусия за конструкторите в Java.
=> Вижте Перфектното ръководство за обучение по Java тук.
Препоръчително четене
- Урок за интерфейс на Java и абстрактен клас с примери
- Основи на Java: Синтаксис на Java, клас Java и основни концепции на Java
- Какво представлява статичната ключова дума в Java?
- Java Integer и Java BigInteger клас с примери
- Урок за клас Java Scanner с примери
- Java Class Vs Object - Как да използвам клас и обект в Java
- Java Array Class Tutorial - java.util.Arrays Class с примери
- Какво е Java Vector | Урок за Java Vector Class с примери