В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.
При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.
Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».
Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this
. Возьмем этот пример:
public class Some {
private int id;
public int getId(){
return this.id;
}
public setId( int newId ) {
this.id = newId;
}
}
И в другом месте вашего кода:
Some reference = new Some(); // Point to a new object of type Some()
Some otherReference = null; // Initiallly this points to NULL
reference.setId( 1 ); // Execute setId method, now private var id is 1
System.out.println( reference.getId() ); // Prints 1 to the console
otherReference = reference // Now they both point to the only object.
reference = null; // "reference" now point to null.
// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );
// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...
Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference
и otherReference
оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.
Используя обоих 'в гневе' я выбрал бы Subversion (с TortoiseSVN) по Хранилищу каждый день.
, Когда я пошел от Подрывной деятельности до Хранилища, это - то, что я заметил :
, Очевидно, часть этого до способа, которым было настроено Хранилище, но Вы получаете идею.
я закончил тем, что писал набор сценариев для автоматизации вещей, которые не могло сделать Хранилище, но даже тогда существует ограничение на то, что может сделать версия командной строки. Плюс Хранилище не документируется API.
Обновление
отметьте дату, это было oiginally отправлено. И poducts изменились и были улучшены geatly, так как я oiginally записал это.
Я использую Хранилище, таким образом, я хотел бы исправить одну ошибку в Вашем списке функций:
Хранилище имеет плагин VS, но оно только работает, если Вы собираетесь работать в режиме контроля.
Не верный - я не уверен, из которой версии это было включено, но можно выполнить хранилище в режиме Edit|Merge|Commit в Visual Studio
, я также добавил бы, что Хранилище использует SQL Server MS, поскольку это - репозиторий - делает резервные копии легкими.
Подрывная деятельность также имеет плагины VisualStudio:
Исходный веб-сайт механизма имеет сравнение . Однако я не предложил бы ни одного. Если Ваше перемещение в новый репозиторий Вы хотите посмотреть на распределенную систему управления версиями.
Подобные Монотонность , Мерзавец и Базар действительно подняли планку с точки зрения производительности.
Подрывная деятельность позволяет Вам отмечать файлы как 'должен-блокировку', в этом случае контроль (блокировка), регистрация (фиксируйте с автоматическим, разблокировали), работы. AnkhSVN визуализирует это точно так же, как Регистрация VSS выезда.
Подрывная деятельность имеет:
Подрывная деятельность получит более эффективный протокол HTTP в 1,6 или 1.7 (Происходящая работа). Это могло бы позволить создать плагин IIS.
Посмотрите книга подрывной деятельности по ветвлению и слиянию в Подрывной деятельности .
Подрывная деятельность имеет блокировки также. Мне никогда не были нужны они, все же.
Подрывная деятельность имеет большую стороннюю поддержку. Хранилище имеет всего несколько вещей.
, Конечно, где Подрывная деятельность сделала, чтобы третья сторона поддерживала, Хранилище имеет 1-ю партийную поддержку, так как Вы купили его. По моему опыту, информация из первых рук (от производителей) имеет тенденцию быть лучше, чем 14 форумов, распространенных по миру? Хотя у нас теперь есть Так себе эта точка, может быть бесшумным.:)
SVN имеет истинное ветвление http://svnbook.red-bean.com/en/1.1/ch04.html , ветвление просто обрабатывается по-другому, чем большинство систем управления исходным кодом.
Форумы сложно исследовать, но они дают много подсказок, позволяющих извлечь максимальную пользу из всех проб и ошибок, через которые прошли люди.
Комментарии создателей могут быть предвзятые и неуверенные, просто ли они пытаются предложить только свой обходной путь.
Я потратил несколько лет на использование (и администрирование) Subversion на предыдущей работе, а последние три года использовал Убежище на моей нынешней работе. На данный момент я отчаянно хочу уйти от Vault и вернуться к Subversion (или, возможно, к такому инструменту, как git или Mercurial).
У нас было много проблем с производительностью и надежностью (Vault не всегда забирает файлы, которые были изменены, и иногда будет настаивать на том, что вы не изменяли файл, когда вы это сделали), но это может произойти вплоть до (длинной) истории нашего репозитория и того, как мы справлялись с ветвлением в прошлом. Я бы сказал, что если бы он был лучше спроектирован, то все это не имело бы значения, но если вы не делаете с ним дурацких вещей, возможно, у вас не будет проблем, которые у нас были.
Тем не менее, есть некоторые фундаментальные дизайнерские решения, которые я не могу простить:
. В конечном счете, Vault - гораздо менее гибкий инструмент, чем Subversion, хотя эта нехватка гибкости означает, что его проще использовать. Если у вас есть команда разработчиков, которые привыкли к VSS, и вы не собираетесь требовать значительную часть своего инструмента управления версиями, Vault, вероятно, будет хорошим выбором. Однако, привыкнув к гибкости Subversion, я обнаружил, что использование Vault вызывает разочарование.
Одна функция, встроенная в Vault. что Subversion не имеет встроенной функции, если Vault может быть настроен так, чтобы сохранять временную метку измененных файлов. Это функция, от которой я действительно могу извлечь пользу. В качестве обходного пути Subversion позволяет конфигурации устанавливать измененную временную метку на время фиксации, что достаточно для большинства моих сценариев. Чтобы извлечь из этого пользу, я должен выполнить фиксацию, затем удалить свою рабочую копию, а затем выполнить обновление, чтобы временные метки стали временными метками фиксации, чтобы я мог развернуть файлы и сопоставить их метки времени с метками времени Subversion. Есть предложения использовать скрипты или еще что-то для хранения измененных временных меток в свойствах, но я не знаю, успешно ли это сделал кто-нибудь, и если да, то я не знаю, насколько надежным будет этот обходной путь.
Существует множество инструментов (отслеживание ошибок, непрерывная интеграция), которые интегрируются с Subversion. В случае с хранилищем не многие инструменты поддерживают его.