جاوا

جلسه ۱۰: مقادیر متنی با String و char در جاوا

class StringsAsObjects {
  public static void main(String[] args) {
    String s;
    s = "Rumplestiltskin";
    System.out.println(s.length());
    System.out.println(s.toUpperCase());
    System.out.println("The character at index 5 is: " + s.charAt(5));
    
  }

}

متدهای استاتیک و غیر استاتیک کلاس String

کد جاوا برای کلاس String در فایلی به نام String.java ذخیره شده است که کامپایلر جاوا به آن دسترسی دارد و حاوی کدهای اعلان متدهای استاتیک و غیر استاتیک String است. برای دسترسی به متدهای استاتیک کلاس String ، به یاد بیاورید که باید از نام کلاس و نام متد استفاده کنید: String.valueOf(5). به نام کلاس نیاز است زیرا ممکن است متدهای دیگری با نام valueOf وجود داشته باشد. (در واقع ، یک کلاس به نام Integer وجود دارد که دارای یک متد valueOf است.) متدهای استاتیک نیازی به دسترسی به داده های یک رشته خاص ندارند. متد استاتیک valueOf یک پارامتر می گیرد که رشته نیست و یک رشته ایجاد می کند. متدهای استاتیک دقیقاً مانند توابع در Javascript ، C یا Python هستند. جاوا فقط از کلاسها برای سازماندهی این توابع استفاده می کند. متد های غیر استاتیک به یک رشته به عنوان ورودی احتیاج دارند و به جای ارسال آن رشته به متد به صورت یک پارامتر ، از نقطه گذاری استفاده می شود: ()s.toUpperCase . ممکن است متدهای دیگری با نام toUpperCase وجود داشته باشد. جاوا می داند که کدام متد را فراخوانی کند زیرا جاوا می داند که s شی از نوع String است ، بنابراین جاوا در فایل String.java متد را جستجو می کند.

نوع داده char

