“Умирает, является Потрясающим” предпочтенный?

Объекты имеют методы и атрибуты (переменные), которые производятся от классов, чтобы указать, какие методы и переменные принадлежат определенному объекту, используется зарезервированное слово this. в случае переменных экземпляра важно понять разницу между неявными и явными параметрами. Взгляните на вызов fillTank для объекта audi.

Car audi= new Car();

audi.fillTank(5); // 5 is the explicit parameter and the car object is the implicit parameter 

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

Давайте подробнее рассмотрим метод fillTank в классе Car

public class Car()
{
   private double tank;

   public Car()
   {
      tank = 0;
   }

   public void fillTank(double gallons)
   {
      tank = tank + gallons;
   }

}

. В этом классе мы имеем переменную экземпляра «tank». Может быть много объектов, которые используют переменную экземпляра резервуара, чтобы указать, что переменная экземпляра «tank» используется для определенного объекта, в нашем случае объект «audi», который мы создали ранее, мы используем ключевое слово this reserved , например, переменные, использование «этого» в методе указывает, что переменная экземпляра в нашем случае «tank» является переменной экземпляра неявного параметра.

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

В заключение.

  • Объекты определены классами и имеют методы и переменные
  • Использование this для переменной экземпляра в методе указывает, что переменная экземпляра принадлежит неявному параметру или что она является переменной экземпляра неявного параметра.
  • Неявный параметр - это объект, из которого в этом случае вызывается метод «audi».
  • Компилятор java автоматически добавляет это зарезервированное слово, добавляя, что это вопрос предпочтения
  • this не может использоваться без точки (.), это синтаксически недействительно
  • this также может использоваться для различения локальных переменных и глобальных переменных, имеющих одно и то же имя
  • зарезервированное слово this также применяется к методам, чтобы указать, что метод принадлежит определенному объекту.
18
задан Brian 25 February 2009 в 12:01
поделиться

16 ответов

Я думаю, что это зависит от того, какое приложение Вы запускаете и каковы последствия 'смерти'. Для многих клиентских приложений смерть является потрясающей. Для серверов, часто не так (и ласточка-и-журнал является соответствующим). Нет никакого единого решения.

38
ответ дан 30 November 2019 в 05:38
поделиться

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

, С другой стороны - я думаю, что люди добираются до разбитого за целыми "исключениями, злой" менталитет. Они - инструмент, и, если используется соответственно, могут иметь удивительные льготы. Однако многие люди неправильно используют их путем обертывания корня с выгодой (Исключение)..

0
ответ дан 30 November 2019 в 05:38
поделиться

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

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

  • , новые сервисы окон обеспечивают ту функцию, когда Вы регистрируетесь в MS.
  • установка drwatson может также собрать данные (файлы дампа), чтобы Ваши пользователи отправили Вам вручную.

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

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

0
ответ дан 30 November 2019 в 05:38
поделиться

Потрясающие ответы здесь уже, особенно Simucal. Я просто хочу добавить точку:

Наступательное программирование превосходно для отладки. По моему опыту, "перестали работать рано, часто перестали работать", может думаться так же как поставление капканов на ошибки в Вашем коде. Когда что-то спутывается - является ли это утечкой памяти, память топают, неожиданный ПУСТОЙ УКАЗАТЕЛЬ, etc. - обычно намного легче видеть проблему, если программа сразу перестала работать (со связанными отладочными данными, такими как стек вызовов).

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

Иногда у Вас может быть он оба пути. Я имею, часто писал код C вдоль следующих строк:

void foo(char* data) {
    ASSERT(data);
    if (!data) { return; }
    // ... work with data
}

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

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

1
ответ дан 30 November 2019 в 05:38
поделиться

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

, Например, если Вы пишете оперативную торговую систему, и существует неожиданная ошибка, Вы - более обеспеченное разрешение ей отказать. Иначе Ваша программа могла бы продолжать идти и сделать глупые отрасли. Пользователи будут жаловаться сразу же "WTF?", но по крайней мере Вы не теряете миллионы долларов.

1
ответ дан 30 November 2019 в 05:38
поделиться

