17 октября 2019 года    
Четверг | 11:58    
Главная
 Новости
Базы данных
Безопасность PC
Всё о компьютерах
Графика и дизайн
Интернет-технологии
Мобильные устройства
Операционные системы
Программирование
Программы
Связь
Сети
 Документация
Статьи
Самоучители
 Общение
Форум







Разделы / Программирование / Java

Frequently Asked Questions (with answers) for Java programmers.

Секция 2 из 7 - Предыдущая - Следующая
Все секции - 1 - 2 - 3 - 4 - 5 - 6 - 7

            }catch(IOException e){
                System.err.println(e.toString());
            }
        }
    }
}


Этот простой код программы, которая читает файл и записывает его
буферизованно.

Откомпилируйте "javac crlf.java" и запустите с помощью
java crlf outfile.txt
иначе просто используйте Wordpad вместо Блокнота. Wordpad можно найти через
меню Пуск->Программы->Стандартные->WordPad

*(Часть 2) Как мне избавиться от сообщения "out of environment variable
space"?

[*] Это сообщение может появиться под Windows, когда Вы используете длинные
CLASSPATH имена. Вам необходимо увеличить пространство переменных среды. В
Windows 95,8 добавьте в свой c:\windows\system.ini файл следущие строки:

        [NonWindowsApp]
        CommandEnvSize=4096


В NT щелкните правой кнопкой на "Моем Компьютере", выберите "Свойства" и на
закладке "Переменные среды" увеличте значение COMSPEC до необходимой
величины.

В pезультате в Вашем config.sys появиться что-то типа этого:

        shell=command /e:4096


                       ------------------------------

3. Общая информация

  1. (Часть 3) Является ли Java "Открытой" или "Закрытой"?

     [*] Спецификации Java абсолютно открыты, и любой человек может
     реализовать "чистую" JVM и ядро Java API. Sun включает в книги
     Addison-Wesley, содержащие спецификации Java, бессрочную,
     непрерываемую, бесплатную лицензию.

     Sun также обеспечивает свободный доступ к исходным кодам Java.
     Смотрите http://java.sun.com/communitysource/

     Использование торговой марки Java не требует лицензирования от Sun.

     Относительная открытость Java резко выделяется на фоне систем, которые
     доступны только от одного поставщика, чьи интерфейсы написаны в
     атмосфере секретности, закрытой для участия, чьи владельцы не
     допускают конкуренции между реализациями одного и того же API,
     рассматривая изменения API как стратегическое оружие против
     конкурентов. Обычно такие системы характеризуются, как имеющие
     "личный"(закрытый) API, которое публикуется позднее или не публикуется
     вовсе, позволяя единственному поставщику достичь преимущества для
     остальных своих продуктов. Как правило, такие закрытые, "частные"
     системы не предоставляют своих исходных кодов.

  2. (Часть 3) Куда направить кого-нибудь, задающего вопрос, ответ на
     который есть в данном FAQ?

     [*] FAQ для программистов Java можно найти на http://www.afu.com, где
     в секции Х.х можно найти ответ на Ваш вопрос...

     Там можно найти ответ на Bаш вопрос и увидеть, куда обращаться при
     будущих вопросах. При этом, побывав один раз, Вы наверняка придете и
     еще раз. Считается элементарной вежливостью перед посылкой любых
     вопросов в группу новостей посмотреть FAQ - Ваш вопрос может быть там
     описан.

     В общем FAQ для любой группы новостей можно найти, просматривая поток
     сообщений, можно также поискать через Deja News (Смотpите вопpос 1.4),
     или чеpез анонимный FTP на ftp://rtfm.mit.edu. Путь должен выгдядеть
     так :
     /pub/usenet-by-group/comp.lang.java.programmer/Java_Programmers_FAQ,
     что может привести к искомому напрямую, так как процесс доступа в
     указанные директории займет некоторое время. Кроме того, Вы можете
     просмотреть имена групп новостей на том же ftp сайте в диpектоpии
     /pub/usenet-by-hierarchy/. Там есть диpектоpии такие, как alt/, ba/,
     ca/, comp/, и поддиpектоpии в них, напpимеp, и т.п. Это поможет Вам
     исследовать мир новостных групп с помощью FAQ.

     Если у Вас нет анонимного доступа FTP, то можно также получить доступ
     к архиВам rtfm.mit.edu через mail-сервер. Пошлите по E-mail сообщение
     к mail-server@rtfm.mit.edu со словом "help" в теле сообщения для
     получения более подробной информации.

     Если Вы хотите посмотреть определения таких Internet стандартов как
     FTP, telnet, посетите сайт IETF по адресу http://www.ietf.org, где
     можно найти все RFC (запросы на коментарии).

  3. (Часть 3) Что делать, если я не нашел здесь ответа на свой вопрос?

     [*] Вешаться. Однозначно! :-)

     Зайдите на http://www.dejanews.com/home_ps.shtml

   * В "Newsgroups" выберите "comp.lang.java.programmer" (или любую
     другую).
   * В поле "Subject" найдите "Frotteur" (или любую другую интересующую вас
     тему).
   * Выберите "Create Filter"
   * Откроется новый документ, в котором следует выбрать ссылку

     nnn Documents (где nnn - некое число).

