10 способов эффективно справиться с Null в Java


Оглавление (нажмите, чтобы открыть):

лучший способ проверки на значения null в java?

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

Что это лучший способ пойти об этом? Я рассмотрел эти методы. в
котором один является лучшей практики программирования на Java?

Ответ 1

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

Ответ 2

Последний и самый лучший. я.е

Потому что в логической

it is not necessary to know what the right hand side is, the result must be false

Ответ 3

В Java 8, лучший способ проверить на null:

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

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

Ответ 4
Ответ 5

Способ 4 является, несомненно, лучшим, так как он явно указывает, что будет дальше и использует минимум кода.

Способ 3 просто неправильно на каждом уровне. Вы знаете, этот пункт может быть null, так что это не исключительная ситуация, это то, что вы должны проверить.

Способ 2 это просто делает его более сложным, чем он должен быть.

Способ 1-это просто Способ 4 с дополнительной строчки кода.

Ответ 6

Я бы сказал, Способ 4 наиболее общие идиомы от кода, который я посмотрел. Но это всегда чувствует себя немного вонючий для меня. Предполагается, ФОО == null то же самое как Foo.бар() == ложь.

Это не всегда подходит мне.

Ответ 7

Способ 4-это мой предпочтительный способ. Короткого замыкания

Ответ 8

В , вы можете использовать .Добавьте импорт класса из .

Ответ 9

Если вы контролируете вызываемый API, рассмотрите возможность использования

Подробнее . Изменить свой способ вернуть вместо .

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

Ответ 10

Как уже сказал #4-лучший способ, когда не используя метод библиотеки. Однако вы всегда должны поставить нуль в левой части сравнения, чтобы убедиться, что вы не случайно присвоить значение null переменной foo в случае опечатки. В этом случае компилятор будет ловить ошибку.

Ответ 11

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

Ответ 12

Если вы собираетесь проверить с двойной знак равенства «==», затем проверить значение null ref объект как

потому что если вы ошибетесь один равны, если(объект = значение NULL), то она вернет true (назначение объекта возвращает успех (который является «истинной» стоимости).

Ответ 13

Последнее ваше предложение-лучшее.

  • It is easier to read.

  • It is safe : foo.bar() will never be executed if foo == null.
  • It prevents from bad practice such as catching NullPointerExceptions (most of the time due to a bug in your code)
  • It should execute as fast or even faster than other methods (even though I think it should be almost impossible to notice it).

    Ответ 14

    если вы не имеете доступ к библиотеке Апач Коммонс, следующий, вероятно, будет работать нормально

    Ответ 15

    Мы можем использовать объект.requireNonNull статический метод класса Object. Реализация ниже

    избегая != нулевая отчетность

    создавая утечку памяти в java

    быстрый способ определить, если целое число-это квадратный корень является целым числом

    как я могу проверить, если файл существует в java?

    Как я могу читать / конвертировать InputStream в строку в Java?

    Как проверить пустой/неопределенным/нулевым строку в JavaScript?

    как определить, если переменная ‘не определено’ или ‘null’?

    illegalargumentexception или nullpointerexception для нулевым параметром?

    является java “передача по ссылке” и “передача по значению”?

    имеет значение null проверить нужно перед вызовом оператора instanceof?

    есть ли стандартная функция для проверки на null, undefined или пустые переменные в javascript?

    логический оператор java короткого замыкания

    ява оптимизации придираться: это быстрее, чтобы бросить что-то и давай его бросать исключение, чем вызов instanceof для проверки перед бросанием?

    © 2020 — Вопросы и ответы по программированию

    Elegant Objects

    Объектно-ориентированное программирование и язык программирования EOlang

    понедельник, 22 мая 2020 г.

    Почему значение NULL это плохо?

    Public Employee getByName (String name) <
    Int > If ( > Return null;
    >
    Return new Employee (id);
    >

    Что не так с этим методом?

    Он может возвращать NULL вместо объекта — это то, что неправильно. NULL — ужасная практика в объектно-ориентированной парадигме, которой следует избегать любой ценой. Уже было опубликовано несколько мнений об этом, включая Null References, презентацию ошибки миллиардного доллара Тони Хоара и книга Дэвида Уэста «Вся мысль».

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

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

    Первый — шаблон проектирования Null Object (лучше всего сделать его константой):

    Public Employee getByName (String name) <
    Int > If ( > Return Employee.NOBODY;
    >
    Return Employee (id);
    >

    Public Employee getByName (String name) <
    Int > If ( > Throw new EmployeeNotFoundException (name);
    >
    Return Employee (id);
    >

    Теперь давайте посмотрим аргументы против NULL.

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

    Каждый раз, когда вы получаете объект как входной, вы должны проверить, является ли он NULL или действительной ссылкой на объект. Если вы забыли проверить, исключение NullPointerException (NPE) может нарушить выполнение во время выполнения. Таким образом, ваша логика становится загрязненной несколькими проверками, а также ветвлением if / then / else:

    // это ужасный дизайн, не используйте его
    Employee employee = dept.getByName («Jeffrey»);
    If (employee == null) <
    System.out.println ( «не удается найти сотрудника» );
    System.exit (-1);
    > Else <
    employee.transferTo (dept2);
    >

    Чтобы явно передать смысл, функция getByName () должна быть названа getByNameOrNullIfNotFound (). То же самое должно произойти с каждой функцией, возвращающей объект или NULL. В противном случае, двусмысленность неизбежна для считывателя кода. Таким образом, чтобы сохранить семантическую однозначность, вы должны давать более длинные имена для функций.

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

    Очевидно, что этот метод в два раза медленнее первого. Что делать?


    Интерфейс Map (без обид для его авторов) имеет недостатки дизайна. Его метод get () должен был возвращать итератор, чтобы наш код выглядел так:

    Компьютерное мышление и объектное мышление

    Утверждение if (employee == null) понимается кем-то, кто знает, что объект в Java является указателем на структуру данных и что NULL является указателем на «ничто» (0x00000000, в процессорах Intel x86).

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

    — Привет, это отдел программного обеспечения?
    — Да.
    — Позвольте мне поговорить с вашим сотрудником «Джеффри», пожалуйста.
    — Пожалуйста, не кладите трубку.
    — Здравствуйте.
    — Вы Null?

    Последний вопрос в этом разговоре звучит странно, не так ли?

    Если они повесят трубку после нашего запроса поговорить с Джеффри, это вызывает у нас проблему (исключение). В этот момент мы снова пытаемся позвонить или сообщить нашему руководителю, что мы не можем связаться с Джеффри и совершить более крупную транзакцию.

    В качестве альтернативы, они могут позволить нам поговорить с другим человеком, который не Джеффри, но который может помочь с большинством наших вопросов или отказаться от помощи, если нам потребуется что-то «специфическое для Джеффри» (объект Null).

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

    Этот аргумент близок к описанной выше «специальной обработке ошибок».

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

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

    В противном случае верните нулевой объект, который предоставляет некоторое общее поведение и генерирует исключения для всех других вызовов:

    Изменяемые и незавершенные объекты

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

    Мастер Йода рекомендует:  Кто какие курсы проходил Поделитесь опытом

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

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

    Лучший способ обработки нулей в Java? [закрыто]

    У меня есть код, который не работает из-за исключения NullPointerException. Метод вызывается для объекта, где объект не существует.

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

    11 ответов

    Если для вашего метода приемлемый параметр ввода null, исправьте метод. Если нет, исправьте звонящего. «Разумный» — это гибкий термин, поэтому я предлагаю следующий тест: Как метод должен обрабатывать нулевой ввод? Если вы найдете более одного возможного ответа, то значение null не является разумным вводом.

    Не используйте ноль, используйте необязательный

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

    Невозможно сказать, что может быть null , а что нет.

    Java 8 представляет гораздо лучший шаблон: Optional .

    И пример из Oracle:

    Если каждое из них может или не может вернуть успешное значение, вы можете изменить API на Optional s:

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

    Если вы не используете Java 8, вы можете посмотреть на com.google.common.base.Optional в Google Guava.

    Хорошее объяснение от команды Гуавы: Ссылка

    Более общее объяснение недостатков, связанных с нулем, с примерами на нескольких языках: Ссылка

    @Nonnull, @Nullable

    Java 8 добавляет эти аннотации, чтобы помочь инструментам проверки кода, таким как IDE, улавливать проблемы. Они довольно ограничены в своей эффективности.

    Проверьте, когда это имеет смысл

    Не пишите 50% кода, проверяющего ноль, особенно если нет ничего разумного, что ваш код может сделать со значением null .

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

    В конечном счете вы, очевидно, не можете удалить null из Java. Я настоятельно рекомендую заменять абстракцию Optional всякий раз, когда это возможно, и проверять null в других случаях, когда вы можете сделать что-то разумное с этим.

    Есть несколько способов справиться с этим, перетаскивание кода с if (obj != null) <> не идеально, это грязно, добавляет шум при чтении кода позже во время цикла обслуживания и подвержено ошибкам, так как легко забыть сделать это обертывание плиты котла.

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


    Что такое ноль

    В каждом определении и случае Null означает абсолютную нехватку данных. Нули в базах данных представляют отсутствие значения для этого столбца. нулевой String — это не то же самое, что пустой String , нулевой int — это не то же самое, что ZERO, в теории. На практике «это зависит». Пустой String может сделать хорошую реализацию Null Object для класса String, для Integer это зависит от бизнес-логики.

    Альтернативы:

    Шаблон Null Object . Создайте экземпляр вашего объекта, который представляет состояние null , и инициализируйте все ссылки на этот тип со ссылкой на реализацию Null . Это полезно для объектов простого типа значения, которые не имеют большого количества ссылок на другие объекты, которые также могут быть null и должны быть null в качестве допустимого состояния.

    Используйте ориентированные на аспект инструменты для создания методов с аспектом Null Checker , который предотвращает нулевые параметры. Это для случаев, когда null является ошибкой.

    Используйте assert() не намного лучше, чем if (obj != null)<> , но меньше шума.

    Используйте инструмент «Исполнение договора», например Контракты для Java . Тот же сценарий использования, что и в AspectJ, но более новый и использует аннотации вместо внешних файлов конфигурации. Лучшие из работ Аспектов и Актеров.

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

    2, 3 и 4 — просто удобные альтернативные генераторы исключений, которые заменяют NullPointerException чем-то более информативным, что всегда и является улучшением.

    В конце концов

    null в Java — почти во всех случаях логическая ошибка. Вы всегда должны стремиться устранить основную причину NullPointerExceptions . Вы должны стремиться не использовать условия null в качестве бизнес-логики. if (x == null) < i = someDefault; >просто делает начальное присвоение этому экземпляру объекта по умолчанию.

    Добавление нулевых проверок может затруднить тестирование. Посмотрите эту замечательную лекцию .

    Ознакомьтесь с лекцией Google Tech: «Чистые переговоры по коду — не ищите!» он говорит об этом около минуты 24

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

    Кроме того, когда вы создаете предварительное условие для существования какого-либо объекта такие как

    это мешает вам создать Дом, так как вы будете выдавать исключение. Предположим, что ваши тестовые примеры создают фиктивные объекты для тестирования чего-то другого, кроме Door, ну, вы не можете сделать это, потому что door требуется

    Те, кто пострадал от ада создания Насмешек, хорошо знают об этих типах раздражения.

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

    Вы всегда должны отдавать предпочтение приложениям, которые работают, потому что у вас есть несколько тестов, которые ДОКАЗЫВАЮТ, что они работают, а не НАДЕЖДА, что это работает просто потому, что у вас есть целая куча предварительных нулевых проверок повсюду

    tl; dr — ХОРОШО проверять наличие неожиданных null s, но ПЛОХО для приложения, которое пытается сделать их хорошими.

    Очевидно, что существуют ситуации, когда null является допустимым входом или выходом для метода, а другие — нет.

    The javadoc for a method that allows a null parameter or returns a null value must clearly document this, and explain what the null means.

    An API method should not be specified as accepting or returning null unless there is a good reason to do so.

    Учитывая четкую спецификацию «контракта» метода по отношению к null s, ошибка программирования передавать или возвращать null там, где вы не должны.

    An application should not attempt to «make good» programming errors.

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

    Where feasible, write your code to detect programming errors early.

    Если в вашем коде есть ошибки, приводящие к большому количеству NPE, самое сложное — выяснить, откуда взялись значения null . Один из способов облегчить диагностику — это написать свой код, чтобы null был обнаружен как можно скорее. Часто вы можете сделать это в сочетании с другими проверками; например.

    (Очевидно, что в случаях, когда правила 3 и 4 должны соответствовать реальности. Например (правило 3), некоторые виды приложений должны пытаться продолжить работу после обнаружения, вероятно, программных ошибок. И (правило 4) слишком большая проверка на плохие параметры может повлиять на производительность.)

    Я бы порекомендовал исправить метод для защиты. Например:

    Должно быть больше в соответствии с этим:

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

    Следующие общие правила, касающиеся null, мне очень помогли:

    Если данные поступают извне, систематически проверяйте наличие нулей и действуйте соответствующим образом. Это означает, что выдается исключение, которое имеет смысл для функции (проверено или не отмечено, просто убедитесь, что имя исключения точно говорит вам, что происходит.). Но НИКОГДА не позволяйте потерять значение в вашей системе, которое потенциально может принести сюрпризы.

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

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

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

    Это имеет немного параноидальную сторону в отношении нулей, часто приводящих к фасадам и прокси-серверам, которые связывают системы с внешним миром и строго контролируемые значения внутри с избыточной избыточностью. Внешний мир здесь означает почти все, что я сам не кодировал. Это требует затрат времени выполнения, но до сих пор мне редко приходилось оптимизировать это, создавая «нулевые безопасные разделы» кода. Я должен сказать, однако, что я в основном создаю долго работающие системы для здравоохранения, и последнее, что мне нужно, это интерфейсная подсистема, переносящая аллергию на йод на сканер КТ из-за неожиданного нулевого указателя, потому что кто-то в другой системе никогда не осознавал, что имена могут содержать апострофы или символы, такие как 但 耒耨。


    Значение null в java

    Скажите, что такое null в java? Пример:

    3 ответа 3

    • null — читается нал
    • означает отсутствующее значение или ссылку
    • null может быть сконвертирован (кастирован) в любой тип/класс/объект
    • нельзя создать/декларировать тип с типом null
    Мастер Йода рекомендует:  SQL — всё по этой теме для программистов

    Это значит отсутствие значения (не 0, а именно отсутствие).

    Первая ссылка в гугле по запросу «null в java».

    There is also a special null type, the type of the expression null, which has no name. Because the null type has no name, it is impossible to declare a variable of the null type or to cast to the null type. The null reference is the only possible value of an expression of null type. The null reference can always be cast to any reference type. In practice, the programmer can ignore the null type and just pretend that null is merely a special literal that can be of any reference type.

    Избегание исключения NullPointerException при проверке объекта null-null (Java) [duplicate]

    Что такое исключения Null Pointer ( java.lang.NullPointerException ) и что их вызывает?

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

    12 ответов

    Когда вы объявляете ссылочную переменную (т. е. объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа int :

    В этом примере переменная x является int , и Java инициализирует ее для 0. Когда вы назначаете его 10 во второй строке, ваше значение 10 записывается в ячейку памяти, на которую указывает x.

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

    Первая строка объявляет переменную с именем num , но она не содержит примитивного значения. Вместо этого он содержит указатель (потому что тип Integer является ссылочным типом). Поскольку вы еще не указали, что указать на Java, он устанавливает значение null, что означает «Я ничего не указываю».

    Во второй строке ключевое слово new используется для создания экземпляра (или создания ) объекту типа Integer и переменной указателя num присваивается этот объект. Теперь вы можете ссылаться на объект, используя оператор разыменования . (точка).

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

    Например, вы можете имеют следующий метод:

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

    В этом случае obj имеет значение null. Если метод предназначен для того, чтобы что-то сделать для переданного объекта, целесообразно бросить NullPointerException , потому что это ошибка программиста, и программисту понадобится эта информация для целей отладки.

    Альтернативно, там могут быть случаи, когда цель метода заключается не только в том, чтобы работать с переданным в объекте, и поэтому нулевой параметр может быть приемлемым. В этом случае вам нужно будет проверить нулевой параметр и вести себя по-другому. Вы также должны объяснить это в документации. Например, doSomething может быть записано как:

    Интересные факты о ключевом слове ‘null’ в Java

    Почти во всех языках программирования есть указатель null . Многие программисты сталкивались с проблемой из-за указателя null.

    В Java, указатель null ассоциируется с ошибкой java.lang.NullPointerException . Это класс в пакете java.lang , он вызывается когда программист пытается обратиться к объекту, который ссылается на указатель null , к примеру

    Ниже описываются некоторые важные особенности про указатель null в языке программирования Java, которые должен знать каждый программист, пишущий на Java.

    Зарезериванные ключевые слова в Java регистрозависимые

    В языке Java нельзя использоватьNULL или 0 для обозначения ссылки на указатель null , как это делается в языке C.

    Любое значение переменной ссылочного типа по умолчанию принимает значение null.

    Value of object obj is : null

    null это не объект и не тип, это специальное значение в языке Java, которое может быть присвоено любой переменной ссылочного типа.

    Автоматическое приведение ссылочного типа к примитивному типу данных может вызывать ошибку NullPointerException ,

    если ссылочное значение равно null .

    оператор instaceof , которые используетяс для тестирования принадлежности объекта к тому или иному типу/классу

    Это очень важно! Если использовать instanceof с переменной ссылочного типа, которой присвоено значение null , то результат будет false .

    Статические и не статические методы

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


    Операторы сравнения == и !=

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

    Оригинальная статья на английском доступна здесь.

    Java stream findFirst() throw null

    27.06.2020, 15:57

    Stream API — FindFirst orElse работает не верно
    Здравствуйте, не могу понять, почему stream работает не так, как задумано. Это я чего-то не.

    Информация про throw в java
    Помогите разобраться. С catch и try все понятно, а вот с throw нет. Скажите, где можно инфу.

    Stream API Java 8
    Доброго времени суток. На лабораторной работе получил задание, где необходимо использовать Stream.

    MnogoBlog

    как создать сайт на wordpress, настроить и оптимизировать wordpress

    Примеры на Java (часть 1)

    Здравствуйте, рассмотрим простые примеры на Java – как вывести на Java строчки различными способами (10 вариантов), а также решим простые математические задачки с помощью Java.

    Если у вас сломался компьютер, то стоит обратиться в Сервисный центр iT-Group: https://itg23.ru/service/repair-pc.html – профессионалы починят быстро и качественно.

    Чтобы протестировать Java код, а также скомпилировать его в jar файл, – можно воспользоваться следующим онлайн-сервисом:

    “browxy.com”

    Здесь в основное поле вводим java код – жмем кнопку “start” – смотрим на сообщение, если выходит “Finishid Ok” значит все правильно – видим результат в нижнем окошке.

    Также в данном онлайн-сервисе можно скомпилировать код в jar файл и запустить на компьютере!

    Для этого достаточно нажать кнопку “Save”, а после “Download” – и к вам на компьютер скачается jar файл, который вы сможете запустить, если у вас установлена Java.

    Более подробно об других онлайн-сервисах по редактированию и компиляции java раскажу в следующей записи.

    А теперь перейдем непосредственно к примерам на Java!

    Пример 1: Выводим на экран различными способами надпись:

    “Hello world
    5 раз”

    Решить данную задачу можно различными способами, внизу рассмотрено 10 способов:

    Способ 1:

    Способ 2:

    Способ 3:

    Способ 4:

    Способ 5:

    Способ 6:

    Способ 7:

    Способ 8:

    Способ 9:

    Способ 10:

    Пример 2: Простые математические задачи.

    Далее перейдем к решнеию простых математических задач с помощью Java, рассмотрим следующие:
    Задача 1: Программа выдает случайное число от 0 до 9.
    Задача 2: Программа в случайном порядке выдает загрузку мощности от 1 до 100 процентов.
    Задача 3: Программа выдает случайное число от 1 до 10.
    Задача 4: Программа выдает случайную дату января.
    Задача 5: Программа в случайном порядке выдает загрузку мощности от 0 до 100 процентов.
    Задача 6: Программа выводит число, введенное пользователем.
    Задача 7: Программа выводит сумму чисел, введенных пользователем.
    Задача 8: Программа выводит разность чисел, введенных пользователем.
    Задача 9: Программа выводит число, обратное числу, введенному пользователем.
    Задача 10: Программа выводит квадрат числа, введенного пользователем.

    Задача 1: Программа выдает случайное число от 0 до 9.

    Возможный вариант ответа:

    Случайное число: 5

    Задача 2: Программа в случайном порядке выдает загрузку мощности от 1 до 100 процентов.

    Возможный вариант ответа:


    Загрузка мощности: 48%

    Задача 3: Программа выдает случайное число от 1 до 10.

    Возможный вариант ответа:

    Задача 4: Программа выдает случайную дату января.

    Возможный вариант ответа:

    Задача 5: Программа в случайном порядке выдает загрузку мощности от 0 до 100 процентов.

    Возможный вариант ответа:

    Задача 6: Программа выводит число, введенное пользователем.

    Возможный вариант ответа:

    “Введите число:”
    4
    Введено число:4

    Задача 7: Программа выводит сумму чисел, введенных пользователем.

    Возможный вариант ответа:
    Сумма:18

    “Введите число:”
    3
    “Введите число:”
    15

    Задача 8: Программа выводит разность чисел, введенных пользователем.

    Возможный вариант ответа:

    “Введите число:”
    5
    “Введите число:”
    7

    Задача 9: Программа выводит число, обратное числу, введенному пользователем.

    Возможный вариант ответа:

    “Введите число:”
    5
    Обратное число:-5″

    Задача 10: Программа выводит квадрат числа, введенного пользователем.

    Возможный вариант ответа:

    “Введите число:”
    5
    Квадрат числа:25″

    Java: Исключение составляет null

    Я довольно смущен своей проблемой андроида или проблемой Java.

    Когда я отлаживал приложение для Android, которое работает с Bluetooth, поток остановился на блоке catch IOException в котором я позже обнаружил, что исключение e было null …. Это было брошено, когда я пытался читать из InputStream

    Да, это было не исключение NullPointerException а другое исключение, которое является нулевым. Лучше сказать, что он был не инициализирован.

    Является ли это возможным? В каком сценарии могут быть выбраны такие унилизированные исключения?

    Является ли это возможным? В каком сценарии могут быть выбраны такие унилизированные исключения?

    Это невозможно с использованием сопоставимого Java-компилятора и совместимой виртуальной машины Java, а также расширением совместимой виртуальной машины Davlik. JLS не допускает, чтобы переменная e была null в этом местоположении

    Либо у вас есть багги-виртуальная машина, либо багги-отладчик, либо проблема с вашей IDE, сборкой инструментов и / или процессом.

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

    Еще одна возможность, которую вы должны учитывать, состоит в том, что номера строк, которые JRE сообщает во время выполнения (и что отладчик опирается) не выстраиваются с номерами строк в исходном коде. Это может произойти, если вы допустили ошибку в процессах сборки и развертывания. Ошибка может быть чем-то вроде забывания, чтобы сохранить файл, забыть о его создании, забыв о развертывании новой версии приложения или о том, что ваша IDE не синхронизирована с файловой системой.

    Мастер Йода рекомендует:  Боремся с глобальным потеплением или AOT-компиляция в C#

    FWIW, теория состоит в том, что это вызвано выбросом throw null; Или что-то эквивалентное не удерживает воду. В разделе JLS 14.18 говорится:

    «Если оценка Expression завершается нормально, создавая нулевое значение, тогда создается экземпляр V ‘класса NullPointerException и выбрасывается вместо null».

    Легче понять, прочитаете ли вы это предложение в его контексте, но он ясно говорит о том, что throw null; На самом деле бросает NullPointerException .

    ОБНОВИТЬ

    Я нашел другое правдоподобное объяснение в этом вопросе SO: исключение всегда равно NULL

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

    Вы, вероятно, обманываете своего отладчика.

    Добавьте еще одну строку кода под этой строкой (что-то непонятное, как if(false) log.v(«»,»»); ), перерыв туда и проверьте оттуда значение вашего исключения.


    Также попробуйте Log.e(TAG, «my null exception», e); И прочитайте журнал.

    Я не уверен, что это та же проблема, но я уже ответил на аналогичный вопрос … Если это происходит, когда вы пытаетесь прочитать из InputStream, посмотрите на эту ссылку …

    Проблема с подключением Bluetooth для Android

    В Java вы можете выбросить NullPointerException , выбросив null . В этом случае бросающийся в конечном итоге будет NullPointerException .

    Что такое null в Java?

    Is null экземпляр чего-либо?

    что значит null принадлежит?

    как он представлен в памяти?

    14 ответов

    является ли null экземпляром чего-либо?

    нет, типа null это instanceof .

    15.20.2 Тип Оператора Сравнения instanceof

    во время выполнения, результат instanceof оператор true , если значение RelationalExpression не null и ссылка может быть приведена к ReferenceType без ClassCastException . В противном случае результат false .

    это означает, что для любого типа E и R , для любого E o , где o == null , o instanceof R всегда false .

    к какому набору принадлежит’ null’?

    JLS 4.1 виды типов и значений

    существует также специальный null type, тип выражения null , который не имеет имени. Потому что null тип не имеет имени, невозможно объявить переменную типа null введите или бросить в null тип. The null ссылка является единственным возможным значением выражения null тип. The null ссылка всегда может быть приведен к любому ссылочному типу. На практике, программист может игнорировать null введите и просто притворитесь, что null — это просто специальный литерал, который может иметь любую ссылку тип.

    как говорится в приведенной выше цитате JLS, на практике вы можете просто притвориться, что это»просто специальный литерал, который может быть любого ссылочного типа».

    В Java, null == null (это не всегда так на других языках). Обратите внимание также, что по договору он также имеет это специальное свойство (от java.lang.Object ):

    public boolean equals(Object obj)

    для любого не null опорное значение x , x.equals(null) должны return false .

    это тоже значение по умолчанию (для переменных, которые имеют их) для всех ссылочных типов:

    JLS 4.12.5 начальные значения переменных

    • каждая переменная класса, переменная экземпляра или компонент массива инициализируется с помощью значение по умолчанию при его создании:
      • для всех ссылочных типы, значение по умолчанию: null .

    как это зависит. Вы можете использовать его, чтобы включить то, что называется ленивая инициализация полей, где поле будет иметь начальное значение null пока он фактически не используется, где он заменяется «реальным» значением (которое может быть дорогостоящим для вычисления).

    есть и другие использует. Возьмем реальный пример из java.lang.System :

    возвращает: системная консоль, если есть, в противном случае null .

    это очень распространенный шаблон использовать: null используется для обозначения несуществования объекта.

    вот еще один пример использования, на этот раз из java.io.BufferedReader :

    public String readLine() throws IOException

    возвращает: A String содержит содержимое строки, не включая символы завершения строки, или null если достигнут конец потока.

    здесь readLine() вернутся instanceof String для каждой строки, пока наконец не возвращает null чтобы обозначить конец. Это позволяет обрабатывать каждую строку следующим образом:

    можно спроектировать API так, чтобы условие завершения не зависело от readLine() возвращение null , но можно видеть, что этот дизайн имеет преимущество делать вещи сжатым. Обратите внимание, что нет проблем с пустыми строками, потому что пустая строка «» != null .

    давайте возьмем другой пример, на этот раз с java.util.Map :

    возвращает значение, к которому сопоставлен указанный ключ, или null Если эта карта не содержит отображения для ключа.

    если эта карта позволяет null значения, возвращаемое значение null не обязательно укажите, что карта не содержит сопоставления для ключа; также возможно, что карта явно отображает ключ на null . The containsKey операция может использоваться для различения этих двух случаев.

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


    в противоположность java.util.Hashtable держит вещи проще, не разрешая null ключи и значения; its V get(Object key) , если возвращает null , однозначно означает, что ключ не привязан.

    вы можете прочитать остальную часть API и найти, где и как есть. Имейте в виду, что они не всегда лучшие практики примеры.

    вообще говоря, null используются в качестве специального значения для обозначьте:

    • государственный неинициализированные
    • условие прекращения
    • несуществующий объект
    • неизвестное значение

    как это представлено в памяти?

    В Java? Не твое дело. И так будет лучше.

    Is null хорошая вещь?

    это теперь пограничный субъективный. Некоторые говорят, что null вызывает много ошибок программиста, которых можно было бы избежать. Некоторые говорят, что на языке, который ловит NullPointerException как Java, хорошо использовать его, потому что вы будете быстро терпеть неудачу при ошибках программиста. Некоторые люди избегают null С помощью Null шаблон объекта, etc.

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

    я закончу это цитатой из изобретателя , К. А. Р. Хоар (of слава quicksort):

    я называю это своей миллиардной ошибкой. это было изобретение null ссылка в 1965 году. В то время я разрабатывал первую комплексную систему типов для ссылок на объектно-ориентированном языке (ALGOL W). Моя цель состояла в том, чтобы убедиться, что все использование ссылок должно быть абсолютно безопасным, а проверка выполняется автоматически компилятором. Но я не мог устоять перед искушением вставить:—2 ссылка, просто потому, что это было так легко осуществить. Это привело к бесчисленным ошибкам, уязвимостям и сбоям системы, которые, вероятно, причинили миллиард долларов боли и ущерба за последние сорок лет.

    на видео-презентации идет глубже; это рекомендуемые часы.

    является ли null экземпляром чего-либо?

    нет. Вот почему null instanceof X вернутся false для всех классов X . (Не обманывайтесь тем, что вы можете назначить null переменной, тип которой является типом объекта. Строго говоря, назначение включает неявное преобразование типов; см. ниже.)

    к какому набору принадлежит ‘null’?

    это один и единственный член типа null, где тип null определяется следующим образом:

    » существует также специальный тип null, тип выражения null, который не имеет имени. Поскольку тип null не имеет имени, невозможно объявить переменную типа null или привести к типу null. Ссылка null является единственным возможным значением выражения типа null. Нулевая ссылка всегда может быть приведена к любому ссылочному типу. На практике программист может игнорировать тип null и просто притворяться, что null является просто специальным литерал, который может быть любого ссылочного типа.» JLS 4.1

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

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

    что такое null?

    является ли null экземпляром чего-либо?

    нет, поскольку это ничто, это не может быть экземпляром какой-либо вещи.

    к какому набору принадлежит null?

    нет никакого набора

    как он представлен в памяти?

    Если некоторые ориентиры к нему, как:

    в памяти кучи некоторое пространство, назначенное new созданный объект. И o укажет на это место в памяти.

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

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

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

    также возможно посмотреть

    В C и C++ «NULL» — это константа, определенная в файле заголовка, со значением типа:

    в зависимости от параметров компилятора и модели памяти. NULL не является, строго говоря, частью самого C / C++.

    в Java ™ «null» — это не ключевое слово, а специальный литерал типа null. Он может быть приведен к любому ссылочному типу, но не к любому примитивному типу, такому как int или логический. Литерал null не обязательно имеет нулевое значение. И невозможно привести к нулевому типу или объявить переменную этого типа.

    null не является экземпляром какого-либо класса.

    однако вы можете назначить null переменным любого типа (объекта или массива):

    null является специальным значением, это не экземпляр ничего. По очевидной причине этого не может быть instanceof ничего.

    представление байт-кода

    в Java null имеет прямую поддержку JVM: для ее реализации используются три инструкции:

    • aconst_null : например, установить переменную в null а в Object o = null;
    • ifnull и ifnonnull : например для сравнения объекта null а в if (o == null)

    Глава 6 «Набор Инструкций Виртуальной Машины Java» затем упоминает последствия null на других инструкции: он бросает!—9 для многих из них.

    2.4. «Ссылочные типы и значения» также упоминает null в общих чертах:

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

    null — Это специальное значение, которое не является экземпляром какого-либо класса. Это иллюстрируется следующей программой:

  • Добавить комментарий