Я говорю, что у Вас должен всегда быть корневой ловец исключения... Особенно, если можно приспособить некоторую информацию в исключении, говорящем, что пошло не так, как надо, код или что-то, и распечатайте его пользователю. Затем пользователь может всегда спрашивать Вас (или поддержка или безотносительно), что пошло не так, как надо, и обеспечьте некоторую информацию. вместо "его отказал с отказом резервирования"

1
ответ дан 30 November 2019 в 05:38
поделиться

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

Однако я просто не позволил бы исключению пойти. Поймайте его и соберите столько информации, сколько Вы можете. Если Ваша программа управляет документом некоторого доброго сохранения это ПОД НОВЫМ ИМЕНЕМ - это могло бы быть повреждено, Вы не хотите перезаписывать оригинал.

3
ответ дан 30 November 2019 в 05:38
поделиться

То, что делает Вашего клиента, ожидает?

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

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

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

1
ответ дан 30 November 2019 в 05:38
поделиться

Karl Seguin говорит неотступно следующую обработку исключений:

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

Хорошее введение к предмету.

8
ответ дан 30 November 2019 в 05:38
поделиться

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

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

2
ответ дан 30 November 2019 в 05:38
поделиться

Так как Вы не знаете, каков каждый подкласс Исключения, Вы просто не МОЖЕТЕ знать, что нормально ловить их. Поэтому Вы должны не лезьте не в свое дело: исключения выгоды Вы знаете и заботитесь о, который главным образом будет теми, Вы явно создали для своей собственной программы, или те созданные для ошибок из библиотеки звонят, Вы используете. В частности, ловля Класса исключений является просто ленивым, плохим программированием---по существу, Вы говорите, что "Я не забочусь о том, что проблема, и не говорите мне; просто сделайте это". Смотрите на то, как программы Java обрабатывают исключения как методы обработки исключений, там обычно довольно хороши.

2
ответ дан 30 November 2019 в 05:38
поделиться

Это - очень Microsoft.

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

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

, Но я искренне соглашаюсь с Вами. Даже если бы Вы повторно бросаете после, Вы всегда ловили бы необработанное в корне, регистрировали бы то, что произошло. Единственная проблема с этим состоит в том, если Ваше необработанное исключая из памяти, в этом случае, Ваш вызов для входа мог бы перестать работать, поскольку JIT не может больше выделять память и т.д. Я думаю соглашение о программах C++ с этим путем взятия пузыря памяти, выпуска его на необработанном исключении и затем выполнения очень трудной стандартной программы журнала, чтобы попытаться перестать работать корректно.

6
ответ дан 30 November 2019 в 05:38
поделиться

Походит на Guruspeak

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

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

, Что было бы Вы думать о следующих приложениях, умирающих на заурядном исключении:

  • Медицинские устройства
  • Электростанции
  • Системы обнаружения проникновения

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

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

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

Протесты: Я работаю над системами серверной стороны, где время работы и безопасность очень важны.

РЕДАКТИРОВАНИЕ: Я предполагаю, что запутался тем, что было предназначено "процессом, умирают" - действительно ли это было ссылкой на целое приложение или просто рабочий поток и т.д.?

8
ответ дан 30 November 2019 в 05:38
поделиться

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

8
ответ дан 30 November 2019 в 05:38
поделиться

Я не знаком с материалом Richter, но я думаю, что философия/выравнивание - то, что в подавляющем большинстве случаев нет действительно ничего, что программа может сделать для восстановления с необработанного исключения и непредвиденной исключительной ситуации.

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

С другой стороны, я продаю продукт за точно, что цель, таким образом, я немного смещаюсь в этой области!

3
ответ дан 30 November 2019 в 05:38
поделиться

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

необходимо проверить, " Наступательное Программирование: Откажите Рано, Катастрофический отказ Часто ".

, Который является совсем другой идеологией от нормы Безопасное программирование :

[Безопасное программирование] предназначается для обеспечения продолжающейся функции части программного обеспечения несмотря на непредвиденное использование упомянутого программного обеспечения.

мне лично нравится "Катастрофический отказ Рано, Катастрофический отказ Часто" философия.

я видел слишком многих:

try  
{  
    // ... Huge block of code goes here  
}  
catch(Exception ex)  
{  
   // Do nothing...  
}  

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

22
ответ дан 30 November 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: