Java — различия между версиями
Snurk (обсуждение | вклад) (→FAQ) |
Snurk (обсуждение | вклад) (→Домашние задания) |
||
(не показана 21 промежуточная версия 2 участников) | |||
Строка 1: | Строка 1: | ||
+ | == Новости == | ||
+ | * 21.02 -- Лучше поздно, чем никогда! Внизу страницы появилось несколько примеров работы с исключениями. | ||
+ | == Рейтинг == | ||
+ | [https://docs.google.com/spreadsheet/pub?key=0Aif17q2hwUt4dDdEZ1NaUWdUakpFdGowRGMwYWVOSGc&output=html Текущий рейтинг] | ||
+ | |||
== Материалы с лекций == | == Материалы с лекций == | ||
* [[Java_2012-02-09 | Лекция №1]] | * [[Java_2012-02-09 | Лекция №1]] | ||
+ | * [[Java_2012-03-00 | Лекция про Generics]] | ||
+ | * [[Java_2012-03-07 | Лекция про внутренние классы]] | ||
+ | * [[Медиа:Reflection.pdf | Reflection]] | ||
+ | * [[Java_2012-04-04 | Лекция про многопоточные программы]] | ||
+ | * [[Java_Concurrent | Лекция про concurrent & concurrent.util]] | ||
+ | * [[Java_Network | Лекция о работе с сетью]] | ||
+ | * [[Java_Swing | Лекция про Swing]] | ||
== Домашние задания == | == Домашние задания == | ||
* [http://mit.spbau.ru/sewiki/images/7/71/Java_hmw_2012_02_15.pdf Первое задание] срок сдачи: 15 февраля | * [http://mit.spbau.ru/sewiki/images/7/71/Java_hmw_2012_02_15.pdf Первое задание] срок сдачи: 15 февраля | ||
* [http://mit.spbau.ru/sewiki/images/c/c1/Java_hmw_2012_02_23_fix.pdf Второе задание] срок сдачи: 23 февраля | * [http://mit.spbau.ru/sewiki/images/c/c1/Java_hmw_2012_02_23_fix.pdf Второе задание] срок сдачи: 23 февраля | ||
− | + | * [http://mit.spbau.ru/sewiki/images/5/55/Java_hmw_3.pdf Третье задание] срок сдачи: 2 марта | |
+ | * Четвертое домашнее задание, как вы уже знаете, у вас на выбор. [[Java_2012_02_29 | Первый вариант]], <b>черновик</b> второго варианта [http://mit.spbau.ru/sewiki/images/b/b6/Java-hmw-4.pdf здесь]. | ||
+ | * [[Java_2012_HW5 | Пятое задание]] НЕОБЯЗАТЕЛЬНО ДЛЯ ВЫПОЛНЕНИЯ | ||
+ | * [[Java_Test_20120321 | Контрольная]] | ||
+ | * [http://mit.spbau.ru/sewiki/images/e/e5/Java_hmw_6.pdf Шестое задание] срок сдачи: конец семестра | ||
+ | * [http://mit.spbau.ru/sewiki/images/1/18/Java_hmw_7.pdf Седьмое задание] срок сдачи: 17 апреля | ||
+ | * [http://mit.spbau.ru/sewiki/images/6/6c/Java_hmw_8.pdf Восьмое задание] срок сдачи: 10 мая | ||
Присылать задачи нужно на почту <b>sergeynurk@gmail.com</b> с копией <b>anton.m.kuznetsov@gmail.com</b> и темой: <b>Java homework <фамилия> tasks 1,2,3...</b> | Присылать задачи нужно на почту <b>sergeynurk@gmail.com</b> с копией <b>anton.m.kuznetsov@gmail.com</b> и темой: <b>Java homework <фамилия> tasks 1,2,3...</b> | ||
Строка 49: | Строка 67: | ||
* Отсутствие вывода <b>читаемой</b> полезной информации в блоках обработки ошибок | * Отсутствие вывода <b>читаемой</b> полезной информации в блоках обработки ошибок | ||
* Некорректное освобождение используемых ресурсов (в первую очередь, открытых ранее файлов) | * Некорректное освобождение используемых ресурсов (в первую очередь, открытых ранее файлов) | ||
+ | * catch (Exception ex) | ||
== Общие замечания == | == Общие замечания == | ||
Строка 69: | Строка 88: | ||
A: Нет, не нужно. Стандартный манифест файл, генерируемой утилитой jar, конечно можно оставить в архиве. | A: Нет, не нужно. Стандартный манифест файл, генерируемой утилитой jar, конечно можно оставить в архиве. | ||
− | == | + | == Примеры работы с "файловыми" исключениями == |
+ | |||
+ | Ниже приведены три известных нам способа корректно перехватить и обработать исключения при чтении из файла (аналогично для записи). | ||
+ | |||
+ | Можете использовать тот, который вам больше по душе. | ||
+ | |||
<source lang="java"> | <source lang="java"> | ||
/** | /** | ||
− | * The way I tried to use dealing with "file-reading" exceptions. | + | * The way I always tried to use dealing with "file-reading" exceptions. |
*/ | */ | ||
public static void firstExample() { | public static void firstExample() { |
Текущая версия на 22:16, 26 апреля 2012
Содержание
Новости
- 21.02 -- Лучше поздно, чем никогда! Внизу страницы появилось несколько примеров работы с исключениями.
Рейтинг
Материалы с лекций
- Лекция №1
- Лекция про Generics
- Лекция про внутренние классы
- Reflection
- Лекция про многопоточные программы
- Лекция про concurrent & concurrent.util
- Лекция о работе с сетью
- Лекция про Swing
Домашние задания
- Первое задание срок сдачи: 15 февраля
- Второе задание срок сдачи: 23 февраля
- Третье задание срок сдачи: 2 марта
- Четвертое домашнее задание, как вы уже знаете, у вас на выбор. Первый вариант, черновик второго варианта здесь.
- Пятое задание НЕОБЯЗАТЕЛЬНО ДЛЯ ВЫПОЛНЕНИЯ
- Контрольная
- Шестое задание срок сдачи: конец семестра
- Седьмое задание срок сдачи: 17 апреля
- Восьмое задание срок сдачи: 10 мая
Присылать задачи нужно на почту sergeynurk@gmail.com с копией anton.m.kuznetsov@gmail.com и темой: Java homework <фамилия> tasks 1,2,3...
Вопросы можно задать по тому же почтовому адресу с темой Java question.
Рекомендуемая литература
- "Thinking in Java", Bruce Eckel
- "Effective Java", Joshua Bloch
Coding conventions
В отличие от C++, для Java есть общепринятые coding conventions от компании Sun.
В первую очередь обратите внимание на Naming Conventions. Настоятельно рекоммендуется отдавать предпочтение длинным мнемоническим идентификаторам.
Некоторые требования
Форма поставки кода
Задания должны присылаться в jar архивах. В архивы включаются только ваши исходники (.java файлы).
Для создания архивов используйте утилиту jar.
Каждая задача должна находиться в пакете ru.spbau.<ваша фамилия>.task<# задания>
Можете складывать несколько заданий в один архив.
Javadoc
Ко всем классам, интерфейсам и public/protected полям и методам должен быть написан осмысленный javadoc на грамотном английском языке.
Javadoc должен быть валидным (в частности, содержать все required tags).
Настоятельно рекоммендуется использовать консольные или встроенные в IDE средства проверки валидности javadoc.
Пример хорошего javadoc-а можно найти в любом классе стандартной библиотеки.
Exceptions
При проверке ваших решений большое внимание будет уделяться тому как вы работаете с исключениями.
Распространенные недочеты:
- Использование исключений для управления логикой программы
- Оборачивание проверяемых исключений в непроверяемые
- Подавление исключений (Пустые catch блоки)
- Отсутствие вывода читаемой полезной информации в блоках обработки ошибок
- Некорректное освобождение используемых ресурсов (в первую очередь, открытых ранее файлов)
- catch (Exception ex)
Общие замечания
- Некоторым вашим классам может понадобиться больше public методов, чем те, которые перечислены в условиях задач.
- Добавление дополнительных уровней абстракции приветствуется в том случае, если вы готовы обосновать принятые вами решения.
FAQ
Q: Можно ли использовать finalize для закрытия открытых файлов?
A: Нет, нельзя. На лекциях обязательно будет разобрано почему.
Q: Нужно ли всегда использовать утилиту ant?
A: Нет, не нужно. С ней обязательно попрактикуемся отдельно, использовать ее не обязательно.
Q: Нужно ли присылать какие-либо файлы помимо .java (metadata, build.xml)?
A: Нет, не нужно. Стандартный манифест файл, генерируемой утилитой jar, конечно можно оставить в архиве.
Примеры работы с "файловыми" исключениями
Ниже приведены три известных нам способа корректно перехватить и обработать исключения при чтении из файла (аналогично для записи).
Можете использовать тот, который вам больше по душе.
/**
* The way I always tried to use dealing with "file-reading" exceptions.
*/
public static void firstExample() {
String filename = "filename";
try {
BufferedReader reader = new BufferedReader(new FileReader(filename));
String line;
try {
while ((line = reader.readLine()) != null) {
/*TODO something*/
System.out.println(line);
}
} catch (IOException e) {
System.err.println("Strange IOException happened during reading. Message: " + e.getMessage());
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
System.err.println("Strange IOException happened during closing file. Message: " + e.getMessage());
e.printStackTrace();
}
}
} catch (FileNotFoundException e) {
System.err.println("Couldn't find file: " + filename);
}
}
/**
* The way to get rid of one level of try blocks.
* Significantly reduces depth when dealing with several files.
*/
public static void secondExample() {
String filename = "filename";
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(filename));
String line;
while ((line = reader.readLine()) != null) {
/*TODO something*/
System.out.println(line);
}
} catch (FileNotFoundException e) {
System.err.println("Couldn't find file: " + filename);
} catch (IOException e) {
System.err.println("Strange IOException happened during reading. Message: " + e.getMessage());
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
System.err.println("Strange IOException happened during closing file. Message: " + e.getMessage());
e.printStackTrace();
}
}
}
}
/**
* Brand new Java7 way of dealing with this example.
* Uses try-with-resources statement.
* For more information see:
* http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
* Remark: some exceptions that you dealt with in two previous examples might be suppressed here.
*/
public static void thirdExample() {
String filename = "filename";
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String line;
while ((line = reader.readLine()) != null) {
/*TODO something*/
System.out.println(line);
}
} catch (FileNotFoundException e) {
System.err.println("Couldn't find file: " + filename);
} catch (IOException e) {
System.err.println("Strange IOException happened. Message: " + e.getMessage());
e.printStackTrace();
}
}