Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Учитывая ответы от других я все еще неясен относительно того, было ли это фактическим намерением Microsoft иметь.NET быть инициативой WORA. Единственный способ действительно знать я предполагаю, должен иметь кого-то от команды Microsoft.NET, вмешиваются на этом.
Так как мы не можем окончательно знать исходные намерения WORA.NET, на которую мы можем указать на усилия, которые пытаются сделать это реальностью (поскольку предыдущие ответы говорили о).
Это усилие является инициативой, происходящей за пределами Microsoft.
Моно проект во главе с Novell (раньше Ximian) для создания стандарта Ecma совместимая.NET совместимый набор инструментов, включая среди других компилятор C# и Общеязыковая среда выполнения. Моно может быть выполнен на Linux, BSD, UNIX, Mac OS X, Солярисе и операционных системах Windows.
Это усилие в большой степени преследуется Microsoft. Silverlight 2.0 реализует версию платформы, которая совпадает с.NET 3.0 и, кажется, попытка успешно поставить платформу нескольким платформам через браузер.
Это совместимо с несколькими продуктами веб-браузера, используемыми в операционных системах Mac OS X и Microsoft Windows. Мобильные устройства, начиная с Windows Mobile 6 и Symbian (Серия 60) телефоны, будет также поддерживаться.
В то время как это конкретно не обращается, приносят функциональность к GNU/Linux существует, по-видимому, сторонняя реализация бесплатного программного обеспечения под названием [Лунный свет] (http://en.wikipedia.org/wiki/Moonlight_ (время выполнения)).
Это, кажется, то, что мы в настоящее время знаем, но, как указано ранее, было бы очень полезно, если кто-то от команды.NET мог бы браться за дело на этом, чтобы правильно разъясниться, был ли WORA на самом деле исходной инициативой.
Для исправления некоторых комментариев других здесь .NET ВСЕГДА предназначался, чтобы быть многоплатформенным. Именно поэтому Microsoft разделила пространства имен на "Систему.*" (которые были независимы от платформы), и "Microsoft.*" (которые были конкретным Windows).
Это было наиболее конечно предназначено, чтобы быть WORA. Это - просто MS, изображенный Где угодно, и Везде было бы Windows к настоящему времени. Кто знал Linux, и MacOS все еще будет вокруг. Но судя всеми Mac в PDC, я предполагаю, что они были или половиной права или половиной неправильно!
Если бы WORA был действительно исходной целью, то я предполагаю, что мы видели бы реализации.NET на всех основных платформах к настоящему времени, полностью поддерживаемый Microsoft. Я, кажется, вспоминаю, что в то время, когда Sun кричал WORA с крыш, ответный удар Microsoft был "Записью Любой (язык), Работает на Одном (платформа)" (WARO:-). Как кто-то еще упомянул, я думаю, что они всегда были твердыми покровителями WORASLAIW (Запись Однажды Выполнение Где угодно Пока Его Windows)
Как Вы указываете, они, кажется, изменяют тактику немного с Silverlight, чтобы попытаться получить часть действия Flash/Flex теперь, когда поле битвы сместилось значительно далеко от рабочего стола и к браузеру.
dotNet может быть из-за CLR, который подобен в функции JVM. Но я не полагаю, что MS имел любое намерение его быть. http://www.mono-project.com/Main_Page мог бы быть полезным, но не продукт MS. Btw, во многом как то, как широкий спектр j2ee контейнеров объединяет понятие WORA в облако для j2ee приложений, приложений ASP.NET, работающих на чем-либо помимо IIS, действительно не работал бы то же через разрозненные платформы.
Я не думаю, что это было когда-либо действительно целью дизайна.NET - Microsoft не имеет никакого особого интереса к людям программное обеспечение записи для платформ не-Windows....
Однако существует Моно проект (http://www.mono-project.com), который является "открытой инициативой разработки, спонсируемой Novell для разработки открытого исходного кода, версии UNIX платформы разработки.NET".
Это зависит от Вашего определения "Где угодно". Существует несколько разновидностей виртуальной машины Java и платформы .NET. И большую часть времени Вы не можете только написать код для рабочего стола vm/framework и ожидать, что это будет работать на мобильном телефоне один.
Так. в некотором смысле даже Java не является действительно чистой "Записью Однажды, Выполнение Нигде".
Это верно, однако, что VM Java в настоящее время работает на нескольких операционных системах, в то время как платформа .NET работает только на устройствах Windows.
Существует одна интересная инициатива под названием "Моно", который предлагает поддержку .NET на Linux, Солярисе, Mac OS X, Windows и Unix. Чтение здесь: Моно Сайт
Короткий ответ - нет, Microsoft только поддерживает операционные системы MS (включая Windows Mobile) для.NET.
Длинный ответ - существует общедоступные проекты с открытым исходным кодом копировать платформу.NET для Linux и другого OSs, особенно Ротор и Моно. Они не поддерживают все, но можно развернуть много кода.NET, включая Silverlight.
Я не думаю, что это был первоначальный план, для Microsoft, создать время выполнения для каждой платформы и устройства, но они поощрили это при помощи зарегистрированного (?) промежуточного языка.
Да.NET имеет Общеязыковую среду выполнения (CLR), которая является.NET, эквивалентной JVM. Microsoft не поддерживает его на стольких же платформ сколько Java, но с помощью Моно проекта это возможно к achive кросс-платформенным приложениям с обычными протестами.
Примите во внимание, что.NET является больше, чем просто CLR. Это - целая платформа.
Многоплатформенный был, конечно, в видении.. прямо сейчас моно делает хорошее задание реализации времени выполнения для другой OS.
Так как.NET только доступна (официально) в Windows, затем не, это не запись один, выполненный нигде. Однако Моно команды делают хорошее движение при помощи распространению.NET вне Windows, но они всегда - путь позади официального материала.
Да и нет. Части среды.NET являются стандартами и могли быть открыто приняты.
Например, время выполнения (CLR) имеет портативную версию под названием Моно, который является многоплатформенным, с открытым исходным кодом и используется (например), Второй Жизнью.
Я не думаю, что официальное "намерение".NET было WORA. Я думаю, что Вы могли безопасно сказать, что.NET была разработана так, чтобы она всегда работала на будущем MS ОС. Но нет ничего, что устраняет.NET от работы других платформ. Моно пример реализации времени выполнения.NET для ОС кроме Windows.
В теории, да..Net Assemblies является байт-кодами, которые преобразовываются в собственный код после запуска, с помощью JIT ("своевременный") компилятор.
На практике нет многих платформ вне Windows, которые имеют.Net JIT compiler. Существует один для Linux, названного МОНО.
Не знайте о Mac, Sun и т.д...
Я думаю, что идея с.NET состоит в том, что это - "Запись Однажды, Выполнение Где угодно (который Microsoft выбирает)". Однако Моно проект медленно изменяет ситуацию.
Это никогда не будет поддерживаться на стольких же платформ сколько Java, по моему скромному мнению.
Единственное усилие Моно, не спонсируемый Microsoft.
Проверьте здесь на ТАК и на официальном сайте
Теоретически, язык разработан, чтобы быть скомпилированным в байт-код как Java, который интерпретируется Общеязыковой средой выполнения, механизм, который также позволяет нескольким языкам (не только C#) сотрудничать и работать на платформе.NET.
Однако Microsoft только разработала CLR для Windows. Существуют другие разрабатываемые альтернативы неMS, самое знаменитое Моно существо, реализация CLR или много платформ (см. ссылку).
Таким образом в теории да, на практике - мы будем видеть.
Это теоретически возможно, так как CLR ("виртуальная машина" .NET) выполняет открытый стандарт (CLI). Вопрос - то, что другие реализации там имеют тот стандарт. Моно другая происходящая работа, но это - единственное другое, о котором я знаю.
Да, это было целью.NET, хотя я не думаю, что она имела тот же акцент, как она сделала в Java. В настоящее время единственный effor, о котором я знаю, является Моно проектом, который создает версию CLI, который работает на Linux.
Интересно достаточно Silverlight на самом деле имеет сокращенную версию CLR, который может работать и на Windows и на Mac, который позволяет тому же приложению Silverlight работать на обеих неизменных платформах.
С Моно мы становимся достаточно близкими, и с Silverlight мы уже там.
Намерение или по крайней мере подача, состояло в том, чтобы это имело место. Действительность - то, что.NET не может действительно работать на других платформах. Единственное основное исключение Моно, который является проектом с открытым исходным кодом. Это - по существу переписывание времени выполнения.NET (эквивалент виртуальной машины Java), который работает над Linux, Солярисом, Mac OS X, Windows и Unix.
Это было довольно успешно, но это официально не поддерживается.
При размышлении о том, чтобы заставлять монолитного работодателя корпорации Высшей точки принять .NET и Linux забудьте это. Реалистично, с.NET, Вы находитесь на машинах Windows, период.
Microsoft никогда не предъявляла те претензии, но они делают перемещения на арене WORA. Silverlight 2.0, например, будет использовать подмножество платформы.NET и будет доступен в Windows, Linux (через проект При луне), MacOS, Windows Mobile и гарнитуры Nokia.
Как другие упомянули, Моно проект также принес платформу к нескольким средам.
Там Моно, который работает на Linux, Солярисе и OS X. В практике .NET является все еще в значительной степени платформой только для Windows. Это не находится действительно в интересах Microsoft продвинуть это быть WORA, наоборот. Попытка быть межплатформенным однако. Много людей было действительно параноиком о Моно на Linux. Воображаемая стратегия MS состоит в том, чтобы сначала позволить ему вырасти, чтобы быть важной частью платформы приложений Linux и затем выпустить адвокатов. Я не поставил бы свое будущее на мобильности .NET.
Перехват проверено Исключение
, не перехватить исключение времени выполнения
. Попробуйте перехватить конкретное исключение, постарайтесь не перехватить общее java.lang.Exception
.
Когда Google пришел, чтобы сделать Chrome, они не пытались использовать кроссплатформенную среду графического интерфейса, вместо этого они решили использовать собственные графические интерфейсы на каждой платформе. Почему? потому что таким образом приложение правильно вписывается в свою среду, таким образом оно выглядит, ощущается и действует как родное для операционной системы, в которой оно включено.
В основном, когда вы пытаетесь запустить запись один раз в любом месте, вы должны пойти на серьезные компромиссы и в итоге вы получаете то, что на самом деле нигде не работает.
Индустрия в значительной степени отказалась от благородной цели - написать, когда-то запускается где угодно, как от хорошей идеи, которая не сработала на практике.
] Лучший подход с моно /. net заключается в том, чтобы делиться вашими двоичными файлами нижнего уровня и использовать собственный графический интерфейс на каждой целевой платформе. GTK # в Linux, Winforms или WPF в Windows, CocoaSharp в Mac. Таким образом, ваше приложение будет выглядеть как обычное приложение.
Если бы Microsoft серьезно относилась к dotnet на других платформах, отличных от Windows, они бы выпустили библиотеки классов для повторного использования другими, не считая необходимости заново переписать те же библиотеки. Sun, с другой стороны, сделала это, что означает меньшее количество препятствий, если ни одна из них не подключится к другой платформе. Естественно, с java все еще нужно писать виртуальную машину и делать нативные вещи, но это помогает избежать головной боли, связанной с повторной реализацией всей библиотеки классов. Стандартизация языка явилась маркетинговым ходом, чтобы захватить технический персонал. Язык без библиотек бесполезен. Попробуйте выполнить свой следующий проект без примитивных типов ... Правильно, напишите свой собственный строковый класс и т. Д. И расскажите мне, насколько полезен стандартизованный язык без доступных библиотек ...
Ответ очень шаткий: да. В тот момент, когда вы включаете внешнюю библиотеку, ответ меняется на Нет.
Например, у Microsoft нет 64-битного драйвера JET. JET используется .NET для доступа к базам данных MS Access.
Любые приложения, скомпилированные для цели «Любой ЦП», использующие базы данных MS Access, не будут работать в 64-разрядной версии Windows.
(При этом игнорируется тот факт, что указанные приложения не переносятся на Mono.)