Bash или KornShell (ksh)? [закрытый]

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

int x;
x = 10;

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

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

Integer num;
num = new Integer(10);

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

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

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

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

public void doSomething(SomeObject obj) {
   //do something to obj
}

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

doSomething(null);

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

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

/**
  * @param obj An optional foo for ____. May be null, in which case 
  *  the result will be ____.
  */
public void doSomething(SomeObject obj) {
    if(obj != null) {
       //do something
    } else {
       //do something else
    }
}

Наконец, Как определить исключение & amp; причина использования Трассировки стека

60
задан javaPlease42 12 January 2014 в 17:37
поделиться

9 ответов

Bash.

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

, По крайней мере, с ударом можно быть уверены, что это - единственная кодовая база и все, о чем Вы нуждаетесь в беспокойстве, то, что (обычно минимум) установлена версия удара. Сделав много сценариев на в значительной степени каждом современном (и not-so-modern) UNIX, программируя для избиения более надежно последователен, по моему опыту.

46
ответ дан j.e.hahn 24 November 2019 в 17:28
поделиться

Bash является стандартом для Linux.
Мой опыт состоит в том, что легче найти справку для удара, чем для ksh или csh.

-2
ответ дан Matt 24 November 2019 в 17:28
поделиться

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

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

-1
ответ дан foxxtrot 24 November 2019 в 17:28
поделиться

Мой ответ был бы 'выбором один и изучил бы, как использовать его'. Они - оба достойные оболочки; удар, вероятно, имеет больше дополнительных свойств, но у них обоих есть основные характеристики, которые Вы захотите. удар более универсально доступен в эти дни. Если Вы используете Linux все время, просто придерживаетесь его.

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

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

3
ответ дан Incident 24 November 2019 в 17:28
поделиться

@foxxtrot

На самом деле, стандартной оболочкой является Оболочка Bourne (sh). /bin/sh на Linux на самом деле bash, но если Вы стремитесь к межплатформенным сценариям, Вы - более обеспеченное придерживание функций исходной Оболочки Bourne или записи его в чем-то как perl.

3
ответ дан Hank Gay 24 November 2019 в 17:28
поделиться

С одной стороны, удар имеет заполнение клавишей Tab. Этого одного достаточно, чтобы заставить меня предпочесть его по ksh.

оболочка Z имеет хорошую комбинацию уникальных функций ksh с хорошими вещами, которые удар обеспечивает плюс намного больше материала вдобавок ко всему

2
ответ дан Allen 24 November 2019 в 17:28
поделиться

Это - что-то вроде Unix по сравнению со сражением Linux. Большинство, если не все дистрибутивы Linux имеют удар, установленный и ksh дополнительный. Большинство систем Unix, как Солярис, AIX и HPUX имеет ksh как значение по умолчанию.

Лично я всегда использую ksh, я люблю vi завершение, и я в значительной степени использую Солярис для всего.

6
ответ дан Kristian 24 November 2019 в 17:28
поделиться

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

Вот быстрое введение: http://friedcpu.wordpress.com/2007/07/24/zsh-the-last-shell-youll-ever-need/

4
ответ дан Chris AtLee 24 November 2019 в 17:28
поделиться

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

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

4
ответ дан Community 24 November 2019 в 17:28
поделиться
Другие вопросы по тегам:

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