Вполне возможно, что вы найдете несколько ответов на ваш вопрос. Часть из
них может оказаться неполными, а некоторые и вовсе неверными. Что поделать,
это заложено в природе Usenet и бесплатной информации вообще. Если вы не
нашли интересующего вас ответа - пошлите свой вопрос в наиболее подходящую
ньюсгруппу. Не засоряйте ньюсгруппы кросспостингом. Знатоки недолюбливают
такой стиль поведения и, скорее всего, проигнорируют заданный таким образом
вопрос.

Для поиска в ньюсах рекомендуется также заглянуть по следующим ссылкам:
http://sunsite.unc.edu/java/cgi-bin/query
и http://asknpac.npac.syr.edu/

Здесь можно провести поиск по публикациям инфосервера Javaworld:
http://www.javaworld.com/search.html

*(Часть 3) Существуют ли списки рассылок информации по Java?

[*] Достаточно полный их перечень можно найти здесь:

http://java.miningco.com/msub7.htm

*(Часть 3) Где можно найти окончательные спецификации Java Language?

[*] В общем случае на http://java.sun.com.

В частности:

     http://java.sun.com/docs/books/jls/html/index.html (Java 1.0)...

...описание внутренних классов Java 1.1:

     http://java.sun.com/products/jdk/1.1/docs/guide/innerclasses/spec/innercla
sses.doc.html

...обновления Java 1.1:

     http://java.sun.com/docs/books/jls/html/1.1Update.html

...Java API:

     http://java.sun.com/products/jdk/1.1/docs/api

Эти материалы также доступны в виде книг (за подробностями обращайтесь на
веб-сервер). Также рекомендуем посмотреть "Разъяснения и Дополнения"
("Clarifications and Amendments"):
http://java.sun.com/docs/books/jls/clarify.html.

Спецификации виртуальной машины можно найти на:
http://docs.sun.com:80/ab2/coll.127.1/@Ab2CollToc?subject=java

*Где я могу найти информацию о проектирующихся Java API?

[*] JavaSoft придерживается политики создания API совместно с лидерами
разработок в области Java, с последующей публикацией черновых спецификаций
для общего рассмотрения и обсуждения. Планы JavaSoft насчет новых API ищите
на: http://java.sun.com:80/products/api-overview/index.html
APIs находящиеся под рассмотрением для включения в JDK 1.2 находятся на:

     http://java.sun.com/products/jdk/preview/docs/

*(Часть 3)Давно и безуспешно разыскиваю "Naming Conventions" в стиле Java.

[*] Посмотрите секцию "Naming Conventions" в спецификации языка:

     http://java.sun.com/docs/books/jls/html/6.doc.html#11186

Также гляньте на черновой вариант стандарта кодирования на Java (автор -
Doug Lea):

     http://gee.cs.oswego.edu/dl/html/javaCodingStd.html

Также стоит посмотреть секцию naming conventions данного FAQ'а.

*(Часть 3)Где бы посмотреть список ошибок, найденных в JDK?

[*] На Java Developer Connection http://java.sun.com/jdc перечислены все
известные Sun ошибки в Java, за исключением ошибок в системе безопасности.
На открытую публикацию ошибок в системе безопасности наложил вето Сановский
legal department. Если вы не обнаружили своей ошибки в списке - можно
послать рапорт об ошибке через http://java.sun.com:80/cgi-bin/bugreport.cgi

