![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
Вот это определение массива объектов и его создание:
А как определить и создать массив указателей на объект MyClass? -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
| redrick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 547 Регистрация: 7.1.2004 Где: Москва Репутация: 3 Всего: 5 |
если я все правильно понимаю :
arrayOfObjects здесь и есть массив ссылок. в Java нет указателей как в С - это и понятно, ведь память берется из кучи - это забота VM и приложение не знает физических адресов объектов. -------------------- Имею Мнение Хрен Оспоришь |
|||
|
||||
| val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
ну, да, получается действительно, что массив ссылок.
Тогда все равно не понятно, моя программа создаёт массив ссылок из 10-ти штук на существующие 10 объктов типа MyClass. Ну не нужны мне эти 10 объектов, мне просто массив из 10-ти ссылок надо? А написать что-то типа такого:
не разрешают... -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
| redrick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 547 Регистрация: 7.1.2004 Где: Москва Репутация: 3 Всего: 5 |
1) зачем заводить если не нужны ? сортировать и т.п. ? ну сортировать то все равно объекты будешь. что то вот не понимаю тут
2) на вскидку не помню конкретно, но VM точно кучу оптимизаций делает, как то : не создавать объекты пока они не нужны. так что по памяти не очень проиграешь от такой строчки -------------------- Имею Мнение Хрен Оспоришь |
|||
|
||||
| polosatij |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 22.2.2004 Где: Stuttgart<-> ;Karlsruhe, Germany Репутация: 1 Всего: 8 |
хех...
он тебе никак не может показать существуюшие объекты (!!) ТАК КАК ОБъЕКТЫ НЕ СУЩЕСТВУЮТ В ТВОЁМ ПРИМЕРЕ! это и есть ссылки =) т.к. объекты ты не дефинировал! |
||||||
|
|||||||
| Gretchen |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 25.8.2004 Где: München Репутация: 1 Всего: 4 |
MyClass[] arrayOfObjects; Так объявляется объект типа "Массив объектов MyClass". Без указания размера. |
||||
|
|||||
| val |
|
||||||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
Затем вводить, чтобы потом в них писать адреса уже существующих объектов. Я хочу иметь массив из 10-ти нулевых ссылок, чтобы в последсвии, присваивать им реальные адреса созданных в другом месте объкстов. Это возможно? Добавлено @ 13:46
Ну, ребята, запутали.... -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
||||||
|
|||||||
| val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
Вот например, так я могу работать с простыми указателями:
Как видно, я не создаю second объекта, а использую его, как ссылку, чтобы сделать такой вот обмен... Добавлено @ 13:54 Для подобных целей мне и нужет массив указателей... Это сообщение отредактировал(а) val - 17.2.2005, 13:53 -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
| Gretchen |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 25.8.2004 Где: München Репутация: 1 Всего: 4 |
Ну извини Это я неправильно выразилась. Когда с Java работаешь, то говоря объект подразумеваешь ссылку на обект. А вообще, если писать MyClass[] arrayOfObjects = MyClass[10]; то в arrayOfObjects стоит десять null ( нулевых ссылок ) и ты можешь теперь каждому arrayOfObjects[i] присвоить ссылку на объект типа MyClass. Т.е. arrayOfObjects[i] то же самое, что и second Это сообщение отредактировал(а) Gretchen - 17.2.2005, 14:05 |
||||||||
|
|||||||||
| Tamerlann |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 10.11.2002 Где: Минск, Беларусь Репутация: 2 Всего: 2 |
Про массивы:
Это объявляет ссылку на адрес, по которому будет храниться сам массив, т.е. набор ссылок на объекты. Но это еще не выделило память для этих будущих ссылок.
Это выделило в памяти count ссылок на объекты SomeClass (размер определен раз и навсегда). Теперь они будут доступны так:
НО! Определение размера массива касается только самого массива. Никаких объектов SomeClass ещё не существует. Все ссылки в массиве null. Зато теперь (только после определения размера) можно использовать массив для хранения ссылок:
Выход за пределы массива дает ArrayIndexOutOfBoundsException. Защитас. Вообщем, чтобы программист не лез в куче в непозволенную область памяти. Это сообщение отредактировал(а) Tamerlann - 17.2.2005, 14:15 --------------------
http://timursdev.blogspot.com/ |
||||||||
|
|||||||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 4 Всего: 317 |
Если говорить на низком уровне то в Ява есть примитивные типы и ссылочные типы. Примитвные знаем, а ссылочные типы для любого обьекта занимают один и тот же размер и содержат ссылку на класс и на обьект в куче. Другими словами массивы Object a[]=new Object[10] и Integer b[]=new Integer[10] занимают один и тот же размер памяти. Это массивы ссылок, не обьекты! Ссылочный тип указывает на обьект в куче, который уже имеет свой размер, все обьекты разбросанны по памяти.
Когда обращаемся a[0] - мы достаём ссылку на обьект из a[0], затем находим по ней обьект и делаем что нужно(грузим ссылку на стек). Если сказать a[0]=a[1] то обе ячейки указывают на один обьект. Null ссылки не указывают ни на какой обьект, потому кроме самой ссылки более памяти не занимают. Это отличается от C++, где Object a - резервирует место под обьект, а а это не ссылка, это реальный адрес обьекта. Массив Object a[10] создает всё обьекты друг за другом, возможна навигация по вычисляемому смещению. В Ява как говорилось несколько раз выше всё работает через ссылки, нет для неё обьекта, нет тратим и память. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
Да, всем спасибо.
Итого, этот код создает массив из 10 null-указателей на Integer объекты:
-------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
| val |
|
||||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
Путаница была в том, что такой код уже работает по другому:
Сразу можно писать:
-------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
||||
|
|||||
| Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Дa все это на самом деле указатели, самые что ни на есть, только защищенные - без арифметики и проч. Названныe ссылками.
а чем это отличается от
? -------------------- |
||||
|
|||||
| NotGonnaGetUs |
|
||||
|
Unregistered |
Нет в java указателей. Использовать этот термин, особенно в контексте языка С - совсем глупо. Особо яростные фанаты, могут убедиться, что в записи Object o = new Object(); o указывает не на адрес памяти, где хранится объект Object, а на адрес памяти, где хранится адрес памяти, где хранится объект Obect %) Кроме того, переменная сохраняет не только "адрес в памяти", но и фиксирует "тип" объекта. Желающие убедиться, могут протестировать код: String s = null; String ten = s.valueOf(10); Элменты массива инициализируются так же как и поля классов. Объекты - null, примитивные типы - 0. Например: Object[] a; // (a == null) - true; - массив объект, а не примитивный тип. Object[] b = new Object[2]; //тоже самое, что Object[] b = new Object[]{null, null}. |
||||
|
|||||
| Tamerlann |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 10.11.2002 Где: Минск, Беларусь Репутация: 2 Всего: 2 |
Как это нет? А что же тогда хранится в массиве:
Другое дело, что с этими адресами ничего сделать нельзя, кроме как получить доступ к объекту по этому адресу. (т.е. нельзя произвольно поменять адрес и т.д.)
Не понял? А подробнее можно, пожалуйста? Зачем?! Это сообщение отредактировал(а) Tamerlann - 18.2.2005, 18:30 --------------------
http://timursdev.blogspot.com/ |
||||||
|
|||||||
| Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Глубокое замечание
Ссылок тоже, кстати, нет (в С++ смысле), потому все-таки я предпочитаю думать о них как о защищенных указателях. NotGonnaGetUs , зарегистрируйся пожалуйста. -------------------- |
||||
|
|||||
| NotGonnaGetUs |
|
||||||
|
Unregistered |
Переменные с типом Object и именами objs[0], objs[1]....
Что бы JVM могла дефрагментировать память по своему усмотрению и не тратила время на поиск всех переменных ссылающихся на данный объект для их модификации. Это детали реализации SUN JVM, в других реализациях этого может не быть. ---- Говорить о сслыках, памяти и т.п. можно в рамках теории алгоритмов, которая не зависит от языков (в рамках модели выч.машины предложенной Кнутом). В этих терминах доказывается, что массив это трукутра в которой доступ к элементу осуществляется за o(1), двусвязный список - o(n), сортированое дерево - o(lonN) и т.п. Можно говорить в рамках конкретного языка - например С++ - выясняя как размещаются в памяти объекты, что бы потом можно было играться с арифметикой указателй. Но это уже совсем другое дело, к теории алгоритмов имеет отдалённое отношение. Если связывать теорию алгоритмов и java, то достаточно постулировать, что доступ к значению перменной и элементу массива осуществялется за o(1). Всё. Далее термин указатель может использоваться по его истинному значению: "указывать на что-то", а не "быть адресом ячейки памяти". Говоря, что в java есть указатели, но их обрезали, вы пытаетесь объяснить новое в терминах старого. Так поступал Ломоносов, представляя молекулы шестерёнками и используя механику для проведения вычислений. Результаты могут быть верны, но далеко не всегда Смысл слова "ссылка" в java ровно один: где-то существует САМ объект и перменные только указывают на него, не важно каким способом (адрес, уникальное ID, ссылка на клон объекта синхронизируемая с исходным объектом автоматически). Нет перменной, которая БЫЛА БЫ объектом. Лезть в детали конкретной реализации и говорить - перменная = указатель - глупо. В другой реализации это будет не так, а язык останется языком. |
||||||
|
|||||||
| NotGonnaGetUs |
|
|||
|
Unregistered |
Мне нравится красный цвет ника |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
pointer переводится как "указатель" -------------------- |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Еще раз: абсолютно все равно как реализованы поинтеры в Java, пусть хоть как указатели на указатели на указатели. Спецификация ничего об этом не говорит.
Есть 2 понятия - указатель (поинтер) и ссылка. Ссылка (в С++, C#) позволяет передавать не копию указателя на объект, а сам указатель. Благодаря этому можно сделать в шарпе
С поинтером такое не пройдет. Поэтому понятие "ссылка" в Java несколько сбивает с толку. Поэтому я и понимаю под ссылкой "защищенный поинтер". -------------------- |
|||
|
||||
| Guest |
|
||||||
|
Unregistered |
Знания каждого человека обременены опытом. Он накладывает на каждое слово дополнительный груз. То, что ты написал развязывает противоречия вокруг значений связанных со словом ссылка и указатель в твоей голове. Для другого человека это всё может показаться бредом :) Наверное как и то, что написал я. Спецификация java, по-существу, говорит что есть объект и есть переменные которые на него указывают. Какими прелагательными это обзывать сслыка на объект, узкатель на объект - не имеет разницы. Главное понимать суть и не путать с адресом в памяти или чем-то там ещё &) btw,
j - тоже будет указывать на 9? Если нет, то и разницы между ссылками в С++ и перменными java по сути нет. Просто в с++ есть доп. оператор ref :) Надеюсь при вызове Change(i); i - не клонируется? :) |
||||||
|
|||||||
| NotGonnaGetUs |
|
|||
|
Unregistered |
это я написал |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Если хочешь общаться - зарегистрируйся. Не хочешь - дело твое, но мне это кажется просто неуважением к собеседникам.
Я с анонимами общаться не хочу, работай они хоть с самой библиотеки мфти. -------------------- |
|||
|
||||
| Tamerlann |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 10.11.2002 Где: Минск, Беларусь Репутация: 2 Всего: 2 |
Но эти самые переменные "указывают" или ещё никуда (null), или на объект. В этом плане - указатель А вообще:
Это точно. Все равно говорим об одном и том же. Кокое из названий мы бы не употребляли далее, все же разберемся о чем речь. Это сообщение отредактировал(а) Tamerlann - 19.2.2005, 15:04 --------------------
http://timursdev.blogspot.com/ |
||||
|
|||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |