Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2010, 17:22   #1
ZigaZaga
Пользователь
 
Регистрация: 20.02.2010
Сообщений: 27
По умолчанию как реализовать общий счётчик объектов класса?

У нас есть статическое поле класса изначально равное нулю.
В конструкторе класса мы это счётчик инкрементим. И соответственно при уничтожении объекта, счётчик надо декрементить.
В плюсах понятно как сделать. А как это в реализовать в яве?
(Вариант с методом finalize() не катит)
ZigaZaga вне форума Ответить с цитированием
Старый 14.06.2010, 17:42   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

А что вам, собственно, неясно?
У нас есть конструктор, который делает инкремент, и функция, которая делает декремент. А сам объект удалит сборщик мусора.

Пример
Код:
class Socket
{
    public static int obj_counter = 0;
    public Socket(){obj_counter++;}

    //...
    public void freeObj(){obj_counter--;}
}
MaTBeu вне форума Ответить с цитированием
Старый 14.06.2010, 17:43   #3
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

Цитата:
Вариант с методом finalize() не катит
Почему это не катит?
Код:
protected void finalize(){
	--this.count;
	super.finalize();
}
Цитата:
функция, которая делает декремент.
Не элегантное решение - придется каждый раз вызывать функцию, когда объект становится не нужным.
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.
alexinspir вне форума Ответить с цитированием
Старый 15.06.2010, 13:51   #4
ZigaZaga
Пользователь
 
Регистрация: 20.02.2010
Сообщений: 27
По умолчанию

Финалайз не катит по той причине, что метод финалайз может вообще-то никогда и не вызваться. Он может быть вызван после деструктора, может быть вызван значительно позже деструктора, а может так и не разу не вызваться. т.е. ничего важного в них кидать нельзя.

ладно. не много изменю вопрос. как сделать такой счётчик, который будет считать количество объектов на которые ещё существуют ссылки, а то получаеться даже елси бы в можно было вызвать декремент как-нибудь в деструкторе(знаю что нельзя) , то всё равно счётчик бы считал количество реально СУЩЕСТВУЮЩИХ объектов, но на некоторые из этих объектов могли уже быть потеряны последнии ссылки...
ZigaZaga вне форума Ответить с цитированием
Старый 15.06.2010, 14:00   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

О каких деструкторах вы говорите?
В яве нет деструкторов, очистку памяти выполняет сборщик мусора, который и вызывает метод finalize(), когда количество ссылок на объект равно нулю.
MaTBeu вне форума Ответить с цитированием
Старый 15.06.2010, 14:08   #6
ZigaZaga
Пользователь
 
Регистрация: 20.02.2010
Сообщений: 27
По умолчанию

что? вы хотите сказать что если я не определю метод финалайз или же дам ему пустое тело, объект реально никогда не удалиться из памяти???
цитата из книги Джошуа Блоха "Эффективное программирование":
"Спецификация языка Java не только не дает поручительства, что методы finalize будут вызваны быстро, она не гарантирует, что они вообще будут вызваны. Вполне возможно, что программа завершится, так и не вызвав метод finalize для некоторых объектов, ставших недоступными"
ZigaZaga вне форума Ответить с цитированием
Старый 15.06.2010, 14:45   #7
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Читайте про освобождение памяти здесь
MaTBeu вне форума Ответить с цитированием
Старый 18.06.2010, 10:51   #8
leska
Пользователь
 
Регистрация: 22.04.2008
Сообщений: 13
По умолчанию

Давайте с другой стороны подойдем к вопросу. А зачем вам ЭТО?
Хочешь начать карьеру фрилансера, но не знаешь как? Узнай здесь!
leska вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка Хоара(для объектов класса) m9yt Общие вопросы C/C++ 0 02.06.2010 18:45
создание объектов класса Serjuk Общие вопросы C/C++ 8 13.05.2010 18:54
Коллекция объектов класса в С++ MarihuanaP Помощь студентам 2 09.05.2010 13:06
Создание объектов класса в цикле Formdet Общие вопросы .NET 4 23.04.2010 21:43
Общий обработчик для нескольких объектов Strombald Помощь студентам 10 23.12.2009 22:57