Java-da obýekt döretmegiň dürli ýollary
Çeşme:
Orta Bu gollanmada Java-da obýekt döretmegiň dürli usullaryny öwreneris. Java obýekti Java synpynyň mysalydyr. Her bir obýektiň ýagdaýy, özüni alyp barşy we kesgitleýjisi bar. Meýdanlar (üýtgeýjiler) obýektiň ýagdaýyny saklaýar, usullar (funksiýalar) obýektiň hereketini görkezýär. Sapaklar “iş meýilnamasy” bolup, iş wagtynda obýekt mysallary döredilýär.
Java-da obýekt döretmek
Obýektiň döredilmegi, synp meýdançalarynda maglumatlary saklamak üçin ýady bölmek prosesi (üýtgeýjiler hem diýilýär). Bu proses köplenç synpyň mysalyny döretmek diýilýär. Java-da obýekt döretmegiň dört dürli usuly bar:
- täze açar söz ulanyp
- usuly täzeInstance ()
- klon () usuly
- obýekti deserializasiýa etmek
Indi agzalan usullaryň hersine jikme-jik seredeliň.
Täze açar söz
Java-da obýekt döretmegiň iň ýaýran usuly.
Täze açar söz, görkezilen görnüşiň täze mysaly üçin ýady bölüp, synpyň mysalyny döredýär. Täze gelensoň, konstruktor - obýekt döretmek we döredilen obýektiň meýdanlaryny başlamak üçin jogapkär ýörite usul.
Bir obýekt täze operator bilen döredilýär we konstruktor bilen başlaýar.
Ine, täze operator bilen Java obýektini döretmegiň mysaly :
Date today = new Date();
Bu aňlatma täze
Sene obýektini döredýär (
Sene java.util paketiniň içindäki synpdyr ). Koddaky bu ýekeje söz üç amaly ýerine ýetirýär: beýannama, dessine we başlangyç.
Sene şu gün üýtgeýän beýannama bolup, düzüjä
şu gün Sene görnüşiniň obýektine degişlidigini habar berýär . Täze operator
Sene synpyny dessine ( ýatda täze
Sene obýektini döretmek), we Sene () obýekti başlaýar. Aşakdaky mysala serediň:
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());
}
}
Bu koddan
täze açar söz ulanyp,
Şahsy obýekt döredýäris :
- P1 obýekti, “Maýkl Kol” we UID 101-e düzülen üýtgeýän at bahasy bilen parametrleşdirilmedik konstruktor çagyrýar.
- P2 obýekt parametrleşdirilen konstruktory çagyrýar, ol ýerde “Jon Bodgan” we 102 bahasyny konstruktora geçirýär.Bu bahalara üýtgeýän at we UID berilýär.
NewInstance () usulyny ulanmak
Java-daky newInstance () usuly , belli bir synpyň obýektiniň mysalyny dinamiki döretmek üçin ulanylýar.
NewInstance () usulynyň iki sany standart ulanylyşy bar :
- java.lang.Class API -den newInstance () usuly
- java.lang.reflect.Constructor API -den newInstance () usuly
Class API-den newInstance () ulanmak
Iş wagty synpyň obýektini döretmek üçin, şol synpyň obýektini gaýtaryp berýän Class API-den
newInstance () usulyny çagyrmalydyrys. Java.lang.Class synpynyň
täzeInstance () usuly hiç hili parametr ýa-da argument almaýar we bu synp üçin argumentsiz konstruktor diýip atlandyryp bolar.
Java.lang.Class synpynyň
newInstance () usulyny ulanyp,
Şahsy synpyň obýektini döretmek üçin käbir mysal koduna seredeliň :
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 (synpyň doly hünärli ady)
Şahs atly bir klasy ýükleýär , soň
newInstance () adam görnüşli täze obýekt döredýär we oňa salgylanma berýär. Indi,
“Şahsyýet ” salgylanmasyny ulanyp, käbir hereketleri ýerine ýetirmek üçin
alýanlara () we
setter () çagyryp bileris . Üns beriň:
- Class.forName () we newIstance () ikisi hem synanyşyk we tutmak bloklary ýa-da açar söz atmak arkaly çözülmeli kadadan çykmalar .
- Class API-den täzeInstance () usuly Java 9-dan bäri köneldi.
Constructor API-den newInstance () ulanmak
Konstruktor synpynyň (
java.lang.reflect.Constructor ) täzeInstance () usuly , parametrleşdirilen konstruktorlaryň parametrlerini kabul edýändiginden başga,
synp synpynyň täzeInstance () usulyna meňzeýär . Geliň,
java.lang.reflect.Constructor synpynyň
newInstance () usulyny ulanyp ,
Şahsy synpyň obýektini döretmek arkaly bu çemeleşmäni görkezeliň :
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();
}
}
}
Aboveokardaky kodda ilki bilen Class.forName () usuly bilen synpy ýüklemeli . Ondan soň, geçen parametrleriň maglumat görnüşlerine gabat gelmek üçin
getConstructor () usulyny çagyrarys . Ahyrynda,
täzeInstance () usulynda zerur parametrden geçýäris ( argument ýok bolsa
null ). TäzeInstance () usuly, degişli konstruktory çagyryp,
PersonTwo synpynyň täze obýektini yzyna getirer .
Klon () usulyny ulanmak
Klon () usuly
Obýekt synpynyň bir bölegi bolup , bar bolan obýektiň göçürmesini döretmek üçin ulanylýar. Haýsydyr bir synp konstruktoryny çagyrman synpyň obýektini döredýär. Usuly klonlamak üçin degişli synp marker interfeýsi bolan
“Cloneable” interfeýsini durmuşa geçiren bolmaly. Indi Şahsy synpyň obýektini dörederis , soňra bolsa
Şahsy synpyň başga bir obýektine klonlaşdyrarys :
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();
}
}
}
Bellik.
Klonlaşdyrylan obýekt p2 salgylanmasy arkaly şol bir asyl obýekti görkezer . Şeýle-de bolsa, klonlanan obýektiň aýratyn ýat belligi bolar.
Bu, p2 salgylanylýan
Şahsy obýektde edilen islendik üýtgeşmeleriň, p1 bilen görkezilen asyl
Şahsy obýektini üýtgetmejekdigini aňladýar . Sebäbi
klon () usuly obýektleriň ýalpak nusgasyny döredýär.
Obýektiň deserializasiýasyny ulanmak
Obýektiň deserializasiýasy, bir topar baýt akymlaryndan bir jisimi çykarmak prosesi. Serializasiýa tersine. Esasy maksady, maglumatlar bazasyndan / ulgamdan saklanan obýekti ýada salmak. Bir obýekti seriallaşdyrmak ýa-da deserializasiýa etmek islesek,
Serializable interfeýsini (token interfeýsi) durmuşa geçirmeli. Aşakdaky mysala serediň:
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();
}
}
}
Bu ýerde ilki bilen p1 salgy bilen tekst faýlyna
Şahsy obýekti seriallaşdyrýarys .
WritObject () usuly obýektiň baýt akymyny tekst faýlyna ýazar. Soň bolsa, obýektiň deserializasiýasyny ulanyp,
Şahsy obýekti p2 -e çykarýarys . Edil şonuň ýaly,
readObject () usuly obýektiň giriş akymyndan bir obýekti okar.
Ahyrynda, Şahsy obýektden maglumatlary konsola çap ederis .
Netije
Bu makalada Java-da obýekt döretmegiň dürli ýollary barada öwrendik. Ilki bilen, iň giň ýaýran usul bolan
täze açar söz ulanyp obýektleri döretmäge seretdik . Soňra obýektleri döretmegiň başga bir meşhur usuly bolan
Klass we
konstruktor synplaryndan
täzeInstance () usulyny öwrendik . Soňra täze obýekt döretmegiň ýerine bar bolan obýektiň ýalňyş göçürmesini döredýän
klon () usulyny ulandyk . Ahyrynda, Java-da obýektler döretmek üçin obýektleriň seriallaşdyrylmagy we deserializasiýa düşünjesini ulandyk.
Java-da Int-a setir - setiri nädip bitewi sanlara öwürmeli
Çeşme:
FreeCodeCamp Bu gün Integer synpynyň iki usuly - parseInt () we valueOf () ulanyp, bir setiri Java-da bitewi sanlara öwürmegiň usullaryny öwrenersiňiz . Setir üýtgeýjisiniň bahasyny ulanyp, matematiki amallary ýerine ýetireniňizde bu size kömek eder.
Integer.parseInt ulanyp, setiri Java-da bitewi sanlara nädip öwürmeli
Bu opsiýa,
parseInt () usulynyň bitewi bir bitewi parametr hökmünde öwürmek üçin setir alýandygyny göz öňünde tutýar:
Integer.parseInt(string_varaible)
Ulanylyşynyň mysalyna göz aýlamazdan ozal, hiç hili öwrülişiksiz setir bahasy we bitewi san goşanyňyzda nämeleriň bolýandygyny göreliň:
class StrToInt {
public static void main(String[] args) {
String age = "10";
System.out.println(age + 20);
}
}
Bu kodda, “10” setir bahasy bilen üýtgeýän
ýaşy döretdik . 20-nji belgini bitewi baha goşanymyzda, 30-yň dogry jogabynyň ýerine ýalňyşlyk bilen 1020 aldyk. Muny parseInt
() usuly bilen düzedip bolar :
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);
}
}
Bu ýerde ýaş üýtgeýjisini bitewi sana öwürmek üçin ony parseInt () usulyna -
Integer.parseInt (ýaş) parametrine geçirdik we ony
age_to_int atly üýtgeýjide sakladyk . Indi başga bir bitewi san goşulanda dogry goşmaçany alarys:
age_to_int + 20 .
Integer.valueOf ulanyp, setiri Java-da bitewi sanlara nädip öwürmeli
ValueOf () usuly
parseInt () usuly bilen işleýär . Parametr hökmünde bitewi sanlara öwrülmeli setir gerek. Ine bir mysal:
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);
}
}
Aboveokardaky kodda, öňki bölümdäki ýaly zady görüp bilersiňiz:
- ValueOf () : Integer.valueOf (ýaş) üçin parametr hökmünde bir setir geçirdik . Age_to_int atly üýtgeýjide saklandy .
- Soňra döredilen üýtgeýjä 10 goşduk: age_to_int + 20 . Netije 1020-e derek 30 boldy.
Netije
Bu makalada setirleri Java-da bitewi sanlara öwürmek barada maslahat etdik. Setiri bitewi sanlara öwürmek üçin
Integer synpynyň iki usuly ulanyldy -
parseInt () we
valueOf () . Kodlaşdyrmak gutly bolsun!
GO TO FULL VERSION