تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 15

نام تاپيک: دستور clone تو java کارش چی هست

  1. #1
    اگه نباشه جاش خالی می مونه Cris_Y's Avatar
    تاريخ عضويت
    Apr 2007
    پست ها
    246

    پيش فرض دستور clone تو java کارش چی هست

    salam
    dastoore clone() too java che kar mikone
    yani daghighan che joori kar mikone
    bekhosoos darbareye list ha
    merci

  2. #2
    آخر فروم باز hamidreza_buddy's Avatar
    تاريخ عضويت
    Sep 2004
    محل سكونت
    شریف
    پست ها
    1,167

    پيش فرض

    قطعه برنامۀ زیر رو ببین:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    نتیجۀ این برنامه این خواهد بود:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    زیرا هر دو آرایه به یکجا اشاره می کنند (یکی هستند).
    در مواقعی لازم است که یک کپی از یک شئ به وجود آوریم که داده های آن مانند داده های شئ باشد ولی خود شئ نباشد. برای اینکار از clone() برای اینکار از clone() استفاده می کنیم.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    همون طور که انتظار دارید، خروجی به صورت زیر خواهد بود:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    البته توجه کنید که متد Clone باعث انجام یک Shallow Copy (کپی سطحی) می شود.
    در اینجا ما آرایه را از نوع int گرفتیم ولی اگر متغییر ما از نوع refrence باشد (یک شئ از یک کلاس) کمی فرق می کرد. مثلاً فرض کنید که آرایه ای از Rectangle ها (مستطیل ها) ایجاد کرده ایم. حال اگر Clone آرایه را صدا بزنیم یک آرایۀ جدید ایجاد می شود. مثلاً اگر در این آرایۀ جدید یک عنصر را حذف کنیم تغییری روی آرایۀ قدیم ایجاد نمی شود ولی اگر مثلاً طول و عرض یکی از عناصر را تغییر دهیم، این تغییر روی آرایۀ دیگر نیز اعمال می شود. زیرا دو آرایه دارند به یک شئ یکسان اشاره می کنند. به شکل زیر دقت کنید:


    شئ cloneArr1 یک shallow copy از arr1 است که بوسیلۀ متد Clone انجام شده است.
    حال اگر یکی از عناصر را به جای دیگر اشاره دهیم، cloneArr1 با arr1 متفاوت خواهد شد:


    ولی اگر که مثلاً عنصر rect1 را تغییر دهیم، این تغییر در هر دو اعمال می شود (چون هر دو به یک شئ اشاره می کنند)
    Last edited by hamidreza_buddy; 22-04-2007 at 22:28.

  3. #3
    اگه نباشه جاش خالی می مونه Cris_Y's Avatar
    تاريخ عضويت
    Apr 2007
    پست ها
    246

    پيش فرض

    merci
    hala age bekham taghir ham nakone az chi mitoonam estefadeh konam?
    dar zemn
    dar morede arraylist ha emtehan kardam didam object return mikone
    chera?
    merci

  4. #4
    آخر فروم باز hamidreza_buddy's Avatar
    تاريخ عضويت
    Sep 2004
    محل سكونت
    شریف
    پست ها
    1,167

    پيش فرض

    در جاوا برای انجام کپی عمیق (deep copy) برای ArrayList می توان به دو روش عمل کرد.
    1- دستی
    2- با استفاده از serialization

    1- روش دستی
    در این روش همۀ اعضای ArrayList را new می کنیم و در یک ArrayList دیگر می ریزیم.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    که البته در این روش کلاس A باید سازنده ای (Constructor) به صورت مناسب پیاده سازی کرده باشد.
    2- با استفاده از serialization
    در این روش شئ را یک بار درون یک OutputStream می ریزیم و سپس آن را بوسیلۀ یک InputStream می خوانیم:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    که البته کلاس باید Serializeable را پیاده سازی کرده باشد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    dar morede arraylist ha emtehan kardam didam object return mikone
    منظورتون چیه؟ چه تابعی object برمی گردونه؟

    آها راستی یه همچین کاری بکن ببین چی جواب می ده؟
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    Last edited by hamidreza_buddy; 23-04-2007 at 22:28.

  5. #5
    اگه نباشه جاش خالی می مونه Cris_Y's Avatar
    تاريخ عضويت
    Apr 2007
    پست ها
    246

    پيش فرض

    manzooram in bood ke:
    ArrayList<Integer> i=new ArrayList<Integer>();
    for (int j = 0; j < 10; j++) {
    i.add(j);
    }
    ArrayList<Integer> tep=i.clone();
    be hem error mide ke " cannot caonvert from object to arraylist<integer> " va baraye dorost shodanesh majbooram cast konam!
    chera?


  6. #6
    آخر فروم باز hamidreza_buddy's Avatar
    تاريخ عضويت
    Sep 2004
    محل سكونت
    شریف
    پست ها
    1,167

    پيش فرض

    آها
    این به خاطر اینه که این متد بین همۀ کلاس ها مشترک باشه. (به خاطر مباحث مربوط به Polymorphism)
    یعنی اینکه بدون توجه به نوع کلاس، تابع Clone کلاس رو فراخوانی کرد و کار مورد نظرو انجام داد.

    در ضمن اگه میشه فارسی بنویسید، چون انگلیسی نویسی مخالف قوانین انجمن هست هم خوندنش خیلی سخته!

  7. #7
    اگه نباشه جاش خالی می مونه Cris_Y's Avatar
    تاريخ عضويت
    Apr 2007
    پست ها
    246

    پيش فرض

    az komaketoon mamnoon
    khodam ham delam mikhad farsi type konam
    age mitoonestam hatman in kar ro mikardam
    moshkelam ine ke hamin alan bedoone hich feshare ezafe i daram process miterkoonam!!!!!
    too fc6 am
    va narmafzari ke bahash kar mikonam kheili process mibare
    betoori ke kheili vaghta hata nemitoonam terminal baz konam!!!!!
    firefox ham be zoor baze!
    bazam az in babat motasefam

  8. #8
    اگه نباشه جاش خالی می مونه Cris_Y's Avatar
    تاريخ عضويت
    Apr 2007
    پست ها
    246

    پيش فرض

    bebinid ostadam azam khaste ke clone ro rooye rooye ye class tarif konam
    mishe ye rahnamaii konin ke chejoori in kar ro konam!
    merci

  9. #9
    داره خودمونی میشه site_hamid's Avatar
    تاريخ عضويت
    Mar 2007
    محل سكونت
    Tehran
    پست ها
    169

    پيش فرض

    سلام
    دوست عزیز setareh_m_c من فکر می کنم یه همچین تاپیکی در مورد دستور static هم زده بودید. خوب بهتره که برای هر سوال یک تاپیک نزنید. همونطور که برای اون تاپیک هم گفتم اگر یه سر به اینجا بزنید شاید بهتون کمک کنه:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  10. #10
    آخر فروم باز hamidreza_buddy's Avatar
    تاريخ عضويت
    Sep 2004
    محل سكونت
    شریف
    پست ها
    1,167

    پيش فرض

    کلاس Object یک سری توابعی داره که بعتره اونا رو هنگام تعریف کلاس بازنویسی (override) کنیم.
    مثلاً clone یا tostring و یا hashcode و ...

    برای بازنویسیشون کافیه مثل تعریف متد عمل کنیم:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در بالا کلاس BackgroundThread از Thread مشتق شده. در این کلاس متد run لازم بوده که به صورت متفاوتی پیاده سازی بشه. در نتیجه اون رو بازنویسی کردیم.

    بعضی مواقع می خواهیم به جای اینکه یک متد را کامل بازنویسی کنیم، آن را توسعه دهیم. به این صورت که تابع کلاس پدر اجرا شود و ما علاوه بر آن یک سری دستور دیگر اجرا کنیم. برای همچین کاری به صورت زیر عمل می کنیم:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    توجه کنید که اگر در کلاس پدر متدی به صورت final تعریف شده باشد نمی توان آن را بازنویسی کرد. مثلاً:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اگر بخواهیم از کلاس ChessAlgorithm یک کلاس مشتق کنیم و سپس متد nextMove آنرا بازنویسی کنیم، با پیام خطای زیر مواجه می شوید:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    البته کلاس ها را هم می توان final تعریف کرد. در این صورت اصلاً نمی توان کلاسی از کلاس final مشتق کرد (مثلاً فکر کنم که کلاس string یه کلاس final باشه)

    بعضی متدها را باید حتماً در کلاس مشتق شده بازنویسی کرد. به این متدها، متدهای abstract می گویند. به کلاس هایی که چنین متدهایی دارند هم کلاس های abstract (مجرد) می گویند. زیرا نمی توان از آن هیچ گونه شئ تعریف کرد.
    مثلاً اگر کلاسی abstract باشد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در کلاس Circle که از کلاس بالا مشتق شده باید حتماً متد draw را بازنویسی کرد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    و گرنه خطا می دهد.
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] یه آموزش خوب و کامل از بازنویسی متدهای object (مخصوصاً Clone) هست.
    Last edited by hamidreza_buddy; 25-04-2007 at 21:16.

صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •