Логин:   Пароль:




Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100

РассылкиАрхив Java programmingВыпуск 21-й

Java programming выпуск 21-й

Здравствуйте дорогие читатели!

Хотел бы попросить вас сегодня уделить особое внимание разделу «Тема на заказ».

Начинающим

Последнее время часто приходят вопросы о том как и что записывать в переменную CLASSPATH и как правильно указывать пути к классам. Предлагаю посмотреть небольшую заметку о том как настраивать переменные окружения.



Сегодня мы поговорим о базовом элементе объектно-ориентированного программирования в языке Java - классе.

Классы

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

Классический пример:


class Point
{ 
} 

! Имя исходного файла Java должно соответствовать имени хранящегося в нем класса. Регистр букв важен и в имени класса, и в имени файла.

Класс — это шаблон для создания объекта. Класс определяет структуру объекта и его методы, образующие функциональный интерфейс. В процессе выполнения Java-программы система использует определения классов для создания представителей классов. Представители являются реальными объектами. Термины «представитель», «экземпляр» и «объект» взаимозаменяемы.

Общая форма определения класса:


class имя_класса extends имя_суперкласса
{ 
 type переменная1_объекта: 
 type переменная2_объекта: 
 type переменнаяN_объекта: 

 type имяметода1(список_параметров)
 { 
  тело метода; 
 } 
 
 type имяметода2(список_параметров)
 { 
  тело метода; 
 } 

 type имя методаМ(список_параметров)
 { 
  тело метода; 
 } 
} 

Ключевое слово extends указывает на то, что «имя_класса» — это подкласс класса «имя_суперкласса». Во главе классовой иерархии Java стоит единственный ее встроенный класс — Object. Если вы хотите создать подкласс непосредственно этого класса, ключевое слово extends и следующее за ним имя суперкласса можно опустить — транслятор включит их в ваше определение автома­тически. Примером может служить класс Point, приведенный ранее.

Переменные представителей (instance variables)

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

Рассмотрим фрагмент кода, в котором объявлен класс Point с двумя переменными типа int характеризующими положение точки на плоскости.


class Point
{ 
 int х, у; 
} 

В качестве типа для переменных объектов можно использовать как любой из простых типов, так и классовые типы.

Оператор new

Оператор new создает экземпляр указанного класса и возвращает ссылку на вновь созданный объект.

Пример создания и присваивание переменной р экземпляра класса Point:


Point р = new Point(); 

Можно создать несколько ссылок на один и тот же объект. Приведенная ниже программа создает два различных объекта класса Point и в каждый из них заносит свои собственные значения. Оператор точка используется для доступа к переменным и методам объекта.


class TwoPoints
{ 
 public static void main(String args[])
 { 
  Point p1 = new Point(); 
  Point p2 = new Point(); 
  p1.x = 15; 
  p1.y = 15; 
  р2.х = 130; 
  р2.у = 100; 
  System.out.println("x = " + p1.x + " у = " + p1.y); 
  System.out.println("x =  " + р2.х + " у = " + р2.у); 
 }
} 

В этом примере, было создано два объекта класса Point, и их переменным х и у присвоены различные значения. Таким мы увидели, что переменные различных объектов независимы на самом деле.

Ниже приведен результат, полученный при выполнении этой программы:

х = 15 у = 15 
х = 130 у = 100

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

Тема "на заказ"

Сегодняшней темой, послужило следующее письмо:

Здравствуйте! У меня к Вам большой вопрос: Я за 4 месяца изучил все разделы языка Java теоретически и практически все написанные листинги в книге "Самоучитель Java" (Хабибуллин) 450 стр. А что теперь делать дальше, как совершенствоваться? Я так понимаю, надо начать писать какой-нибудь проект, и по мере написания будут появляться вопросы, но какой проект? Возможно есть шаблоны проектов, где их взять. Заранее благодарен.
С уважением Крис.(Новороссийск).

Попытаюсь выложить свои соображения по этому поводу.

Да, действительно закрепить и увеличить свои знания можно только «в бою», работая над реальными проектами. Но бывает и так, что просто на данный момент никто не поставил перед вами задачу, которая способствовала бы росту ваших профессиональных навыков. Последнее время, я столкнулся с такой проблемой. Выполняя постоянно однотипные задачи, у меня сложилось впечатление что я стою на одном месте. Меня стали одолевать разные мысли о том каким образом мне можно было бы само реализоваться, в частности проект JavaPortal.ru и появился от таких мыслей. Отвечая на ваши вопросы и решая различного рода задачи я помогаю вам и одновременно себе, не скрою мне это занятее нравится. Бывают такие вопросы, решение на которые есть, но мне трудно представить где они применяются в реальной жизни. Но все же это что то не то, хотелось бы… да! Хотелось бы взяться за какой-нибудь проект! Настоящий проект! Но какой?

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

Существует реальная и актуальная на сегодняшний день задача.

Задача создания редактора векторной графики.

Речь идёт не о создании простого векторного редактора, а редактора поддерживающего не только все основные геометрические объекты, но и элементы пользовательского интерфейса, такие как кнопки, меню, поля ввода, различные панели, списки, переключатели, полосы прокрутки и многие другие элементы, включая комплексные элементы состоящие из комбинации стандартных элементов.

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

Редактор должен быть прост в работе, содержать в себе инструменты мощных редакторов, поддерживать antialiasing (сглаживание) и плавный zooming (плавное изменение масштаба), основные форматы векторных файлов, такие как SVG, AI и иметь свой собственный формат. Основным поддерживаемым форматом должен быть SVG, так как он является одним из наиболее перспективных решений для использования векторной графики в Internet/Intranet.

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

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

Редактор, помимо своей простоты, должен иметь возможность, с помощью своих инструментов, редактировать свои же инструменты. Пользовательский интерфейс должен быть полностью настраиваемый и масштабируемым, что даст возможность конкретному пользователю настроить редактор по своему вкусу и возможностям, а также повысит эффективность работы.

Так же редактор должен иметь возможность подгружать новые графические объекты, написанные с помощью стандартных, встроенных объектов. То есть постепенно наращивать собственную галерею объектов. Которая будет видна только пользователю создавшему её, и при сохранении в файл каждый новый объект будет разлагаться на набор стандартных объектов, но при этом помечаться как особый объект для последующего открытия. Новые объекты будут переносимы, то есть один пользователь может передавать их другому пользователю для дальнейшей работы над ними. Иметь возможность создания галереи заливок. Заливку можно будет тут же нарисовать с помощью стандартных объектов и поступать, так же как и с объектами, то есть любой объект может выступать в роли заливки для другого объекта. Редактором поддерживается и градиентная заливка (линейный и радиальный градиенты).

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

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

Я предполагаю открытие open source проекта.

Если вас заинтересовал этот проект и вы хотите попробовать свои силы присылайте мне свои отзывы, идеи мысли, вопросы на e-mail: [email protected]

Вопрос - ответ

Вопрос:При передаче HTML формы в сервлет возвращается ответ с полученными из формы данными, но русский шрифт не распознается и выводятся знаки вопроса вместо символов. Как тут работать с русским шрифтом???
Alex

Вопрос:Я скачал с сайта Sun последнюю версию jdk и почему-то, у меня начались проблемы с русским языком когда я пользуюсь библиотекой Swing?
bob

Вопрос:Сервер(на JAVA) начинает слать данные клиенту. И там символы кириллици. Вместо них - знаки вопроса. Остальная информация пересылается успешно. Грубо говоря, кодировка не адекватна в стандартном выводе у JAVA. Как быть?
Юрий

Ответ: Предлагаю вам и тем кто задавал подобные вопросы ознакомиться с статьей Java: Русские буквы и не только...

Вопрос: Можно ли работать с DBF-файлами из JAVA (без использования JDBC-ODBC) ?

Ответ: Если вы хорошо знаете устройство данного формата то вам нечего немешает работать сними.

Вопрос: в страничке index.html есть аплет который вызывает файл fist.class код для fist.class у меня есть, мне сказали, что код для файла нужно компелировать. Не подскажешь, чем компелировать? (название программы) Есть ли бесплатные программы?

Ответ: Убедительная просьба читать FAQ.
А по поводу бесплатных программ, они в основном все ставятся поверх установленной SDK. Для новичков я рекомендую www.jcreator.com.

Вопрос: Как мне сделать, чтобы JFileChooser позволял выбирать каталог, т.е. не позволить юзеру вводить имя файла(вообще запретить редактировать это поле)?

Ответ:


setAcceptAllFileFilterUsed(false);
setMultiSelectionEnabled(false);
setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

Вопрос: Укажите на мои ошибки.


import java.math.*;
class M_All {
double a;
int k;
double Func( double x ) {
return exp(log(x)*3)+3*exp(log(x)*2)+12*x+3;
}

void Sturm() {
for (int i = -50; i <= 50; i++)
if (Func((double)i ) * Func( (double)i+1 ) < 0) {
System.out.println("a= " + i + " b=" + (i+1));
a = (i+i+1)/2.0;
}
}

float Ecv( int x ) {
x = pow((-3*pow(x,2)-12*x-3), 1/3);
return 0;
}
}

class Iter {
public static void main(String args[]) {
M_All all = new M_All();
all.Sturm();
System.out.println("Hello World "+all.a+ " x1="+all.Ecv(1));
}
}


F:\Program Files\Borland\jbuilder5\jdk1.3\bin>javac Iter.java
Iter.java:6: cannot resolve symbol
symbol : method log (double)
location: class M_All
return exp(log(x)*3)+3*exp(log(x)*2)+12*x+3;
^
Iter.java:6: cannot resolve symbol
symbol : method exp (int)
location: class M_All
return exp(log(x)*3)+3*exp(log(x)*2)+12*x+3;
^
Iter.java:6: cannot resolve symbol
symbol : method log (double)
location: class M_All
return exp(log(x)*3)+3*exp(log(x)*2)+12*x+3;
^
Iter.java:6: cannot resolve symbol
symbol : method exp (int)
location: class M_All
return exp(log(x)*3)+3*exp(log(x)*2)+12*x+3;
^
Iter.java:18: cannot resolve symbol
symbol : method pow (int,int)
location: class M_All
x = pow((-3*pow(x,2)-12*x-3), 1/3);
^
Iter.java:18: cannot resolve symbol
symbol : method pow (int,int)
location: class M_All
x = pow((-3*pow(x,2)-12*x-3), 1/3);
^
6 errors
Николай

Ответ: Ваши ошибки:



//Ошибка раз: было java.lang.math
import java.lang.Math;
class M_All {
double a;
int k;
double Func( double x ) {
//Ошибка два, три, четыре, пять: было exp( log(x)*3)+3*exp(log(x)*2)+12*x+3;
return Math.exp( Math.log(x)*3)+3*Math.exp(Math.log(x)*2)+12*x+3;
} 
void Sturm() {
for (int i = -50; i <= 50; i++)
if (Func((double)i ) * Func( (double)i+1 ) < 0) {
System.out.println("a= " + i + " b=" + (i+1));
a = (i+i+1)/2.0;
}
} 
float Ecv( int x ) { 
// и здесь требуется тип doule, можно сделать и так x=(int)...
//Ошибка шесть, семь и восемь: x = pow((-3*pow(x,2)-12*x-3), 1/3);
x = (int)Math.pow((-3*Math.pow(x,2)-12*x-3), 1/3);
return 0;
}
}

Вопрос: Какие VM Parameters(JBuilder 5) необходимо указывать, чтобы можно было откомпилировать простой java класс(в JBuilder 5 конечно) , тобиш, напримеp:


class Iter {
public static void main(String args[]) {
System.out.println("Hello World ");
}
}


Николай

Ответ: Для запуска простого класса вам все ровно придется создавать проект, а потом только в нем класс. Далее в меню project->project properties закладка run напротив надписи main class нажмите кнопочку "..." и из предоставленного списка выберите ваш класс.

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

Ответ: Вот что у меня получилось: Пример выполнения математических вычислений в отдельном потоке.

Вопрос: В c/c++ существуют некие объекты типа MUTEX которые используются для синхронизации потоков. Есть ли аналог этих объектов в jave.
windikator

Ответ: О синхронизации потоков мы говорили в 18-ом выпуске.

Вопрос:Где отыскать как измерить высоту заголовка окна верхнего уровня, допустим JFrame? Вроде бы для этого нужно смотреть объект Insets. Выдержка из документации:
getInsets
public Insets getInsets()
Determines the insets of this container, which indicate the size of the container's border.
A Frame object, for example, has a top inset that corresponds to the height of the frame's title bar.
Однако top inset нулевой, как и все остальные. Не подскажите, в чем здесь дело? Пытался искать настройку высоты заголовка в UIManager - найти не смог.

Андрей

Ответ: Мне кажется сделать этого нельзя.
И insets совсем не относится к заголовку окна, это внутренний отступ в контейнере, а top inset показывает отступ от заголовка окна в случае с JFrame.
А возвращает он нули потому что метод getInsets() возвращает значение метода Insets(), который в свою очередь deprecate, по этому возвращается new Insets(0,0,0,0). Вот каламбур получился:)

Программный код…

Пример чтения из файла с последующим занесением его содержимого в текстовое поле.


 public void readFile()
 {
  try
  {
   File file = new File("report.txt");
   int size = (int)file.length();
   int chars_read = 0;
   FileReader in = new FileReader(file);
   char[] data = new char[size];
   while(in.ready())
   {
    chars_read += in.read(data, chars_read, size - chars_read);
   }
   in.close();
   jTextArea1.setText(new String(data, 0, chars_read));
  }
  catch (IOException e)
  {
   System.out.println("Error read file.");
  }
 }

JavaScript

Вопрос: Можно что бы backgroud изменялся при наводе на кнопку?

Ответ:


<html;>
<body; background="1.gif">
<form;>
<input; type="button" value="Сменить фон" 
onmouseover="document.body.background='2.gif'"
onmouseout="document.body.background='1.gif'">
</form>
</html>

Вопрос:Есть форма. Есть набор скриптов, которые при вызове добавляют в форму всякие полезности (грубо говоря, тулбар со смайликами, стилями текста, и т.д., чтобы непродвинутый пользователь мог красиво оформить свой пост). Хочу вынести этот тулбар в отдельное окошко (window.open). КАК заставить JS window.document.form_text.textbody понимать не для текущего окна, а окна, которое его открыло?

Ответ: Если я вас правильно понял то в открывшемся окне это будет выглядеть так:


opener.document.form_text.textbody

Вопрос: Как из дочернего окна вызвать функцию родительского?
Макс

Ответ:


    opener.func()

Вопрос: Почему при использовании вашего кода результат выводиться серым, а при задании конкретного значения – нормальным черным цветом и можно ли это исправить?
Анна

Ответ: Для того что бы результат выводился нормальным черным цветом, но его нельзя было исправить замените строку в форме:


<input; type="text" name="sumOut" disabled="false" value="">
На следующею строку:

<input; type="text" name="sumOut" readonly="true" value="">

Вопрос: Есть ли в javascript математические функции?

Ответ: Да, в JavaScript есть объект Math у него есть методы и свойства:

Свойства:

  • E
  • LN2
  • LN10
  • LOG2E
  • LOG10E
  • PI
  • SQRT1_2
  • SQRT2

Методы:

  • abs
  • acos
  • asin
  • atan
  • ceil
  • cos
  • exp
  • floor
  • log
  • max
  • min
  • pow
  • random
  • round
  • sin
  • sqrt
  • tan

Вопрос:Подскажите, пожалуйста, можно ли увеличить количество выпадающих пунктов? Каким методом, если можно?
Оля

Ответ: Вот посмотрите пример маленько усложненной задачи: Скрипт: угадай число.





Вопросы присылайте на E-mail [email protected] с пометкой "Вопрос по Java".

Жду вопросов и предложений.

Юрий Ладик.

Подписаться на эту рассылку и посмотреть архив можно тут /subs/subs.html


Д. Гудман
"JavaScript и DHTML. Сборник рецептов. Для профессионалов"
Подробнее>>
Заказать>>


Эд Барнет
"Eclipse IDE. Карманный справочник"
Подробнее>>
Заказать>>

Узнай о чем ты на самом деле сейчас думаешь тут.


[an error occurred while processing this directive]



Apache Struts 2.0.11
Apache MyFaces Trinidad Core 1.2.3.
Sun переводит мобильные устройства с Java ME на Java SE
Хакерская атака!



Выпуск 29-й
Выпуск 28-й
Выпуск 27-й
Выпуск 26-й
Выпуск 25-й
Выпуск 24-й
Выпуск 23-й
Выпуск 22-й
Выпуск 21-й
Выпуск 20-й
Выпуск 19-й
Выпуск 18-й
Выпуск 17-й
Выпуск 16-й
Выпуск 15-й
Выпуск 14-й
Выпуск 13-й
Выпуск 12-й
Выпуск 11-й
Выпуск 10-й
Выпуск 9-й
Выпуск 8-й
Выпуск 7-й
Выпуск 6-й
Выпуск 5-й
Выпуск 4-й
Выпуск 3-й
Выпуск 2-й
Выпуск 1-й