|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
Vaxik : 61 Новичок Откуда: Санкт-Петербург
|
Мар 01, 2007 23:04 |
|
|
|
|
|
|
 |
Vaxik : 61 Новичок Откуда: Санкт-Петербург
|
Мар 01, 2007 23:06 |
|
|
1. Что такое Java?
Java является объектно-ориентированным языком программирования: объектно-ориентированнее не бывает . По сравнению с ним, такие языки программирования как С++, это просто языки, "поддерживающие объекты". В отличие от них в Java нет средств, позволяющих писать необъектно-ориентированные программы. |
|
|
|
 |
Vaxik : 61 Новичок Откуда: Санкт-Петербург
|
Мар 01, 2007 23:09 |
|
|
2. Я хочу изучать Java. С чего мне начать?
Прежде всего запаситесь компилятором и каким-нибудь IDE. Прочитайте пару книжек. А все вопросы, возникающие в процессе изучения вы можете спросить здесь же.
Последний раз редактировалось: Vaxik (Мар 01, 2007 23:31), всего редактировалось 5 раз(а) |
|
|
|
 |
Vaxik : 61 Новичок Откуда: Санкт-Петербург
|
Мар 01, 2007 23:10 |
|
|
3. Где можно скачать книги? Какие существуют печатные издания книг?
Безусловно, лучше API от Sun Microsystems вы не найдете.
Документацию можно скачать здесь.
Б. Эккель Философия Java.
С. Хортсман, Г. Корнелл "Java2 ", 2 тома. |
|
|
|
 |
Vaxik : 61 Новичок Откуда: Санкт-Петербург
|
Мар 01, 2007 23:16 |
|
|
4. Скачать и установить JDK?
Sun Microsystems в разделе Downloads, качаем, запускаем, устанавливаем.
Рассмотрим подробнее что же мы установили:
JRE - Java Runtime Environment. Устанавливается сама JVM(Java Virtual Machine), которая позволяет запускать Java-приложения. Нужна только пользователям, программистам ее мало.
JDK - Java Development Kit. Кроме JVM еще устанавливаются средства для разработки Java-приложений. Программистам без этого пакета никак. JDK можно ставить без JRE, там уже все есть.
Также после установки пакетов, нужно установить Переменные среды в ОС:
- Windows: заходим в свойства моего компьютера(Win+Break) -> Дополнительно -> Переменные среды.
В переменную path через точку с запятой выставляем путь к папке JDK/bin.
Создаем переменную JAVA_HOME и записываем путь к JDK.
Последний раз редактировалось: Vaxik (Мар 01, 2007 23:28), всего редактировалось 1 раз |
|
|
|
 |
Vaxik : 61 Новичок Откуда: Санкт-Петербург
|
Мар 01, 2007 23:18 |
|
|
|
|
|
|
 |
Староверъ : 7629 Ктапубеп Откуда: Elfland
|
Дек 22, 2009 22:05 |
|
|
6. О classpath
classpath - это область видимости ваших классов. Для того, чтоб один класс смог видеть другой класс, последний должен быть в classpath'e. Если хотите подключить к проекту библиотеку, она тоже должна быть включена в classpath при компиляции и во время запуска. Вот команда для компиляции простого приложения(допустим, наш главный класс лежит в пакете ru.javatalks.classpath.example.Main):
| Код: |
| javac -cp . ru.javatalks.classpath.example.Main.java |
Точка указывает на текущий каталог, она необходима дабы все классы из ваших пакетов были включены в classpath.
Если ваши библиотеки, которые необходимы для компиляции и запуска приложения, лежат в каталоге lib, то команда будет выглядеть следующим образом:
| Код: |
| javac -cp .;lib/somejar.jar;lib/otherjar.jar ru.javatalks.classpath.example.Main.java |
То есть все пути, в которые должен заглянуть компилятор, прописываются через точку с запятой(без каких-либо пробелов). Каждая библиотека должна прописываться отдельно, нельзя просто прописать каталог с jar'ами.
Если вы создаете исполняемый jar-архив вашего приложения, classpath там должен быть прописан в манифесте:
| Код: |
| Class-Path: .;lib/somejar.jar;lib/otherjar.jar |
Все выше сказанное касается так же запуска приложения с помощью java/javaw.
Последний раз редактировалось: Староверъ (Авг 01, 2010 10:59), всего редактировалось 2 раз(а) |
|
|
|
 |
