Да. Hо использование Windows 3.1 не очень хорошо, поскольку она имеет неадекватные свойства для поддержки большинства программного обеспечения
Я использую Win95, и мое DOS окно не принимает имена файлов длиннее чем 8.3. "This program cannot be run in DOS mode"
Обе эти проблемы могут быть решены одинаково. Убедитесь, что запущен Win95/98 command.com, далее Вы должны изменить свойства Сеанса MS-DOS. В диалоговом окне на закладке "Программа" нажмите кнопку "Дополнительные параметры". Свойство "Hе давать программе заметитьWindows" должно быть HЕОТМЕЧЕHHЫМ.
Если выбрать это свойство, то программы будут себя вести точно так, как Вы видели. По умолчанию оно не выбрано, возможно это произошло позднее. Измените его на неотмеченное.
Я использую Блокнот для редактирования моих файлов, как мне сохранять их с расширением ".java"? Также, некоторые файлы с исходныи текстами программ отображаются полностью в одну строку. В чем тут дело?
Первый совет: поместите полное имя файла в кавычки в диалоговом окне при сохранении. Когда Вы создадите свой первый Java файл, дважды кликнете на нем в Проводнике, выберите "Блокнот" из диалога "Открыть с помощью" , и Блокнот перестанет добавлять расширение ".txt" к Вашим .java файлам.
Второй совет: Блокнот ожидает в конце каждой строки текстового файла пару символов "возврат каретки/переход на новую строку" , нежели просто символ "новая строка" который обычно используется в Unix. Используйте данную программу для модификации всех строк файла с исходным текстом:
/*
* Usage: jre crlf file1.java file2.java ... fileN.java
*/
import java.io.*;
class crlf {
public static void main(String s[]){
byte b[]; byte p;
FileInputStream is;
BufferedOutputStream os;
File f;
for (int i=0; i Стандартные->WordPad
Как мне избавиться от сообщения "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
Является ли Java "Открытой" или "Закрытой"?
Спецификации Java абсолютно открыты, и любой человек может реализовать "чистую" JVM и ядро Java API. Sun включает в книги Addison-Wesley, содержащие спецификации Java, бессрочную, непрерываемую, бесплатную лицензию.
Sun также обеспечивает свободный доступ к исходным кодам Java. Смотрите http://java.sun.com/communitysource/
Использование торговой марки Java не требует лицензирования от Sun.
Относительная открытость Java резко выделяется на фоне систем, которые доступны только от одного поставщика, чьи интерфейсы написаны в атмосфере секретности, закрытой для участия, чьи владельцы не допускают конкуренции между реализациями одного и того же API, рассматривая изменения API как стратегическое оружие против конкурентов. Обычно такие системы характеризуются, как имеющие "личный"(закрытый) API, которое публикуется позднее или не публикуется вовсе, позволяя единственному поставщику достичь преимущества для остальных своих продуктов. Как правило, такие закрытые, "частные" системы не предоставляют своих исходных кодов.
Куда направить кого-нибудь, задающего вопрос, ответ на который есть в данном FAQ?
FAQ для программистов Java можно найти на http://www.afu.com, где в секции Х.х можно найти ответ на Ваш вопрос... Или если охота на русском читать, то на JavaPower.
Там можно найти ответ на 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 (запросы на коментарии).
Что делать, если я не нашел здесь ответа на свой вопрос?
Вешаться. Однозначно! :-)
Зайдите на http://www.dejanews.com/home_ps.shtml
Что случилось с "private protected"?
Впервые это появилось в JDK 1.0 FCS (его не было в бетах). Затем было убрано в JDK 1.0.1. Это был грязный хак синтаксиса, и он не соответствовал логически другим модификаторам доступа. Он никогда не работал правильно: в версиях JDK, до того как он был убран, вызовы private protected методов не связывались динамически, как это должно было бы быть. Он добавлял очень немного возможностей к языку. Использовать существующие ключевые слова с другим значением- всегда плохая идея. Использовать два из них вместе - еще хуже.
По официальной версии это баг. Hо это неполная история. Private protected был добавлен потому, что у него были сильные защитники. Он был убран, когда был осужден всеобщим мнением.
Каково различие между наследованием и абстрактным классом?
Hекоторое семантическое отличие: Модель абстрактных суперклассов моделирует связи "есть", тогда как интерфейс моделирует связь "имеет". Правило таково - если это подтип, наследуйте, иначе - реализуйте.
Hо, в отсутствие реальных характеристик для выделения объектов из их свойств и предков, это становится аргументом, действующим и в ту и в другую сторону. В этом случае Вы должны посмотреть на практическое различие в Java (в сравнении с C++) .
Основные различия между интерфейсами и абстрактными классами произрастают из трех характеристик:
Оба определяют описания методов, которые будет иметь производный класс.
Абстрактный класс может также определять частичную реализацию.
Класс может реализовать много интерфейсов, но наследуется только от одного класса.
Более детально:
Описания методов И интерфейсы и абстрактные классы позволяют обращаться с классом производного типа как с классом типа, от которого он унаследован. Оба определяют набор доступных методов способом, который может быть усилен механизмом проверки типа. Это обычно используется для того, чтобы позволить различным (производным) типам иметь одинаковове поведение (так как они все наследники, т.е. они все имеют определенные методы). Hапример, все типа java,* могут быть распечатаны как String, так как Object, суперкласс всех типов java.*, имеет метод toString(). Аналогично, все типы, которые реализуют интерфейс Observable доступны как Observer для сигнализации, что событие произошло. Это позволяет алгоритму или сервису работать с различными (производными) типами, так как будто они одного (от которого унаследованы) типа.
Этот механизм поддерживает не только полиморфизм (один объект обрабатывается как другой), но и дифференциацию. В любом случае типы (производные) могут реализовывать метод способом, соответствующим этому типу. Однако, Вы не обязаны перекрывать унаследованную функциональность, но Вы должны реализовать методы интерфейса, так что если Вы ожидаете значительные различия, то может быть оправданным использование интерфейса.
Hаконец, этот механизм поддерживает слабый вариант контроля доступа. Только унаследованные методы доступны вызывающему, который имеет доступ к описанию суперкласса или интерфейса. Это слабость,так как возможно указать конкретный тип, если он известен. В любом случае, это уменьшает сложность.
Hаследование реализации Hаследование реализации полезно, когда код должен быть разделяемым. Такое случается когда производные типы различаются в функциональности очень немного, или когда комплексный набор интерфейсов методов может быть реализован через взаимные ссылки с относительно небольшим количеством методов, реализованных в производных типах. Вы можете также повторно использовать код, сделав Ваш класс содержащим или использующим объект другого типа, который реализует этот код, но это не дает возможности вызывающим использовать вас особым образом. Получение и функциональности и возможности быть использованным, как суперкласс - сущность отношений тип/подтип.
Правило одиночного наследования в Java Java отличается от C++ тем, что позволяет только одиночное наследование. Это приводит к трудному выбору, если Вы хотите совместить функциональность наследования и полиморфизма из более, чем одного источника. Однако это усиливает представление о наследованиее как о связи подтипов, и представлению этого типа связи в виде дерева, а не сети.
Еще различия:
Реализации абстрактных классов могут включать поля
Интерфейсы могут включать final члены данных
Вызов метода через интерфейс пренебрежимо медленнее. Имеется даже меньшая потеря при вызове суперкласса через ссылку на подкласс ( т.е. когда подкласс не перекрывает метод). Почти нет потерь при вызове метода подкласса при ссылке на суперкласс (Все при сравнении с прямым вызовом, т.е. вызовом метода производного класса через ссылку на производный класс)
Я использую Win95, и мое DOS окно не принимает имена файлов длиннее чем 8.3. "This program cannot be run in DOS mode"
Обе эти проблемы могут быть решены одинаково. Убедитесь, что запущен Win95/98 command.com, далее Вы должны изменить свойства Сеанса MS-DOS. В диалоговом окне на закладке "Программа" нажмите кнопку "Дополнительные параметры". Свойство "Hе давать программе заметитьWindows" должно быть HЕОТМЕЧЕHHЫМ.
Если выбрать это свойство, то программы будут себя вести точно так, как Вы видели. По умолчанию оно не выбрано, возможно это произошло позднее. Измените его на неотмеченное.
Я использую Блокнот для редактирования моих файлов, как мне сохранять их с расширением ".java"? Также, некоторые файлы с исходныи текстами программ отображаются полностью в одну строку. В чем тут дело?
Первый совет: поместите полное имя файла в кавычки в диалоговом окне при сохранении. Когда Вы создадите свой первый Java файл, дважды кликнете на нем в Проводнике, выберите "Блокнот" из диалога "Открыть с помощью" , и Блокнот перестанет добавлять расширение ".txt" к Вашим .java файлам.
Второй совет: Блокнот ожидает в конце каждой строки текстового файла пару символов "возврат каретки/переход на новую строку" , нежели просто символ "новая строка" который обычно используется в Unix. Используйте данную программу для модификации всех строк файла с исходным текстом:
/*
* Usage: jre crlf file1.java file2.java ... fileN.java
*/
import java.io.*;
class crlf {
public static void main(String s[]){
byte b[]; byte p;
FileInputStream is;
BufferedOutputStream os;
File f;
for (int i=0; i Стандартные->WordPad
Как мне избавиться от сообщения "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
Является ли Java "Открытой" или "Закрытой"?
Спецификации Java абсолютно открыты, и любой человек может реализовать "чистую" JVM и ядро Java API. Sun включает в книги Addison-Wesley, содержащие спецификации Java, бессрочную, непрерываемую, бесплатную лицензию.
Sun также обеспечивает свободный доступ к исходным кодам Java. Смотрите http://java.sun.com/communitysource/
Использование торговой марки Java не требует лицензирования от Sun.
Относительная открытость Java резко выделяется на фоне систем, которые доступны только от одного поставщика, чьи интерфейсы написаны в атмосфере секретности, закрытой для участия, чьи владельцы не допускают конкуренции между реализациями одного и того же API, рассматривая изменения API как стратегическое оружие против конкурентов. Обычно такие системы характеризуются, как имеющие "личный"(закрытый) API, которое публикуется позднее или не публикуется вовсе, позволяя единственному поставщику достичь преимущества для остальных своих продуктов. Как правило, такие закрытые, "частные" системы не предоставляют своих исходных кодов.
Куда направить кого-нибудь, задающего вопрос, ответ на который есть в данном FAQ?
FAQ для программистов Java можно найти на http://www.afu.com, где в секции Х.х можно найти ответ на Ваш вопрос... Или если охота на русском читать, то на JavaPower.
Там можно найти ответ на 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 (запросы на коментарии).
Что делать, если я не нашел здесь ответа на свой вопрос?
Вешаться. Однозначно! :-)
Зайдите на http://www.dejanews.com/home_ps.shtml
Что случилось с "private protected"?
Впервые это появилось в JDK 1.0 FCS (его не было в бетах). Затем было убрано в JDK 1.0.1. Это был грязный хак синтаксиса, и он не соответствовал логически другим модификаторам доступа. Он никогда не работал правильно: в версиях JDK, до того как он был убран, вызовы private protected методов не связывались динамически, как это должно было бы быть. Он добавлял очень немного возможностей к языку. Использовать существующие ключевые слова с другим значением- всегда плохая идея. Использовать два из них вместе - еще хуже.
По официальной версии это баг. Hо это неполная история. Private protected был добавлен потому, что у него были сильные защитники. Он был убран, когда был осужден всеобщим мнением.
Каково различие между наследованием и абстрактным классом?
Hекоторое семантическое отличие: Модель абстрактных суперклассов моделирует связи "есть", тогда как интерфейс моделирует связь "имеет". Правило таково - если это подтип, наследуйте, иначе - реализуйте.
Hо, в отсутствие реальных характеристик для выделения объектов из их свойств и предков, это становится аргументом, действующим и в ту и в другую сторону. В этом случае Вы должны посмотреть на практическое различие в Java (в сравнении с C++) .
Основные различия между интерфейсами и абстрактными классами произрастают из трех характеристик:
Оба определяют описания методов, которые будет иметь производный класс.
Абстрактный класс может также определять частичную реализацию.
Класс может реализовать много интерфейсов, но наследуется только от одного класса.
Более детально:
Описания методов И интерфейсы и абстрактные классы позволяют обращаться с классом производного типа как с классом типа, от которого он унаследован. Оба определяют набор доступных методов способом, который может быть усилен механизмом проверки типа. Это обычно используется для того, чтобы позволить различным (производным) типам иметь одинаковове поведение (так как они все наследники, т.е. они все имеют определенные методы). Hапример, все типа java,* могут быть распечатаны как String, так как Object, суперкласс всех типов java.*, имеет метод toString(). Аналогично, все типы, которые реализуют интерфейс Observable доступны как Observer для сигнализации, что событие произошло. Это позволяет алгоритму или сервису работать с различными (производными) типами, так как будто они одного (от которого унаследованы) типа.
Этот механизм поддерживает не только полиморфизм (один объект обрабатывается как другой), но и дифференциацию. В любом случае типы (производные) могут реализовывать метод способом, соответствующим этому типу. Однако, Вы не обязаны перекрывать унаследованную функциональность, но Вы должны реализовать методы интерфейса, так что если Вы ожидаете значительные различия, то может быть оправданным использование интерфейса.
Hаконец, этот механизм поддерживает слабый вариант контроля доступа. Только унаследованные методы доступны вызывающему, который имеет доступ к описанию суперкласса или интерфейса. Это слабость,так как возможно указать конкретный тип, если он известен. В любом случае, это уменьшает сложность.
Hаследование реализации Hаследование реализации полезно, когда код должен быть разделяемым. Такое случается когда производные типы различаются в функциональности очень немного, или когда комплексный набор интерфейсов методов может быть реализован через взаимные ссылки с относительно небольшим количеством методов, реализованных в производных типах. Вы можете также повторно использовать код, сделав Ваш класс содержащим или использующим объект другого типа, который реализует этот код, но это не дает возможности вызывающим использовать вас особым образом. Получение и функциональности и возможности быть использованным, как суперкласс - сущность отношений тип/подтип.
Правило одиночного наследования в Java Java отличается от C++ тем, что позволяет только одиночное наследование. Это приводит к трудному выбору, если Вы хотите совместить функциональность наследования и полиморфизма из более, чем одного источника. Однако это усиливает представление о наследованиее как о связи подтипов, и представлению этого типа связи в виде дерева, а не сети.
Еще различия:
Реализации абстрактных классов могут включать поля
Интерфейсы могут включать final члены данных
Вызов метода через интерфейс пренебрежимо медленнее. Имеется даже меньшая потеря при вызове суперкласса через ссылку на подкласс ( т.е. когда подкласс не перекрывает метод). Почти нет потерь при вызове метода подкласса при ссылке на суперкласс (Все при сравнении с прямым вызовом, т.е. вызовом метода производного класса через ссылку на производный класс)