Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
6 / 6 / 0
Регистрация: 17.08.2017
Сообщений: 141

Взаимодействие с объектами класса

09.09.2018, 13:27. Показов 1803. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Подскажите, пожалуйста,
1) как обратиться к объекту класса, созданному в виде new ИмяКласса(), то есть к объекту без имени;
2*) как удалять подобные объекты;
3) существует ли встроенный метод, подсчитывающий количество ранее созданных, а так же "живых (не уничтоженных)" объектов какого-либо класса.

*В моей программе есть в частности такой код:
Java
1
2
newTest.addActionListener(new MyMenuListener());
open.addActionListener(new MyMenuListener());
Со временем объектов вида new MyMenuListener() может расплодиться очень много, появится риск путаницы. Поэтому эти объекты надо будет либо регулярно удалять, либо не создавать новых, а для этого надо знать как обратиться к существующим.

И ещё. При создании объекта класса в виде
Java
1
protected static MyStartNew msn = new MyStartNew();
при компиляции класса MyStartNew вылезает ошибка: java.lang.ExceptionInInitializerError Caused by: java.lang.NullPointerException. В чём проблема?

Откуда берётся статический контекст в данном случае (см. картинку)?
Миниатюры
Взаимодействие с объектами класса  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.09.2018, 13:27
Ответы с готовыми решениями:

Взаимодействие между объектами разных классов
Ребят, не могу найти как сделать. Например: есть два класса. Зергушонок и Недозилок, у которых есть свои данные. И нужно реализовать...

Стек, работающий с объектами класса Box
Здравствуйте. Нужно реализовать стек, работающий с объектами класса Box. Есть код реализации самого стека и класс бокс отдельно. не...

Взаимодействие с несозданными объектами
Здравствуйте! Немного об игровой логике, а именно взаимодействии объектов. Допустим, что есть класс Unit, в котором прописана всякая...

19
 Аватар для Aviz__
2738 / 2047 / 507
Регистрация: 17.02.2014
Сообщений: 9,465
09.09.2018, 13:32
Цитата Сообщение от Иван24 Посмотреть сообщение
new ИмяКласса()
куда ты его передаешь, в коллекцию, массив? Там есть индексы или ключи, которые ссылаются на эти объекты...

Добавлено через 1 минуту
https://www.cyberforum.ru/java/thread2250765.html - дебагер тебе все покажет))
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
09.09.2018, 13:48
Цитата Сообщение от Иван24 Посмотреть сообщение
1) как обратиться к объекту класса, созданному в виде new ИмяКласса(), то есть к объекту без имени;
Через оператор точка '.', имя объекта это по сути ссылка на него, можно конечно работать без обьявления ссылки, например new Thread().start(); new Thread() - создаете объект типа Thread и у него вызываете метод старт start(). Но так делать не объязательно, если не понимаете то не вижу выгоды этим пользоваться.
Цитата Сообщение от Иван24 Посмотреть сообщение
2*) как удалять подобные объекты;
В Java вы не удаляете объекты, это происходит автоматически.
Цитата Сообщение от Иван24 Посмотреть сообщение
3) существует ли встроенный метод, подсчитывающий количество ранее созданных, а так же "живых (не уничтоженных)" объектов какого-либо класса.
Такого метода нет, но вы можете создать статическую переменную для подсчета количества созданий, но поскольку удаляются объекты автоматически то точное количество "живых" вы не узнаете.
Цитата Сообщение от Иван24 Посмотреть сообщение
Со временем объектов вида new MyMenuListener() может расплодиться очень много, появится риск путаницы.
Как вам уже ответили, используйте как ссылки на объекты индексы, например списка. Список можно очистить, таким образом "почти удалить" объекты.
Цитата Сообщение от Иван24 Посмотреть сообщение
Java
1
protected static MyStartNew msn = new MyStartNew();
удалите static (повторите экземпляры класса и объекта, чем они отличаются).
Да, и зачем вам protected?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
09.09.2018, 13:53
Цитата Сообщение от Иван24 Посмотреть сообщение
1) как обратиться к объекту класса, созданному в виде new ИмяКласса(), то есть к объекту без имени;
в общем случае уже никак, для того без имени и создаем

