WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Архив » Как статические методы взаимодействуют с наследованием?

Как статические методы взаимодействуют с наследованием?


Дата публикации: 17-03-2013

Статические (для класса, а не для объекта) методы не участвуют в перекрытии (выборе нужного метода во время выполнения на основании класса объекта) Возможно лучший и наиболее простой путь думать об этом ( и писать Ваш код ) - писать каждый вызов статического метода, используя полное имя класса:

class A {
public static method1() {
A.method2();
}
public static method2() {
}
}

class B extends A {
public static method3() {
A.method1();
}
public static method2() {
}
}
Сейчас прекрасно видно, что статический method2() вызывает A.method2(), а не B.method2(). A.method2() будет вызван независимо от того, используете Вы полное имя класса или нет, но использование "A." делает это очевидным для всех.


Почему класс String final? Я часто хочу перекрыть его.

Финальность гарантирует, что экземпляры String только для чтения ( класс String реализует объекты только для чтения, но если он не final, то возможно написать подкласс string, который позволит быть экземплярам изменяемыми.) Strings должен быть только для чтения для безопасности и эффективности.

Что касается эффективности, String очень часто используется, даже неявно компилятором Java. Еффективность, имеющаяся в классе String дает большие пpеимущества. Так как никто не может изменить String, то Вы не должны беспокоиться о том, кто еще ссылается на Ваш String. Проще оптимизировать доступ к объекту, про который известно, что он не меняется.

безопасность- еще более важная причина. Прежде чем String был изменен на final (пока Java 1.0 была еще бетой) было условие, которое могло быть использовано для преодоления ограничений секьюрити. Это могло быть сделано изменением пути к файлу в одном треде, псоле того как другой тред проверил, что доступ к нему разрешен и собирался открыть его.

Существуют другие пути для решения этой проблемы, но разработчики предпочли сделать String final, особенно так как имеется альтернативный класс StringBuffer .


Если я расширяю/наследую класс, наследуются ли конструкторы?

"Декларации конструкторов не являются членами. Они никогда не наследются и поэтому не являются предметом скрытия или перекрытия." Конструктор по умолчанию не наследуется, но обеспечивается. (См. JLS 8.6.7 Default Constructors)

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


Как мне записать звук в апплете?

Если у Вас Win95/NT, Вы можете использовать SoundBite - Аудиио Запись в Апплетах См. http://www.scrawl.com/store/ Он обеспечивает простой доступ к аудио данным в массивах: short[] left, right;


Java поддерживает PNG?

Да. PNG - Portable Network Graphics - обеспечивает беспатентную замену для GIFов и TIFFов. Если Вы сохраняете в GIF, то не забудьте оплатить авторский гонорар фирме Unisys - см. их страницу http://www.unisys.com/LeadStory/lzwfaq.html. Этот патент обясняет почему GIFы - это плохой выбор для создания интернетовских изображений.

PNG формат определен в RFC 1950, 1951, 2083, не обремененных лицензиями или патентами. См. также спецификацию PNG-1.1 на ftp://swrinde.nde.swri.edu/pub/png/documents.

PNG формат поддерживается Java Advanced Imaging API, который является частью Java 1.2 media API.


Должен ли я вместо RMI использовать CORBA? Или использовать DCOM? Или чего-нибудь еще?

