Pro Java: Классы-обертки для примитивных типов

Мы уже сталкивались с классами обертками (wrapper classes) для примитивных типов, но пока не заостряли на них внимание. Сейчас же мы рассмотрим их более подробно, чтобы понять что такое методы классов и что такое поля классов.

Как вы уже знаете, в Java для хранения базовых типов данных, поддерживаемых языком, используются примитивные типы (также называемые простыми типами), такие как int или double. Примитивные типы, в отличие от объектов, используются для таких значений из соображений производительности. Применение объектов для этих значений добавляет нежелательные накладные расходы, даже в случае простейших вычислений.

Несмотря на то что примитивные типы обеспечивают выигрыш производительности, бывают случаи, когда вам может понадобиться объектное представление. Например, вы не можете передать в метод примитивный тип по ссылке. Кроме того, многие из стандартных структур данных, реализованных в Java, оперируют с объектами, что означает, что вы не можете применять эти структуры данных для сохранения примитивных типов. Чтобы справиться с такими (и подобными) ситуациями, Java предлагает обертки примитивных типов, которые представляют собой классы, помещающие примитивный тип в объект.

Обертки для примитивных типов — это Double, Float, Long, Integer, Short, Byte, Character и Boolean. Эти классы предоставляют широкий диапазон методов, позволяющий в полной мере интегрировать примитивные типы в иерархию объектных типов Java.

И далее уже рассмотрим примеры работы с методами этих классов.

По существу мы много раз использовали поле length массива args, для поучения количества его элементов. Это один из примеров работы с полями объекта класса.

Примером работы с методами класса являются строки 11 и 13.

В 11 строке мы проверяем если первый аргумент командной строки является строкой true, то тогда переменной wBoolean присваивается значение true. В ином случае оно остается равным false, как было задано при инициализации.

Пример вывода этой программы представлен ниже.

Теперь небольшой пример использования класса Character:

В данном примере использован статический метод isDigit класса Character, для определения является ли элемент массива символом или числом.

Метод isDigit возвращает true, если переданный ему как параметр тип char является числом, во всех других случаях возвращается false.

Кроме того здесь еще так же использован оператор continue, который переводит цикл на следующую итерацию, если бы его не было, то вывод в строке 15 совершался бы даже тогда, когда проверяемое значение являлось бы числом.

Класс Charaster содержит множество полезных методов и полей. Все это можно узнать из оригинальной документации.

Вывод данной программы может быть таким (зависит от аргументов командной строки):

Ну и несколько примеров с классами обертками для числовых типов:

Тут просто показано использование некоторых статических методов классов Byte и Integer, а так же использование статических полей типа MAX_VALUE.

Статический метод parseInt преобразует строку в число типа int.

Статический метод bitCount подсчитывает количество битов равных единице в переданном, как аргумент числовом типе.

Кроме этих методов и полей, у классов-оберток есть еще множество других. Поэтому, если вам понадобятся какие-либо операции над этими типами, то посмотрите сперва в стандартной библиотеке.

Данная программа генерирует следующий вывод:

На этом я думаю с этой темой закончим. Цель была познакомиться с тем, что такое методы и поля классов. Хотя пока, может, это все ясности и не добавило, но на подкорку должно было осесть.

Далее будем рассматривать массивы и строки. Все они относятся к ссылочным типам данных Java и соответственно имеют свои поля и методы. То есть мы будем еще глубже знакомиться с тем что такое объекты и с чем их едят. И затем уже перейдем непосредственно к понятию класса.

Программирование на Java — тест 13

Главная / Программирование / Программирование на Java / Тест 13

Упражнение 1:


Номер 1

Какие методы есть в классе Object?

Ответ:

&nbsp(1) public boolean equals(Object obj)&nbsp

&nbsp(2) public int notify()&nbsp

&nbsp(3) public int hashCode()&nbsp

&nbsp(4) protected Object clone()&nbsp

&nbsp(5) public boolean wait()&nbsp



Номер 2

Какие методы, необходимые для поддержки многопоточности, есть в классе Object?

Ответ:

&nbsp(1) public void synchronize()&nbsp

&nbsp(2) public void notify()&nbsp

&nbsp(3) public void notifyAll()&nbsp

&nbsp(4) public void wait()&nbsp

&nbsp(5) public void run()&nbsp



Номер 3

Какие методы есть в классе Object?

Ответ:

&nbsp(1) public String toString()&nbsp

&nbsp(2) public boolean notify()&nbsp

&nbsp(3) public final native void wait()&nbsp

&nbsp(4) public boolean finalize()&nbsp

&nbsp

(5) public void wait()&nbsp



Упражнение 2:


Номер 1

Какие утверждения относительно метода equals верны?

Ответ:

&nbsp(1) для любой объектной ссылки x, отличной от null, вызов x.

equals(x) возвращает false&nbsp

&nbsp(2) реализация этого метода в классе Object вернет true только в случае равенства по ссылке&nbsp

&nbsp(3) метод equals может быть переопределен любым способом&nbsp

&nbsp(4) для любых объектных ссылок x и y многократные последовательные вызовы x.equals(y)

возвращают одно и то же значение&nbsp

&nbsp(5) для любой не равной null объектной ссылки x вызов x.equals(null) должен вернуть значение true&nbsp



Номер 2

Какие утверждения относительно метода equals верны?

Ответ:

&nbsp(1) для любой объектной ссылки x, отличной от null, вызов x.

equals(x) возвращает true&nbsp

&nbsp(2) реализация этого метода в классе Object вернет true только в случае равенства по значению&nbsp

&nbsp(3) для любых объектных ссылок x и y, вызов x.equals(y) возвращает true только в том случае, если вызов y.equals(x) возвращает

true&nbsp

&nbsp(4) для любой не равной null объектной ссылки x вызов x.equals(null) должен вернуть значение false&nbsp



Номер 3

Какие утверждения относительно метода hashCode верны?

Ответ:

&nbsp(1) если два объекта идентичны, то есть вызов метода equals(Object)

возвращает true, то вызов метода hashCode() у каждого из этих двух объектов должен возвращать одно и то же значение&nbsp

&nbsp(2) реализация этого метода в классе Object вернет true только в случае равенства по ссылке&nbsp

&nbsp(3) метод hashCode() должен возвращать одно и то же значение между разными запусками приложения&nbsp

&nbsp

(4) во время одного запуска программы для одного объекта при вызове метода hashCode() должно возвращаться одно и то же значение, если между этими вызовами не были затронуты данные, используемые для проверки объектов на идентичность в методе equals()&nbsp

&nbsp(5) при переопределении метода equals() необходимо переопределить также метод hashCode()&nbsp



Упражнение 3:


Номер 1

В чем особенность класса-обертки для 
void
?

Ответ:

&nbsp(1) никаких отличительных особенностей нет&nbsp

&nbsp(2) этот класс, в отличие от остальных классов-оберток, не реализует интерфейс java. io.Serializable&nbsp

&nbsp(3) он не имеет открытого конструктора. Более того, экземпляр этого класса вообще не может быть получен&nbsp

&nbsp

(4) в пакете java.lang отсутствует класс java.lang.Void &nbsp



Номер 2

Для чего нужны классы-обертки?

Ответ:

&nbsp(1) использование классов-оберток ускоряет работу приложения&nbsp

&nbsp(2) при использовании коллекций нельзя использовать значения примитивных типов&nbsp

&nbsp(3) переменная класса-обертки может принимать значения null&nbsp

&nbsp(4) классы-обертки предоставляют набор статических методов для работы с примитивными типами&nbsp



Номер 3

Для каких примитивных типов Java существуют классы-обертки?

Ответ:

&nbsp(1) для всех примитивных типов, включая void&nbsp

&nbsp(2) для всех примитивных типов, кроме void&nbsp

&nbsp(3) только для числовых (byte,int,short ,float,double) и void&nbsp

&nbsp(4) только для char и void&nbsp



Упражнение 4:


Номер 1

Какие утверждения относительно класса Math верны?

Ответ:

&nbsp(1) от этого класса нельзя унаследоваться&nbsp

&nbsp(2) является абстрактным&nbsp

&nbsp(3) нельзя создать экземпляр этого класса&nbsp

&nbsp(4) содержит только статические методы&nbsp



Номер 2

Какие утверждения относительно класса String верны?

Ответ:

&nbsp(1) от этого класса можно унаследоваться&nbsp

&nbsp(2) является абстрактным&nbsp

&nbsp(3) обладает свойством неизменяемости&nbsp

&nbsp(4) содержит только статические методы&nbsp



Номер 3

Какой класс используется для представления модифицируемых строк?

Ответ:

&nbsp(1) String&nbsp