Цитата Сообщение от Иван24 Посмотреть сообщение
2*) как удалять подобные объекты;
это джава, не надо удалять объекты, об этом позаботятся

Цитата Сообщение от Иван24 Посмотреть сообщение
3) существует ли встроенный метод, подсчитывающий количество ранее созданных, а так же "живых (не уничтоженных)" объектов какого-либо класса.
есть способы отслеживать это, но тебе оно ни к чему, дебаггер правда освоить надо обязательно

Цитата Сообщение от Иван24 Посмотреть сообщение
Со временем объектов вида new MyMenuListener() может расплодиться очень много, появится риск путаницы.
не появится такой риск, так как управлять этими объектами ты не можешь

Цитата Сообщение от Иван24 Посмотреть сообщение
Откуда берётся статический контекст в данном случае (см. картинку)?
если верно понимаю ты там пытаешься вызвать статическое поле класса MyStartNew2, а поле msg не статическое
0
6 / 6 / 0
Регистрация: 17.08.2017
Сообщений: 141
10.09.2018, 12:41  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
если верно понимаю ты там пытаешься вызвать статическое поле класса MyStartNew2, а поле msg не статическое
Welemir1, есть два класса: MyPlay, MyStartNew2. Объект msn не статический, определяется в виде
Java
1
MyStartNew2 msn = new MyStartNew2();
в одноимённом классе. Метод startA() находится в классе MyPlay, и поэтому в строке
Java
1
closeWindow(MyStartNew2.msn.getWin());
я через точку уточняю к какому классу относится поле msn.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
10.09.2018, 13:19
Цитата Сообщение от Иван24 Посмотреть сообщение
я через точку уточняю к какому классу относится поле msn.
так можно "уточнять" только статические поля или методы
1
6 / 6 / 0
Регистрация: 17.08.2017
Сообщений: 141
10.09.2018, 17:27  [ТС]
Welemir1, а как тогда вызвать в другом классе не статический метод?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
10.09.2018, 17:42
Иван24, получить или создать объект этого класса!
можно же через какой-то метод объект передать (через конструктор скажем).
0
6 / 6 / 0
Регистрация: 17.08.2017
Сообщений: 141
10.09.2018, 18:09  [ТС]
Welemir1, простите, я Вас что-то не очень понял. Допустим у меня есть два класса: А и В. В каждом классе создано по одному не статическому экземпляру: a и b соответственно. При этом в классе А есть не статический метод m(), который я хочу вызвать в каком-нибудь не статическом методе класса В. Как мне поступить? Как вообще сделать "видимым" в классе А объект класса В?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
10.09.2018, 18:24
Иван24, в классе А создать экземпляр класса В (ну или передать в конструктор, например) и вызвать егго метод м ()
1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
10.09.2018, 18:44
Цитата Сообщение от Иван24 Посмотреть сообщение
В каждом классе создано по одному не статическому экземпляру
Не ограничивай мышление этим, не обязательно создавать объект класса внутри его самого, сейчас пример накидаю

Добавлено через 4 минуты
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Two {
    private final  Three three;
 
    public Two(Three three) {
        this.three = three;
    }
 
    public void useThreeObject(){
        three.doSomething();
    }
 
    public static void main(String[] args) {
        Two two = new Two(new Three()); // передали объект в конструтор
        two.useThreeObject(); //  используем метод этого класса
    }
}
 
class Three {
    public void doSomething(){
        System.out.println("Method of Three class");
    }
}
1
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
15.09.2018, 18:17
Можно вызвать Garbage Collector вручную, о чем я не знал..
и никто не подсказал.
0
 Аватар для Aviz__
