Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удивитиельная природа ArrayStoreException 
V
    Опции темы
Royan
Дата 27.4.2007, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Вот здесь есть маленький примерчик http://java.sun.com/j2se/1.5.0/docs/api/ja...eException.html
Собственно я вообще не понимаю почему там возникает какое-то исключение, когда если написать так

Код

Object s = new String(); 
s = new Integer("2");

никакого исключения нет и в помине.




--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
kkorsakoff
Дата 27.4.2007, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 3
Всего: 14



смотрим пример
Код

     Object x[] = new String[3];
     x[0] = new Integer(0);




Object x[] = new String[3];

Создается массив из String с длиной равной 3.
То что, используется ссылка на него как Object x[] ничего не меняет, фактически массив должен состоять только из строк

 x[0] = new Integer(0);

Попытка положить Integer в этот массив. Вполне логично, что такая попытка должна окончиться неудачей

Это сообщение отредактировал(а) kkorsakoff - 27.4.2007, 11:45
PM MAIL WWW ICQ   Вверх
Royan
Дата 27.4.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Никакой логики не вижу. Ссылка она и есть ссылка. Java - это не type safe language. Почему должно валиться исключение в случае массива, но не в случае переменной? Не понятно. В общем эта тема к сведенью, поэтому не закрываю. Желающие приводите свои доводы.


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
RebornCrusader
Дата 28.4.2007, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 18.1.2007
Где: Владивосток

Репутация: 2
Всего: 6



Чтобы было понятнее, переименую переменную:
Код

Object o = new String(); // Строка (String) это объект (Object) 
o = new Integer("2"); // Число (Interger) это объект (Object)

Всё логично, мы объявили ссылку наиболее общего типа, соответственно суём туда что угодно. Но с этой ссылкой мы и будем работать как с "просто объектом". Захотим использовать специфику String или Integer (обращаясь к членам или передавая как параметр), должны будем использовать cast.

Теперь массив:

Код

Object x[] = new String[3]; // Массив строк (String[]) это массив объектов (Object[]) 
x[0] = new Integer(0); // x - ссылка на массив объектов, но x[0] - это уже ссылка на элемент, имеющий конкретный тип (String). 
// Естественно, это работать не будет!


Если проводить полную аналогию с переменной, надо писать так:
Код

Object x[] = new String[3]; // Массив строк (String[]) это массив объектов (Object[]) 
x = new Integer[3]; // Массив чисел (Integer[]) это массив объектов (Object[]) 
// Этот код работоспособен!


Нет никакой ложки ;)

--------------------
"Fais se que dois, - adviegne que peut. C'est commande au chevalier"
PM   Вверх
Royan
  Дата 28.4.2007, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Цитата
Нет никакой ложки ;)

Позвольте, коллега, вопрос. Cколько типов ссылок в языке Java?


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Kangaroo
Дата 28.4.2007, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Почитай Java's gotchas


--------------------
Lost....
PM MAIL MSN   Вверх
RebornCrusader
Дата 28.4.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 18.1.2007
Где: Владивосток

Репутация: 2
Всего: 6



Цитата(Royan @  28.4.2007,  18:56 Найти цитируемый пост)
Позвольте, коллега, вопрос. Cколько типов ссылок в языке Java?

Не понял вопроса. Что подразумевается  под словом "тип ссылки"? Если в контексте weak/soft, то это к теме не относится. Если нет... Я употреблял это словосочетание в смысле класса или интерфейса, но с вашим вопросом это никак не вяжется.

Собственно, ссылка, данная Kangaroo, всё хорошо поясняет. Да и ещё кое-что, о чём я не задумывался ;)
--------------------
"Fais se que dois, - adviegne que peut. C'est commande au chevalier"
PM   Вверх
Royan
  Дата 28.4.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Прошу прощения за тупеж smile Я наконец-то сообразил, что имеется ввиду и почему вылетает исключение. Я не верно истолковал следующий комментарий уважаемого RebornCrusader'а 
Цитата

 x - ссылка на массив объектов, но x[0] - это уже ссылка на элемент, имеющий конкретный тип (String).


Если навести кристальную чистоту, то ясность проступает в следующем определении.
Ссылки элементов массива объявляются типом, который используется для инициализации объекта массива.

Kangaroo, Приведенная статья как раз не объясняет главного, что типы элементов массива объявляются как переменные с типом эквивалентным тому, что используется для инициализации массива.

RebornCrusader, Я говорил о ссылках в их прямом смысле я ошибочно полагал что, подложенная свинья, именно в них



--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.