Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
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 ");
}
}
}
Существует "стандартный" шаблон для методов get и методов set в Java, названном Свойства компонента . В основном любой метод, запускающийся с get
, не беря аргументов и возвращая значение, является методом get свойства для свойства, названного как остальная часть имени метода (с печатавшей строчными литерами буквой запуска). Аналогично set
создает метод set пустого метода с отдельным аргументом.
, Например:
// Getter for "awesomeString"
public String getAwesomeString() {
return awesomeString;
}
// Setter for "awesomeString"
public void setAwesomeString( String awesomeString ) {
this.awesomeString = awesomeString;
}
Большинство IDE Java генерирует эти методы для Вас, если Вы спросите их (в Eclipse, это столь же просто как перемещение курсора к полю и удару ctrl-1, затем выбирая опцию из списка).
Если это имеет значение, для удобочитаемости можно на самом деле использовать is
и has
вместо get
для свойств булева типа также, как в:
public boolean isAwesome();
public boolean hasAwesomeStuff();
"Поддержка Свойства Java" была предложена для Java 7, но не превращала его на язык.
См. http://tech.puredanger.com/java7#property для большего количества ссылок и информации, если заинтересовано.
Бобовое соглашение состоит в том, чтобы записать код как это:
private int foo;
public int getFoo() {
return foo;
}
public void setFoo(int newFoo) {
foo = newFoo;
}
На некоторых из других языков на JVM, например, Groovy, Вы получаете переопределяемые свойства, подобные C#, например,
int foo
, к которому получают доступ с простым .foo
и усиливает значение по умолчанию getFoo
и setFoo
реализации, которые можно переопределить по мере необходимости.
Большинство IDE для Java автоматически генерирует метода get и код метода set для Вас, если Вы захотите их к. Существует много различных соглашений, и IDE как Eclipse позволит Вам выбирать, какой Вы хотите использовать, и даже позволить Вам определить свое собственное.
Eclipse даже включает автоматизированный рефакторинг, который позволит Вам оборачивать свойство в методе get и методе set, и это изменит весь код, который получает доступ к свойству непосредственно, чтобы заставить его использовать метода get и/или метод set.
, Конечно, Eclipse может только изменить код, который он знает о - любые внешние зависимости, которые Вы имеете, мог быть поврежден таким рефакторингом.
Мой опыт Java не состоит в том, что высоко также, таким образом, любой не стесняется исправлять меня. Но AFAIK, общее соглашение состоит в том, чтобы записать два метода как так:
public string getMyString() {
// return it here
}
public void setMyString(string myString) {
// set it here
}
При использовании затмения тогда, оно имеет возможности к автоматическому, генерируют метод получателя и метод установщика для внутренних атрибутов, это может быть полезный и экономящий время инструмент.
Я просто выпускаю Java 5/6 аннотации и процессор аннотации для помощи этому.
Выезд http://code.google.com/p/javadude/wiki/Annotations
документация немного легка прямо сейчас, но quickref должен объяснить идею.
В основном это генерирует суперкласс с методами get/методами set (и много других опций генерации кода).
демонстрационный класс А мог бы быть похожим
@Bean(properties = {
@Property(name="name", bound=true),
@Property(name="age,type=int.class)
})
public class Person extends PersonGen {
}
существует намного больше доступных образцов, и в сгенерированном коде нет никаких зависимостей во время выполнения.
Посылают мне электронное письмо, если Вы испытываете его и находите его полезным! - Scott