2738 / 2047 / 507
Регистрация: 17.02.2014
Сообщений: 9,465
15.09.2018, 18:44
Цитата Сообщение от ViktorFX Посмотреть сообщение
Можно вызвать Garbage Collector вручную
а зачем?
Цитата Сообщение от ViktorFX Посмотреть сообщение
никто не подсказал
это реальность, Бро крепись, дальше будет не проще...
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
15.09.2018, 19:14
Цитата Сообщение от Aviz__ Посмотреть сообщение
это реальность, Бро крепись, дальше будет не проще...
Понимаю, потому и решил пробежаться по SE по второму кружку. Понимаю что все равно многое упущу но меньше чем за 1-м разом.
П.С. и пусть все те кто считает что чтобы хорошо научится (для меня это так ) достаточно 1 книги и на один раз, обдумают это еще раз. А те кто с нуля может выучить все за пол года (если такие реально есть ) могу им только позавидовать.
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
15.09.2018, 21:02
Цитата Сообщение от ViktorFX Посмотреть сообщение
Можно вызвать Garbage Collector вручную
Не совсем так. Вызов System.gc(); не означает, что мгновенно будет запущен GC. Вы просто сообщаете что необходимо запустить GC, но когда его запустить решает уже JVM.
1
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
15.09.2018, 23:27
Цитата Сообщение от JIeIIIa Посмотреть сообщение
Не совсем так. Вызов System.gc(); не означает, что мгновенно будет запущен GC. Вы просто сообщаете что необходимо запустить GC, но когда его запустить решает уже JVM.
О, а я не знал что можно так (пока видимо до этого не дошел). Видел пример в книге с Runtime
Java
1
2
Runtime r = Runtime.getRuntime();
r.gc();
потом автор посмотрел сколько чего,
Java
1
2
long mem1 = r.freeMemory();
long mem2 = r.totalMemory();
потом создал и заполнил массив объектами, и снова посмотрел,
потом обнулил каждый объект массива (странно что не массив, как бы подумал я, а именно в цикле каждый элемент поотдельности),
а потом вызвалr.gc(); и еще раз посмотрел сколько чего.
У него на бумаге все вышло, gc() хорошо почистил.
Я почему так много пишу, это тот же самый Runtime.getRuntime().gc(); что и System.gc(); ?
0
 Аватар для Aviz__
2738 / 2047 / 507
Регистрация: 17.02.2014
Сообщений: 9,465
16.09.2018, 08:11
Цитата Сообщение от ViktorFX Посмотреть сообщение
все равно многое упущу
не факт, Бро! Попробуй методу Тони Бьюзена для усвоения и воспроизведения информации.
1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
16.09.2018, 09:13
ViktorFX, главный то вопрос - тебе это зачем? ты сотнями тысяч объектов манипулируешь? так он и сам сработает
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
16.09.2018, 10:03
Цитата Сообщение от ViktorFX Посмотреть сообщение
это тот же самый
В документации все есть.
The call System.gc() is effectively equivalent to the call: Runtime.getRuntime().gc()
Если возникает необходимость, то надо не кровати двигать вызывать вручную GC, а дизайн программы менять.
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
16.09.2018, 12:11
Welemir1, JIeIIIa,
Да я с вами согласен, мне пока не надо его применять, просто я как раз пролистывал эту тему и вспомнил что недавно отвечал, и ответ мой был несовсем верным.
Вот пока в памяти свежо и уточнял
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.09.2018, 12:11
Помогаю со студенческими работами здесь

Взаимодействие между 3д объектами
Здравствуйте! Создаю 3д модель. И вот нужно, чтобы некий кран мог перетаскивать пластины с помощью присосок. Пластины в разных частях...

Взаимодействие CharacterController с другими объектами
Всем игроделам привет! Интересует вопрос: на персонаже висит CharacterController и всё движение происходит благодаря ему. Движение работает...

Взаимодействие между объектами в классах
Здрасте! У меня есть прога для регулирования расходов, в которой есть класс Account и класс Category. Есть ещё классы ManageAccounts(для...

Как организовать взаимодействие между объектами
В панели динамически создаю textBox (для примера) private void button1_Click(object sender, EventArgs e) { ...

Взаимодействие между объектами единой иерархии классов
Здравствуйте. У меня есть некоторый базовый класс window, который создает "окно" и представляет функции доступа к нему для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru