Возврат объектов

Метод может возвращать любой тип данных, в том числе созданные типы классов. Например, в следующей программе метод icrByTen () возвращает объект, в котором значение переменной а на 10 больше значения этой переменной в вызывающем объекте.

// Возвращение объекта.
class Test {
int а;
Test(int i) { a = i;
Test incrByTen () {
Test temp = new Test(a+10);
return temp;
}
}
class RetOb {
public static void main(String args[]) {
Test ob1 = new Test (2) ;
Test ob2;
ob2 = ob1.incrByTen();
System.out.println ("ob1.a: " + ob1.a);
System.out.println("ob2.a: " + ob2.a);
ob2 = ob2.incrByTen();
System.out.println("ob2.а после второго увеличения значения: " + ob2.а);
}
}

Эта программа генерирует следующий вывод: ob1.a: 2
ob2.а: 12
ob2.а после второго увеличения значения: 22

Как видите, при каждом вызове метода incrByTen () программа создает новый объект и возвращает ссылку на него вызывающей процедуре.

Приведенная программа иллюстрирует еще один важный момент: поскольку все объекты распределяются динамически с помощью операции new, программисту не нужно беспокоиться о том, чтобы объект не вышел за пределы области определения, т.к. выполнение метода, в котором он был создан, прекращается. Объект будет существовать до тех пор, пока где-либо в программе будет существовать ссылка на него. При отсутствии какой-либо ссылки на него объект будет уничтожен во время следующей уборки мусора.