Староверъ : 7629 Ктапубеп Откуда: Elfland
|
Фев 21, 2010 10:43 |
|
|
7. Исключения
Исключение (исключительная ситуация, exception) - это ненормальная ситуация в логике приложения. К примеру, метод считывает страницы с нескольких сайтов. В идеальном мире этот метод работал бы без всяких "но", однако в реальности у пользователя может оборваться соединение, тогда метод не может быть работоспособным. Это исключительная ситуация. Такие ситуации нужно отлавливать и правильно обрабатывать.
Исключения решают следующие проблемы:
1. Неоднозначность возвращаемых значений. К примеру, этот метод добывает число из строки:
| Код: |
| Integer.parseInt("fff"); |
Что мы должны возвращать в данном случае, если не будет никаких исключений? 0? Но, ведь, туда и "0" могли передать, как тогда определить отработала ли функция верно или нет?
2. Информативность. К примеру, метод работает с сетью и может выбрасывать ConnectionRefusedException при разрыве соединения. Если бы он не был помечен как throws ConnectionRefusedException, разработчик может и не подумать о том, что такая ситуация может произойти, а произойти она может через месяц, когда программу показывают заказчику
3. Неработоспособность объекта. К примеру, есть объект, который из БД выбирает Пользователей. Его используют другие объекты. При инициализации ему подсунули неправильный URL к базе. Этот объект не может выполнять свои функции. Что прикажете с ним делать? Он должен выбросить исключение, ибо он битый.
4. ШопНеЗабытьИсключение. Часто бывает необходимость реализовать метод какого-либо интерфейса, который, собственно, пока не особо нужен и тратить на него время не хочется. Однако возможно кто-то другой захочет этот метод вызвать. Чтоб не вышло ситуации, когда разработчик по несколько часов сидит перед монитором, не понимая, почему метод возвращает неправильные значения или не изменяет состояние объекта(были реальные случаи!), лучше всего не оставлять тело метода пустым, а выбрасывать UnsupportedOperationException.
Существует два вида исключений:
- Checked exceptions - это исключения, которые вызовут ошибку компиляции, если не обрамить их с помощью try-catch.
- Unchecked exceptions - те исключения, которые не обязательно отлавливать. Эти исключения должны быть описаны в комментариях, иначе как пользователь ваших классов узнает о его существовании? Эти исключения позволяют сократить количество строк кода и улучшить его читабельность, однако применять его где нипопадя нельзя. Есть несколько случаев, когда следует использовать этот вид исключений:
- Когда исключение может возникнуть по халатности разработчика. К примеру, IndexOutOfBoundException возникнет в случае, если программист неправильно оформит цикл, NullPointerException - если обратиться к null-ссылке.
- В последнее время пошла мода выбрасывать RuntimeException в случае возникновения критических ошибок в приложении. К примеру, если в файлах свойств была прописан неверный user-password к БД, то приложение не сможет продолжать работать. Обработать правильно такое исключение в большинстве случаев не представляется возможным, посему может быть уместным использовать именно эти исключения.
- Подробней о том, какие исключения когда лучше использовать можно прочитать в статье Barry Ruzek'а
Синтаксис отлавливания исключений может включать блок finally:
| Код: |
try {
someObject.someMethod();
} catch(SomeException e) {
logger.warning("Some exception occured", e);
} finally {
//some finalizations
} |
Блок finally будет выполняться независимо от того выбросилось ли исключение или нет. Служит он для того, чтоб, к примеру, закрыть соединение к файлу. Ведь, соединение должно закрыться в любом случае - произошло ли чтение из него с ошибками или без, в противном случае придем к утечки памяти из-за незакрытых ресурсов.
Описание типичный исключений в Java можно найти здесь.
Последний раз редактировалось: Староверъ (Ноя 23, 2010 23:59), всего редактировалось 1 раз |
|
|
|
 |
Староверъ : 7629 Ктапубеп Откуда: Elfland
|
Июн 11, 2010 20:13 |
|
|
Интерфейсы
Упрощенно можно сказать, что интерфейс - это абстрактный класс без единого реализованного метода. Вообще интерфейсы трудно назвать классом - они просто предоставляют описание того, как работать с механизмом (классом). Технические отличия между интерфейсом и абстрактным классом:
- все методы public abstract
- интерфейсы не могут содержать реализованных методов
- все константы public static final
- допустимо множественное наследование
Не нужно искать каких-то идеологических отличий интерфейса от абстрактного класса, по сути абстрактный класс без реализации можно назвать интерфейсом, т.к. он тоже будет служить описанием и не более.
Исключение: в отличае от абстрактного класса, интерфейс может применяться как маркер, например, Cloneable, Serializable.
Если до сих пор не понятно что такое интерфейс, вот шаги, которые вам нужно предпринять (спасибо bomba_flanker за их составление):
1) Сначала изучите наследование, поймите что это такое, обратите внимание на переопределение методов
2) Изучите понятие абстрактный класс, абстрактный метод, для чего необходимо объявлять абстрактные классы.
3) Если Вы поняли, с чем кушают абстрактный класс, то можете считать, что Вы поняли и интерфейсы, т.к. это практически одно и то же, за исключением некоторых "но" (например, интерфейсы позволяют осуществлять множественное наследование), но это уже другая история. _________________ JTalks Open Source Project, JT Webinars, JT Interview
Последний раз редактировалось: Староверъ (Мар 16, 2011 22:31), всего редактировалось 1 раз |
|
|
|
 |
