Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Очевидно, этот вопрос является чисто академическим. К счастью, это имеет очень определенный ответ.
Вы не можете выйти из последовательности конца CDATA. Порождающее правило 20 спецификации XML довольно ясно:
[20] CData ::= (Char* - (Char* ']]>' Char*))
РЕДАКТИРОВАНИЕ: Это правило продукта буквально означает, что "Раздел CData может содержать что-либо, что Вы хотите ТОЛЬКО последовательность']]>'. Никакое исключение. ".
EDIT2: тот же раздел также чтения:
В разделе CDATA, только строка CDEnd распознана как разметка, так, чтобы открывающие угловые скобки и амперсанды могли произойти в их литеральной форме; им нужно не (и не может) быть оставленным с помощью"
<
" и"&
". Разделы CDATA не могут вложить.
, Другими словами, не возможно использовать ссылку на сущность, разметку или любую другую форму интерпретируемого синтаксиса. Единственный проанализированный текст в разделе CDATA ]]>
, и он завершает раздел.
Следовательно, не возможно выйти ]]>
в разделе CDATA.
EDIT3: тот же раздел также чтения:
2.7 Раздела CDATA
[Определение: разделы CDATA могут произойти где угодно, символьные данные могут произойти; они используются для выхода из блоков текста, содержащего символы, которые были бы иначе распознаны как разметка. Разделы CDATA начинаются со строки "<! [CDATA [" и конец со строкой"]] >";:]
Затем может быть раздел CDATA где угодно, символьные данные могут произойти, включая несколько смежных разделов CDATA, оперативных из единственного раздела CDATA. Это позволяет этому быть возможным разделить ]]>
маркер и поместить две части его в смежных разделах CDATA.
исключая:
<![CDATA[Certain tokens like ]]> can be difficult and <invalid>]]>
должен быть записан как [1 125]
<![CDATA[Certain tokens like ]]]]><![CDATA[> can be difficult and <valid>]]>
Необходимо разломать данные на кусочки для сокрытия ]]>
.
Вот все это:
<![CDATA[]]]]><![CDATA[>]]>
первое <![CDATA[]]]]>
имеет ]]
. Второе <![CDATA[>]]>
имеет >
.
S. Ответ Lott является правильным: Вы не кодируете конечный тэг, Вы повреждаете его через несколько разделов CDATA.
, Как натыкаться на эту проблему в реальном мире: использование XML-редактора для создания XML-документа, который будет питаться в систему управления контентом, попытайтесь написать статью о разделах CDATA. Ваш обычный прием встраивающих код образцов в разделе CDATA приведет Вас к сбою здесь. Можно вообразить, как я изучил это.
, Но при большинстве обстоятельств, Вы не встретитесь с этим и здесь почему: если Вы хотите сохранить (говорят), что текст XML-документа как содержание элемента XML, Вы будете, вероятно, использовать метод DOM, например:
XmlElement elm = doc.CreateElement("foo");
elm.InnerText = "<[CDATA[[Is this a problem?]]>";
И DOM вполне обоснованно выходит из < и>, что означает, что Вы непреднамеренно не встроили раздел CDATA в свой документ.
, О, и это интересно:
XmlDocument doc = new XmlDocument();
XmlElement elm = doc.CreateElement("doc");
doc.AppendChild(elm);
string data = "<![[CDATA[This is an embedded CDATA section]]>";
XmlCDataSection cdata = doc.CreateCDataSection(data);
elm.AppendChild(cdata);
Это - вероятно, особенность DOM.NET, но это не выдает исключение. Исключение выдается здесь:
Console.Write(doc.OuterXml);
я предположил бы, что то, что происходит под капотом, - то, что XmlDocument использует XmlWriter, производят его вывод и проверки XmlWriter на отмеченность, как он пишет.