&nbsp(2) StringTokenizer&nbsp

&nbsp(3) StringBuffer&nbsp

&nbsp(4) StringEditable&nbsp

&nbsp(5) EditableString&nbsp



Упражнение 5:


Номер 1

Какие утверждения относительно класса ClassLoader верны?

Ответ:

&nbsp(1) от этого класса нельзя наследовать&nbsp

&nbsp(2) является неабстрактным&nbsp

&nbsp(3) каждый объект Class содержит ссылку на объект ClassLoader, с помощью которого он был загружен&nbsp

&nbsp(4) можно реализовать свой загрузчик, унаследовав его от ClassLoader&nbsp



Номер 2

Какой класс позволяет приложению взаимодействовать со средой исполнения?

Ответ:

&nbsp(1) ClassLoader&nbsp

&nbsp(2) Class&nbsp

&nbsp(3) System&nbsp

&nbsp(4) Runtime&nbsp

&nbsp(5) ни один из перечисленных&nbsp



Номер 3

Какой класс отвечает за загрузку описания классов в память JVM?

Ответ:

&nbsp(1) Class&nbsp

&nbsp(2) ClassLoader&nbsp

&nbsp(3) System&nbsp

&nbsp(4) Runtime&nbsp

&nbsp(5) ни один из перечисленных&nbsp



Упражнение 6:


Номер 1

Какие утверждения относительно класса Runtime верны?

Ответ:

&nbsp(1) каждому приложению Java сопоставляется экземпляр класса Runtime&nbsp

&nbsp(2) позволяет загружать классы в память&nbsp

&nbsp(3) позволяет получить данные о количестве памяти, выделенной JVM&nbsp

&nbsp(4) позволяет загружать библиотеки&nbsp

&nbsp(5) объект этого класса можно получить с помощью метода Runtime. getInstance()&nbsp



Номер 2

Какие утверждения относительно класса System верны?

Ответ:

&nbsp(1) предоставляет доступ к стандартному выводу, доступному через переменную System.out&nbsp

&nbsp(2) позволяет перенаправлять стандартный ввод&nbsp

&nbsp(3) позволяет получить все свойства, определенные в системе&nbsp

&nbsp(4) не позволяет перенаправлять поток вывода сообщений об ошибках&nbsp

&nbsp(5) некоторые методы этого класса позволяют приложению проверять, является ли операция допустимой в данном контексте&nbsp



Номер 3

Какие утверждения относительно класса Process верны?

Ответ:

&nbsp(1) является абстрактным классом&nbsp

&nbsp(2) не позволяет уничтожить запущенный процесс&nbsp

&nbsp(3) объекты этого класса получаются вызовом метода exec() у объекта Runtime, запускающего отдельный процесс&nbsp

&nbsp(4) объект этого класса может использоваться для управления процессом и получения информации о нем&nbsp



Упражнение 7:


Номер 1

Классы каких базовых исключений определены в пакете java. lang?
            

Ответ:

&nbsp(1) FatalError&nbsp

&nbsp(2) Error&nbsp

&nbsp(3) Exception&nbsp

&nbsp(4) SystemException&nbsp



Номер 2

Классы каких базовых исключений определены в пакете java.lang?
            

Ответ:

&nbsp(1) RunnableException&nbsp

&nbsp(2) Error&nbsp

&nbsp(3) Fatal&nbsp

&nbsp(4) Exception&nbsp

&nbsp(5) Throwable&nbsp



Номер 3

Какие классы, помогающие взаимодействовать с программным окружением, определены в пакете java. lang?

Ответ:

&nbsp(1) Process&nbsp

&nbsp(2) Thread&nbsp

&nbsp(3) RunnableException&nbsp

&nbsp(4) SecurityManager&nbsp

&nbsp(5) Class&nbsp



Упражнение 8:


Номер 1

Какие классы и интерфейсы, необходимые для поддержки многопоточности, определены в пакете java. lang?

Ответ:

&nbsp(1) Thread&nbsp

&nbsp(2) Runnable&nbsp

&nbsp(3) ThreadIterator&nbsp

&nbsp(4) ThreadException&nbsp

&nbsp(5) RunnableException&nbsp



Номер 2

Какие классы, необходимые для поддержки многопоточности, определены в пакете java. lang?

Ответ:

&nbsp(1) Process&nbsp

&nbsp(2) Thread&nbsp

&nbsp(3) RunnableException&nbsp

&nbsp(4) ThreadGroup&nbsp

&nbsp(5) RuntimeException&nbsp



Номер 3

Какие классы служат для представления примитивных значений в виде объектов?

Ответ:

&nbsp(1) Short&nbsp

&nbsp(2) String&nbsp

&nbsp(3) Integer&nbsp

&nbsp(4) Long&nbsp

&nbsp(5) Void&nbsp



Главная / Программирование / Программирование на Java / Тест 13

java.

lang (Java SE 9 и JDK 9 )

Предоставляет классы, которые являются фундаментальными для разработки Java. язык программирования. Наиболее важные классы Объект , являющийся корнем иерархии классов, и Класс , экземпляры которого представляют классы во время выполнения.

Часто необходимо представить значение примитива введите, как если бы это был объект. Классы-обертки Boolean , Символ , Целое число , Длинный , Плавающий , и Double служат этой цели. Объект типа Double , например, содержит поле типа double, представление этого значения таким образом, что ссылка на него может быть хранится в переменной ссылочного типа. Эти классы также обеспечивают ряд методов для преобразования между примитивными значениями, а также как поддержка таких стандартных методов, как equals и hashCode. Класс Void — это неинстансируемый класс, который содержит ссылка на Объект класса , представляющий тип void.

Класс Math предоставляет часто используемые математические функции, такие как синус, косинус и квадратный корень. Классы String , StringBuffer и StringBuilder аналогично предоставляют часто используемые операции над символьными строками.

Классы ClassLoader , Процесс , ProcessBuilder , Runtime , SecurityManager и Система обеспечивает «системные операции», которые управляют динамическим загрузка классов, создание внешних процессов, хост запросы окружающей среды, такие как время суток, и соблюдение политики безопасности.

Класс Throwable включает объекты, которые можно бросать оператором throw . Подклассы Throwable представляют ошибки и исключения.

Кодировки символов

Спецификация java.nio.charset.Charset 9Класс 0004 описывает соглашения об именах для кодировок символов, а также набор стандартных кодировок который должен поддерживаться каждой реализацией Java Платформа.

С:
1,0
  • Сводка по интерфейсу 
    Интерфейс Описание
    Добавляемый

    Объект, к которому можно добавить символьных последовательностей и значений.

    Автоматически закрывающийся

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

    Последовательность символов

    CharSequence — это читаемая последовательность из символов значений.

    Клонируемый

    Класс реализует интерфейс Cloneable для указать методу Object.clone() , что он является законным для этого метода, чтобы сделать копия экземпляров этого класса поле за полем.

    Сопоставимый

    Этот интерфейс накладывает общий порядок на объекты каждого класса, который реализует это.

    Итеративный

    Реализация этого интерфейса позволяет объекту быть целью расширенного Оператор for (иногда называемый оператором «для каждого цикла»).

    Процессхандле

    ProcessHandle идентифицирует собственные процессы и обеспечивает контроль над ними.

    Процессхандле.Информация

    Информационный снимок о процессе.

    Читаемый

    A Readable является источником символов.

    Работающий

    Интерфейс Runnable должен быть реализован любым класс, экземпляры которого предназначены для выполнения потоком.

    StackWalker.StackFrame

    Объект StackFrame представляет собой вызов метода, возвращенный StackWalker .

    Системный регистратор

    Экземпляры System.Logger регистрируют сообщения, которые будут перенаправляется в базовую структуру ведения журналов, которую использует LoggerFinder .

    Thread.UncaughtExceptionHandler

    Интерфейс для обработчиков, вызываемых при резком Thread завершается из-за неперехваченного исключения.

  • Сводка по классу 
    Класс Описание
    Логический

    Класс Boolean упаковывает значение примитивного типа логическое значение в объекте.

    Байт

    Класс Byte упаковывает значение примитивного типа byte в объекте.

    Символ

    Класс Character упаковывает значение примитива введите char в объекте.

    Символ.Подмножество

    Экземпляры этого класса представляют определенные подмножества Unicode набор символов.

    Символ.UnicodeBlock

    Семейство подмножеств символов, представляющих блоки символов в Спецификация Юникода.

    Класс <Т>

    Экземпляры класса Класс представляют классы и интерфейсы в запущенном Java-приложении.

    Загрузчик классов

    Загрузчик классов — это объект, отвечающий за загрузку классов.

    КлассЗначение

    Лениво связать вычисляемое значение с (потенциально) каждым типом.

    Компилятор Устарело, подлежит удалению: этот элемент API подлежит удалению в будущей версии.

    JIT-компиляторы и их технологии слишком сильно различаются, чтобы эффективно управляться с помощью стандартизированного интерфейса.

    Двойной

    Класс Double упаковывает значение примитивного типа двойной в объекте.

    Enum>

    Это общий базовый класс для всех типов перечисления языка Java.

    Поплавок

    Класс Float упаковывает значение примитивного типа float в объекте.

    НаследуемыйThreadLocal

    Этот класс расширяет класс ThreadLocal для обеспечения наследования значений. из родительского потока в дочерний: когда создается дочерний поток, дочерний элемент получает начальные значения для всех наследуемых локальных переменных потока для которых родитель имеет значения.

    Целое число

    Класс Integer упаковывает значение примитивного типа int в объекте.

    Длинный

    Класс Long упаковывает значение примитивного типа long в объекте.

    Математика

    Класс Math содержит методы для выполнения основных числовые операции, такие как элементарная экспонента, логарифм, квадратный корень и тригонометрические функции.

    Модуль

    Представляет модуль времени выполнения, с именем или без имени.

    Слой модуля

    Слой модулей в виртуальной машине Java.

    Модуль Слой.Контроллер

    Управляет уровнем модуля.

    Номер

    Абстрактный класс Номер является надклассом платформы классы, представляющие числовые значения, которые могут быть преобразованы в примитивные типы байт , двойной , число с плавающей запятой , int , long и short .

    Объект

    Класс Объект является корнем иерархии классов.

    Упаковка

    Представляет метаданные о пакете времени выполнения, связанном с загрузчиком классов.

    Процесс

    Процесс обеспечивает управление собственными процессами, запущенными ProcessBuilder. start и Runtime.exec.

    ProcessBuilder

    Этот класс используется для создания процессов операционной системы.

    ProcessBuilder.Redirect

    Представляет источник ввода подпроцесса или назначение вывод подпроцесса.

    Время выполнения

    Каждое приложение Java имеет один экземпляр класса Среда выполнения , которая позволяет приложению взаимодействовать с среда, в которой работает приложение.

    Среда выполнения. Версия

    Представление строки версии для реализации Платформа Java SE.

    Разрешение на выполнение

    Этот класс предназначен для разрешений во время выполнения.

    диспетчер безопасности

    Менеджер безопасности — это класс, который позволяет приложения для реализации политики безопасности.

    Короткий

    Класс Short оборачивает значение примитивного типа короткий в объекте.

    StackTraceElement

    Элемент в трассировке стека, возвращенный функцией Throwable.getStackTrace() .

    StackWalker

    Устройство для обхода стеллажей.

    Строгая математика

    Класс StrictMath содержит методы для выполнения базовых числовые операции, такие как элементарная экспонента, логарифм, квадратный корень и тригонометрические функции.

    Строка

    Класс String представляет строки символов.

    Строковый буфер

    Поточно-безопасная изменяемая последовательность символов.

    StringBuilder

    Изменяемая последовательность символов.

    Система

    Класс System содержит несколько полезных полей класса. и методы.

    System.LoggerFinder

    Служба LoggerFinder отвечает за создание, управление, и настройка регистраторов на используемую ими базовую структуру.

    Резьба

    Поток — это поток выполнения в программе.

    Группа потоков

    Группа потоков представляет набор потоков.

    ThreadLocal

    Этот класс предоставляет локальные переменные потока.

    Метательный

    Класс Throwable является надклассом всех ошибок и исключения в языке Java.

    Пустота

    Класс Void — это нереальный класс-заполнитель для хранения ссылка на объект класса , представляющий ключевое слово Java пустота.

  • Резюме перечисления 
    Перечисление Описание
    Символ.UnicodeScript

    Семейство подмножеств символов, представляющих сценарии символов. определено в Стандартное приложение Unicode № 24: Имена скриптов .

    ProcessBuilder.Redirect.Type

    Тип ProcessBuilder.Redirect .

    StackWalker.Опция

    Опция обходчика стека для настройки кадра стека информация, полученная с помощью StackWalker .

    Система.Журнал.Уровень

    Уровни системных регистраторов.

    Состояние потока

    Состояние потока.

  • Сводка исключений 
    Исключение Описание
    Арифметическое исключение

    Возникает при возникновении исключительного арифметического условия.

    ArrayIndexOutOfBoundsException

    Выброшено, чтобы указать, что к массиву был осуществлен доступ с недопустимым индексом.

    ArrayStoreException

    Выброшено, чтобы указать, что была предпринята попытка сохранить неправильный тип объекта в массив объектов.

    ClassCastException

    Выброшено, чтобы указать, что код попытался преобразовать объект к подклассу, экземпляром которого он не является.

    ClassNotFoundException

    Возникает, когда приложение пытается загрузить класс через свой имя строки с использованием: Метод forName в классе Class .

    CloneNotSupportedException

    Выброшено, чтобы указать, что метод клон в классе Объект был вызван для клонирования объекта, но это класс объекта не реализует Cloneable интерфейс.

    EnumConstantNotPresentException

    Возникает, когда приложение пытается получить доступ к константе перечисления по имени. а тип enum не содержит константы с указанным именем.

    Исключение

    Класс Исключение и его подклассы являются формой Метательный , который указывает на условия, при которых приложение может захотеть поймать.

    Исключение нелегального доступа

    Исключение IllegalAccessException возникает, когда приложение пытается для рефлексивного создания экземпляра (кроме массива), установить или получить поле или вызвать метод, но текущий исполняемый метод не имеет доступа к определению указанный класс, поле, метод или конструктор.

    Недопустимое АргументИсключение

    Выброшено, чтобы указать, что метод был передан недопустимым или неуместный аргумент.

    Недопустимое исключение

    Выброшено, чтобы указать, что метод был вызван неподходящей вызывающей стороной.

    Незаконное МониторСтатеИсключение

    Выброшено, чтобы указать, что поток попытался ожидать монитор объекта или для уведомления других потоков, ожидающих монитор, не являясь владельцем указанного монитора.

    Исключение Иллегалстатеексцептион

    Сигналы о том, что метод был вызван в недопустимом или неподходящее время.

    Недопустимое исключение ThreadStateException

    Выброшено, чтобы указать, что поток не находится в соответствующем состоянии. для запрошенной операции.

    IndexOutOfBoundsException

    Выброшено, чтобы указать, что индекс некоторого вида (например, к массиву, к строка или вектор) выходит за пределы допустимого диапазона.

    InstantiationException

    Возникает, когда приложение пытается создать экземпляр класса используя метод newInstance в классе Класс , но указанный объект класса не может быть создан.

    InterruptedException

    Генерируется, когда поток ожидает, спит или иным образом занят. и поток прерывается либо до, либо во время действия.

    LayerInstantiationException

    Возникает при сбое создания слоя модуля.

    NegativeArraySizeException

    Возникает, если приложение пытается создать массив отрицательного размера.

    NoSuchFieldException

    Сигнализирует, что в классе нет поля с указанным именем.

    NoSuchMethodException

    Вызывается, когда определенный метод не может быть найден.

    NullPointerException

    Возникает, когда приложение пытается использовать null в случае, когда требуется объект.

    NumberFormatException

    Выброшено, чтобы указать, что приложение попыталось преобразовать строку к одному из числовых типов, но эта строка не иметь соответствующий формат.

    ReflectiveOperationException

    Общий надкласс исключений, создаваемых отражающими операциями в отражение ядра.

    RuntimeException

    RuntimeException является суперклассом тех исключения, которые могут быть выброшены во время нормальной работы Виртуальная машина Java.

    Исключение безопасности

    Выброшено менеджером безопасности, чтобы указать на нарушение безопасности.

    StringIndexOutOfBoundsException

    Генерируется методами String , чтобы указать, что индекс отрицательный или больше, чем размер строки.

    TypeNotPresentException

    Возникает, когда приложение пытается получить доступ к типу с помощью строки представляющее имя типа, но не определяющее тип с можно найти указанное имя.

    UnsupportedOperationException

    Выброшено, чтобы указать, что запрошенная операция не поддерживается.

  • Сводка ошибок 
    Ошибка Описание
    AbstractMethodError

    Возникает, когда приложение пытается вызвать абстрактный метод.

    Ошибка утверждения

    Выброшено, чтобы указать, что утверждение не удалось.

    BootstrapMethodError

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

    ClassCircularityError

    Возникает, когда виртуальная машина Java обнаруживает цикличность в иерархия суперклассов загружаемого класса.

    ClassFormatError

    Возникает, когда виртуальная машина Java пытается прочитать класс файл и определяет, что файл поврежден или не может быть интерпретироваться как файл класса.

    Ошибка

    Ошибка является подклассом Throwable что указывает на серьезные проблемы, которые разумное применение не следует пытаться поймать.

    ExceptionInInitializerError

    Сигнализирует о том, что в статическом инициализаторе возникла непредвиденная исключительная ситуация.

    Незаконная ошибка доступа

    Возникает, если приложение пытается получить доступ к полю или изменить его, или для вызова метода, к которому у него нет доступа.

    НесовместимостьКлассChangeError

    Выброшено, когда в каком-то классе произошло несовместимое изменение класса определение.

    Ошибка экземпляра

    Возникает, когда приложение пытается использовать Java new конструкция для создания экземпляра абстрактного класса или интерфейса.

    Внутренняя ошибка

    Выброшено, чтобы указать на непредвиденную внутреннюю ошибку в виртуальная машина Java.

    LinkageError

    Подклассы LinkageError указывают, что класс имеет некоторая зависимость от другого класса; однако последний класс имеет несовместимо изменился после компиляции прежнего класса.

    NoClassDefFoundError

    Возникает, если виртуальная машина Java или экземпляр ClassLoader пытается загрузить определение класса (как часть обычного вызова метода или как часть создания нового экземпляра с использованием новое выражение ) и не удалось найти определение класса.

    NoSuchFieldError

    Вызывается, если приложение пытается получить доступ или изменить указанный поле объекта, и этот объект больше не имеет этого поля.

    NoSuchMethodError

    Генерируется, если приложение пытается вызвать указанный метод класс (статический или экземпляр), и этот класс больше не имеет определение этого метода.

    OutOfMemoryError

    Возникает, когда виртуальная машина Java не может выделить объект потому что это из памяти, и больше память не может быть сделана доступен сборщику мусора.

    StackOverflowError

    Возникает при переполнении стека из-за того, что приложение слишком глубоко рекурсирует.

    ThreadDeath

    Экземпляр ThreadDeath брошен в поток-жертву когда (устарело) Вызван метод Thread.stop() .

    Неизвестная ошибка

    Вызывается при возникновении неизвестного, но серьезного исключения в Виртуальная машина Java.

    Неудовлетворенная ссылкаОшибка

    Генерируется, если виртуальная машина Java не может найти подходящий объявление метода на родном языке native .

    UnsupportedClassVersionError

    Возникает, когда виртуальная машина Java пытается прочитать класс файл и определяет, что основной и дополнительный номера версий в файле не поддерживаются.

    VerifyError

    Вызывается, когда «верификатор» обнаруживает, что файл класса, хотя и хорошо сформирован, содержит некоторую внутреннюю несогласованность или проблема с безопасностью.

    Ошибка виртуальной машины

    Выброшено, чтобы указать, что виртуальная машина Java не работает или закончились ресурсы, необходимые для продолжения работы.

  • Сводка по типам аннотаций 
    Тип аннотации Описание
    Устарело

    Программный элемент с аннотацией @Deprecated — это элемент, который программисты не рекомендуется использовать.

    Функциональный интерфейс

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

    Переопределение

    Указывает, что объявление метода предназначено для переопределения объявление метода в супертипе.

    SafeVarargs

    Утверждение программиста, что тело аннотированного метода или конструктор не выполняет потенциально небезопасные операции над своим Параметр varargs.

    Подавить предупреждения

    Указывает, что указанные предупреждения компилятора должны быть подавлены в аннотированный элемент (и во всех элементах программы, содержащихся в аннотированном элемент).

java - Когда использовать класс-оболочку и примитивный тип

Когда следует использовать класс-оболочку, а не примитивные типы? Или при каких обстоятельствах я должен выбирать между типами оболочек/примитивов?

  • Java
  • оболочка
  • примитивные типы

1

Другие упоминали, что некоторые конструкции, такие как Коллекции , требуют объектов и что объекты имеют больше накладных расходов, чем их примитивные аналоги (память и упаковка).

Другое соображение:

Может быть удобно инициализировать объекты null или отправить null параметры в метод/конструктор, чтобы указать состояние или функцию. Это невозможно сделать с примитивами.

Многие программисты инициализируют числа 0 (по умолчанию) или -1, чтобы обозначить это, но в зависимости от сценария это может быть неверным или вводящим в заблуждение.

Это также установит сцену для NullPointerException , когда что-то используется неправильно, что намного удобнее для программиста, чем какая-то произвольная ошибка в будущем.

6

Как правило, вы должны использовать примитивные типы, если вам не нужен объект по какой-либо причине (например, для помещения в коллекцию). Даже в этом случае рассмотрите другой подход, который не требует объекта, если вы хотите максимизировать числовую производительность. Об этом говорится в документации, и в этой статье показано, как автоупаковка может вызвать большую разницу в производительности.

