Java Sinfi Ob'ektni Dinamik Xotira taqsimlash

Hey guys i java programming.I java dasturlari bilan tajriba o'tkazishga harakat qildim va nima qildim, misol o'zgaruvchisi x va keyin x ni x qiymatini nusxala yaratganman. Keyin qiymati yoki xni dalil sifatida qabul qiladigan konstruktorni aniqlab beraman. Endi y qiymatini chop qilmoqchi bo'lganimda, u qiymati 0 ga teng yoki x 5 qiymatini beradi. Nima uchun muammo yuz beradi? Biz yangi kalit so'zni va Konstruktordan foydalanganda, biz faqatgina hamma misol joylari yaratilgandan so'ng biz foydalanganimizdan so'ng o'zimizni his qilamiz

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package test;
/**
 *
 * @author Mridul
 */
public class Test {
int x;
int y=x;
Test(int a)
{
    x=a;

}
void print()
{
    System.out.println(x); 
}
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Test ob=new Test(5);
        ob.print();
        System.out.println(ob.y);


       //TODO code application logic here
    }

}

Output
5
0

Biz yangi kalit so'zni va Konstruktordan foydalanganda, biz faqatgina hamma misol joylari yaratilgandan so'ng biz foydalanganimizdan so'ng o'zimizni his qilamiz

Test ob=new Test(5); 

Shunda sinfdagi barcha kodlar (x, y = x) ishlashi kerak va bu muammo yaratmagan bo'lishi kerak. Iltimos yordam bering

0
Chunki misol maydoni boshlanishi oldin konstruktiv so'zlarini ishlatadi.
qo'shib qo'ydi muallif Seelenvirtuose, manba
Chunki misol maydoni boshlanishi oldin konstruktiv so'zlarini ishlatadi.
qo'shib qo'ydi muallif Seelenvirtuose, manba
Siz qanday mahsulotni kutmoqdasiz? Siz y kodini 10 deb hisoblaysizmi?
qo'shib qo'ydi muallif MC Emperor, manba
int uchun a bir xil replikatsiya bo'lsa, a har qanday o'zgarish = (va int x; int x = 0 ga teng kelgandan keyin) x
qo'shib qo'ydi muallif user180100, manba
qo'shib qo'ydi muallif user180100, manba
qo'shib qo'ydi muallif user180100, manba
ammo chiqishda x = 5 va y = 0 ni beradi
qo'shib qo'ydi muallif Mridul Mittal, manba
ammo chiqishda x = 5 va y = 0 ni beradi
qo'shib qo'ydi muallif Mridul Mittal, manba
lekin konstruktordan va yangi kalit so'zdan foydalanaman.
qo'shib qo'ydi muallif Mridul Mittal, manba
lekin konstruktordan va yangi kalit so'zdan foydalanaman.
qo'shib qo'ydi muallif Mridul Mittal, manba
Men y ning 5 bo'lishini kutmoqdaman
qo'shib qo'ydi muallif Mridul Mittal, manba
Men y ning 5 bo'lishini kutmoqdaman
qo'shib qo'ydi muallif Mridul Mittal, manba

8 javoblar

Bu erda:

int y=x;

bir marta </​​strong> bo'lsa, oldin sizning konstruktoringiz bajariladi.

Shunday qilib, ctor x qiymatini o'zgartiradi; Lekin y avvalgi qiymatida qoladi. (X dastlabki qiymat 0 ga teng bo'ladi, u yga kiradi va keyin ctor bajariladi va x a ning qiymatiga o'zgaradi.

Va e'tibor bering: bu "dinamik ajratish" bilan hech qanday aloqasi yo'q. new uch narsaga sabab bo'ladi:

  • xotira ajratilgan
  • yangi ob'ekt ob'ektlari init'ed
  • belgilangan konstruktor chaqirildi

(batafsil ma'lumot uchun bu yerga qarang). Agar siz y ning x kabi bir xil qiymatiga ega bo'lishini xohlasangiz; faqat qil

jamoat sinfi sinovi     yakuniy int x, y;

Test(int incoming) {
  x = incoming;
  y = incoming;
}
0
qo'shib qo'ydi

Bu erda:

int y=x;

bir marta </​​strong> bo'lsa, oldin sizning konstruktoringiz bajariladi.

Shunday qilib, ctor x qiymatini o'zgartiradi; Lekin y avvalgi qiymatida qoladi. (X dastlabki qiymat 0 ga teng bo'ladi, u yga kiradi va keyin ctor bajariladi va x a ning qiymatiga o'zgaradi.

Va e'tibor bering: bu "dinamik ajratish" bilan hech qanday aloqasi yo'q. new uch narsaga sabab bo'ladi:

  • xotira ajratilgan
  • yangi ob'ekt ob'ektlari init'ed
  • belgilangan konstruktor chaqirildi

(batafsil ma'lumot uchun bu yerga qarang). Agar siz y ning x kabi bir xil qiymatiga ega bo'lishini xohlasangiz; faqat qil

jamoat sinfi sinovi     yakuniy int x, y;

Test(int incoming) {
  x = incoming;
  y = incoming;
}
0
qo'shib qo'ydi

Agar new dan foydalangan holda konstruktorni chaqirsangiz, Java yangi ajratilgan obyektni qurishni boshlaydi. Misol maydonlaridagi qiymatlar ( x va y

  • Dastlab, namuna maydonchalari boshlanadi. x standart qiymatiga ega ( 0 ); y x qiymatini oladi.
  • So'ng, konstruktorda x qiymati a qiymatiga o'rnatiladi.

y is still 0, because it gets its value before x is set to the value of a.

0
qo'shib qo'ydi

Agar new dan foydalangan holda konstruktorni chaqirsangiz, Java yangi ajratilgan obyektni qurishni boshlaydi. Misol maydonlaridagi qiymatlar ( x va y

  • Dastlab, namuna maydonchalari boshlanadi. x standart qiymatiga ega ( 0 ); y x qiymatini oladi.
  • So'ng, konstruktorda x qiymati a qiymatiga o'rnatiladi.

y is still 0, because it gets its value before x is set to the value of a.

0
qo'shib qo'ydi

new operator is for automatic memory allocation, to allocate the needed memory for an object, you must use the new operator.

0
qo'shib qo'ydi

new operator is for automatic memory allocation, to allocate the needed memory for an object, you must use the new operator.

0
qo'shib qo'ydi

Yangi viktorina namunasini yaratganingizda, bu (tartibda) sodir bo'ladi:

int x;//x = 0
int y=x;//y = 0
Test(int a)
{
    x=a;//x = your a value
}

=> community wiki, feel free to....

0
qo'shib qo'ydi

Yangi viktorina namunasini yaratganingizda, bu (tartibda) sodir bo'ladi:

int x;//x = 0
int y=x;//y = 0
Test(int a)
{
    x=a;//x = your a value
}

=> community wiki, feel free to....

0
qo'shib qo'ydi