Мои лекции по Java (1998-2003)

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Мои лекции по Java (1998-2003)

Post by Shaos »

Сегодня самой быстро развивающейся технологией
компьютерной индустрии становится технология Java. Технология
Java появилась на волне огромного интереса к глобальной сети
Интернет и Web. Эта технология была разработана в стенах Sun
Microsystems и опирается на новый язык объектно ориентированного
программирования Java. В основе Java лежат два принципа -
независимость от программно-аппаратной платформы (операционная
система плюс процессор) и безопасность создаваемых приложений.
Первый принцип реализуется через механизм виртуальной машины Java
(Virtual Java Machine - JVM). Второй - прежде всего за счёт самого
языка, который включает строгую типизацию, запрет адресной
арифметики, автоматическую сборку "мусора".

На языке Java могут создаваться как автономные программы,
так и так называемые апплеты - небольшие блоки кода, которые
загружаются из Интернета в Web-браузер и исполняются. Java
поддерживают Netscape Navigator начиная с версии 2.0 и Microsoft
Internet Explorer начиная с версии 3.0.

Синтаксис языка Java во многом похож на С++, но идеология
языка совершенно другая. В отличие от многих других языков,
компилятор Java компилирует исходные тексты не в двоичный код
конкретного процессора, а в код виртуальной машины Java (JVM).
При исполнении этого кода происходит либо интерпретация этого
кода, как подразумевалось с самого начала и используется в
бесплатном комплекте разработчика Java фирмы Sun Microsystems,
либо компиляция байт-кода JVM в код конкретного процессора в
момент вызова класса на исполнение (just-in-time), как сделано во
многих коммерческих приложениях и в новых Web-браузерах. Во
втором случае Java программы работают существенно быстрее - но
увеличивается время загрузки, так как в процессе загрузки
осуществляется компиляция.

Бесплатный комплект разработчика Java (Java Development
Kit - JDK) фирмы Sun Microsystems распостраняется через Интернет
http://java.sun.com, также его можно найти на различных
компакт-дисках. JDK версии 1.0 появился в январе 1996 года, то
есть официально языку Java сейчас чуть больше двух лет. У нас на
кафедре проинсталирован JDK версии 1.0.1. Sun Microsystems
предлагает варианты JDK для различных платформ - Windows,
Macintosh, различных UNIX-систем. Получается, что если вы
напишите программу на Java, то она будет адекватно работать на
любой из этих платформ. Вариант JDK для Windows-95
распостраняется в самораспакующемся zip-файле, который содержит
длинные имена файлов. Размер JDK 1.0 составлял 3.7 Мбайт, а
версии 1.0.1 - уже 4.3 Мбайт. В JDK входят основные средства
разработки приложений - компилятор, отладчик, интерпретатор
автономных программ, просмотрщик апплетов и др. Также там есть
стандартная библиотека классов и много примеров Java-программ с
комментариями. К сожалению в JDK нет документации и средств
помощи. При распаковке JDK создаётся каталог JAVA, а в нём
несколько подкаталогов. В подкаталоге DEMO располагаются примеры
программ, в подкаталоге LIB - библиотека классов в zip-архиве.
В подкаталоге BIN располагаются все исполняемые файлы, в том числе:

- javac.exe - компилятор Java,
- java.exe - интерпретатор автономных программ,
- appletviewer.exe - просмотрщик апплетов.

Все исполняемые файлы принимают параметры из командной
строки и выводят информацию на консоль, поэтому ими удобно
пользоваться в окне сессии DOS. Исходный текст программы на
языке Java должен быть сохранён в файле с расширением test.java.
В одном файле могут быть описаны несколько классов. Для
компиляции нужно запустить компилятор с одним параметром -
именем файла: javac test.java. При этом каждый класс будет
откомпилирован в свой файл кодов с таким же именем, что и имя
класса. Файл кодов класса имеет расширение *.class.

Как я уже говорил в Java возможно два варианта создания
программ: автономная программа и апплет. Автономная программа
запускается Java-интерпретатором java.exe. А апплет может быть
помещён в Интернет и запущен любым браузером, поддерживающим
Java. В JDK для просмотра апплетов есть программа
appletviewer.exe.

World Wide Web сегодня является самым
популярным ресурсом Интернета, поэтому создатели Java
ориентировались именно на него. Для представления гипертекстовой
информации в WWW используется язык гипертекстовой разметки HTML.
Формат документа HTML следующий:

Code: Select all

<HTML>
<HEAD>
<TITLE>First Page</TITLE>
</HEAD>
<BODY>
   Текст, текст ...
   <A HREF="http://www.uicde.ru">Ссылка в Интернете</A>
   <IMG SRC="test.gif"> Рисунок
   Поддержка Java-апплетов в HTML появилась лишь в 1996 году
   <APPLET CODE="HelloJava.class" WIDTH=400 HEIGHT=300>
   <PARAM NAME=aa VALUE="aaa">
   <PARAM NAME=bb VALUE="bbb">
   </APPLET>
</BODY>
</HTML>
Для тестирования апплета с помощью appletviewer.exe требуется
создать минимальный HTML файл:

Code: Select all

<APPLET CODE="HelloJava.class" WIDTH=400 HEIGHT=300>
</APPLET>
Назовём его например example.htm. Тогда для запуска апплета
HelloJava требуется в командной строке записать
appletviewer example.htm и исполнить.

Чтобы показать отличие апплетов от автономных программ я
приведу два примера:

Code: Select all

import java.awt.*;
import java.applet.*;

public class HelloJava extends Applet
{
   public void paint (Graphics g)
   {
      g.drawString ("Hello, Java !",5,10);
   }
}

Code: Select all

class HelloJava
{
   public static void main (String args[])
   {
      System.out.println ("Hello, Java !");
   }
}
Итак апплет - это класс, расширяющий класс Applet, а автономная
программа - класс, имеющий метод main.

Разберём текст примеров. Первые две строки - это
команды import. С помощью них вы сообщаете компилятору о том,
какие классы вы будете использовать в своей программе.
Стандартная библиотека классов, как я уже говорил, находится в
подкаталоге LIB в файле classes.zip. Если заглянуть в него, то
можно увидеть иерархию классов:

Code: Select all

java ──┬── applet ── ...
       ├── awt ──────────┬── Font.class
       ├── io ────── ... ├── Graphics.class
       ├── lang ──── ... └...
       ├── net ───── ...
       └── util ──── ...
sun ───┬── ...
       └ ...
Например, если в программе вы используете объекты классов
Image и Graphics, можно написать:

import java.awt.Font;
import java.awt.Graphics;

или проще:

import java.awt.*;

или можно поставить полное имя класса в тексте программы:

Code: Select all

public class HelloJava extends java.applet.Applet
{
   public void paint (java.awt.Graphics g)
   {
      g.drawString ("Hello, Java !",5,10);
   }
}
С помощью ключевого слова extends реализуется наследование.
В Java нет множественного наследования - у класса может быть
только один родительский класс. Родительский класс в Java
называется суперклассом, а дочерний класс - подклассом.
Функции описываются внутри класса, функция paint является
стандартным методом апплета и вызывается, когда требуется
перерисовать окно апплета. Ключевое слово public означает, что,
в одном случае, класс является общедоступным, а в другом - метод
класса является общедоступным.

Изменим код апплета:

Code: Select all

import java.awt.*;
import java.applet.*;

public class HelloJava2 extends Applet
{
   public void paint (Graphics g)
   {
      Font font = new Font("TimesRoman", Font.BOLD, 24);
      g.setFont (font);
      g.drawString ("Hello, Java !",5,10);
   }
}
Здесь можно увидеть как создаётся объект какого-то класса.
В классе должен быть описан соответствующий конструктор.
Обратите внимание на константу Font.BOLD - в Java константы
класса также описываются внутри класса следующим образом:

public static final int BOLD = 1;

Слово public означает, что BOLD является доступным.
Слово static означает, что BOLD единственный для всех объектов
класса. Слово final означает, что BOLD не будет меняться.
И int - тип, BOLD - имя.

В Java отсутствуют указатели и адресная арифметика.
Однако запись Graphics g означает, что объект передаётся по
ссылке. По ссылке в Java передаются объекты классов и массивы. По
значению передаются только переменные стандартных типов.

В Java стандартными являются те же типы, что и в С++, но
есть некоторые отличия:
- добавлен тип boolean (true,false);
- добавлен тип byte (от -128 до 127);
- тип char является 16-битным (unicode);
- тип int является 32-битным;
- тип long является 64-битным.

Массивы в Java выделяются также как и объекты - с
помощью слова new: int a[] = new int[100]; Следует отметить,
что выделенную таким способом память освобождать не нужно -
после того, как на эту область памяти перестанет что-либо
ссылаться, она будет освобождена сборщиком "мусора".

Из библиотечных классов наиболее употребимым является
класс String. Строки в Java можно складывать:
String s1 = "aaa";
String s2 = "bbb " + s1 + " ccc";

Интересно, что в выражение со строками можно записывать
переменные других типов:
int i = 10;
double d = 3.14;
String s3 = "i=" + i + "d=" + d + "100=" + 100;

Это вызвано тем, что каждому простому типу данных
соответствует библиотечный класс. Например типу char
соответствует класс Character, типу int - Integer, типу float -
Float и т.д. В каждом из этих классов есть метод toString(),
приводящий тип к строке.

Вообще метод toString() есть в каждом библиотечном
классе - в сложных объектах в строку выводятся только основные
параметры.

В языке Java неявным предком всех объектов считается
класс Object, в котором есть простейшая реализация метода
toString().
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

К концу 2000 года конспект лекций выглядел уже вот так:

http://nedopc.org/nedopc/upload/shaos/java2000.pdf (122K)

Кое-какие главы пропущены - там просто зачитывались материалы из других источников (например про сравнение C++ и Java см. тут, а про графику/файлы/сеть см. у Фроловых тут).
Позже я ещё давал сервлеты, которые в этом документе никак не отражены.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Когда я сам начинал работать с Java мне очень помогли материалы Картузова А.В. :
Программирование на языке JAVA

http://www.mstu.edu.ru/study/materials/java/index.htm

Мне понравились краткость изложения и хорошее оформление в виде
справочника с примерами.

Считаю, что людям, пришедшим в JAVA не с нуля, лоховские примеры
типа Hello, Java ! весьма портят настроение при освоении, как впрочем
Hello, World ! в остальных языках. Этот пример уместен на информатике
в школе, после чего он своим тупизмом злит. Кто смог осилить PRINT "Hello, World !"
на языке для начинающих справится с этим и на других
языках, как бы они не уродовали оператор PRINT. :wink:

Погуглил - г-н Картузов за это время уже выпустил всё в виде книги:

[img]http://padabum.com/info/Компьютерная%20литература/А.В.Картузов%20-%20Программирование%20на%20языке%20Java.jpg[/img]

http://bookz.ru/authors/kartuzov-av/kartuzovav01.html
http://www.twirpx.com/file/12493/
http://padabum.com/d.php?id=2188
Можно вынести в Книги и пресса (REG).

А вот Shaos этот момент со своими лекциями как-то за 13 лет пролопушил -
даже методички под эгидой УПИ не издал. :-?
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Не скажи - "Hello, World" сильно помогает въёхать в язык быстро. Кроме того его можно использовать для характеристики монструозности языка - если это 3 строчки, то язык вменяем, а если 300 - лучше не надо тратить на этого монстра своё время (преркасный тому пример - WinAPI).

Методичку издавать как-то не приходило в голову (да и не просил никто) - материалы всё равно по большей части не мои были...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:если это 3 строчки, то язык вменяем
Хы... послушав тебя можно сказать ВАСИК - самый вменяемый язык,
всего 1 строчка:
PRINT "Hello, World !"
ВАСИК крут? :D
Shaos wrote:Методичку издавать как-то не приходило в голову - материалы всё равно по большей части не мои были...
Безусловно не твои. Твой "язык боевых роботов" пока ещё не внесли в программу
ВУЗов. :lol:
Но как я помню - "препод обязан преломить изучаемый материал через себя
и донести до учащихся в самой доступной форме
" - в этом смысл лекций,
методичек и учебников, а вовсе не в пересказе материалов, скажем, от
Сан Микросистемз. :wink:
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:
Shaos wrote:если это 3 строчки, то язык вменяем
Хы... послушав тебя можно сказать ВАСИК - самый вменяемый язык,
всего 1 строчка:
PRINT "Hello, World !"
ВАСИК крут? :D
А после HelloWorld нужно копать дальше - и уже по общей картине судить о крутости языка ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Книги о J2ME

Post by Lavr »

Shaos - ты не подумай, что я тебя "ткнуть" хотел, когда говорил про издание лекций,
просто тут момент очень интересный.

Когда я от Java переходил к J2ME, то кроме ХТМЛ-Хелпа читал следующие книжки:
"Платформа программирования j2me для портативных устройств", автор Вартан Пирумян:
http://untrance.podvodnik.tv/docs/vartan.chm

"Программирование мобильных телефонов на Java2 Micro Edition", автор Горнаков С.:
http://untrance.podvodnik.tv/docs/gornakov.djv

"Пишем программы и игры для сотовых телефонов", автор Буткевич Е.Л.:
http://untrance.podvodnik.tv/docs/butkevitch.pdf

Пирумян - книга очень тяжеловатая для чтения, фактически справочник,
с Буткевича я начал, он занимателен, но кое-где "тумана" напускает -
не находишь ответа, почему это так, а не иначе...
Горнаков - самый понятный, и я его даже купил через книгу-почтой из-за
диска с софтом и программами.
Так вот г-н Горнаков - он помоложе нас с тобой выходит, если я правильно
помню, да и уровень изложения - средний, как и помечено в книжке,
ан - смотри же! - издал и раскупалось.
Хороша, наверно ложка к обеду. Сейчас, к примеру, мне кроме ХТМЛ-Хелпа
особо то и ничего не надо. А тогда - особого и выбора-то не было в плане
литературы.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Покопал архивы - я с джавой начал ковыряться в декабре 1996 года - т.е. в том же году когда она появилась ;)
P.S. А на C/C++ я перешёл с паскаля в январе 1994 года
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos, а что действительно в Java под Unicode код клавиши <Enter>=0Ah?
Специально написал тест кодов клавиатуры - кодом 0Dh отзываются только
сочетания <Ctrt>+<ь>, <R_Alt>+<ь>, <Ctrt>+<m>, <R_Alt>+<m>. Отдельной
клавиши с таким кодом вроде как и нет. :-?
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:Shaos, а что действительно в Java под Unicode код клавиши <Enter>=0Ah?
Специально написал тест кодов клавиатуры - кодом 0Dh отзываются только
сочетания <Ctrt>+<ь>, <R_Alt>+<ь>, <Ctrt>+<m>, <R_Alt>+<m>. Отдельной
клавиши с таким кодом вроде как и нет. :-?
да - похоже Java под KeyEvent.VK_ENTER подразумевает 0x0A ('\n')
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos - если тебя не затруднит как-то взглянуть под никсами: не проходит в апплет
код от клавиши <Tab>. Ну я бы ещё понял: <Alt>+<Tab>, и в оригинале
исходников код от <Tab> юзают, но под Вендой он не срабатывает. :(
Есть предположение, что это зависит от ОС, хотя JAVA вроде как и независима.
viewtopic.php?p=89293#89293

PS. Такое ощущение что <Tab> - перносит фокус ввода в апплете и до кода апплета он не доходит.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Звук в аплетах Java

Post by Lavr »

Братья Фроловы wrote:Нельзя сказать, что звуковые возможности аплетов Java чрезмерно велики. Скорее наоборот, они минимальны. Тем не менее, аплеты могут проигрывать звуковые клипы, записанные в файлах формата AU, который пришел из мира компьютеров фирмы Sun.
http://www.podgoretsky.com/ftp/Docs/Jav ... 4/ch1.html

И это всё? И нет какого хитрого способа или программного трюка придать звучание
«Специалист-у» на Java?
viewtopic.php?t=9475&start=45
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

А что в никсах - у меня тут тот же фаерфокс с той же сановской джавой...

P.S. Проверил вот на этой страничке:
http://www.nedopc.org/nedopc/zx/zxjava1.shtml
по табу фокус перескакивает с апплета куда-то в другое место
Хотя вот тут:
http://www.ternary.info/ternary/java.php?applet=4
по табу оно скачет по элементам управления
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Звук в аплетах Java

Post by Shaos »

Lavr wrote:
Братья Фроловы wrote:Нельзя сказать, что звуковые возможности аплетов Java чрезмерно велики. Скорее наоборот, они минимальны. Тем не менее, аплеты могут проигрывать звуковые клипы, записанные в файлах формата AU, который пришел из мира компьютеров фирмы Sun.
http://www.podgoretsky.com/ftp/Docs/Jav ... 4/ch1.html

И это всё? И нет какого хитрого способа или программного трюка придать звучание
«Специалист-у» на Java?
viewtopic.php?t=9475&start=45
посмотри пакет javax.sound.sampled
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:А что в никсах - у меня тут тот же фаерфокс с той же сановской джавой...

P.S. Проверил вот на этой страничке:
http://www.nedopc.org/nedopc/zx/zxjava1.shtml
по табу фокус перескакивает с апплета куда-то в другое место
Хотя вот тут:
http://www.ternary.info/ternary/java.php?applet=4
по табу оно скачет по элементам управления
В исходниках, на которые я опираюсь, местами есть пометки - "в никсах" - не возвращает длину файла, "в никсах" - работает по-другому, поэтому решение такое неуклюжее, и т. д. - поэтому спросил.
Код ТАБ - используют, а он кода не даёт... мож авторы под никсами работали... :-?
Shaos wrote:посмотри пакет javax.sound.sampled
Спасибо - гляну...