|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
Mako : 85 Новичок Откуда: из мамы
|
Янв 05, 2012 14:05 |
|
|
Как обычно, под конец дня начинаю плохо соображать. Вот кусок моего кода. ИДЕ выделяет скобки после слов "ЗакрытьФайл_УничтожитьБуфер" и пишет в строке состояния буквально следующее: "unreported exception java.io.IOException; must be caught or declared to be thrown".
| Код: |
import java.io.*;
public class ArrayReader
{
private String ИмяФайла;
private BufferedReader СтрокиФайла;
public ArrayReader(String ИмяФайла)
{
this.ИмяФайла = ИмяФайла;
СтрокиФайла = ОткрытьФайлКакБуфер();
// бла-бла-бла...
ЗакрытьФайл_УничтожитьБуфер();
}
private BufferedReader ОткрытьФайлКакБуфер()
{
FileReader Файл = null;
BufferedReader Буфер = null;
try
{
Файл = new FileReader(ИмяФайла);
Буфер = new BufferedReader(Файл);
}
catch ( FileNotFoundException Исключение )
{
System.out.println("Файл " + ИмяФайла + " не найден!");
System.exit(0);
}
return Буфер;
}
private void ЗакрытьФайл_УничтожитьБуфер() throws IOException
{
СтрокиФайла.close();
СтрокиФайла = null;
}
// остальное неважно
} |
Чего ж тебе надо, хороняка (это я к ИДЕ обращаюсь)? Я же написал на великом и могучем Вильяма нашего Шекспира: "throws IOException"! |
|
|
|
 |
Mam(O)n : 61 Новичок
|
Янв 05, 2012 14:22 |
|
|
| В конструкторе ArrayReader(String) не отлавливается это исключение. |
|
|
|
 |
Mako : 85 Новичок Откуда: из мамы
|
Янв 05, 2012 14:37 |
|
|
| Mam(O)n писал(а): |
| В конструкторе ArrayReader(String) не отлавливается это исключение. |
А там оно и возникнуть не может. У меня ведь всё отлавливается там, где проводятся соответствующие операции (открытие файла, закрытие файла; есть ещё чтение из файла, здесь оно не показано, но там тоже отлавливается через try-catch). Или надо отлавливать обязательно и МЕЖДУ этими операциями? Если так, то это странно. _________________ Вы не поверите, но Java - самый низкоуровневый из изучаемых мною языков. |
|
|
|
 |
evillive : 810 Постоянный посетитель
|
Янв 05, 2012 14:52 |
|
|
| Mako писал(а): |
| У меня ведь всё отлавливается там, где проводятся соответствующие операции |
Как минимум в методе ЗакрытьФайл_УничтожитьБуфер() (ужос) ниче не отлавливается. |
|
|
|
 |
Vantuz-Subhuman : 660 Постоянный посетитель Откуда: издиснейленда
|
Янв 05, 2012 14:54 |
|
|
| Mako писал(а): |
| Или надо отлавливать обязательно и МЕЖДУ этими операциями? Если так, то это странно. |
В объявлении вашего метода сказано, что его работа может порождать довольно серьезное исключение. В конструкторе класса вы вызываете этот метод и не говорите, что делать, если исключение вывалится. Вполне естественно, что компилятор отказывается принимать такой код. Если это кажется вам странным, то вы просто плохо понимаете принципы работы исключений. Прописано читать полезные статьи.
UPD: Проще говоря, если вы хотите, чтобы конструктор просто передавал возникшее исключение дальше, то объявите "throws" и в нём. _________________ «One should never underestimate the predictability of stupidity»,
«Never attribute to malice that which can be adequately explained by stupidity»
Последний раз редактировалось: Vantuz-Subhuman (Янв 05, 2012 14:57), всего редактировалось 1 раз |
|
|
|
 |
Mam(O)n : 61 Новичок
|
Янв 05, 2012 14:56 |
|
|
| Mako писал(а): |
А там оно и возникнуть не может. |
Оно возникает в СтрокиФайла.close(). Далее из функции ЗакрытьФайл_УничтожитьБуфер() по указанному throws передаётся выше в вызываемую функцию. А как раз из конструктора вызывается ЗакрытьФайл_УничтожитьБуфер(), где уже это исключение ни отлавливается, ни передаётся выше по стеку вызовов. |
|
|
|
 |
Mako : 85 Новичок Откуда: из мамы
|
Янв 06, 2012 10:40 |
|
|
| evillive писал(а): |
| Mako писал(а): |
| У меня ведь всё отлавливается там, где проводятся соответствующие операции |
Как минимум в методе ЗакрытьФайл_УничтожитьБуфер() (ужос) ниче не отлавливается. |
Почему? Там же написано: "throws IOException". Видимо, я действительно совершенно не понимаю сам смысл исключений...
UPD: Прочитал сообщения Vantuz-Subhuman и Mamm(0)n и начал прозревать. Я-то по наивности своей воспринимал throws и try-catch примерно как директивы компилятору - мол, обрати особое внимание на этот кусок кода, там может возникнуть исключение, надо его отловить. А это, скорее, ссылка на объект. Тогда смысла в методе ЗакрытьФайл_УничтожитьБуфер вообще нет, проще отлавливать исключения во всём конструкторе целиком. А мне это казалось избыточным решением. Ведь тогда получается, что IOException будут отлавливаться, например, во время операции Integer.parseInt. _________________ Вы не поверите, но Java - самый низкоуровневый из изучаемых мною языков. |
|
|
|
 |
Skipy : 4801 Я тут живу! Откуда: Москва, Россия
|
Янв 10, 2012 23:26 |
|
|
| Mako писал(а): |
| Вот кусок моего кода. ИДЕ выделяет скобки после слов "ЗакрытьФайл_УничтожитьБуфер" и пишет в строке состояния буквально следующее |
Знаете, я бы на ее месте после "ЗакрытьФайл_УничтожитьБуфер" написал "Закрыть IDE, уничтожить программиста". Вас кто научил переменные и функции по-русски называть? _________________ С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других! |
|
|
|
 |
ТокиТори : 1066 Завсегдатай
|
Янв 10, 2012 23:58 |
|
|
| Вроде как Борис Нуралиев начал этот тренд... |
|
|
|
 |
rfq : 211 Новичок
|
Янв 11, 2012 7:33 |
|
|
| Skipy писал(а): |
| Знаете, я бы на ее месте после "ЗакрытьФайл_УничтожитьБуфер" написал "Закрыть IDE, уничтожить программиста". Вас кто научил переменные и функции по-русски называть? |
Вообще-то язык написания идентификаторов - это не вопрос культуры программирования, а решение заказчика. Я когда на советский ВПК (военно-промышленный комплекс, если вы не в курсе) работал, то не только идентификаторы, но и служебные слова по русски писал (_если _то _иначе _все). |
|
|
|
 |
Skipy : 4801 Я тут живу! Откуда: Москва, Россия
|
Янв 11, 2012 11:46 |
|
|
| rfq писал(а): |
| Вообще-то язык написания идентификаторов - это не вопрос культуры программирования, а решение заказчика. Я когда на советский ВПК (военно-промышленный комплекс, если вы не в курсе) работал, то не только идентификаторы, но и служебные слова по русски писал (_если _то _иначе _все). |
Ок. Напишите под win, перенесите под *NIX и скомпилируйте из командной строки. А потом посмотрите на результат. _________________ С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других! |
|
|
|
 |
rfq : 211 Новичок
|
Янв 11, 2012 12:07 |
|
|
| Skipy писал(а): |
| Ок. Напишите под win, перенесите под *NIX и скомпилируйте из командной строки. А потом посмотрите на результат. |
Без проблем. Надо только знать, в какой кодировке у тебя тексты, и сообщать об этом компилятору.
Создавая новый проект под Эклипсом, я сразу ставлю в нем любимую кодировку (UTF-8 ), и спокойно перемещаюсь между виндами и линуксом. |
|
|
|
 |
Skipy : 4801 Я тут живу! Откуда: Москва, Россия
|
Янв 11, 2012 17:10 |
|
|
Ну, в теории реально никаких проблем. Только количество вопросов по этому поводу таково, что мне пришлось отдельную статью писать про кодировки при компиляции.
А теперь представьте себе библиотеку, у классов которой методы названы по-русски. И ее использование, например, американцами. Их позабавят буквы "ю", "ж", "ы" и иже с ними. Если они их на клавиатуре найдут.
Исходный код должен умещаться в ASCII. Это правило, наработанное 15-ю годами разработки на Java. Всё остальное способно вызвать проблемы.
P.S. BTW, а если у Вас не Eclipse? Что с кодировками делать будете? Вот ничего нет, только notepad. _________________ С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других! |
|
|
|
 |
rfq : 211 Новичок
|
Янв 11, 2012 19:22 |
|
|
| Skipy писал(а): |
А теперь представьте себе библиотеку, у классов которой методы названы по-русски. И ее использование, например, американцами.
P.S. BTW, а если у Вас не Eclipse? Что с кодировками делать будете? Вот ничего нет, только notepad. |
Если предполагается использование бибиотеки американцам, то они должны рассматриваться как заказчики, а про приоритет заказчиков я уже писал.
Насчет notepad'a не скажу - у меня AlkePad, и в нем есть установка кодировок.
Если честно, то сам я использую только ascii. Это хорошая практика. Но не настолько универсальная, чтобы за отступление от нее убивать программистов. |
|
|
|
 |
Mako : 85 Новичок Откуда: из мамы
|
Янв 11, 2012 19:36 |
|
|
| Skipy писал(а): |
| Знаете, я бы на ее месте после "ЗакрытьФайл_УничтожитьБуфер" написал "Закрыть IDE, уничтожить программиста". Вас кто научил переменные и функции по-русски называть? |
Я бы на вашем месте избавился бы от послепраздничной депрессии и абстинентного синдрома, прежде чем с людьми общаться. Вас кто воспитывал, если вы такими словами кидаетесь, как "уничтожить"? _________________ Вы не поверите, но Java - самый низкоуровневый из изучаемых мною языков. |
|
|
|
 |
|
|
Страница 1 из 2 На страницу 1, 2 След. |
Список форумов
-> Файлы и потоки ввода/вывода |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|