Урок 31: Классы-обертки примитивных типов данных. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Урок 31: Классы-обертки примитивных типов данных.



 

1. В Java переменные имеют тип.

Тип переменной определяет, какие данные могут записываться в переменную, какой объем памяти выделяется под переменную и какие операции могут выполняться с переменной.

 

2. В Java существует несколько базовых, или простых, типов данных.

- Целочисленные типы (byte, short, int и long).

- Действительные числовые типы (fl oat и double).

- Символьный тип char (значение – буква или символ).

- Логический тип boolean (два значения – true и false).

 

3. При объявлении переменной указывается тип ее значения и имя.

Одновременно с объявлением, можно переменной присвоить значение (инициализировать переменную).

Несколько переменных можно объявлять одновременно.

Объявление и инициализация переменной производится в любом месте метода, но до ее первого использования.

 

4. Константа от переменной отличается тем, что значение константы после инициализации (которая выполняется вместе с объявлением) изменить нельзя.

Константы описываются так же, как переменные, но для них указывается еще ключевое слово final.

 

5. Для базовых типов существуют классы-оболочки:

Byte, Short,Integer, Long, Float, Double, Character и Boolean соответствен-но для типов

byte, short, int, long, fl oat, double, char и boolean.

Класс-оболочка предназначен для реализации того или иного значения в виде объекта.

 

6.В отличии от примитивных типов данных у классов-оболочек имеется ряд полезных методов. В этом их главное преимущество перед примитивами!!!

Например, у класса Integer есть статический метод parseInt(), с помощью которого текст, содержащий представление целого числа, преобразуется в число.

 

7. Классы-оболочки/обёртки лежат в import java.langЮ и импортируются по умолчанию.

 

 

public class Test {
public static void main(String[] args) {
  int x = 123;
  System. out. println ("int x = 1; - " + x);
  Integer x2 = new Integer (123);
  System. out. println ("Integer x2 = new Integer (123); - " + x2);
  Integer. parseInt ("123");
  System. out. println ("Integer.parseInt (\" 123 \"); - " + Integer. parseInt ("123"));

}
}

 

 

Вывод в консоль:

 

int x = 1; - 123

Integer x2 = new Integer (123); - 123

Integer.parseInt ("123"); - 123

 

 

АвтоУпаковка и автоРаспаковка.

 

 

public class Test {
public static void main(String[] args) {
   /*
   АвтоУпаковка выглядит так:
   Integer x2 = new Integer (123);
   Но это избыточная форма упаковки.
   Лучше делать так:
   Integer x2 = 123;
   или
   Integer x2 = x;
    */
 
int x = 123;
  Integer x2 = 123;
  Integer x3 = x;
  System. out. println (" АвтоУпаковка int x = 123; - " + x);
  System. out. println (" АвтоУпаковка Integer x2 = 123; - " + x2);
  System. out. println (" АвтоУпаковка Integer x3 = x; - " + x3);

   System. out. println ();

  /*
  АвтоРаспаковка выглядит так:
   */
 
int y;
  y = x2;
   System. out. println (" АвтоРаспаковка y = x2; - " + y);
  y = x3;
   System. out. println (" АвтоРаспаковка y = x3; - " + y);

}
}

 

 

Вывод в консоль:

 

АвтоУпаковка int x = 123; - 123

АвтоУпаковка Integer x2 = 123; - 123

АвтоУпаковка Integer x3 = x; - 123

 

АвтоРаспаковка y = x2; - 123

АвтоРаспаковка y = x3; - 123

 

 

Урок 32: Восходящее и нисходящее преобразование.

 

Восходящее преобразование. public class Test {
public static void main(String[] args) {
   /*
   UPcasting - Восходящее преобразование.
   Восходящее преобразование происходит неявно,
   как long = int и double = float.
   Animal animal = new Dog ();
   Animal animal <-- new Dog ();

   Class Animal
   ^ ^ ^ ^ ^ ^
    Class Dog

   Можно записать это еще так:
   Dog dog = new Dog ();
   Animal animal = dog;
    */
  
Dog dog = new Dog ();
   Animal animal = dog;
   /*
  !!! animal не может использовать метод bark();
   animal.bark();
  !!! Ошибка
    */

   /*
   DOWNcasting - Нисходящее преобразование.
   Нисходящее преобразование происходит явно, т.е. принудительно
   как int = (int) long и float = (float) double.
   Dog dog2 = (Dog) animal;
   Dog dog2 <-- (Dog) animal;
    */
  
Dog dog2 = (Dog) animal;
    /*
   animal, преобразованная в dog может использовать метод bark();
    */
  
System. out. print ("dog2.bark (); - ");
   dog2.bark ();
}
}

 

 

Вывод в консоль:

 

dog2.bark (); - Dog is barking...

 

 

!!!ОШИБКА при нисходящем преобразовании.

 

public class Test {
public static void main(String[] args) {
   /*
   DOWNcasting - ОПАСЕН!!!
   Если мы пытаемся Объкт - Родитель преобразовать в Объект - наследник,
   В этом случае мы не изменяем Объект, а меняем ссылку на него.
    */
  
Animal animal = new Animal ();
   Dog dog = (Dog) animal;
   dog.bark ();
   /*
   Если вызвать
   dog.bark ();
   Получим ошибку, как если бы мы вызвали bark(); из animal
   animal.bark();


   Это говорит о том, что:
   - Восходящее преобразование - БЕЗОПАСНО!!!
   Собака (Dog) всегда является животным (Animal).
   Собака (Dog) всегда ест (eat();).

   -Нисходящее преобразование - НЕБЕЗОПАСНО!!!
   Животное (Animal) не всегда является Собакой (Dog).
   Животное (Animal) не всегда лает (bark();).
    */
}
}

 

 

Вывод в консоль:

 

Exception in thread "main" java.lang.ClassCastException: Animal cannot be cast to Dog

               at Test.main(Test.java:9)

 

Process finished with exit code 1

 

 



Поделиться:


Последнее изменение этой страницы: 2020-12-17; просмотров: 79; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.251.154 (0.011 с.)