NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
lsb_release -i
может работать на Вас.
lsb_release -a
Некоторое обсуждение в http://etbe.coker.com.au/2007/08/30/identifying-the-distribution-of-a-linux-system/
cat /etc/*release
Большинство дистрибутивов помещают файл релиза в /etc/
(например, /etc/redhat-release
, /etc/gentoo-release
и т. Д.), В котором обычно есть номер версии вашего дистрибутива.
Это - раздражающе, более трудная проблема, чем это появляется.
Для систем Linux, используйте lsb_release.
$ lsb_release --all
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 8.04.1
Release: 8.04
Codename: hardy
$ lsb_release -i
Distributor ID: Ubuntu
Это имеет ограничение, что lsb_release работает только на релизы Linux.
Для всех систем Unix, можно также проанализировать uname.
$ uname -a
Linux blue-laptop 2.6.24-21-generic #1 SMP Tue Oct 21 23:43:45 UTC 2008 i686 GNU/Linux
можно найти некоторую информацию о системах и дистрибутивах в uname страница .
WikipediaВы должны спросить себя, действительно ли вам нужно знать, какой дистрибутив используется (возможно, потому что вы хотите собрать пакет, специфичный для этого дистрибутива). Во многих других случаях это гораздо лучшая идея, просто протестировать и посмотреть, есть ли нужные вам функции или нет. Это может показаться намного больше работы, потому что вы должны тестировать каждую функцию по очереди, но таким образом, ваше программное обеспечение становится гораздо более гибким.
Я обнаружил, что в / etc / issue обычно есть что-то о используемом дистрибутиве.
Но я не знаю о его доступности во всех дистрибутивах.
В моем .cshrc
у меня есть
setenv DISTRO `sed -e 's/.*(//' -e 's/)).*//' /proc/version`
Для пользователей ksh / Bash , я предполагаю, что это переводится как
export DISTRO=`sed -e 's/.*(//' -e 's/)).*//' /proc/version`
и, конечно, это может не сработать для вашего любимого дистрибутива. (У меня были проблемы с Oracle Unbreakable Linux , дающим что-то похожее на Redhat, но это было достаточно для моих целей.)
Обновление август 2016 г. Я не использовал Linux таким образом какое-то время (2008 год давно). Кажется, что это больше не работает для систем, которые у меня сейчас есть.
Можно использовать 'uname':
[anton@localhost ~]$ uname -a
Linux localhost 2.6.26-ARCH #1 SMP PREEMPT Tue Aug 26 21:15:43 UTC 2008 i686 AMD Athlon(tm) 64 Processor 3000+ AuthenticAMD GNU/Linux
uname -r
должен распечатать версию ядра, в настоящее время работающую (по крайней мере, она делает для Linux, не знайте, является ли это то же для *BSD или другие). Это не то же как дистрибутив, но версия ядра часто включает имя дистрибутива, если это настраивается, как "2.6.27 хинду r1" или что-то.
Init часто печатает что-то при начальной загрузке, но это не много пользы, когда это работает.
Иначе, насколько я знаю, нет ничего универсального.
Файловая система proc: Каталог в Linux со всей информацией аппаратного уровня. Поэтому просто наберите
cd /proc/
Там вы найдете золотую жилу информации, хранящуюся в текстовом файле для всей произвольной информации о системе.