Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458

Создание объекта и передача аргументов в конструктор

08.04.2017, 09:38. Показов 4218. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, такой вопрос что делает следующая строчка :
Java
1
new NewClass(5);
Прошу обратить внимание не вот этот код:
Java
1
NewClass obj = new NewClass();
А именно первый!

Т.к. "знаю" что во втором коде ссылке(obj) присваивается объект из кучи с помощью команды new и создаётся "пустой" конструктор или конструктор создаёт объект из выделенной, командой new памяти (к стати если можно то тут по подробнее по поводу new, кучи и конструктора как они взаимосвязаны и как взаимодействуют).
Так вот в первом коде по моему происходит частично тоже самое, т.е. команда new выделяет память и кучи а конструктор уже создаёт объект если я не ошибаюсь НО мы же не присваиваем этот созданный объект ни одной ссылке и по идее если на объект не ссылается не одна ссылка то сборщик мусора уничтожит этот объект дабы освободить память, и вот вопрос ЗАЧЕМ создавать такой объект который будет уничтожен? И к стати первый код срабатывает почему-то(я не пойму почему, учитывая всё выше написанное).
Поясните что да как.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.04.2017, 09:38
Ответы с готовыми решениями:

Передача аргументов в конструктор
У меня есть в классе конструктор по умолчанию: Port(const char * br = "none",const char * st = "none",int b = 0); Я создал...

Динамическая передача аргументов в конструктор
Из кода C# при помощи пакета pythonnet вызываются методы машинного обучения пакета sklearn При этом должны передаваться аргументы,...

Сделать функцию, которая должна получать в качестве аргументов конструктор объекта и их количество
есть класс: class Item { public static List<Item> items = new List<Item>(); public int count; ...

11
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
08.04.2017, 12:58
Ты в какие то кучи залез, не нужные тебе на данном этапе. Когда какой то объект создают не присваивая переменной, как в первом случае, то обычно его сразу используют, например вызыват какой то метод или передают как аргумент какому то методу. Например new NewClass(5).print(); или obj.calculate(new NewClass(5));

Сборщик срабатывает только когда память уже существенно занята, а не сразу как ты создаешь объекты.
0
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
08.04.2017, 13:09  [ТС]
Welemir1,
Т.е. иными словами первый случай пишется когда нужно так скажем непосредственное задействование конструктора без использования ссылки на объект так?

Добавлено через 2 минуты
Цитата Сообщение от Welemir1 Посмотреть сообщение
obj.calculate(new NewClass(5));
Но вот это я не понял! Зачем obj и что делает new NewClass(5) в скобках

Добавлено через 2 минуты
obj обращается к ф-ции calculate и передаётся new NewClass(5) но как это можно понять как можно передать ЭТО
new NewClass(5)
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
08.04.2017, 13:17
блин, 1 тема 1 вопрос)))
да, первый случай нужен, когда смысла в переменной нет, ты используешь объект сразу и больше он нигде не нужен.

по второму случаю вот тебе пример.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Example {
 
    public static void main(String[] args) {
       UseNewClass obj = new UseNewClass();
       obj.calculate(new NewClass(5)); //тут как раз нет смысла в переменной, нужно сразу использовать класс
    }
}
 
class NewClass {
    private int x;
 
    public NewClass(int x) {
        this.x = x;
    }
 
    public int getX() {
        return x;
    }
}
 
class UseNewClass {
    public void calculate(NewClass newClass) { //метод принимает аргументом ОБЪЕКТ NewClass
        System.out.println(newClass.getX() + 2); //используем объект
    }
}
0
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
08.04.2017, 13:20  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
ты используешь объект сразу и больше он нигде не нужен.
И тут срабатывает Сборщик мусора так? Раз уж он(объект) больше нигде не нужен, верно?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
08.04.2017, 13:24
да забудь ты про него) он сработает если ты 10000 объектов создашь, на данный момент ему делать нечего, памяти хоть отбавляй. Если в теории то да, после того как объект использован, он когда то будет съеден сборщиком, ибо ссылок на него нет.
0
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
08.04.2017, 13:26  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
obj.calculate(new NewClass(5)); //тут как раз нет смысла в переменной, нужно сразу использовать класс
т.е. obj не нужен? или не нужна переменная ссылочного типа для передачи (5) и не проще ли сделать так
Java
1
obj.calculate(5);
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
08.04.2017, 13:33
Цитата Сообщение от Maxim09 Посмотреть сообщение
или не нужна переменная ссылочного типа для передачи (5)
да
Цитата Сообщение от Maxim09 Посмотреть сообщение
не проще ли сделать так
это же пример!!! конечно в данном случае проще, но есть полно моментов когда на вход принимаются объекты, а переменная не нужна. Вернее, в данном случае это невозможно, так как метод calculate принимает на вход только Объект, а не инт
0
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
08.04.2017, 13:44  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
метод calculate принимает на вход только Объект,
т.е. когда к примеру метод принимает в качестве аргумента не переменные простых типов а полиморфные аргументы так?

Добавлено через 4 минуты
Например так:
Java
1
calculate(Animal a)
А Animal в свою очередь родительский класс для других но это уже не причём.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
08.04.2017, 13:44
Лучший ответ Сообщение было отмечено Maxim09 как решение

Решение

объекты, да. Про полиморфизм речи не было.
0
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
08.04.2017, 13:50  [ТС]
И в случае с приведённым мной классом Animal то нижеследующий код выглядел бы:
Java
1
obj.calculate(new NewClass(5));
так:
Java
1
obj.calculate(new Animal(5));
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
08.04.2017, 13:58
Лучший ответ Сообщение было отмечено Maxim09 как решение

Решение

да, или просто obj.calculate(new Animal());
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2017, 13:58
Помогаю со студенческими работами здесь

JQuery, основы. Передача объекта в конструктор
Друзья, только начал осваивать JS и JQuery, в процессе изучения появились вопросы. вот пример: <!DOCTYPE HTML> <html> ...

Передача объекта в массив через конструктор
public class Student { private String imie; private int year; private double avg; static int licznik = 0; ...

создание объекта статически / большой список аргументов конс
создание объекта статически / большой список аргументов конструктора добрый день хочу подрихтовать "некую" библиотеку,...

Конструктор. Создание нового объекта
Всем привет, Пишу программу "Мой сборник CD". Как можно создавать объекты не вводя их количество в начале программы? Например, если...

Конструктор и создание объекта в main
Уважаемые форумчане, помогите распутаться в 3-х соснах. Пожалуйста. Для наглядности, имеем код: import java.util.*; class...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru