|
|
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
Добрый день. JAVA я начал осваивать недавно, поэтому многие вещи в ней мне кажутся, мягко говоря, странными. Например. У меня есть некий метод, в котором я сначала создаю некий файл, потом что-то с ним делаю, в самом конце мне его нужно удалить. Без особых сомнений пришу следующий код: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. На что компилятор (видимо, резонно) возражает мне - "переменная WorkFile может быть не определена". Я даже, где-то с ним согласен. В другом языке я написал бы что-то вроде if valid-handle(WorkFile) или if WorkFile != null, и был бы счастлив. Но тут, если я все правильно понимаю, ничего из этого мне не поможет. Получается, что в finally нельзя использовать никакие переменные, которые были инициализированы в разделе try этой же процедуры. Собственно, вопрос - а что вообще можно использовать в секции finally? И как правильно следует решать задачи подобные приведенной? ЗЫ. Написать в finally TempFile = new File (Name) не предлагайте, это тривиально и мало где подойдет. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:18:31 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:22:16 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
stepplerus, почитайте про области видимости переменных, try и finally тут ни при чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:26:31 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
ТимоН, Увы, так тоже не работает. Та же ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:30:09 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
Скорее не про видимость переменных, так как с этим тут все в порядке, а с выделением памяти в Java. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:31:12 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
javapecker, Что не так с видимостью? С видимостью все хорошо. Переменная WorkFile, безусловно, видна внутри finally. Но вот с ее инициализацией, действительно, могу быть проблемы. Кстати, при неверно понятой области видимости, ошибка была бы другая: "символ не найден". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:32:06 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
stepplerus, прощу прощения, невнимательно посмотрел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:33:09 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
stepplerusУвы, так тоже не работает. Та же ошибка. не может быть, проверьте еще раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:37:47 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
ТимоН, Тем не менее: CopyPictureCatalog.java:157: variable WorkFile might not have been initialized if (WorkFile != null) { ^ 1 error ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:41:13 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
stepplerus, не может быть, сам только что проверил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:45:12 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
stepplerusТимоН, Тем не менее: CopyPictureCatalog.java:157: variable WorkFile might not have been initialized if (WorkFile != null) { ^ 1 error Присвоить значение переменной не забыли? Код: java 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:48:24 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
Добрый день, stepplerus! > Автор: stepplerus. ТимоН, > > Тем не менее: Точно в третьей строке написано Код: sql как было, Код: sql -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:48:58 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
Тем не менее, javapeckertry и finally тут ни при чем. В джаве просто запрещено использование неинициализированных локальных переменных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:51:24 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
javapecker, Вот, простой пример: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. У меня ошибка воспроизводится. Моя ЯВА так устарела? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:51:34 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraДобрый день, stepplerus! > Автор: stepplerus. ТимоН, > > Тем не менее: Точно в третьей строке написано Код: sql как было, Код: sql Воооот!!! Спасибо. -- Алексей JID: alxt@ya.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:52:12 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
stepplerus, не устарела, вы просто еще невнимательнее чем я) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:53:15 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
Ну во-первых в java принято называть переменные с маленькой буквы File workFile = .. Так легче визуально отличить вызов статических методов от нестатических. Далее, если ваша задача конкретно поработать с файлом потом удалить его, то лучше делать такЖ Код: java 1. 2. 3. 4. Третье, вариант Тимона должен работать, вы его хоть пытались запустить? Четвертое, вам действительно надо разобраться с моментом выделения памяти под объекты. В java обьявление переменной это всего лишь обьявление, память при этом не выделяется, особым случаем является присваивание ссылке значения null. Компилятор вам всем правильно говорит. Классическая идиома такая: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 14:54:29 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
stepplerusjavapecker, Вот, простой пример: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. У меня ошибка воспроизводится. Моя ЯВА так устарела?чоза тупняк-то вконце концов Код: plaintext 1. 2. 3. 4. 5. 6. что тут странного-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 15:01:49 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
grasoff.net, Да, в общем, уже все хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 15:14:09 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
Не, странная эта штука - Java. С одной строны, есть метод renameTo(), который переименовывает даже между различными устройствами (чего ни одна ОС не делает). То есть, сначала этот метод честно копирует в целевой файл, а потом удаляет исходный файл, походу теряя атомарность операции rename. А с другой стороны, нет метода copyTo(), который надо делать самому. Вот, кто бы объяснил, почему? "И так у них все" (С) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 17:02:36 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
stepplerusА с другой стороны, нет метода copyTo()Если кровь-из-носу надо, чтобы было в rt.jar - Java SE 7 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 17:14:15 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
Добрый день, stepplerus! > Вот, кто бы объяснил, почему? Авторы Явы были очень плохими архитекторами. Что можно- поправили, что нет- осталось криво. Но хорошо то, что есть кому предлагать хорошие идеи и их слушают. Тем и хороша. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 17:41:36 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
stepplerusНе, странная эта штука - Java. С одной строны, есть метод renameTo(), который переименовывает даже между различными устройствами (чего ни одна ОС не делает). То есть, сначала этот метод честно копирует в целевой файл, а потом удаляет исходный файл, походу теряя атомарность операции rename. А с другой стороны, нет метода copyTo(), который надо делать самому. Вот, кто бы объяснил, почему? "И так у них все" (С) потому что жаба изначально предполагалась кроссплатформенным средством. Оно может запускаться там где файловой системы вообще нет (банковские карты, телефоны), там где к файлам нет никакого доступа (вебстарт, апплеты), там где с файлами работают совершенно иначе (под досом и виндовс ранними, например, у файлов нет владельца). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 18:04:30 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
Вот понять бы еще, как со всей этой фигней ява стала промышленным стандартом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 18:15:47 |
|
||
|
Простой вопрос про finally
|
|||
|---|---|---|---|
|
#18+
[quot 1024]stepplerusНе, странная эта штука - Java. потому что жаба изначально предполагалась кроссплатформенным средством. Оно может запускаться там где файловой системы вообще нет (банковские карты, телефоны), там где к файлам нет никакого доступа (вебстарт, апплеты), там где с файлами работают совершенно иначе (под досом и виндовс ранними, например, у файлов нет владельца). Кстати, про владельцев. 1. Отбираю (в XP) у себя права на каталог, и File.listFiles() возвращает null, в то время как а я жду Exception. Ладно, оставим так. 2. Отбираю (в XP) у себя права на файл, все становится еще интреснее. Внутри одного устройства файл (неожиданно) переносится благополучно, сохраняя при этом все свои "запретительные" атрибуты. На другое устройство файл уже не переносится (ожидаемо), но при этом так же не происходит Exception, просто метод переноса возвращает false вместо true. Я что-то пропускаю в списке throw? Хотелось бы видеть, что именно происходит, а не просто "не шмогла". Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2012, 18:23:25 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37932203&tid=2131051]: |
0ms |
get settings: |
17ms |
get forum list: |
23ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
66ms |
get topic data: |
18ms |
get forum data: |
4ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
| others: | 336ms |
| total: | 556ms |

| 0 / 0 |
