Java programming выпуск 22-й
Здравствуйте дорогие читатели!
Начинающим
Продолжаем разговор о классах.
К сожалению никто из вас не прислал классов для дальнейшего рассмотрения примеров (в прошлом номере я просил вас об этом). Поэтому придется ограничится примитивным классам Point и рассматривать все примеры на нем.
Объявление методов
Методы - это подпрограммы, присоединенные к конкретным определениям классов. Они описываются внутри определения класса на том же уровне, что и переменные объектов. При объявлении метода задаются тип возвращаемого им результата и список параметров. Общая форма объявления метода такова:
тип имя_метода (список формальных параметров)
{
тело метода:
}
Тип результата, который должен возвращать метод может быть любым, в том числе и типом void - в тех случаях, когда возвращать результат не требуется. Список формальных параметров - это последовательность пар тип-идентификатор, разделенных запятыми. Если у метода параметры отсутствуют, то после имени метода должны стоять пустые круглые скобки.
class Point { int х, у; void init(int a, int b) { х = а; У = b; } }
Вызов метода
В Java отсутствует возможность передачи параметров по ссылке на примитивный тип. В Java все параметры примитивных типов передаются по значению, а это означает, что у метода нет доступа к исходной переменной, использованной в качестве параметра. Заметим, что все объекты передаются по ссылке, можно изменять содержимое того объекта, на который ссылается данная переменная.
Скрытие переменных представителей
В языке Java не допускается использование в одной или во вложенных областях видимости двух локальных переменных с одинаковыми именами. Интересно отметить, что при этом не запрещается объявлять формальные параметры методов, чьи имена совпадают с именами переменных представителей. Давайте рассмотрим в качестве примера иную версию метода init, в которой формальным параметрам даны имена х и у, а для доступа к одноименным переменным текущего объекта используется ссылка this.
class Point { int х, у; void init(int х, int у) { this.x = х; this.у = у } } class TwoPointsInit { public static void main(String args[]) { Point p1 = new Point(); Point p2 = new Point(); p1.init(10,20); p2.init(42,99); System.out.println("x = " + p1.x + " у = •• + p-l.y); System.out.printlnC'x = " + p2.x + " у = •• + p2.y); } }
Конструкторы
Инициализировать все переменные класса всякий раз, когда создается его очередной представитель — довольно утомительное дело даже в том случае, когда в классе имеются функции, подобные методу init. Для этого в Java предусмотрены специальные методы, называемые конструкторами. Конструктор — это метод класса, который инициализирует новый объект после его создания. Имя конструктора всегда совпадает с именем класса, в котором он расположен (также, как и в C++). У конструкторов нет типа возвращаемого результата - никакого, даже void. Заменим метод init из предыдущего примера конструктором.
class Point { int х, у; Point(int х, int у) { this.x = х; this.у = у; } } class PointCreate { public static void main(String args[]) { Point p = new Point(10,20); System.out.println("x = " + p.x + " у = " + p.у); } }
Тема "на заказ"
Хочу поблагодарить всех кто присоединился к проекту, о котором мы говорили в прошлом номере.
И так работа зашевелилась. На данный момент проект находится на заключительной стадии проектирования, но только с моей стороны. По завершении проектирования я выложу проект на сайте, и уже потом после всех ваших дополнений, поправок и замечаний мы вместе придем к окончательному варианту проекта.
Хотя проект находится в стадии проектирования, некоторые части (задачи), которые уже имеют явные очертания и необходимы на первом этапе уже разработки, поступили в разработку. К таким задачам относятся: AI-парсер, SVG-парсер, различные фильтры растровой графики.
Проект будет разделен на два этапа и будет состоять из двух частей: графической библиотеки и надстройки которая и будет представлять из себя редактор векторной графики. Библиотека сможет существовать и без редактора и ее компоненты могут быть использованы в других целях.
Теперь хотелось бы разрешить некоторые вопросы.
Почему то все думают, что для участия в проекте им необходимо знание программирования. Это не совсем так, проекту необходимы разно профильные специалисты:
- программисты;
- cпециалисты в компьютерной графике;
- дизайнеры;
- переводчики;
- HTML-кодеры;
- тестеры;
- и еще один менеджер для продвижения проекта за рубежом.
Что это за формат SVG? На сайте я уже выложил краткое описание возможностей формата.
И относительно сроков реализации проекта – пока они не установлены, так как еще не сформирована команда.
Вопрос - ответ
Вопрос:
Меня интересует тема "Ява для мобильных телефонов" Будет ли на сайте информация по этой теме?
|
Ответ: Да информация уже появилась. Открылся раздел "Мобильная Java" который уже пополнился статьями. |
Вопрос:>
Как можно динамически подключить пакет, который записан в .jar файле? То есть есть сервер, которому через socket передают из другой JVM .jar файл и он сохраняет его локально на диске. Потом, посредством RMI, вызывается метод класса, который находится в этом .jar файле. Как "сказать" серверу, что этот метод находится в свежепринятом .jar файле? Вступают ли в этом случае в игру хитрые заморочки classloader-а?
|
Ответ: методами RMI вы этого сделать не сможете, по тому что методы доступны только из запущенного класса. Можно с помощью класслоадера подгрузить этот класс и вызвать его метод. Или с помощью того же класслоадера подгрузить этот класс, запустить его и средствами RMI вызвать метод. Как видите в этом случае первый вариант проще. |
Вопрос: Как переменной присвоить значение ровное
текущему году. Другими словами как системный год узнать?
|
Ответ: Есть в пакете java.util класс Date. Класс Date используется для операций с датой и временем. Через него вы можете получить доступ к дате, месяцу, году, дню недели, часам, минутам, секундам. Класс Date включает в себя набор методов для получения и установки отдельных атрибутов, хранящихся в объекте. Каждая из функций семейства get — getYear, getMonth, getDate, getDay, getHours, getMi-nutes и getSeconds — возвращает целое значение. Каждой из функций семейства set — setYear, setMonth, setDate, setHours, setMinutes и setSeconds — в качестве параметра передается целое значение. Вы также можете получить представление объекта Date в виде значения типа long с помощью метода getTime. Возвращаемое этим методом значение представляет собой число миллисекунд, прошедших после 1 января 1970 года. |
Вопрос: Как в Java осуществляется операция ввода с клавиатуры(Какой
функцией)?
|
Ответ: Насколько я знаю нет такой функции. Можно воспользоваться подобной конструкцией: BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String readl; while ((readl = in.readLine())!=null) { out.println(readl); if (readl.equalsIgnoreCase("close")) break; if (readl.equalsIgnoreCase("exit")) break; } in.close(); |
Вопрос: Как из jsp или сервлета передать клиенту бинарный файл?
Как заставить броузер выводить запрос на сохранение или открытие этого файла?
|
Ответ: На этот вопрос gRIDmER нашел ответ сам и описал его в небольшом примере: Передача бинарного файла клиенту из JSP |
Вопрос: Почему на базовый тип данных отводится только определенный размер памяти а небольше или меньше , вдруг его нехватит?
|
Ответ: :)) Размер области памяти, занимаемой переменными стандартных типов, различный на разных платформах - а это одна из основных проблемы при переносе программ на различные платформы. |
Вопрос: Как запретить в JTable возможность менять местами столбцы?
|
Ответ:
jTable1.getTableHeader().setReorderingAllowed(false); |
Вопрос:
Хотелось узнать реально ли осуществить на JAVA рассылку по результатам
заполнения некоторой формы.
|
Ответ: Конечно можно!!! Java это мощный язык программирования, на нем можно сделать практически все! |
Программный код…
Я вот решил в качестве тренировки для себя сделать детскую игру «пятнашки».
Я никак не могу понять как сделать обработчики событий для этих самых «пятнашек». Ведь нужно определить кнопку, на которой происходит «клик» (с этим как бы проблем нет), а как узнать где произошел второй клик, указывающий куда именно нужно передвинуть кнопку, и как передвинуть туда кнопку, собственно? Вот главная беда.
_makaveli
JavaScript
Вопрос:
Подскажите пожалуйсто можно ли сделать на javascript чтобы
отрисовывалась одна таблица и по нажатию на определенную кнопку или ссылку отображалась либо скрывалась строка(строки) в таблице
|
Ответ: Мне не видится это возможным, можно только спрятать строку используя свойство visibility, но если строка содержит текст, между строчками (верхней и нижней от строки которую прячем) останется промежуток высотой в спрятанную строку. А так как строка содержит текст, высоту строки мы не сможем сделать меньше высоты текста. |
Вопрос:
Как сделать двойное меню.
Расскажите пожалуйста поподробней.
|
Ответ: Данный вопрос уже проскакивал в рассылке, вот посмотрите реализацию меню. |
Вопрос:
Как перерисовать окно или фрейм после события на кнопке(чтобы после нажатия отобразилась картинка отобразилась картинка)?
|
Ответ: Я не совсем вас понял. Если вам надо отобразить новую картинку, то достаточно сделать следующее: document.images[name].src="URL"Если вам надо перерисовать окно или фрейм можно сделать так: nameframe.document.location.href="URL" nameframe.document.location.href=nameframe.document.location.hrefили если нужно оставить текущею страницу |
Вопрос: Hеподскажите, как сделать что б чеpез опpеделенное вpемя загpyжался опpеделенный фон.
|
Ответ: Вот посмотрите маленький скрипт: Смена фона через определенное время. |
Вопрос: Помогите написать игру сапер на JavaScript.
|
Ответ: Можете посмотреть реализацию сапера на любом сайте с онлайн играми. Например, тут: http://games.tooyoo.ru/saper/index.shtm |
Вопросы присылайте на E-mail
[email protected] с пометкой "Вопрос по Java".
Жду вопросов и предложений.
Подписаться на эту рассылку и посмотреть архив можно тут /subs/subs.html