Когда вы объявляете ссылочную переменную (т. е. объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа 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; причина использования Трассировки стека
Используйте id
для идентификации элементов, что только будет единственный экземпляр на странице. Например, если у Вас есть единственная панель навигации, которую Вы помещаете в определенное местоположение, используете id="navigation"
.
Использование class
для группировки элементов, что все ведут себя определенный путь. Например, если Вы хотите, чтобы Ваше название компании появилось полужирным в основном тексте, Вы могли бы использовать <span class='company'>
.
Классы для стилей, которые можно использовать многократно на странице, идентификаторы являются уникальными идентификаторами, которые определяют особые случаи для элементов. В стандартах говорится, что идентификаторы должны только использоваться однажды на странице. Таким образом, необходимо использовать классы для того, когда Вы хотите использовать стиль больше чем на одном элементе на странице и идентификатор, когда Вы просто хотите использовать его однажды.
Другая вещь состоит в том, что для классов можно использовать несколько значений (путем помещения пробелов, промежуточных каждый класс, а-ля "вздор ='blagh blah22 класса') wheras с идентификаторами, можно только использовать на идентификаторе на элемент.
Стили, определенные для идентификационных стилей переопределения, определенных для классов, таким образом, в, настройки стиля #uniquething переопределят стиль .whatever, если эти два будут конфликтовать.
, Таким образом, необходимо, вероятно, использовать идентификаторы для вещей как, заголовок, 'боковая панель' или что бы то ни было, и так далее - вещи, которые только появляются однажды на страницу.
В дополнение к идентификатору и классы, являющиеся большим для установки стиля на отдельном объекте стихи подобный набор объектов, существует также другой протест помнить. Это также зависит от языка до некоторой степени. В ASP.NET можно добавить Отделение и иметь идентификатор. Но при использовании Панели вместо Отделения, Вы потеряете идентификатор.
Также, элементом, которому Вы даете определенный идентификатор, можно управлять через JavaScript и команды DOM - GetElementById, например.
В целом, я нахожу полезным дать все основные структурные отделения идентификатор - даже если первоначально, у меня нет определенных правил CSS применяться, у меня есть та возможность там будущего. С другой стороны, я использую классы для тех элементов, которые могли использоваться многократно - например, отделение, содержащее изображение и подпись - у меня могло бы быть несколько классов, каждый с немного отличающимися значениями моделирования.
Помнят, хотя при прочих равных условиях правила стиля в идентификационной спецификации имеют приоритет по тем в спецификации класса.
При использовании.Net веб-элементов управления тогда, иногда намного легче только использовать классы, поскольку.Net изменяет сеть contol идентификатор отделения во время выполнения (где они используют runat = "сервер").
Используя классы позволяет, Вы для легкого создания стилей с отдельными классами для шрифтов, интервала, граничите и т.д. Я обычно использую несколько файлов для хранения отдельных типов информации о форматировании, например, basic_styles.css для простого сайта широкое форматирование, ie6_styles.css для браузера определенные стили (в этом случае IE6) и т.д. и template_1.css для получения информации макета.
, Который когда-либо путь Вы выбираете попытку быть последовательными для помощи обслуживанию.
Моя предпочтительная разновидность должна использовать идентификацию класса, когда стили css применяются к нескольким отделениям таким же образом. Если структура или контейнер действительно только применяются однажды или могут наследовать свой стиль от значения по умолчанию, я не вижу оснований для использования идентификации класса.
, Таким образом, это зависело бы от того, является ли Ваше отделение одним из нескольких; например, отделение, представляющее вопрос ответу на stackoverflow веб-сайте. Здесь Вы хотели бы определить стиль для класса "Ответа" и применить это к каждому отделению "Ответа"
Я сказал бы, лучше использовать класс каждый раз, когда Вы думаете, что элемент стиля будет повторным на странице. Объекты как HeaderImage, FooterBar и т.п. подходят как идентификатор, так как Вы будете только использовать его однажды, и он поможет предотвратить Вас от случайного дублирования его, так как некоторые редакторы предупредят Вас, когда у Вас будут дублирующиеся идентификаторы.
я могу также видеть его полезный, если Вы собираетесь генерировать элементы отделения динамично и хотеть предназначаться для определенного объекта для форматирования; можно просто дать ему надлежащий идентификатор в поколении в противоположность поиску элемента и затем обновлению его класса.
идентификационный атрибут используется для элементов для однозначного определения их в рамках документа, тогда как атрибут класса может иметь то же значение, совместно использованное многими элементами в том же документе.
Так, действительно, если существует только один элемент на документ, это собирается использовать стиль (например, #title), затем пойдите с идентификатор . Если несколько элементов могут использовать стиль, пойдите с класс .
Используйте идентификатор для уникального элемента на странице, которая Вы хотите сделать что-то очень определенное с, и класс для чего-то, что Вы могли снова использовать на других частях страницы.
Если это - стиль, Вы хотите использовать в нескольких местах на странице, использовать класс. Если Вы хотите большую настройку для отдельного объекта, говорите военно-морскую панель относительно стороны страницы, то идентификатор является лучшим, потому что Вам вряд ли будет нужна та комбинация стилей где-либо еще.
идентификатор, как предполагается, является уникальным идентификатором элемента на странице, которая помогает управлять им. Любой внешне CSS определил стиль, который, как предполагается, используется больше чем в одном элементе, должен пойти на атрибут класса
<div class="code-formatting-style-name" id="myfirstDivForCode">
</div>
Я думаю, что все мы знаем, каков класс, но если Вы думаете об идентификаторах как об идентификаторах вместо того, чтобы разработать инструменты, Вы, привычка идет далеко неправильно. Вам нужен идентификатор при попытке предназначаться для чего-то и если у Вас есть больше чем один объект с тем же идентификатором, Вы больше не можете определять его...
Когда дело доходит до записи Вашего css для идентификаторов и КЛАССОВ, это выгодно, чтобы использовать минимальные css классы в максимально возможной степени и попытаться не стать слишком нагруженным идентификаторами, пока Вы НЕ будете ИМЕТЬ к, иначе Вы будете постоянно стремиться писать более сильные объявления и скоро иметь css файл, полный! важный.
Идентификаторы должны быть уникальными. КЛАССЫ должны быть совместно использованы. Так, если у Вас есть некоторый CSS, форматирующий, который будет применен к нескольким DIV, использовать класс. Если всего один (как требование, не как случайность), используют идентификатор.
Некоторые другие вещи иметь в виду:
Лучше использовать никакой , когда можно помочь ему. Вместо этого определите тип элемента, и это тип родителя. Например, незаказанный список содержавшее внутреннее отделение с navarea классом мог быть выбран этот путь:
div.NavArea ul { /* styles go here */ }
Теперь можно разработать логическое подразделение для большой части всех navarea с одним приложением класса.
Сам стандарт HTML отвечает на Ваш вопрос:
Никакие два объекта не могут иметь тот же идентификатор, но произвольно, сумма объектов может иметь тот же класс.
Поэтому, если бы Вы хотите применить определенные атрибуты стиля CSS к единственному DIV только, который был бы идентификатором. Если Вы хотите, чтобы определенные атрибуты стиля относились к нескольким ОТДЕЛЕНИЯМ, которые должны быть классом.
Примечание, что можно смешать обоих. Можно заставить два ОТДЕЛЕНИЯ принадлежать тому же классу, но дать им различные идентификаторы. Можно тогда применить стиль, характерный и для к классу и для вещам, характерным для любой одной к их идентификатору. Браузер сначала применит стиль класса и затем идентификационный стиль, таким образом, идентификационные стили смогут перезаписать то, что класс установил прежде.
Дополнительной выгодой для использования идентификатора является способность предназначаться для него в теге привязки:
<h2 id="CurrentSale">Product I'm selling</h2>
позволит, Вы к в некотором другом месте связываетесь непосредственно с тем пятном на странице:
<a href="#CurrentSale">the Current Sale</a>
общее использование А для этого должно было бы дать каждый заголовок на блоге идентификатор с меткой даты (скажите идентификатор = "date20080408"), который позволил бы Вам конкретно быть нацеленными на тот раздел страницы блога.
также важно помнить, что там более ограничиваются, называя правила для идентификаторов, прежде всего, что они не могут запустить с числа. Посмотрите подобный ТАК вопрос: , Что является допустимым значением для идентификационных атрибутов в html
классы являются большими, когда Вы хотите применить подобные стили ко многим различным отделениям или элементам. идентификаторы хороши, когда Вы хотите обратиться к определенному элементу для форматирования или для обновления с JavaScript.
Идентификаторы должны быть уникальными, но в CSS они также берут приоритет при выяснении который из двух конфликтующих инструкций следовать.
<div id="section" class="section">Text</div>
#section {font-color:#fff}
.section {font-color:#000}
текст был бы белым.
<student id="JonathanSampson" class="Biology" />
<student id="MarySmith" class="Biology" />
Студент идентификационные карты отличны. Ни у каких двух студентов в кампусе не будет того же студента идентификационная карта. Однако многие студенты могут и совместно использовать по крайней мере один Класс друг с другом.
Это должно хорошо поместить несколько студентов до одного заголовок Класса , Биология 101. Но никогда не приемлемо подвергнуть несколько студентов одному студенту идентификатор .
При предоставлении Правила по школьной системе внутренней связи, можно дать Правила к Класс :
"Класс Биологии носил бы Красные Рубашки завтра?"
.BiologyClass {
shirt-color:red;
}
Или можно дать правила Определенному Студенту путем вызова его уникального идентификатор :
"Jonathan Sampson носил бы Зеленую Рубашку завтра?"
#JonathanSampson {
shirt-color:green;
}
Самая важная вещь понять состоит в том, что идентификаторы должны быть уникальными: только один элемент с данным идентификатором должен существовать в странице. Таким образом, если Вы желаете обратиться к определенному элементу страницы, это часто - лучшая вещь использовать.
, Если у Вас есть несколько элементов, которые в некотором роде подобны, необходимо использовать класс элементов для идентификации их.
Одно очень полезное, удивительно мало известного факта - то, что можно на самом деле применить несколько классов к единственному элементу путем помещения пробелов между именами классов. Таким образом, если Вы отправили вопрос, который был записан, в настоящее время входил в систему пользователь, Вы могли бы отождествить его с < класс отделения = "вопрос currentAuthor" > .
Простое различие между этими двумя - то, что, в то время как класс может неоднократно использоваться на странице, идентификатор должен только использоваться однажды на страницу. Поэтому уместно использовать идентификатор на элементе отделения, который повышает основное содержание на странице, поскольку только будет один раздел основного содержания. Напротив, необходимо использовать класс для установки альтернативных цветов строк на таблице, поскольку они по определению собираются быть используемыми несколько раз.
Идентификаторы являются невероятно мощным инструментом. Элемент с идентификатором может быть целью части JavaScript, который управляет элементом или его содержанием в некотором роде. Идентификационный атрибут может использоваться в качестве цели внутренней ссылки, заменяя теги привязки с атрибутами имени. Наконец, если Вы ясно даете понять свои идентификаторы и логичный, они могут служить своего рода “сам документация” в рамках документа. Например, необходимо не обязательно добавить комментарий перед блоком, заявив, что блок кода будет содержать основное содержание, если открывающий тэг блока будет иметь идентификатор, скажем, "основного", "заголовок", "нижний колонтитул", и т.д.