8

На мой взгляд, если члены моего класса являются переменными-оболочками, они не полагаются на значения по умолчанию, что удобно для разработчиков.

1.

 класс Лицо {
   номер SSN; // инициализируется нулем по умолчанию
}
 

2.

 класс PersonBetter {
  целочисленный SSN; // инициализируется нулем по умолчанию
}
 

В первом случае нельзя оставить значение SSN неинициализированным. Это может повредить, если вы не проверяете, было ли установлено значение, прежде чем пытаться его использовать.

Во втором случае вы можете оставить SSN инициализированным с нулевым значением. Это может привести к NullPointerException, но это лучше, чем неосознанно вставлять значения по умолчанию (ноль) в качестве SSN в базу данных всякий раз, когда вы пытаетесь использовать его без инициализации поля SSN.

1

Я бы использовал типы оболочки только в случае необходимости.

При их использовании вы не получите многого, кроме того, что они Объекты .

Кроме того, вы теряете накладные расходы на использование памяти и время, затрачиваемое на упаковку/распаковку.

2

Практически я сталкивался с ситуацией, когда можно объяснить использование класса-оболочки.

Я создал класс обслуживания с переменной типа long

  1. Если переменная имеет тип long — если она не инициализирована, ей будет присвоено значение 0 — это будет сбивать с толку пользователя при отображении в графическом интерфейсе
  2. Если переменная имеет тип Long - если она не инициализирована, она будет установлена ​​на null - это нулевое значение не будет отображаться в графическом интерфейсе.

