Что Linux эквивалентен паузе DOS?

Когда вы объявляете ссылочную переменную (т. е. объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа 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; причина использования Трассировки стека

229
задан Peter Mortensen 30 September 2014 в 01:19
поделиться

3 ответа

read делает это:

user@host:~$ read -n1 -r -p "Press any key to continue..." key
[...]
user@host:~$ 

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

при использовании Bash можно также определить тайм-аут с -t, который заставляет чтение возвращать отказ, когда клавиша не нажата. Так, например:

read -t5 -n1 -r -p 'Press any key in the next five seconds...' key
if [ "$?" -eq "0" ]; then
    echo 'A key was pressed.'
else
    echo 'No key was pressed.'
fi
324
ответ дан Peter Mortensen 23 November 2019 в 03:43
поделиться

read без любых параметров только продолжится, если Вы нажмете Enter. Команда DOS pause продолжится при нажатии какой-либо клавиши. Используйте read –n1, если Вы хотите это поведение.

15
ответ дан xsl 23 November 2019 в 03:43
поделиться

Попробуйте это:

function pause(){
   read -p "$*"
}
1
ответ дан John Kugelman supports Monica 23 November 2019 в 03:43
поделиться