Обязательно проверьте, нет ли в списке вашей ошибки: во-первых, там же
может быть опубликовано решение проблемы и, во-вторых, не и без того
занятых людей сообщениями об уже известных ошибках.

Там же можно составить RFE (Request For Enhancement - запрос на улучшение)
или поднять вопрос об удобстве использования какой-либо возможности.
Возможно даже проголосовать за смену приоритета на исправление конкретной
ошибки. Зарегистрируйтесь на Java Developer Connection (халява, сэр):
http://java.sun.com/jdc. Затем ступайте на
http://developer.javasoft.com/developer/bugParade/#votes

*(Часть 3)Для каких компъютеров есть реализации Java? Существует ли Java
для Win3.1?

[*] Неполный список реализаций JDK можно найти на
http://java.sun.com/cgi-bin/java-ports.cgi
Список систем (весьма впечатляющий), на которых работает GPL Kaffee JVM
доступен на http://www.transvirtual.com/ports.html

Существует несколько реализаций Java под Win3.1. IBM'овский ADK1.02 можно
поискать по следующим ссылкам:

   * http://ncc.hursley.ibm.com/javainfo/latest/answers/faq0.html
   * http://www.alphaworks.ibm.com/formula

IBM, наряду с другими, также предлагает реализацию Java под Linux.
IBM'овский Jikes ищите на http://www.alphaworks.ibm.com/. На alphaworks,
вообще говоря, можно найти немало полезных вещей, profiler jinsight,
например.

Поддержку Java имеет NetscapeNavigator под Win3.1. Java, однако, никогда не
будет хорошо поддерживаться под Win3.1 из-за отсутствия в Win3.1
элементарных вещей, ожидаемых от современной операционной системы (в первую
очередь длинных имен и поддержки многопоточности (multithreading)).

Также гляньте на JavaSoft'овский набор JavaPC, преобразующий ваш PC в
клиентскую Java-систему (и, по желанию, назад в Win3.1/DOS). Он
предназначен для программных OEM'ов и больших корпораций, использующих
большое количество старых компъютеров, но вы можете использовать его и на
распоследних моделях Pentium III:
http://java.sun.com/products/javapc/index.html. JavaPC продаваемая за $100,
требует для работы 486'ую с 8MB и мощнее. В отличии от 16-битных версий
NetscapeNavigator'а и Microsoft'овского InternetExplorer'а, предоставляющих
JVM совместимую только с JDK API 1.0.2, JavaPC предоставляет возможность
использовать программы, написанные с использованием JDK API 1.1, на
компъютерах под управлением DOS и Windows3.x.

*(Часть 3) Где можно найти информацию по Java3D?

* Java 3D FAQ, расположенный на
http://tintoy.ncsa.uiuc.edu/~srp/java3d/faq.html, скорее всего ответит на
интересующие вас вопросы. Наряду с общей информацией по Java3D он содержит
и советы по программированию с использованием этого API.

*(Часть 3) Что такое "Группы Пользователей Java"?

[*] Существует большое количество групп пользователей Java (Java User Group
- JUG) по все му миру, как правило в городах и в центрах разработки
технологий программного обеспечения. Частичный список с координатами может
быть найден на http://sunsite.unc.edu/javafaq/usergroups.html.

Если Вы не можете найти JUG на месте проживания/учебы, Вы можете создать ее
сами - это просто и вполне приемлимо.

*(Часть 3) Что такое Java Bean (дословно - зеpна Java)?

[*] Java Bean - это Java класс, который удовлетворяет некоторым простым
условиям. Так, как он удовлетворяет условиям, он может быть легко обработан
утилитами, соединяющими Зерна вместе во время исполнения. Java Beans -
многократно используемые компоненты программ.

Думайте про Java Beans в программах, как про кубики в Lego. Вместо
складывания вместе кубиков, Вы можете легко сложить вместе классы и они
будут подходить и работать с друг-другом. См. http://www.jc100.org/.
См Java Beans FAQ на http://java.sun.com/beans/faq/faq.general.html.

*(Часть 3) Где я могу найти примеры использования библиотеки классов Java?