Староверъ : 7629 Ктапубеп Откуда: Elfland
|
Июн 15, 2010 11:50 |
|
|
ClassDefNotFoundException
Каждый когда-либо сталкивается с этой ошибкой - означает она, что какой-то класс не находится в classpath, но где-то в приложении он используется. Выскакивает по следующим причинам:
- Не добавлена внешняя библиотека в classpath. Пути решения:
- библиотека может у вас лежать в каталоге, но вы ее не подключили - убедитесь, что вы проверили этот пункт
- вбить ошибку в гугл, у кого-то она уже скорей всего была
- пакеты как правило именуют логически здравые люди, и по их названию часто можно определить что за библиотека нужна
- библиотека добавлена, но версия не совпадает с той, которую используют классы других библиотек, соответственно и ошибка может отличаться, например, в ней может говориться, что в классе нет какого-то метода(NoSuchMethodException). Пути решения:
- конечно же гуглить!
- если вдруг не нагуглили (в чем я сомневаюсь), пробуйте разные версии библиотеки и отписывайтесь на форуме

- вы запустили java SomeClass, и какой-то класс не находится. Это значит вы не прочитали ничего по Java, советую начать с какой-нибудь книги для начинающих. Конкретно для этой проблемы решение здесь
- В классе есть статический блок инициализации, в этом блоке выскочило исключение, тогда class loader не загрузит класс, в таком случае при обращении к классу будет выброшено ClassDefNotFoundException
|
|
|
|
 |
Староверъ : 7629 Ктапубеп Откуда: Elfland
|
Сен 18, 2011 16:37 |
|
|
Final поля
Главное свойство final полей - им можно присвоить значение лишь раз, и оно присваивается при создании объекта. Зачем поля помечают как final:
- Это позволяет объект сделать immutable, - то бишь тот, что не изменяет своего состояния никогда после создания. Такие классы как Integer, Double - они immutable к примеру. Старайтесь делать классы immutable всегда, когда это возможно.
- Это упрощает чтение класса. Допустим, если у вас есть 10 полей и 5 из них никогда не изменяются, намного же проще об этом узнать пометив поле как final, вместо того, чтоб искать есть ли set-методы или другие какие методы, которые изменяют это поле. Здесь интересно описан лозунг final полей касающийся даного пункта, final будто говорит читателю: "Если ты в поисках сложностей, здесь ты их не найдешь".
- Это увеличивает производительность. Компиляторы делают некоторые минорные оптимизации, если видят, что поле final. Это больше относится к классам, объекты которых часто создаются, для классов-синглтонов например это не даст значимого улучшения производительности.
- Способствует потоко-безопасности. Этот пункт нужно немного пояснить. Допустим у вас есть класс Книга, в которой есть не final поля. Допустим мы создаем объект, передаем аргументы в конструктор и сразу же передаем его другому потоку. Так вот, если поля не final, первый поток может не успеть опубликовать изменения из своего кеша в основную память, где все потоки видят актуальное состояние переменных. Но с final полями такой проблемы нет, Java Memory Model гласит, что если поле помечено как final, JVM реализации обязаны его вернуть полностью сконструированным. Т.е. final слово - один из способов осуществить safe publication объекта[2]
Как все-таки можно изменить final поле? Только через Отражение обращаясь к нему напрямую через класс Field.
В заключение: всегда помечайте поля как final, когда это возможно. Точно так же, как вы помечаете поля private пока необходимо обратное, так же по отношению к полям используйте и ключевое слово final.
Список литературы:
[1] Joshua Bloch "Effective Java"
[2] Brian Goetz "Java Concurrency in Practice"
[3] Java Memory Model _________________ JTalks Open Source Project, JT Webinars, JT Interview |
|
|
|
 |
|
|
Страница 1 из 1
|
Список форумов
-> Основы языка Java |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|