Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
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 ");
}
}
}
Окончательный текстовый редактор, конечно, emacs. Я нашел, что Ремесло Редактирования текста, или, Emacs для Современного мира было превосходным руководством по самостоятельному обучению для основ записи редактора. Примеры - все в простом C, и текст мог бы выглядеть немного датированным (это с 1991), но основные идеи все еще допустимы, и Вы полностью понимаете, почему редактор работает способ, которым он делает.
Редактор SharpDevelop хорош, и это - открытый исходный код также.
Основанный на Java редактор "jEdit", хороший пример архитектуры текстового редактора, вместе со сменной поддержкой, сильным пользовательским сообществом и хорошими абстракциями.
Вы могли также посмотреть на исходный код для Scintilla.
Это, вероятно, не, что Вы ищете, это основано на Mozilla, но для пользы полноты:
Откройте Komodo является инициативой ActiveState для создания платформы с открытым исходным кодом для сред застройщика.
Вы посмотрели на энергию? Это поддерживает автозавершение, подсветка синтаксиса, возрастающий поиск, интегрировала здание, и т.д., и т.д. Это является модульным, и многие его больше расширенных опций реализованы как плагины, которыми или поставляться с ним или может быть найден отдельно (например, svn интеграция, индексация кода с cscope/ctags, прозрачное чтение/запись по ssh).
Это имеет пчелу для записи плагинов на нескольких языках (например, Python, рубин, жемчуг), а также его собственном дополнительном языке ('vimscript').
Я не знаю то, что они имеют с точки зрения высокоуровневой документации архитектуры, но существует активное сообщество и список рассылки разработчика, который должен смочь ответить на конкретные вопросы о том, как оно работает, если Вы начинаете рыть через источник.