[*] Хорошие примеры, как использовать стандартные библиотеки есть в
двухтомнике "Библиотеки классов Java" написанные Чен, Ли, Крама и
опубликованые Addison Wesley. Один программист прокоментировал: "Когда мне
необходимо использовать незнакомые вещи из стандартной библиотеки, первое,
что я делаю, это читаю их примеры." Они доступны в онлайне на
http://java.sun.com/docs/books/chanlee/second_edition/vol1/examples.html и
http://java.sun.com/docs/books/chanlee/second_edition/examples.html

*(Часть 3) Как мне точно узнать, какая веpсия Java на моей системе?

[*] На системах Солярис Вы можете использовать комманду pkginfo, например:

   pkginfo -l SUNWjvrt

На что она даст приблизительно такой ответ:

   PKGINST:  SUNWjvrt
      NAME:  JavaVM run time environment
  CATEGORY:  system
      ARCH:  sparc
   VERSION:  1.1.6,REV=1998.07.30.16.21
   BASEDIR:  /
    VENDOR:  Sun Microsystems, Inc.
 ...и тд

Также можно попробовать

   java -fullversion

хотя это и неофициально-поддерживаемая комманда, и она исчезла в JDK 1.2.
Также попробуйте

   java -version

                       ------------------------------

4. Компилятоpы и вспомогательные пpогpаммы

  1. (Часть 4) Существуют ли Java-аналоги lex'a и yacc'a или желательно
     flex'а и bison'а?

     [*] Существует аналог lex'а назывемый JavaLex и аналог yacc'а
     называемый CUP.

     LALR(1) паpсеp JavaLex и JavaCup:
     http://www.cs.princeton.edu/~appel/modern/java/

     LL(k) паpсеp JavaCC: http://www.suntest.com/JavaCC/
     LALR(1) паpсеp SableCC (автоp - McGill U.)
     http://www.sable.mcgill.ca/sablecc/index.html, изначально
     создававшийся под лицензией GNU.

  2. (Часть 4) Где я могу найти запутыватель (obfuscator) байт кода?

     [*] Запутыватели Java заменяют оригинальные имена классов, полей и
     методов в байткоде на бессмысленные строки. Obfuscator'ы второго
     поколения, появляющиеся сейчас, также запутывают порядок исполнения и
     кодируют строковые константы. Разработчики используют запутыватели на
     свои апплеты, если они хотят скрыть свой код от других. Как правило,
     Вы не будете этого делать с прогpаммами, которые Вы выкладываете на
     Ваш веб-сайт для других. Это отрицает философию "открытых исходных
     кодов", позволяющей Вам учиться на чужом коде и учиться другим на
     Вашем.

     Zelix KlassMaster это коммерческий запутыватель. Он имеет свободно
     распространяемую версию на http://www.zelix.com/klassmaster
     Другой коммерческий запутыватель, со свободно загружаемой
     испытательной версией на http://www.4thpass.com/SourceGuard. Также, на
     http://www.primenet.com/~ej/ и
     http://www.math.gatech.edu/~mladue/HoseMocha.java, есть свободно
     распространяемые работы студентов и дpугих людей.

     Сообщались проблемы при их использовании с JDK 1.1.

     Данный запутыватель был полностью обновлен для полной совместимости с
     JDK 1.1: http://www.monmouth.com/~neil/Obfuscate.html

     Запутыватели предназначены для обмана декомпиляторов. Декомпиляторы
     переводят байт код назад в исходный текст Java. Mocha был первым и
     наиболее известным из декомпиляторов; он уже больше не поддерживается.
     На
          http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
     выложен декомпилятор (написанный на С++). Так, как это С++, есть
     разные версии для каждой архитектуры (ню-ню!). Также есть коммерческие
     продукты, такие, как SourceAgain с
          http://www.ahpah.com/

     http://www.meurrens.org/ip-Links/Java/codeEngineering/ - очень хорошый
     FAQ по темам: Построение Java Кода (Java Code Engineering) и Реверсный
     Анализ (Reverse Engineering).

  3. (Часть 4) Какие программы используются для создания .zip файлов,
     совместимых с Java программами?
     (напpимеp, classes.zip, moz3_0.zip)

     [*] Используйте утилиту jar из JDK 1.1(.1):
          jar [ опции ] [манифест] итоговый_файл исходный_файл
          [исходные_файлы]

     Напpимеp:
          jar cvf myJarFile.jar *.class

     создаст сжатый архив
          jar cvfO myJarFile.zip *.class

     создает полноразмерный (несжатый) архив (замечание: опция 'O'
     необходима для JDK1.0.2)

     На Unix'ах можно также использовать:
          zip -rn ".class" my_file.zip *

     Домашняя страница Info-ZIP: http://www.cdrom.com/pub/infozip/
     Свежий исходный код: ftp://ftp.uu.net/pub/archiving/zip/src/zip21.zip

     Нетскейповская версия утилиты коммандной строки JAR для упаковки и
     подписи называется "zigbert". Они также имеют утилиты с GUI,
     написанные на Java. Дополнительную инфоpмацию можно посмотpеть здесь:
     http://developer.netscape.com/software/signedobj/jarpack.html

     Если Вы архивируете файлы .class для JDK 1.0.2 с помощью ZIP (для 1.1
     нужно использовать Jar):
       1. архивируйте Ваши файлы без использования компрессии (можно
          использовать WinZip 6.2 и выше);
               комманда Unix:

               zip -r0 classes.zip <directories>

       2. Убедитесь, что главный класс в архиве в коневом катологе аpхива.
          (другими словами, не создавайте архив с foo/bar/myMain.class,
          если, конечно, класс myMain не находится в пакете с именем
          foo.bar. Иначе он должен называтся просто myMain.class). Ваш
          пакет должен находится в архиве, используя соответствующие
          файловой системе пути.
       3. Поместите аpхив в каталог с Вашей .html стpаничкой.
       4. Напишите нечто подобное нижеприведенному тэгу в .html странице:

          <APPLET CODEBASE="."
                  ARCHIVE=my_zip_file.zip,myOtherZip.zip,thirdfile.zip
                  CODE="my_main_class.class"
                  WIDTH=600 HEIGHT=250>
              </APPLET>


     Начиная с JDK 1.1, пример тэга APPLET с использованием файла Jar
     выглядит следующим образом:

     <APPLET ARCHIVE=myfile.jar
                     CODE=myapplet.class
                     WIDTH=600 HEIGHT=250>
             </APPLET>


     Эти строки будут использовать аплет под названием myapplet, который
     находится в файле myfile.jar. Пример тэга APPLET с использованием jar
     файла для храниения пакетов классов выглядит так:

     <APPLET ARCHIVE="myclasses.jar"
                     CODE="linden.net.MyApplet.class"
                     WIDTH=480
                     HEIGHT=120>
             </APPLET>


     Вы можете указать несколько имен jar файлов через запятую. Формат
     PKZIP использован для представления файлов Jar'ов.

