Роҳҳои гуногуни сохтани an object дар Java
Сарчашма:
Миёна Дар ин дарс мо роҳҳои гуногуни сохтани an objectро дар Java меомӯзем. Объекти Java як мисоли синфи Java мебошад. Ҳар як an object дорои ҳолат, рафтор ва идентификатор мебошад. Майдонҳо (тағйирёбандаҳо) ҳолати an objectро нигоҳ медоранд, дар ҳоле ки усулҳо (функсияҳо) амали an objectро нишон медиҳанд. Синфҳо ҳамчун "нақшаҳо" хидмат мекунанд, ки аз онҳо намунаҳои an object дар вақти корӣ сохта мешаванд.
Эҷоди an object дар Java
Эҷоди an object раванди ҷудо кардани хотира барои нигоҳ доштани маълумот дар майдонҳои синф (инчунин тағирёбанда номида мешавад) мебошад. Ин раванд одатан эҷоди як мисоли синф номида мешавад. Дар Java чор роҳи эҷоди an objectҳо мавҷуданд:
- бо истифода аз калимаи нав
- усули newInstance()
- Усули clone ().
- ғайрисериявии an object
Акнун биёед ҳар яке аз усулҳои зикршударо ба таври муфассал дида бароем.
Калимаи нав
Ин роҳи маъмултарини сохтани an object дар Java мебошад. Калимаи калидии
нав як мисоли синфро тавассути ҷудо кардани хотира барои мисоли нави навъи муайян эҷод мекунад. Пас аз нав конструктор меояд - усули махсусе, ки барои сохтани an object ва оғоз кардани майдонҳои an objectи сохта масъул аст. Объект бо оператори
нав сохта мешавад ва бо конструктор оғоз карда мешавад. Ин аст мисоли сохтани an objectи Java бо оператори
нав :
Date today = new Date();
Ин ифода an objectи нави
Сана тавлид мекунад (
Сана синф дар дохor пакети
java.util аст ). Ин банди ягонаи code се амалро иҷро мекунад: декларатсия, эҷодкунӣ ва оғозёбӣ.
Санаи имрӯз як эъломияи тағирёбанда аст, ки ба компилятор хабар медиҳад, ки
имрӯз ба an objectи навъи
Date муроҷиат мекунад . Оператори нав синфи
Date -ро эҷод мекунад (дар хотира an objectи нави
Сана эҷод мекунад ) ва
Date() an objectро оғоз мекунад. Мисоли зеринро дида бароед:
public class Person {
private String name;
private int uid;
public Person() {
this.name = "Michael Cole";
this.uid = 101;
}
public Person(String name, int uid) {
super();
this.name = name;
this.uid = uid;
}
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person("John Bodgan", 102);
System.out.println("Name: " + p1.getName() + " UID: " + p1.getUid());
System.out.println("Name: " + p2.getName() + " UID: " + p2.getUid());
}
}
Аз ин code, мо бо истифода аз калимаи
нав an objectи Person эҷод мекунем :
- Объекти p1 конструктори ғайрипараметрӣ бо арзиши номи тағирёбанда ба "Майкл Коул" ва UID ба 101 таъин шудааст, даъват мекунад.
- Объекти p2 конструктори параметриро даъват мекунад, ки дар он арзиши "Ҷон Бодган" ва 102-ро ба конструктор интиқол медиҳад.Ба ин арзишҳо номи тағирёбанда ва UID таъин карда мешаванд.
Истифодаи усули newInstance().
Усули
newInstance() дар Java барои ба таври динамикӣ сохтани мисоли an objectи синфи додашуда истифода мешавад.
Ду истифодаи стандартии усули newInstance() вуҷуд дорад :
- Усули newInstance() аз API java.lang.Class
- Усули newInstance() аз API java.lang.reflect.Constructor
Истифодаи newInstance() аз API Class
Барои сохтани an objectи синф дар вақти корӣ, мо бояд усули
newInstance() -ро аз API Class API даъват кунем, ки an objectи он синфро бармегардонад. Усули
newInstance()- и синфи
java.lang.Class ягон параметр ё аргумент намегирад ва онро барои он синф созандаи беаргумент номидан мумкин аст. Биёед якчанд мисоли codeро барои сохтани an objectи синфи
Person бо истифода аз усули
newInstance() синфи
java.lang.Class дида бароем :
public class Person {
private String name;
private int uid;
public Person() {
this.name = "Carl Max";
this.uid = 101;
}
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Class c = Class.forName("com.medium.option2.Person");
@SuppressWarnings("deprecation")
Person p = (Person) c.newInstance();
System.out.println("Name: " + p.getName());
System.out.println("UID: " + p.getUid());
}
}
Class.forName (номи пурраи синф) синферо бо номи
Person бор мекунад , пас
newInstance() an objectи нави навъи
Person эҷод мекунад ва истинодро ба он бармегардонад. Ҳоло, бо истифода аз истинод ба
Person ба
p , мо метавонем онро барои иҷрои амалҳои муайян
getters() ва
setter() даъват кунем. Илтимос не:
- Ҳам Class.forName() ва ҳам newIstance() истисноҳоро мепартоянд, ки бояд бо истифода аз блокҳои try and catch ё калимаи калидии throws коркард карда шаванд .
- Усули newInstance() аз API Class аз Java 9 бекор карда шудааст.
Истифодаи newInstance() аз API Constructor
Усули
newInstance()- и синфи
Constructor (
java.lang.reflect.Constructor ) ба усули
newInstance()- и синфи Class шабоҳат дорад , ба истиснои он ки он параметрҳоро барои конструкторҳои параметршуда қабул мекунад. Биёед ин равишро тавассути сохтани an objectи синфи
Person бо истифода аз усули
newInstance() синфи
java.lang.reflect.Constructor нишон диҳем :
public class PersonTwo {
private String name;
private int uid;
public PersonTwo() {
this.name = "Maya Kumari";
this.uid = 101;
}
public PersonTwo(String name) {
this.name = name;
this.uid = 102;
}
public PersonTwo(String name, Integer uid) {
this.name = name;
this.uid = uid;
}
public static void main(String[] args) {
try {
Class.forName("com.medium.option2.PersonTwo");
Constructor c1 = PersonTwo.class.getConstructor();
PersonTwo p1 = (PersonTwo) c1.newInstance();
System.out.println("Name: " + p1.getName());
System.out.println("UID: " + p1.getUid());
Constructor c2 = PersonTwo.class.getConstructor(String.class);
PersonTwo p2 = (PersonTwo) c2.newInstance("James Gunn");
System.out.println("Name: " + p2.getName());
System.out.println("UID: " + p2.getUid());
Constructor c3 = PersonTwo.class.getConstructor(String.class, Integer.class);
PersonTwo p3 = (PersonTwo) c3.newInstance("Mark Brown", 103);
System.out.println("Name: " + p3.getName());
System.out.println("UID: " + p3.getUid());
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
}
}
Дар рамзи дар боло овардашуда, аввал мо бояд синфро бо усули
Class.forName() бор кунем .
Баъдан, мо усули getConstructor()- ро даъват мекунем , то ба намудҳои додаҳои параметрҳои додашуда мувофиқат кунад. Ниҳоят, дар усули
newInstance() мо параметри заруриро мегузарем ( агар далел мавҷуд набошад,
null ). Усули
newInstance() an objectи нави синфи PersonTwo-ро тавассути занги созандаи мувофиқ бармегардонад .
Истифодаи усули clone().
Усули
clone() қисми синфи
Object буда , барои сохтани нусхаи an objectи мавҷуда истифода мешавад. Он an objectи синфро бидуни даъват ба ягон созандаи синф эҷод мекунад. Барои клон кардани усул, синфи мувофиқ бояд интерфейси
Cloneable -ро , ки интерфейси маркер аст, амалӣ карда бошад. Ҳоло мо an objectи синфи
Personро эҷод мекунем ва сипас онро ба an objectи дигари синфи
Person клон мекунем :
public class Person implements Cloneable {
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
private String name;
private int uid;
public Person(String name, int uid) {
super();
this.name = name;
this.uid = uid;
}
public static void main(String[] args) {
Person p1 = new Person("Ryan", 101);
try {
Person p2 = (Person) p1.clone();
System.out.println("Name: " + p2.getName());
System.out.println("UID: " + p2.getUid());
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
Шарҳ. Объекти клоншуда ба ҳамон an objectи аслӣ тавассути истиноди
p2 истинод мекунад . Бо вуҷуди ин, an objectи клоншуда таъиноти алоҳидаи хотира дорад. Ин маънои онро дорад, ки ҳама гуна тағйироте, ки ба an objectи
Шахсе , ки аз ҷониби p2 истинод шудааст, an objectи аслии
Personро , ки аз ҷониби
p1 истинод шудааст, тағир намедиҳад . Сабаб дар он аст, ки усули
clone() нусхаи ками an objectҳоро эҷод мекунад.
Истифодаи бесериализми an object
Десериализми an object ин раванди истихроҷи an object аз як қатор ҷараёнҳои byteӣ мебошад. Сериализатсия баръакс мекунад. Мақсади асосии он бозпас гирифтани an objectи захирашуда аз пойгоҳи додаҳо/шабака ба хотира мебошад. Агар мо хоҳем, ки an objectро сериализатсия ё ғайрисериясозӣ кунем, мо бояд интерфейси
Serializable-ро (интерфейси аломат) татбиқ кунем. Мисоли зеринро дида бароед:
public class PersonDriver {
public static void main(String[] args) {
Person p1 = new Person("Max Payne", 101);
FileOutputStream fileOutputStream;
try {
fileOutputStream = new FileOutputStream("link to text file");
ObjectOutputStream outputStream = new ObjectOutputStream(fileOutputStream);
outputStream.writeObject(p1);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
FileInputStream fileInputStream;
try {
fileInputStream = new FileInputStream("link to text file");
ObjectInputStream inputStream = new ObjectInputStream(fileInputStream);
Person p2 = (Person) inputStream.readObject();
System.out.println("Name: " + p2.getName());
System.out.println("UID: " + p2.getUid());
inputStream.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Дар ин ҷо мо аввал an objectи
Person -ро бо истинод
p1 ба файли матнӣ сериал мекунем. Усули
writeObject() ҷараёни byteи an objectро ба файли матнӣ менависад. Сипас, бо истифода аз десериализатсияи an object, мо an objectи
Шахсиро дубора ба
p2 истихроҷ мекунем . Ба ҳамин монанд, усули
readObject() an objectро аз ҷараёни вуруди an object мехонад. Дар охир, мо маълумотро аз an objectи
Person ба консол чоп мекунем.
Хулоса
Дар ин мақола мо дар бораи роҳҳои гуногуни сохтани an object дар Java фаҳмидем.
Аввалан, мо бо истифода аз калимаи нав , ки роҳи маъмултарин аст, сохтани an objectҳоро дида баромадем . Сипас, мо усули
newInstance() -ро аз синфҳои
Class ва
Constructor омӯхтем , ки ин роҳи дигари маъмули сохтани an objectҳост. Баъдан мо усули
clone()- ро истифода бурдем , ки ба ҷои сохтани an objectи нав нусхаи ками an objectи мавҷударо эҷод мекунад. Ниҳоят, мо барои сохтани an objectҳо дар Java консепсияи сериализатсия ва бесериализатсияи an objectро истифода кардем.
String to Int дар Java - чӣ гуна табдил додани сатр ба адади бутун
Сарчашма:
FreeCodeCamp Имрӯз шумо мефаҳмед, ки чӣ тавр табдил додани сатр ба адади бутун дар Java бо истифода аз ду усули синфи Integer - parseInt() ва valueOf() . Ин ба шумо ҳангоми иҷрои амалҳои математикӣ бо истифода аз арзиши тағирёбандаи сатр кӯмак мекунад.
Тарзи табдил додани сатр ба адади бутун дар Java бо истифода аз Integer.parseInt
Ин хосият тахмин мекунад, ки усули
parseInt() сатрро барои табдил додан ба адади бутун ҳамчун параметр мегирад:
Integer.parseInt(string_varaible)
Пеш аз дидани мисоли истифодаи он, биёед бубинем, ки ҳангоми илова кардани арзиши сатр ва адад бе ягон табдилдиҳӣ чӣ мешавад:
class StrToInt {
public static void main(String[] args) {
String age = "10";
System.out.println(age + 20);
}
}
Дар ин code, мо синну соли тағирёбандаро бо арзиши сатри "10" эҷод кардем .
Вақте ки мо рақами 20-ро ба арзиши бутун илова кардем, мо хато ба ҷои ҷавоби дурусти 30 1020 гирифтем. Инро бо истифода аз усули parseInt() ислоҳ кардан мумкин аст :
class StrToInt {
public static void main(String[] args) {
String age = "10";
int age_to_int = Integer.parseInt(age);
System.out.println(age_to_int + 20);
}
}
Дар ин ҷо, барои табдил додани тағирёбандаи синну сол ба адади бутун, мо онро ҳамчун параметр ба усули
parseInt() -
Integer.parseInt(age) - интиқол додем ва онро дар як тағирёбанда бо номи
age_to_int захира кардем . Ҳоло вақте ки ба бутуни дигар илова карда мешавад, мо иловаи дурустро мегирем:
age_to_int + 20 .
Чӣ тавр табдил додани сатр ба бутун дар Java бо истифода аз Integer.valueOf
Усули
valueOf() ҳамон усули
parseInt() кор мекунад . Он ҳамчун параметр сатреро мегирад, ки бояд ба адади бутун табдил дода шавад. Инак як мисол:
class StrToInt {
public static void main(String[] args) {
String age = "10";
int age_to_int = Integer.valueOf(age);
System.out.println(age_to_int + 20);
}
}
Дар codeи дар боло овардашуда шумо метавонед ҳамон чизеро, ки дар боби қаблӣ дида буд, мебинед:
- Мо сатрро ҳамчун параметр ба valueOf() гузаштем : Integer.valueOf(age) . Он дар як тағирёбанда бо номи age_to_int нигоҳ дошта шуд .
- Сипас мо ба тағирёбандаи сохташуда 10 илова кардем: age_to_int + 20 . Натича ба чои 1020 30 нафар буд.
Хулоса
Дар ин мақола мо табдил додани сатрҳоро ба ададҳои бутун дар Java баррасӣ кардем. Барои табдил додани сатр ба адади бутун ду усули синфи
Integer истифода шуданд -
parseInt() ва
valueOf() . Рамзгузории хушбахт!
GO TO FULL VERSION