Это относится и к Boolean , где значения могут быть более запутанными, когда мы используем примитив boolean (поскольку значение по умолчанию равно false).

Коллекции являются типичным случаем для простых объектов-оболочек Java. Однако вы можете подумать о том, чтобы придать Wrapper более конкретное значение в коде (объект значения).

ИМХО почти всегда полезно использовать объекты-значения, когда речь идет о читабельности и сопровождении кода. Обёртывание простых структур данных внутри объектов, когда у них есть определённые обязанности, часто упрощает код. Это то, что очень важно в предметно-ориентированном проектировании.

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

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

примитивных типов, один использует оператор ==, но для оболочки предпочтительным выбором является вызов метода equals().

«Примитивные типы считаются вредными», потому что они смешивают «процедурную семантику с единообразной объектно-ориентированной моделью». неверно или вводит в заблуждение

Если вы хотите использовать коллекции, вы должны использовать классы-оболочки.

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

Начиная с автоупаковки граница "когда использовать примитив или обертку" стала довольно нечеткой.

Но помните, обертки — это объекты, поэтому вы получаете все причудливые функции Java. Например, вы можете использовать рефлексию для создания объектов Integer, но не значений int. Классы-оболочки также имеют такие методы, как valueOf.

5

Когда использовать примитивные типы

  • При выполнении большого объема вычислений примитивные типы всегда быстрее — у них намного меньше накладных расходов.
  • Если вы не хотите, чтобы переменная могла иметь значение null.
  • Если вы не хотите, чтобы значение по умолчанию было нулевым.
  • Если метод должен возвращать значение

Когда использовать класс оболочки

  • При использовании коллекций или обобщений — обязательно
  • Если вы хотите MIN_SIZE или MAX_SIZE типа.
  • Если вы хотите, чтобы переменная могла принимать значение null.
  • Если вы хотите, чтобы значение по умолчанию было нулевым.
  • Если иногда метод может возвращать нулевое значение.

с https://medium.com/@bpnorlander/java-understanding-primitive-types-and-wrapper-objects-a6798fb2afe9

Если вы хотите создать тип значения. Что-то вроде ProductSKU или AirportCode.

Когда примитивный тип (строка в моих примерах) определяет равенство, вы захотите переопределить равенство.

3

Примитивные значения в Java не являются объектами.