برخلاف پایتون یا جاوا اسکریپت ، با استفاده از علامت براکت [ و ] نمی توانید به کاراکتر های رشته دسترسی داشته باشید. در جاوا ، علامت گذاری براکتی فقط برای آرایه ها اختصاص داده شده است و باید از متد charAt برای دسترسی به یک کاراکتر خاص از رشته استفاده کنید. charAt رشته ای را برنمی گرداند: در عوض چیزی به نام char برمی گرداند. انواع داده ها مانند int ، double و boolean در جاوا را انواع داده های ابتدایی می نامند ، زیرا متغیرهای آنها از نوع درون ساخت (built-in) هستند و برخلاف کلاس ها متد هایی داخل این نوع ها برای فراخوانی وجود ندارد. char نیز یک نوع داده ابتدایی است که نمایانگر یک کاراکتر (نویسه) واحد از متن است. اگرچه نوع داده String نیز درون ساخت است ، نوع داده String ابتدایی نیست و توسط یک کلاس ، با متدها و نمایش داخلی تعریف می شود. اشیا داده هایی را سازمان می دهند که برخی از آنها ممکن است از انواع اولیه تشکیل شده باشد. یک رشته کاراکترهای رشته را سازماندهی می کند ، که با استفاده از مقادیر char در داخل String نمایش داده می شوند. برای تمایز بین داده های String و char ، جاوا از نقل قول های منفرد (') برای char و نقل قول دوتایی (") برای String استفاده می کند:
class CharExample {
  public static void main(String[] args) {
    char character = 'Z';
    String magicWord = "XYZZY";
    
    char anotherChar = magicWord.charAt(0);

    System.out.println(character + anotherChar);
    
  }
}
کد بالا ۱۷۸ را چاپ می کند ، که ممکن است شما را متعجب کند. عملگر + رشته ها را بهم متصل می کند ، اما کاراکترها با استفاده از اعداد ، با کدی به نام Unicode تعریف می شوند. از آنجا که مقدار یونیکد X برابر ۸۸ است و مقدار یونیکد Z برابر ۹۰ است ، عملگر + این دو عدد را جمع می کند و یک int را برمی گرداند. با این حال ، می توانید یک کاراکتر را به راحتی با عملگر + به یک رشته متصل کنید ، زیرا اگر یکی از عملوندهای عملگر + رشته باشد ، این عملگر هر دو عملوند را به رشته تبدیل می کند.

رشته ها در جاوا تغییرناپذیر هستند

بعداً خواهیم دید که متغیرها در واقع اشیا را نگه نمی دارند ، بلکه ارجاعات به اشیا هستند. مرجع را می توان متغیری فرض کرد که مقدار داخل آن آدرس شی در حافظه است. یعنی متغیر شی را ذخیره نکرده است بلکه آدرس شی در حافظه را ذخیره کرده است. یک نتیجه از عبارت فوق این است که اگر شما ارجاع به یک شی را به یک متد منتقل کنید ، این متد ممکن است داده های درون آن شی را تغییر دهد. این متفاوت از انواع ابتدایی است. مثلاً اگر مقدار یک متغیر (یک عدد) را به متد sqrt منتقل کنم ، می توانم مطمئن باشم که تابع sqrt راهی برای تغییر آن متغیر ندارد: چون متد فقط مقدار متغیر را دارد ولی آدرس متغیر را ندارد. جاوا با تغییرناپذیر کردن اشیای کلاس String از تغییر رشته ها به طور تصادفی محافظت می کند. شما می توانید بدون نگرانی از تغییر رشته ، ارجاع به یک رشته را به یک متد منتقل کنید. توجه داشته باشید که متد toUpperCase که در بالا مشاهده کردیم رشته ارسال شده به آن را تغییر نمی دهد: بلکه یک رشته جدید ایجاد می کند که حروف آن بزرگ باشد و نتیجه را برمی گرداند. بنابراین ، اگرچه راهی برای بدست آوردن یک کاراکتر از یک رشته با استفاده از متد charAt وجود دارد ، اما هیچ راهی برای تغییر کاراکترهای درون یک رشته وجود ندارد: هربار که یک رشته (شی String) را تغییر می دهید درواقع آن رشته تغییر نمی کند بلکه رشته جدیدی ساخته می شود. کلاس دیگری در جاوا وجود دارد ، StringBuffer ، که در صورت نیاز به دستکاری کارآمد آرایه های کاراکتری ، مفید است. به عنوان مثال ، اگر در حال نوشتن یک ویرایشگر متن هستید ، ممکن است از StringBuffer برای ذخیره داده های متنی استفاده کنید.
class StringExampleOne {
  public static void main(String args[]) {
    String myFavoriteNumber;
    int x = 42;
    
    myFavoriteNumber = String.valueOf(x);
    
    System.out.println("My favorite number is " + myFavoriteNumber + ".");
    
  }

}

رشته ها اشیایی از کلاس String هستند

یک کلاس در جاوا شامل کدهای متدها است ، اما همچنین به شما امکان می دهد آنچه را که یک شی (object) از آن کلاس نامیده می شود ایجاد کنید. از جمله اینکه ، یک شی ساختاری در حافظه است که مقادیر را ذخیره می کند. یک شی String داده ها را ذخیره می کند: مقدار هر کاراکتر در رشته ، و همچنین طول رشته. برخی از کارهایی که می توانید با اشیا انجام دهید عبارتند از:
    1. برای ذخیره ارجاع به یک شی از کلاس ، یک متغیر را اعلام کنید: String s.
    2. یک شی (object) جدید از آن نوع ایجاد کنید: ;"s = "Amani رشته ها تا حدودی در جاوا خاص هستند. سایر انواع اشیا با استفاده از روش های متفاوتی ایجاد می شوند.
    3. با استفاده از علامت گذاری نقطه برای دسترسی به متغیرهای نمونه داخل شی ، داده ها را از شی (object) بخوانید یا تغییر دهید. در جاوا ، کلاس String متغیرهای نمونه مفید زیادی ندارند ، بنابراین این کاربرد را در سایر کلاس ها خواهیم دید.
    4. فراخوانی متدهای غیر استاتیک روی یک شی. این متدها چون غیر استاتیک هستند به داده های درون شی دسترسی دارند: ;System.out.println (s.toUpperCase ())
class StringsAsObjects {
  public static void main(String[] args) {
    String s;
    s = "Rumplestiltskin";
    System.out.println(s.length());
    System.out.println(s.toUpperCase());
    System.out.println("The character at index 5 is: " + s.charAt(5));
    
  }

}

متدهای استاتیک و غیر استاتیک کلاس String

کد جاوا برای کلاس String در فایلی به نام String.java ذخیره شده است که کامپایلر جاوا به آن دسترسی دارد و حاوی کدهای اعلان متدهای استاتیک و غیر استاتیک String است. برای دسترسی به متدهای استاتیک کلاس String ، به یاد بیاورید که باید از نام کلاس و نام متد استفاده کنید: String.valueOf(5). به نام کلاس نیاز است زیرا ممکن است متدهای دیگری با نام valueOf وجود داشته باشد. (در واقع ، یک کلاس به نام Integer وجود دارد که دارای یک متد valueOf است.) متدهای استاتیک نیازی به دسترسی به داده های یک رشته خاص ندارند. متد استاتیک valueOf یک پارامتر می گیرد که رشته نیست و یک رشته ایجاد می کند. متدهای استاتیک دقیقاً مانند توابع در Javascript ، C یا Python هستند. جاوا فقط از کلاسها برای سازماندهی این توابع استفاده می کند. متد های غیر استاتیک به یک رشته به عنوان ورودی احتیاج دارند و به جای ارسال آن رشته به متد به صورت یک پارامتر ، از نقطه گذاری استفاده می شود: ()s.toUpperCase . ممکن است متدهای دیگری با نام toUpperCase وجود داشته باشد. جاوا می داند که کدام متد را فراخوانی کند زیرا جاوا می داند که s شی از نوع String است ، بنابراین جاوا در فایل String.java متد را جستجو می کند.

نوع داده char

برخلاف پایتون یا جاوا اسکریپت ، با استفاده از علامت براکت [ و ] نمی توانید به کاراکتر های رشته دسترسی داشته باشید. در جاوا ، علامت گذاری براکتی فقط برای آرایه ها اختصاص داده شده است و باید از متد charAt برای دسترسی به یک کاراکتر خاص از رشته استفاده کنید. charAt رشته ای را برنمی گرداند: در عوض چیزی به نام char برمی گرداند. انواع داده ها مانند int ، double و boolean در جاوا را انواع داده های ابتدایی می نامند ، زیرا متغیرهای آنها از نوع درون ساخت (built-in) هستند و برخلاف کلاس ها متد هایی داخل این نوع ها برای فراخوانی وجود ندارد. char نیز یک نوع داده ابتدایی است که نمایانگر یک کاراکتر (نویسه) واحد از متن است. اگرچه نوع داده String نیز درون ساخت است ، نوع داده String ابتدایی نیست و توسط یک کلاس ، با متدها و نمایش داخلی تعریف می شود. اشیا داده هایی را سازمان می دهند که برخی از آنها ممکن است از انواع اولیه تشکیل شده باشد. یک رشته کاراکترهای رشته را سازماندهی می کند ، که با استفاده از مقادیر char در داخل String نمایش داده می شوند. برای تمایز بین داده های String و char ، جاوا از نقل قول های منفرد (') برای char و نقل قول دوتایی (") برای String استفاده می کند:
class CharExample {
  public static void main(String[] args) {
    char character = 'Z';
    String magicWord = "XYZZY";
    
    char anotherChar = magicWord.charAt(0);

    System.out.println(character + anotherChar);
    
  }
}
کد بالا ۱۷۸ را چاپ می کند ، که ممکن است شما را متعجب کند. عملگر + رشته ها را بهم متصل می کند ، اما کاراکترها با استفاده از اعداد ، با کدی به نام Unicode تعریف می شوند. از آنجا که مقدار یونیکد X برابر ۸۸ است و مقدار یونیکد Z برابر ۹۰ است ، عملگر + این دو عدد را جمع می کند و یک int را برمی گرداند. با این حال ، می توانید یک کاراکتر را به راحتی با عملگر + به یک رشته متصل کنید ، زیرا اگر یکی از عملوندهای عملگر + رشته باشد ، این عملگر هر دو عملوند را به رشته تبدیل می کند.

رشته ها در جاوا تغییرناپذیر هستند

بعداً خواهیم دید که متغیرها در واقع اشیا را نگه نمی دارند ، بلکه ارجاعات به اشیا هستند. مرجع را می توان متغیری فرض کرد که مقدار داخل آن آدرس شی در حافظه است. یعنی متغیر شی را ذخیره نکرده است بلکه آدرس شی در حافظه را ذخیره کرده است. یک نتیجه از عبارت فوق این است که اگر شما ارجاع به یک شی را به یک متد منتقل کنید ، این متد ممکن است داده های درون آن شی را تغییر دهد. این متفاوت از انواع ابتدایی است. مثلاً اگر مقدار یک متغیر (یک عدد) را به متد sqrt منتقل کنم ، می توانم مطمئن باشم که تابع sqrt راهی برای تغییر آن متغیر ندارد: چون متد فقط مقدار متغیر را دارد ولی آدرس متغیر را ندارد. جاوا با تغییرناپذیر کردن اشیای کلاس String از تغییر رشته ها به طور تصادفی محافظت می کند. شما می توانید بدون نگرانی از تغییر رشته ، ارجاع به یک رشته را به یک متد منتقل کنید. توجه داشته باشید که متد toUpperCase که در بالا مشاهده کردیم رشته ارسال شده به آن را تغییر نمی دهد: بلکه یک رشته جدید ایجاد می کند که حروف آن بزرگ باشد و نتیجه را برمی گرداند. بنابراین ، اگرچه راهی برای بدست آوردن یک کاراکتر از یک رشته با استفاده از متد charAt وجود دارد ، اما هیچ راهی برای تغییر کاراکترهای درون یک رشته وجود ندارد: هربار که یک رشته (شی String) را تغییر می دهید درواقع آن رشته تغییر نمی کند بلکه رشته جدیدی ساخته می شود. کلاس دیگری در جاوا وجود دارد ، StringBuffer ، که در صورت نیاز به دستکاری کارآمد آرایه های کاراکتری ، مفید است. به عنوان مثال ، اگر در حال نوشتن یک ویرایشگر متن هستید ، ممکن است از StringBuffer برای ذخیره داده های متنی استفاده کنید.
class Fixme {
  public static void main(String args[]) {
    String greeting;
    greeting = "hello";
    System.out.println(greeting);
    System.out.println(hello);
    System.out.println("greeting");
    System.out.println("hello");
  }
}

String یک کلاس است

هر یک از برنامه های جاوا که تاکنون مشاهده کرده اید به عنوان یک کلاس منفرد تعریف شده است که شامل برخی متدها است. یک کلاس در جاوا دو هدف دارد:
  1. کلاس مجموعه ای از متدها است که شما می توانید آنها را فراخوانی کنید.
  2. کلاس یک نوع داده سفارشی را تعریف می کند و می تواند برای ساخت اشیایی از آن کلاس (یا آن نوع) استفاده شود.
کلاس String هر دوی این اهداف را برآورده می کند: این کلاس برخی متدهای مفید برای رشته ها را ارائه می دهد و نوع داده String را تعریف می کند که می توانید برای ساخت اشیای رشته ای از آن استفاده کنید. بیایید ابتدا به اولین کاربرد نگاه کنیم. کلاس String در یک فایل از جاوا به نام String.java قرار دارد. که داخل آن چندین متد استاتیک است. با استفاده از قالب ()Classname.methodname می توانید متد استاتیک یک کلاس را فراخوانی کنید. توجه کنید که برخلاف متدهای غیراستاتیک ، قبل از علامت نقطه نام کلاس است و نام شی نیست. معمولاً قبل از استفاده از متدهای استاتیک یک کلاس ، باید آن کلاس را وارد (import) کنید ، که بعداً نحوه انجام آن را خواهیم دید ، اما String کلاسی خاص و درون ساخت (built-in) است.

متد استاتیک String.valueOf

به عنوان مثالی از یک متد استاتیک در کلاس String ، بیایید به متد valueOf نگاهی بیندازیم. این متد یک پارامتر را می گیرد ، که ممکن است به عنوان مثال double ، int یا boolean باشد. سپس یک نمایش رشته ای از آن پارامتر را ساخته و برمی گرداند. در کد زیر این متد را در عمل می بینید:
class StringExampleOne {
  public static void main(String args[]) {
    String myFavoriteNumber;
    int x = 42;
    
    myFavoriteNumber = String.valueOf(x);
    
    System.out.println("My favorite number is " + myFavoriteNumber + ".");
    
  }

}

رشته ها اشیایی از کلاس String هستند

یک کلاس در جاوا شامل کدهای متدها است ، اما همچنین به شما امکان می دهد آنچه را که یک شی (object) از آن کلاس نامیده می شود ایجاد کنید. از جمله اینکه ، یک شی ساختاری در حافظه است که مقادیر را ذخیره می کند. یک شی String داده ها را ذخیره می کند: مقدار هر کاراکتر در رشته ، و همچنین طول رشته. برخی از کارهایی که می توانید با اشیا انجام دهید عبارتند از:
    1. برای ذخیره ارجاع به یک شی از کلاس ، یک متغیر را اعلام کنید: String s.
    2. یک شی (object) جدید از آن نوع ایجاد کنید: ;"s = "Amani رشته ها تا حدودی در جاوا خاص هستند. سایر انواع اشیا با استفاده از روش های متفاوتی ایجاد می شوند.
    3. با استفاده از علامت گذاری نقطه برای دسترسی به متغیرهای نمونه داخل شی ، داده ها را از شی (object) بخوانید یا تغییر دهید. در جاوا ، کلاس String متغیرهای نمونه مفید زیادی ندارند ، بنابراین این کاربرد را در سایر کلاس ها خواهیم دید.
    4. فراخوانی متدهای غیر استاتیک روی یک شی. این متدها چون غیر استاتیک هستند به داده های درون شی دسترسی دارند: ;System.out.println (s.toUpperCase ())
class StringsAsObjects {
  public static void main(String[] args) {
    String s;
    s = "Rumplestiltskin";
    System.out.println(s.length());
    System.out.println(s.toUpperCase());
    System.out.println("The character at index 5 is: " + s.charAt(5));
    
  }

}

متدهای استاتیک و غیر استاتیک کلاس String

کد جاوا برای کلاس String در فایلی به نام String.java ذخیره شده است که کامپایلر جاوا به آن دسترسی دارد و حاوی کدهای اعلان متدهای استاتیک و غیر استاتیک String است. برای دسترسی به متدهای استاتیک کلاس String ، به یاد بیاورید که باید از نام کلاس و نام متد استفاده کنید: String.valueOf(5). به نام کلاس نیاز است زیرا ممکن است متدهای دیگری با نام valueOf وجود داشته باشد. (در واقع ، یک کلاس به نام Integer وجود دارد که دارای یک متد valueOf است.) متدهای استاتیک نیازی به دسترسی به داده های یک رشته خاص ندارند. متد استاتیک valueOf یک پارامتر می گیرد که رشته نیست و یک رشته ایجاد می کند. متدهای استاتیک دقیقاً مانند توابع در Javascript ، C یا Python هستند. جاوا فقط از کلاسها برای سازماندهی این توابع استفاده می کند. متد های غیر استاتیک به یک رشته به عنوان ورودی احتیاج دارند و به جای ارسال آن رشته به متد به صورت یک پارامتر ، از نقطه گذاری استفاده می شود: ()s.toUpperCase . ممکن است متدهای دیگری با نام toUpperCase وجود داشته باشد. جاوا می داند که کدام متد را فراخوانی کند زیرا جاوا می داند که s شی از نوع String است ، بنابراین جاوا در فایل String.java متد را جستجو می کند.

نوع داده char

برخلاف پایتون یا جاوا اسکریپت ، با استفاده از علامت براکت [ و ] نمی توانید به کاراکتر های رشته دسترسی داشته باشید. در جاوا ، علامت گذاری براکتی فقط برای آرایه ها اختصاص داده شده است و باید از متد charAt برای دسترسی به یک کاراکتر خاص از رشته استفاده کنید. charAt رشته ای را برنمی گرداند: در عوض چیزی به نام char برمی گرداند. انواع داده ها مانند int ، double و boolean در جاوا را انواع داده های ابتدایی می نامند ، زیرا متغیرهای آنها از نوع درون ساخت (built-in) هستند و برخلاف کلاس ها متد هایی داخل این نوع ها برای فراخوانی وجود ندارد. char نیز یک نوع داده ابتدایی است که نمایانگر یک کاراکتر (نویسه) واحد از متن است. اگرچه نوع داده String نیز درون ساخت است ، نوع داده String ابتدایی نیست و توسط یک کلاس ، با متدها و نمایش داخلی تعریف می شود. اشیا داده هایی را سازمان می دهند که برخی از آنها ممکن است از انواع اولیه تشکیل شده باشد. یک رشته کاراکترهای رشته را سازماندهی می کند ، که با استفاده از مقادیر char در داخل String نمایش داده می شوند. برای تمایز بین داده های String و char ، جاوا از نقل قول های منفرد (') برای char و نقل قول دوتایی (") برای String استفاده می کند:
class CharExample {
  public static void main(String[] args) {
    char character = 'Z';
    String magicWord = "XYZZY";
    
    char anotherChar = magicWord.charAt(0);

    System.out.println(character + anotherChar);
    
  }
}
کد بالا ۱۷۸ را چاپ می کند ، که ممکن است شما را متعجب کند. عملگر + رشته ها را بهم متصل می کند ، اما کاراکترها با استفاده از اعداد ، با کدی به نام Unicode تعریف می شوند. از آنجا که مقدار یونیکد X برابر ۸۸ است و مقدار یونیکد Z برابر ۹۰ است ، عملگر + این دو عدد را جمع می کند و یک int را برمی گرداند. با این حال ، می توانید یک کاراکتر را به راحتی با عملگر + به یک رشته متصل کنید ، زیرا اگر یکی از عملوندهای عملگر + رشته باشد ، این عملگر هر دو عملوند را به رشته تبدیل می کند.

رشته ها در جاوا تغییرناپذیر هستند

بعداً خواهیم دید که متغیرها در واقع اشیا را نگه نمی دارند ، بلکه ارجاعات به اشیا هستند. مرجع را می توان متغیری فرض کرد که مقدار داخل آن آدرس شی در حافظه است. یعنی متغیر شی را ذخیره نکرده است بلکه آدرس شی در حافظه را ذخیره کرده است. یک نتیجه از عبارت فوق این است که اگر شما ارجاع به یک شی را به یک متد منتقل کنید ، این متد ممکن است داده های درون آن شی را تغییر دهد. این متفاوت از انواع ابتدایی است. مثلاً اگر مقدار یک متغیر (یک عدد) را به متد sqrt منتقل کنم ، می توانم مطمئن باشم که تابع sqrt راهی برای تغییر آن متغیر ندارد: چون متد فقط مقدار متغیر را دارد ولی آدرس متغیر را ندارد. جاوا با تغییرناپذیر کردن اشیای کلاس String از تغییر رشته ها به طور تصادفی محافظت می کند. شما می توانید بدون نگرانی از تغییر رشته ، ارجاع به یک رشته را به یک متد منتقل کنید. توجه داشته باشید که متد toUpperCase که در بالا مشاهده کردیم رشته ارسال شده به آن را تغییر نمی دهد: بلکه یک رشته جدید ایجاد می کند که حروف آن بزرگ باشد و نتیجه را برمی گرداند. بنابراین ، اگرچه راهی برای بدست آوردن یک کاراکتر از یک رشته با استفاده از متد charAt وجود دارد ، اما هیچ راهی برای تغییر کاراکترهای درون یک رشته وجود ندارد: هربار که یک رشته (شی String) را تغییر می دهید درواقع آن رشته تغییر نمی کند بلکه رشته جدیدی ساخته می شود. کلاس دیگری در جاوا وجود دارد ، StringBuffer ، که در صورت نیاز به دستکاری کارآمد آرایه های کاراکتری ، مفید است. به عنوان مثال ، اگر در حال نوشتن یک ویرایشگر متن هستید ، ممکن است از StringBuffer برای ذخیره داده های متنی استفاده کنید.متغیری که برای نگهداری مقادیر رشته ای در جاوا استفاده می شود ، نوع String دارد. داده های رشته ای ، وقتی داخل نقل قول ها در کد تایپ می شوند ، یک رشته literal (لفظی) نامیده می شوند و جاوا آن را به عنوان داده رشته ای تفسیر می کند ، و نه به عنوان کد. کد زیر چه چیزی چاپ می کند؟ آیا خطایی در کد وجود دارد؟ اگر خطایی دارد آن را اصلاح کنید:
class Fixme {
  public static void main(String args[]) {
    String greeting;
    greeting = "hello";
    System.out.println(greeting);
    System.out.println(hello);
    System.out.println("greeting");
    System.out.println("hello");
  }
}

String یک کلاس است

هر یک از برنامه های جاوا که تاکنون مشاهده کرده اید به عنوان یک کلاس منفرد تعریف شده است که شامل برخی متدها است. یک کلاس در جاوا دو هدف دارد:
  1. کلاس مجموعه ای از متدها است که شما می توانید آنها را فراخوانی کنید.
  2. کلاس یک نوع داده سفارشی را تعریف می کند و می تواند برای ساخت اشیایی از آن کلاس (یا آن نوع) استفاده شود.
کلاس String هر دوی این اهداف را برآورده می کند: این کلاس برخی متدهای مفید برای رشته ها را ارائه می دهد و نوع داده String را تعریف می کند که می توانید برای ساخت اشیای رشته ای از آن استفاده کنید. بیایید ابتدا به اولین کاربرد نگاه کنیم. کلاس String در یک فایل از جاوا به نام String.java قرار دارد. که داخل آن چندین متد استاتیک است. با استفاده از قالب ()Classname.methodname می توانید متد استاتیک یک کلاس را فراخوانی کنید. توجه کنید که برخلاف متدهای غیراستاتیک ، قبل از علامت نقطه نام کلاس است و نام شی نیست. معمولاً قبل از استفاده از متدهای استاتیک یک کلاس ، باید آن کلاس را وارد (import) کنید ، که بعداً نحوه انجام آن را خواهیم دید ، اما String کلاسی خاص و درون ساخت (built-in) است.

متد استاتیک String.valueOf

به عنوان مثالی از یک متد استاتیک در کلاس String ، بیایید به متد valueOf نگاهی بیندازیم. این متد یک پارامتر را می گیرد ، که ممکن است به عنوان مثال double ، int یا boolean باشد. سپس یک نمایش رشته ای از آن پارامتر را ساخته و برمی گرداند. در کد زیر این متد را در عمل می بینید:
class StringExampleOne {
  public static void main(String args[]) {
    String myFavoriteNumber;
    int x = 42;
    
    myFavoriteNumber = String.valueOf(x);
    
    System.out.println("My favorite number is " + myFavoriteNumber + ".");
    
  }

}

رشته ها اشیایی از کلاس String هستند

یک کلاس در جاوا شامل کدهای متدها است ، اما همچنین به شما امکان می دهد آنچه را که یک شی (object) از آن کلاس نامیده می شود ایجاد کنید. از جمله اینکه ، یک شی ساختاری در حافظه است که مقادیر را ذخیره می کند. یک شی String داده ها را ذخیره می کند: مقدار هر کاراکتر در رشته ، و همچنین طول رشته. برخی از کارهایی که می توانید با اشیا انجام دهید عبارتند از:
    1. برای ذخیره ارجاع به یک شی از کلاس ، یک متغیر را اعلام کنید: String s.
    2. یک شی (object) جدید از آن نوع ایجاد کنید: ;"s = "Amani رشته ها تا حدودی در جاوا خاص هستند. سایر انواع اشیا با استفاده از روش های متفاوتی ایجاد می شوند.
    3. با استفاده از علامت گذاری نقطه برای دسترسی به متغیرهای نمونه داخل شی ، داده ها را از شی (object) بخوانید یا تغییر دهید. در جاوا ، کلاس String متغیرهای نمونه مفید زیادی ندارند ، بنابراین این کاربرد را در سایر کلاس ها خواهیم دید.
    4. فراخوانی متدهای غیر استاتیک روی یک شی. این متدها چون غیر استاتیک هستند به داده های درون شی دسترسی دارند: ;System.out.println (s.toUpperCase ())
class StringsAsObjects {
  public static void main(String[] args) {
    String s;
    s = "Rumplestiltskin";
    System.out.println(s.length());
    System.out.println(s.toUpperCase());
    System.out.println("The character at index 5 is: " + s.charAt(5));
    
  }

}

متدهای استاتیک و غیر استاتیک کلاس String

کد جاوا برای کلاس String در فایلی به نام String.java ذخیره شده است که کامپایلر جاوا به آن دسترسی دارد و حاوی کدهای اعلان متدهای استاتیک و غیر استاتیک String است. برای دسترسی به متدهای استاتیک کلاس String ، به یاد بیاورید که باید از نام کلاس و نام متد استفاده کنید: String.valueOf(5). به نام کلاس نیاز است زیرا ممکن است متدهای دیگری با نام valueOf وجود داشته باشد. (در واقع ، یک کلاس به نام Integer وجود دارد که دارای یک متد valueOf است.) متدهای استاتیک نیازی به دسترسی به داده های یک رشته خاص ندارند. متد استاتیک valueOf یک پارامتر می گیرد که رشته نیست و یک رشته ایجاد می کند. متدهای استاتیک دقیقاً مانند توابع در Javascript ، C یا Python هستند. جاوا فقط از کلاسها برای سازماندهی این توابع استفاده می کند. متد های غیر استاتیک به یک رشته به عنوان ورودی احتیاج دارند و به جای ارسال آن رشته به متد به صورت یک پارامتر ، از نقطه گذاری استفاده می شود: ()s.toUpperCase . ممکن است متدهای دیگری با نام toUpperCase وجود داشته باشد. جاوا می داند که کدام متد را فراخوانی کند زیرا جاوا می داند که s شی از نوع String است ، بنابراین جاوا در فایل String.java متد را جستجو می کند.

نوع داده char

برخلاف پایتون یا جاوا اسکریپت ، با استفاده از علامت براکت [ و ] نمی توانید به کاراکتر های رشته دسترسی داشته باشید. در جاوا ، علامت گذاری براکتی فقط برای آرایه ها اختصاص داده شده است و باید از متد charAt برای دسترسی به یک کاراکتر خاص از رشته استفاده کنید. charAt رشته ای را برنمی گرداند: در عوض چیزی به نام char برمی گرداند. انواع داده ها مانند int ، double و boolean در جاوا را انواع داده های ابتدایی می نامند ، زیرا متغیرهای آنها از نوع درون ساخت (built-in) هستند و برخلاف کلاس ها متد هایی داخل این نوع ها برای فراخوانی وجود ندارد. char نیز یک نوع داده ابتدایی است که نمایانگر یک کاراکتر (نویسه) واحد از متن است. اگرچه نوع داده String نیز درون ساخت است ، نوع داده String ابتدایی نیست و توسط یک کلاس ، با متدها و نمایش داخلی تعریف می شود. اشیا داده هایی را سازمان می دهند که برخی از آنها ممکن است از انواع اولیه تشکیل شده باشد. یک رشته کاراکترهای رشته را سازماندهی می کند ، که با استفاده از مقادیر char در داخل String نمایش داده می شوند. برای تمایز بین داده های String و char ، جاوا از نقل قول های منفرد (') برای char و نقل قول دوتایی (") برای String استفاده می کند:
class CharExample {
  public static void main(String[] args) {
    char character = 'Z';
    String magicWord = "XYZZY";
    
    char anotherChar = magicWord.charAt(0);

    System.out.println(character + anotherChar);
    
  }
}
کد بالا ۱۷۸ را چاپ می کند ، که ممکن است شما را متعجب کند. عملگر + رشته ها را بهم متصل می کند ، اما کاراکترها با استفاده از اعداد ، با کدی به نام Unicode تعریف می شوند. از آنجا که مقدار یونیکد X برابر ۸۸ است و مقدار یونیکد Z برابر ۹۰ است ، عملگر + این دو عدد را جمع می کند و یک int را برمی گرداند. با این حال ، می توانید یک کاراکتر را به راحتی با عملگر + به یک رشته متصل کنید ، زیرا اگر یکی از عملوندهای عملگر + رشته باشد ، این عملگر هر دو عملوند را به رشته تبدیل می کند.

رشته ها در جاوا تغییرناپذیر هستند

بعداً خواهیم دید که متغیرها در واقع اشیا را نگه نمی دارند ، بلکه ارجاعات به اشیا هستند. مرجع را می توان متغیری فرض کرد که مقدار داخل آن آدرس شی در حافظه است. یعنی متغیر شی را ذخیره نکرده است بلکه آدرس شی در حافظه را ذخیره کرده است. یک نتیجه از عبارت فوق این است که اگر شما ارجاع به یک شی را به یک متد منتقل کنید ، این متد ممکن است داده های درون آن شی را تغییر دهد. این متفاوت از انواع ابتدایی است. مثلاً اگر مقدار یک متغیر (یک عدد) را به متد sqrt منتقل کنم ، می توانم مطمئن باشم که تابع sqrt راهی برای تغییر آن متغیر ندارد: چون متد فقط مقدار متغیر را دارد ولی آدرس متغیر را ندارد. جاوا با تغییرناپذیر کردن اشیای کلاس String از تغییر رشته ها به طور تصادفی محافظت می کند. شما می توانید بدون نگرانی از تغییر رشته ، ارجاع به یک رشته را به یک متد منتقل کنید. توجه داشته باشید که متد toUpperCase که در بالا مشاهده کردیم رشته ارسال شده به آن را تغییر نمی دهد: بلکه یک رشته جدید ایجاد می کند که حروف آن بزرگ باشد و نتیجه را برمی گرداند. بنابراین ، اگرچه راهی برای بدست آوردن یک کاراکتر از یک رشته با استفاده از متد charAt وجود دارد ، اما هیچ راهی برای تغییر کاراکترهای درون یک رشته وجود ندارد: هربار که یک رشته (شی String) را تغییر می دهید درواقع آن رشته تغییر نمی کند بلکه رشته جدیدی ساخته می شود. کلاس دیگری در جاوا وجود دارد ، StringBuffer ، که در صورت نیاز به دستکاری کارآمد آرایه های کاراکتری ، مفید است. به عنوان مثال ، اگر در حال نوشتن یک ویرایشگر متن هستید ، ممکن است از StringBuffer برای ذخیره داده های متنی استفاده کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا