JavaRush/Java блог/Random UA/Кава-брейк #190. Як перетворити Integer на String. Статич...

Кава-брейк #190. Як перетворити Integer на String. Статичні та нестатичні внутрішні класи в Java

Стаття з групи Random UA
учасників

Як перетворити Integer на String

Джерело: FreeCodeCamp Цей посібник підкаже вам кілька способів перетворення цілого числа (integer) у рядок (string). Кава-брейк #190.  Як перетворити Integer на String.  Статичні та нестатичні внутрішні класи в Java - 1Для перетворення змінних з одного типу даних на інший, в мові Java використовуються різні методи. У випадку з конвертацією Integer в String можна застосувати один із наведених нижче способів:
  • Використання методу Integer.toString() .
  • Використання методу String.valueOf() .
  • Використання методу String.format() .
  • Використання класу DecimalFormat .

Як перетворити ціле число в рядок на Java за допомогою Integer.toString()

Метод Integer.toString() приймає ціле число для перетворення як параметр. Приклад синтаксису:
Integer.toString(INTEGER_VARIABLE)
Приклад коду:
class IntToStr {
    public static void main(String[] args) {

        int age = 2;
        String AGE_AS_STRING = Integer.toString(age);

        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old
    }
}
У цьому прикладі ми створабо ціле число age і надали йому значення 2 . Щоб перетворити змінну age на рядок, ми передали її як параметр методу Integer.toString(): Integer.toString(age) . Потім ми зберегли це нове рядкове значення у рядковій змінній під назвою AGE_AS_STRING . І нарешті, ми об'єднали нову рядкову змінну з іншими рядками: "The child is" + AGE_AS_STRING + "years old" . Тепер виникає питання: чи виникне помилка, якщо ми просто з'єднаємо змінну age з цими іншими рядками без будь-якого перетворення?
class IntToStr {
    public static void main(String[] args) {

        int age = 2;

        System.out.println("The child is " + age + " years old");
        // The child is 2 years old
    }
}
Висновок вийшов такий самий, як і в прикладі, де нам потрібно було перетворити ціле число в рядок. Але як ми дізнаємося, чи справді перетворення типів спрацювало? І тому ми можемо перевірити типи змінних, використовуючи об'єкт getClass() . Приблизно так:
class IntToStr {
    public static void main(String[] args) {

        int age = 2;

        String AGE_AS_STRING = Integer.toString(age);


        System.out.println(((Object)age).getClass().getSimpleName());
        // Integer

        System.out.println(AGE_AS_STRING.getClass().getSimpleName());
        // String
    }
}
Тепер ми можемо переконатися, що при створенні змінної age вона була Integer , а після перетворення типу стала String .

Як перетворити ціле число в рядок на Java за допомогою String.valueOf()

Метод String.valueOf() також приймає змінну, яку потрібно перетворити на рядок, як параметр.
class IntToStr {
    public static void main(String[] args) {

        int age = 2;

        String AGE_AS_STRING = String.valueOf(age);

        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old
    }
}
Наведений вище код аналогічний коду в попередньому розділі:
  1. Ми створабо ціле число (integer) під назвою age .
  2. Ми передали ціле число age як параметр методу String.valueOf(): String.valueOf(age) .
Тепер можна перевірити, чи перетворення типів працює з використанням об'єкта getClass() :
System.out.println(((Object)age).getClass().getSimpleName());
// Integer

System.out.println(AGE_AS_STRING.getClass().getSimpleName());
// String

Як перетворити ціле число в рядок на Java за допомогою String.format()

Метод String.format() приймає два параметри: специфікатор формату і змінну, що форматується. Ось приклад:
class IntToStr {
    public static void main(String[] args) {

        int age = 2;

        String AGE_AS_STRING = String.format("%d", age);

        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old

    }
}
У цьому прикладі ми передали методу String.format() два параметри: %d і age . "%d" - це специфікатор формату, що вказує, що змінна, що форматується, є цілим числом. age , який є другим параметром, буде перетворено на рядок і збережено в змінній AGE_AS_STRING . Також можна перевірити типи змінних до та після перетворення:
System.out.println(((Object)age).getClass().getSimpleName());
// Integer

System.out.println(AGE_AS_STRING.getClass().getSimpleName());
// String

Як перетворити ціле число в рядок на Java за допомогою DecimalFormat

Клас DecimalFormat використовується для форматування десяткових чисел Java. Його можна застосовувати по-різному, але зараз ми будемо використовувати його для перетворення цілого числа на рядок. Перед вами приклад:
import java.text.DecimalFormat;

class IntToStr {
    public static void main(String[] args) {

        int age = 2;

        DecimalFormat DFormat = new DecimalFormat("#");


        String AGE_AS_STRING = DFormat.format(age);

        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old


        System.out.println(((Object)age).getClass().getSimpleName());
        // Integer

        System.out.println(AGE_AS_STRING.getClass().getSimpleName());
        // String

    }
}
Давайте розберемо цей код:
  1. Для того, щоб мати можливість використовувати клас DecimalFormat у конкретному прикладі, ми імпортували його: import java.text.DecimalFormat; .
  2. Ми створабо цілісну змінну age .
  3. Потім ми створабо новий об'єкт класу DecimalFormat під назвою DFormat .
  4. Використовуючи об'єкт методу format() , ми перетворабо age в рядок: DFormat.format(age); .

Висновок

У цій статті ми говорабо про перетворення цілих чисел у рядки Java. Ви побачабо приклади коду з використанням трьох різних методів: Integer.toString() , String.valueOf() , String.format() , а також класу DecimalFormat . У кожному з прикладів показаний процес перетворення та перевірка типу даних змінної до та після перетворення.

Статичні та нестатичні внутрішні класи в Java

Джерело: Medium Завдяки цій статті ви дізнаєтеся, в чому полягають відмінності між статичними та нестатичними внутрішніми класами в Java. У Java нестатичні внутрішні класи (non-static inner classes, також відомі як внутрішні класи чи внутрішні об'єкти) мають неявну посилання навколишній екземпляр (enclosing instance) зовнішнього класу. Це означає, що вони мають доступ до змінних примірників та методів зовнішнього класу і можуть використовуватися для створення кількох примірників внутрішнього класу, пов'язаних з різними примірниками зовнішнього класу. Давайте розглянемо наступний код:
class Outer {
    private int x;
 class Inner {
        public void printX() {
            System.out.println(x);
        }
    }
}
Outer outer1 = new Outer();
outer1.x = 5;
Outer.Inner inner1 = outer1.new Inner();
inner1.printX(); // prints 5
Outer outer2 = new Outer();
outer2.x = 10;
Outer.Inner inner2 = outer2.new Inner();
inner2.printX(); // prints 10
Тут у класу Outer є внутрішній клас Inner , який має метод printX . А він, у свою чергу, друкує значення x з навколишнього екземпляра Outer . Код створює два екземпляри Outer ( outer1 і outer2 ) і два екземпляри Inner ( inner1 і inner2 ), кожен з яких пов'язаний з різним екземпляром Outer . Коли printX викликає inner1 та inner2 , він друкує значення x з відповідного екземпляра Outer . Оскільки нестатичні внутрішні класи мають неявне посилання на екземпляр навколишній, їм потрібна додаткова пам'ять для зберігання цього посилання. Це означає, що вони менш ефективно використовують пам'ять, ніж статичні внутрішні класи, які не мають неявного посилання на екземпляр і не вимагають для цієї мети додаткової пам'яті. З іншого боку, статичні внутрішні класи не можуть отримати доступ до змінних або методів екземпляра зовнішнього класу, тому їх можливості обмежені. Вони корисні, коли ви хочете визначити клас, що тісно пов'язаний із зовнішнім класом і не потребує доступу до його змінних або методів екземпляра. Нестатичні внутрішні класи (також відомі як внутрішні класи або внутрішні об'єкти) корисні, коли ви хочете визначити клас, який тісно пов'язаний з іншим класом і має доступ до змінних екземплярів та методів зовнішнього класу.

Використання нестатичних внутрішніх класів