Если Ваши распределенные программы целиком написаны на Java, то RMI обеспечивает более простой механизм, который позволяет пересылку данных, исходящих от реальных Java объектов, и автоматическую "сборку мусора" удаленных объектов.
Если Вам нужно подключиться к системе на C++ (или другом языке) или Вам нужны специфические CORBA службы, то CORBA - Ваш выбор. В июле 1997 года Sun анонсировала тот факт, что RMI начала более тесно работать с CORBA. Sun просто добавила в RMI транспортный уровень IIOP для поддержки взаимодействия с CORBA. Java программы могут использовать RMI для доступа к CORBA объектам через IIOP, - протоколе основанном на CORBA и разработанном OMG (Object Management Group). Это очень хорошая новость для тех, кто строит гетерогенные системы масштаба предприятия, хотя нужны некоторые добавления к IIOP для поддержки вещей, которые использует RMI.
Деятели из Microsoft пытались продвигать DCOM заявляя о том, что RMI изменяется или доживает последние дни. Это в корне неверно. RMI API остается неизменной в своей текущей форме. Использование DCOM ограничивает Вас тем, что код работает только на платформе Wintel, и полностью отрицает философию Java "write once, run anywhere" ("написано однажды, исполняется везде"). Вы должне будете перекомпилировать Ваш DCOM код, чтобы он работал на другой Microsoft'овской платформе, типа Compaq (бывшего DEC) Alpha. Вы должны остерегаться использования непереносимого, завязанного на одном производителе кода. DCOM/DNA имеет ограничения для использования на предприятии.
Другие сайты:
http://www.javaworld.com/javaworld/jw-10-1997/jw-10-corbajava.html
это хорошее введение в CORBA в мире Java. http://www.objenv.com/cetus сравнение CORBA/RMI.


Как мне заставить работать RMI между разными доменами?

Все ответы на вопросы, относящиеся к прокси приведены ниже. Вы должны сообщить программе где искать сервер. В этом случае Вы должны запускать клиента с опцией:
-Djava.rmi.server.hostname=hostname.domainname


Мне кажется, что RMI останавливает свою работу в JDK 1.1. Почему такое происходит?

Похоже что изменились правила того, где клиент ищет stub класс(класс-заглушку), делая необходимым сброс Вашего class path на клиенте после старта RMI registry. В частности, похоже на то, что rmic не был обновлен для нового соглашения "don't need $CLASSPATH for current dir" ("не нужен $CLASSPATH для текущего каталога"), в то время как копмпилятор был обновлен. Вам лучше явно снять установки classpath.
Другие сайты:
Есть несколько очень хороших источников от Sun, которые охватывают много простых и сложных RMI проблем.
Конечно, документация: http://java.sun.com/products/jdk/1.1/docs/guide/rmi/index.html
FAQи посвященные RMI и сериализации объектов http://java.sun.com/products/jdk/rmi/faq.html
Список рассылки RMI-USERS@JAVASOFT.COM, архив которого находится на http://chatsubo.javasoft.com/email/rmi-users/ Посетите архив!

После определенного числа соединений клиентов RMI к серверу (55 на моей системе), последующие попытки RMI соединения неудачны. Почему?

Вы использовали лимит по умолчанию в 64 дескриптора открытых файлов. Попытайтесь увеличить лимит в Вашей ОС. Существует практический лимит RMI соединений, который налагается масштабируемостью вииртуальной машины и производительностью сериализации объектов. Это все исправлено в JDK 1.2. Актуальное число активных клиентов, которое Вы можете обслуживать будет зависеть от суммарной загрузки (workload mix) (т.е. от числа клиентов, как часто они обращаются к серверу, и сколько работы выполняется при одном обращении).


Я использую RMI под Win95, и вызов Naming.lookup() выполняется очень долго. Как от этого избавиться?

Попытайтесь добавить запись о машине в Ваш файл "hosts". Обычно этот файл называется c:\windows\hosts (если он не существует, то должен быть файл c:\windows\hosts.sam). Файл hosts ищется стеком TCP/IP перед обращением к DNS, таким образом добавление записи может значительно ускорить Ваши поиски (lookups). Файл hosts используется чтобы отразить цифровые IP адреса на символьные. Чтобы Для того, чтобы указать имя хоста "localhost" с адресом 127.0.0.1 (IP loopback адрес) добавьте следующую строчку в Ваш файл hosts.
Домен продается

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Апрель 2024 (1)
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта



Случайная цитата

Неизвестный автор:

"ВКонтакте – место для лжи знакомым людям. Твиттер – место для выкладывания правды незнакомцам."

Опрос

Какими социальными сетями Вы пользуетесь?

Vkontakte.ru
Одноклассники
Мой Мир - mail.ru
Google Plus
Facebook
ЖЖ
Другие
Не пользуюсь