*(Часть 4) Могу ли я скомпилировать программу на Java в бинарный
исполняемый файл, .exe, на PC?

[*] Компиляция в системнозависимый код нарушает переносимость, которая
является одним из главных преимуществ Java. Если Вы хотите создать
исполняемый код для того, чтобы было легче распространять и использовать
программы, обратитесь вместо такого решения к Jar.
Некоторые компании производят программные продукты для такой компиляции.
Обратитесь на странички Symantec http://www.symantec.com, Supercede
http://www.supercede.com, и Tower Technology http://www.twr.com. Две первые
ориентированы на Windows. Tower Technology поддерживает несколько клонов
Unix.

Также есть соответствующий компилятор, так называемый native Java compiler,
от фирмы IBM, известный как HPJ (High Performance Java -
высокопроизводительный Java) компилятор. Один из пользователей прислал
сообщение о том, что этот компилятор создал 2Мб исполняемый файл из 12Кб
java файла, и не работал при этом быстрее. Обратитесь по адресу
http://www.alphaworks.ibm.com/

Также посмотрите Instantiations JOVE
http://www.instantiations.com/jove.htm,
статья о проекте Toba
http://research.microsoft.com/research/lt/toddpro/papers/coots97.pdf,
журнал Network World, "Vendors Rush To Speed Java Performance" ("Поставщики
стремятся ускорить производительность Java"), 9 февраля 1998,
http://www.nwfusion.com/news/0209java.html

Компиляция в системнозависимый код сводит на нет одно из самых значительных
преимуществ Java: переносимость исполняемого кода. Кроме того, если Вы
хотите, чтобы Ваша Java DLL (или .exe) взаимодействовала с C++, Вам
необходимо определить, какой именно компилятор C++ Вам нужен и/или на самом
деле произвести некоторое связывание через подходящий компилятор C++. C++
не содержит стандартной ABI, поэтому существуют большие сложности с
возможностью к взаимодействиям. Каждый компилятор C++ использует различные
модели объектов, различные способы компоновки членов класса и различные
способы маскирования имён для linker-а.

С языком C много проще. Единственный вопрос в том, как упаковываются
структуры (например, выравниваются ли целые по границам четырёх байт?). Все
компиляторы C++ могут взаимодействовать с кодом на C, благодаря объявлениям
'extern "C"'.

Внимательно рассмотрите вопрос, зачем Вы хотите скомпилировать в
системозависимый код, и нет ли в самом языке Java способа удовлетворить
ваши цели. Может найтись веская причина для такой компиляции, но она должна
быть всесторонее продумана.

(Часть 4) Как мне посмотреть производительность отдельных частей моего кода
на Java (профилировать его)?

[*]java -prof MyClass

выдаёт некоторую основную информацию в файл java.prof, показывающую
количество вызовов метода. Строки имеют такую структуру:
       # of calls      method called     called by        time spent

       (количество      (вызываемый                      (затраченное
        вызовов)          метод)        (кем вызван)        время)

Работая в системе Unix, Вы можете отсортировать файл с помощью, например,
такой команды

sort -r +82 <java.prof > java.sort

У сторонних производителей имеются инструменты Java в большем количестве и
лучшего качества. Один из профилировщиков Java - это JProbe Profiler, он
доступен по адресу http://www.klg.com/jprobe. Как заявлено, JProbe легко
использовать. Другим профилировщиком является OptimizeIt, который доступен
с http://www.optimizeit.com. У каждого из этих профилировщиков есть
возможность изучить как производительность, с указанием какой метод сколько
времени занял, так и рассмотреть использование памяти, с указанием какие
объекты находятся в памяти и сколько её для них выделено. Очень важно знать
оба этих аспекта. В последней версии среды разработки CodeWarrior IDE
http://www.metrowerks.com есть профилировщик по времени для кода Java. У
продукта Java Workshop от Sun также имеется профилировщик по времени.

JDK 1.2 поставляется с некоторыми ограниченными встроенными возможностями
профилирования. В зависимости от Ваших нужд, этого может быть Вам и
достаточно. Краткую информацию о том, что встроено, можно получить,
запустив следующую команду:

   java -Xrunhprof:help

Например, Вы можете увидеть, какие методы занимают наибольшее время
выполнения, в связи с подробностями трассировок стека.

(Часть 4) Когда я использую javadoc и нажимаю мышкой на любой класс java,
который включен в JDK почему я получаю следующее сообщение?

    Netscape is unable to find the file or directory named:
    /E|/Jwrkshop/JDK/bin/java.lang.Throwable.html


    (Netscape не может найти файл или папку с именем:
    /E|/Jwrkshop/JDK/bin/java.lang.Throwable.html)

[*] Ссылки на классы JDK предполагают, что все сгенерированные html-файлы
находятся в одной папке и, в действительности, что все файлы для всех
классов, на которые имеются ссылки, сгенерированы одновременно. Нет
возможности сгенерировать файлы дополнительно так, чтобы они указывали друг
на друга, как бы Вам это хотелось.

Если же у Вас есть исходный текст для всех требуемых компонет (включая JDK
и все классы сторонних производителей), Вы можете внести список всех своих
пакетов и всего прочего в командную строку для javadoc, сгенероровав все
вместе сразу, но это обременительно. Конечно, если Вы получили некоторые
библиотеки как файлы .class, даже выполнение этой работы будет не
достаточно.

Помимо этого, javadoc не сгенерирует файлов с картинками - Вам надо будет
взять их из папки с картинками, там, где есть документация на JDK API. Вы
можете просто скопировать эту папку полностью в папку с Вашей собственной
документацией. javadoc - это очень приятная концепция, с некоторыми
недостатками реализации.

(Часть 4) Я работаю над проектом с большим количеством классов и использую
JDK. Перекомпиляция с нуля растягивается надолго, если я перекомпилирую
каждый класс по-отдельности. Как я могу перекомпилировать всё сразу?

[*] Первый способ:

     javac *.java

Второй способ:

     javac -depend tip.java

где "tip.java" это класс "на вершине айсберга", например, котоpый зависет
(использует) все остальные классы. Как правило, им оказывается Ваш основной
класс. Однако, известно, что опция "-depend" работает с ошибками и на неё
не следует полагаться. Также в этом случае не обеспечивается параллельная
компиляция, которая может быть использована на многопроцесссорных системах.

Без опции "-depend", стандартная команда "javac files" не просматривает
файлы вне непосредственно примыкающих зависимостей в поисках изменений
классов далее в иерархии.

Опция -depend рекурсивно ищет зависимости классов и перекомпилирует их.Эта
опция не помогает, если у Вас используются динамически загружаемые классы,
имена которых не могут быть определены компилятором в графе зависимостей.
Например, Вы используете что-то вроде:

     Class.forName(argv[0]);

Автор этого кода должен быть уверен, что классы, которые могут быть
динамически загружены, упомянуты в файле Makefile.

(Часть 4) Почему я получаю ошибку java.lang.UnsatisfiedLinkError при
попытке запуска Java программы, содержащей вызовы системнозависимых методов
(Native Method)?

[*] Ваша программа не может найти разделяемые библиотеки или DLL.

При работе на Windows 95/NT, убедитесь в том, что необходимая DLL
расположена по тому пути, который указан в переменной окружения PATH. (Это
требование действительно для обоих стандартов, как для приложений, так и
для апплетов. По крайней мере, если Вы пользуетесь Java Plug-in для доступа
к стандартным возможностям Java в Вашем броузере).

В Solaris, убедитесь в том, что переменная окружения LD_LIBRARY_PATH
включает путь к Вашей библиотеке.

Заметьте, что jdb ищет библиотеки, к названиям которых добавлен суффикс
"_g". Таким образом, если Вы намерены использовать jdb в Java приложении,
которое вызывает системнозависимые методы, Вам необходимо убедиться в том,
что соответствующие библиотеки упомянуты в пути у jdb. Такие "отладочные"
библиотеки могут быть просто переименованными копиями обычных библиотек.

Например, если Ваше приложение вызывает методы из библиотеки с именем
mynm.dll (в Windows) или mynm.so (в Solaris), скопируйте их в ту же папку
под именем mynm_g.dll или mynm_g.so.

(Часть 4) Анонимный класс не имеет доступа к внешнему private методу,
почему?

[*] Это известная ошибка в JDK 1.1.4. Исходный код:

    public class MyDialog {

            void Setup() {
            addWindowListener( new WindowAdapter() {
                  public void windowClosing(WindowEvent e) {
                         myCloseWindow(); }
                  }
                  );     // внутренний анонимный класс

            }

        private void myCloseWindow() {   // внешний private метод
            dispose();
        }
    }

Этот код зацикливает javac. Выходом будет сделать private метод не private,
или поименовать внутренний класс. Sun в компиляторе по умолчанию
устанавливает поле доступным для пакета.

(Часть 4) Какие сейчас основные релизы Java и их содержание?

[*] Пока есть три релиза Java от Sun, плюс несколько исправленных версий (с
третьей цифрой после точки). Перечислим их:

   * JDK 1.0.2
     Это был релиз FCS в мае 1996 года. В него внесено несколько
     исправлений в системе защиты JDK 1.0.
   * JDK 1.1
     В этом релизе (февраль 1997) введена новая модель событий в оконном
     интерфейсе. Также стандартными становятся поддержка JDBC и поддржка
     beans. Изменён и стандартизован интерфейс к системнозависимому коду
     JNI. Ведены также и внутренние классы.
   * JDK 1.2
     В этом релизе (декабрь 1998) библиотека Swing стала стандартом. Swing
     - это набор мощных системно-независимых графических компонентов.

(Часть 4) Какая разница между jre и java?

[*] Функционально они эквивалентны, с небольшими отличиями в работе с

Секция 2 из 7 - Предыдущая - Следующая

 Frequently Asked Questions (with answers) for Java programmers.
Лента новостей


2006 (c) Copyright Hardline.ru