Ось кілька ситуацій, коли ви можете захотіти використати нестатичний внутрішній клас:
  1. Коли внутрішньому класу необхідно отримати доступ до змінних екземплярів або методів зовнішнього класу, які не є static . Оскільки нестатичні внутрішні класи мають неявне посилання на навколишній екземпляр зовнішнього класу, вони можуть безпосередньо звертатися до нестатичних змінних та методів екземпляра.

  2. Коли ви хочете визначити кілька екземплярів внутрішнього класу, пов'язаних із різними екземплярами зовнішнього класу. Наприклад, ви можете захотіти створити нестатичний внутрішній клас Button для класу Dialog , де кожен екземпляр Button пов'язаний з іншим екземпляром Dialog і може отримати доступ до змінних екземпляра та методів екземпляра Dialog .

  3. Коли ви хочете визначити клас, який використовується тільки в контексті зовнішнього класу, і не призначений для незалежного використання. Доступ до нестатичних внутрішніх класів можливий тільки із зовнішнього класу, тому вони більш інкапсульовані і менш схильні до ненавмисного використання.

Використання статичних внутрішніх класів

Ми можемо використовувати статичні внутрішні класи, якщо нам не потрібен доступ до будь-яких змінних екземплярів або методів зовнішнього класу, і тому не потрібно мати неявне посилання на навколишній екземпляр зовнішнього класу. Це робить їх більш ефективними з точки зору використання пам'яті, ніж нестатичні внутрішні класи, які мають неявне посилання на екземпляр. Припустимо, нам потрібно спроектувати графік, який містить траєкторії (edges) та точки перетину (nodes). Класи Node та Edge тісно пов'язані з класом Graph і використовуються лише в контексті об'єкта Graph . Визначення їх як статичних внутрішніх класів дає зрозуміти, що є частиною класу Graph і призначені для незалежного використання.
public class Graph {

    Map <String, Node> nodeMap;

    public Graph () {
        nodeMap = new HashMap<>();
    }

    static class Node {
        String name;
        List <Edge> edgeList;

        public Node(String name) {
            this.name = name;
            edgeList = new ArrayList();
        }
    }

    static class Edge {
        Node source;
        Node Destination;
        String type;

        public Edge(Node source, Node destination, String type) {
            this.Destination = destination;
            this.source = source;
            this.type = type;
        }
    }

}
Статичні внутрішні класи не можуть отримати доступ до змінних або методів примірника Ось приклад, що ілюструє той факт, що статичні внутрішні класи не можуть отримати доступ до змінних або методів примірника зовнішнього класу:
class Outer {
    private int x;
static class Inner {
        public void printX() {
            System.out.println(x);  // compilation error: cannot access x
        }
    }
}
У цьому прикладі клас Outer має приватну змінну екземпляра x та статичний внутрішній клас Inner . У класу Inner є метод printX , який намагається отримати доступ до значення x з навколишнього екземпляра Outer . Однак цей код не компілюватиметься, оскільки статичні внутрішні класи не можуть отримати доступ до змінних або методів екземпляра зовнішнього класу. Щоб отримати доступ до змінних примірників або методів зовнішнього класу зі статичного внутрішнього класу, ви можете:
  1. Створити змінні чи методи екземпляра static . Це дозволить внутрішньому класу звертатися до них, використовуючи ім'я зовнішнього класу (наприклад, Outer.x ).

  2. Передати екземпляр зовнішнього класу внутрішньому класу та зберегти його у полі. Потім внутрішній клас може отримати доступ до змінних примірників або методів зовнішнього класу через це поле.

Ось приклад, який показує, як це зробити:
class Outer {
    private int x;
public void setX(int x) {
        this.x = x;
    }
    static class Inner {
        Outer outer;
        public Inner(Outer outer) {
            this.outer = outer;
        }
        public void printX() {
            System.out.println(outer.x);
        }
    }
}
Outer outer = new Outer();
outer.setX(5);
Outer.Inner inner = new Outer.Inner(outer);
inner.printX();  // prints 5
У цьому прикладі у класу Outer є нестатичний метод setX , який задає значення x , і статичний внутрішній клас Inner з полем outer типу Outer . У класу Inner є конструктор, який приймає екземпляр Outer та зберігає його в полі outer . Потім метод printX класу Inner може отримати доступ до поля x екземпляра outer , використовуючи нотацію outer.x .
Коментарі
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Для цієї сторінки немає коментарів.